From e9fe03f63a2bec6e24d8e37d7136d9ce68aab666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 18 Jun 2015 19:42:38 +0200 Subject: [PATCH] Moved Fem visibility calculator to a separate file Preparing for GeoMech Property filter --- .../CMakeLists_files.cmake | 3 + .../RivFemElmVisibilityCalculator.cpp | 73 +++++++++++++++++++ .../RivFemElmVisibilityCalculator.h | 40 ++++++++++ .../ModelVisualization/RivGeoMechVizLogic.cpp | 5 +- .../ProjectDataModel/RimGeoMechView.cpp | 46 ------------ .../ProjectDataModel/RimGeoMechView.h | 8 -- 6 files changed, 119 insertions(+), 56 deletions(-) create mode 100644 ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.cpp create mode 100644 ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.h diff --git a/ApplicationCode/GeoMech/GeoMechVisualization/CMakeLists_files.cmake b/ApplicationCode/GeoMech/GeoMechVisualization/CMakeLists_files.cmake index b0ebb95289..faee4869c2 100644 --- a/ApplicationCode/GeoMech/GeoMechVisualization/CMakeLists_files.cmake +++ b/ApplicationCode/GeoMech/GeoMechVisualization/CMakeLists_files.cmake @@ -9,6 +9,7 @@ ${CEE_CURRENT_LIST_DIR}RivFemPartGeometryGenerator.h ${CEE_CURRENT_LIST_DIR}RivFemPartPartMgr.h ${CEE_CURRENT_LIST_DIR}RivGeoMechPartMgr.h ${CEE_CURRENT_LIST_DIR}RivFemPickSourceInfo.h +${CEE_CURRENT_LIST_DIR}RivFemElmVisibilityCalculator.h ) @@ -17,6 +18,8 @@ ${CEE_CURRENT_LIST_DIR}RivFemPartGeometryGenerator.cpp ${CEE_CURRENT_LIST_DIR}RivFemPartPartMgr.cpp ${CEE_CURRENT_LIST_DIR}RivGeoMechPartMgr.cpp ${CEE_CURRENT_LIST_DIR}RivFemPickSourceInfo.cpp +${CEE_CURRENT_LIST_DIR}RivFemElmVisibilityCalculator.cpp + ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.cpp b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.cpp new file mode 100644 index 0000000000..f8e9994d23 --- /dev/null +++ b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.cpp @@ -0,0 +1,73 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RivFemElmVisibilityCalculator.h" +#include "cvfBase.h" +#include "RigFemPart.h" +#include "RigFemPartGrid.h" +#include "cvfStructGrid.h" +#include "cvfStructGridGeometryGenerator.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RivFemElmVisibilityCalculator::computeAllVisible(cvf::UByteArray* elmVisibilities, const RigFemPart* femPart) +{ + elmVisibilities->resize(femPart->elementCount()); + elmVisibilities->setAll(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RivFemElmVisibilityCalculator::computeRangeVisibility(cvf::UByteArray* elmVisibilities, RigFemPart* femPart, + const cvf::CellRangeFilter& rangeFilter) +{ + elmVisibilities->resize(femPart->elementCount()); + + const RigFemPartGrid* grid = femPart->structGrid(); + + if (rangeFilter.hasIncludeRanges()) + { + for (int elmIdx = 0; elmIdx < femPart->elementCount(); ++elmIdx) + { + size_t mainGridI; + size_t mainGridJ; + size_t mainGridK; + + grid->ijkFromCellIndex(elmIdx, &mainGridI, &mainGridJ, &mainGridK); + (*elmVisibilities)[elmIdx] = rangeFilter.isCellVisible(mainGridI, mainGridJ, mainGridK, false); + } + } + else + { + for (int elmIdx = 0; elmIdx < femPart->elementCount(); ++elmIdx) + { + size_t mainGridI; + size_t mainGridJ; + size_t mainGridK; + + grid->ijkFromCellIndex(elmIdx, &mainGridI, &mainGridJ, &mainGridK); + (*elmVisibilities)[elmIdx] = !rangeFilter.isCellExcluded(mainGridI, mainGridJ, mainGridK, false); + } + } +} + + + diff --git a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.h b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.h new file mode 100644 index 0000000000..133fa75483 --- /dev/null +++ b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemElmVisibilityCalculator.h @@ -0,0 +1,40 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once +#include "cvfBase.h" +#include "cvfArray.h" + +namespace cvf +{ + class CellRangeFilter; +} + +class RigFemPart; + + +class RivFemElmVisibilityCalculator +{ +public: + static void computeAllVisible(cvf::UByteArray* elmVisibilities, const RigFemPart* femPart ); + static void computeRangeVisibility(cvf::UByteArray* elmVisibilities, RigFemPart* femPart, const cvf::CellRangeFilter& rangeFilter); + +}; + + diff --git a/ApplicationCode/ModelVisualization/RivGeoMechVizLogic.cpp b/ApplicationCode/ModelVisualization/RivGeoMechVizLogic.cpp index 0dc6622d7b..4b9558fc1a 100644 --- a/ApplicationCode/ModelVisualization/RivGeoMechVizLogic.cpp +++ b/ApplicationCode/ModelVisualization/RivGeoMechVizLogic.cpp @@ -31,6 +31,7 @@ #include "RimCellRangeFilterCollection.h" #include "RivCellSetEnum.h" +#include "RivFemElmVisibilityCalculator.h" //-------------------------------------------------------------------------------------------------- /// @@ -78,11 +79,11 @@ void RivGeoMechVizLogic::appendNoAnimPartsToModel(cvf::ModelBasicList* model) { cvf::CellRangeFilter cellRangeFilter; m_geomechView->rangeFilterCollection()->compoundCellRangeFilter(&cellRangeFilter, femPartIdx); - RivElmVisibilityCalculator::computeRangeVisibility(elmVisibility.p(), caseData->femParts()->part(femPartIdx), cellRangeFilter); + RivFemElmVisibilityCalculator::computeRangeVisibility(elmVisibility.p(), caseData->femParts()->part(femPartIdx), cellRangeFilter); } else { - RivElmVisibilityCalculator::computeAllVisible(elmVisibility.p(), caseData->femParts()->part(femPartIdx)); + RivFemElmVisibilityCalculator::computeAllVisible(elmVisibility.p(), caseData->femParts()->part(femPartIdx)); } currentGeoMechPartMgr->setCellVisibility(femPartIdx, elmVisibility.p()); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 2e954a1ce1..272e0688ce 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -512,49 +512,3 @@ void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType) m_vizLogic->scheduleGeometryRegen(geometryType); } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RivElmVisibilityCalculator::computeAllVisible(cvf::UByteArray* elmVisibilities, const RigFemPart* femPart) -{ - elmVisibilities->resize(femPart->elementCount()); - elmVisibilities->setAll(true); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RivElmVisibilityCalculator::computeRangeVisibility(cvf::UByteArray* elmVisibilities, RigFemPart* femPart, - const cvf::CellRangeFilter& rangeFilter) -{ - elmVisibilities->resize(femPart->elementCount()); - - const RigFemPartGrid* grid = femPart->structGrid(); - - if (rangeFilter.hasIncludeRanges()) - { - for (int elmIdx = 0; elmIdx < femPart->elementCount(); ++elmIdx) - { - size_t mainGridI; - size_t mainGridJ; - size_t mainGridK; - - grid->ijkFromCellIndex(elmIdx, &mainGridI, &mainGridJ, &mainGridK); - (*elmVisibilities)[elmIdx] = rangeFilter.isCellVisible(mainGridI, mainGridJ, mainGridK, false); - } - } - else - { - for (int elmIdx = 0; elmIdx < femPart->elementCount(); ++elmIdx) - { - size_t mainGridI; - size_t mainGridJ; - size_t mainGridK; - - grid->ijkFromCellIndex(elmIdx, &mainGridI, &mainGridJ, &mainGridK); - (*elmVisibilities)[elmIdx] = !rangeFilter.isCellExcluded(mainGridI, mainGridJ, mainGridK, false); - } - } -} - diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 4b82f4ddc8..20c3e92a0f 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -103,11 +103,3 @@ namespace cvf { class CellRangeFilter; } - -class RivElmVisibilityCalculator -{ -public: - static void computeAllVisible(cvf::UByteArray* elmVisibilities, const RigFemPart* femPart ); - static void computeRangeVisibility(cvf::UByteArray* elmVisibilities, RigFemPart* femPart, const cvf::CellRangeFilter& rangeFilter); - -};