diff --git a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.cpp b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.cpp index 2fdac28011..cc98f000b1 100644 --- a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.cpp +++ b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.cpp @@ -286,8 +286,10 @@ void RivFemPartGeometryGenerator::setElementVisibility( const cvf::UByteArray* c //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -cvf::ref RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( const RigFemPart* part, - size_t elmIdx ) +cvf::ref + RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( const RigFemPart* part, + size_t elmIdx, + const cvf::Vec3d& displayModelOffset ) { cvf::ref quadVertices; @@ -301,7 +303,7 @@ cvf::ref RivFemPartGeometryGenerator::createMeshDrawableFromSi const int* elmNodeIndices = part->connectivities( elmIdx ); - cvf::Vec3d displayOffset = part->boundingBox().min(); + // cvf::Vec3d displayOffset = part->boundingBox().min(); for ( int lfIdx = 0; lfIdx < faceCount; ++lfIdx ) { @@ -310,13 +312,13 @@ cvf::ref RivFemPartGeometryGenerator::createMeshDrawableFromSi if ( faceNodeCount == 4 ) { vertices.push_back( cvf::Vec3f( - cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[0]]] ) - displayOffset ) ); + cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[0]]] ) - displayModelOffset ) ); vertices.push_back( cvf::Vec3f( - cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[1]]] ) - displayOffset ) ); + cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[1]]] ) - displayModelOffset ) ); vertices.push_back( cvf::Vec3f( - cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[2]]] ) - displayOffset ) ); + cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[2]]] ) - displayModelOffset ) ); vertices.push_back( cvf::Vec3f( - cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[3]]] ) - displayOffset ) ); + cvf::Vec3d( nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[3]]] ) - displayModelOffset ) ); } else { diff --git a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.h b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.h index 6902a972c1..c4c14b670b 100644 --- a/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.h +++ b/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.h @@ -121,7 +121,9 @@ public: return m_triangleMapper.p(); } - static cvf::ref createMeshDrawableFromSingleElement( const RigFemPart* grid, size_t elementIndex ); + static cvf::ref createMeshDrawableFromSingleElement( const RigFemPart* grid, + size_t elementIndex, + const cvf::Vec3d& displayModelOffset ); private: static cvf::ref lineIndicesFromQuadVertexArray( const cvf::Vec3fArray* vertexArray ); diff --git a/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.cpp b/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.cpp index 23aed6b470..b75e3b6242 100644 --- a/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.cpp +++ b/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.cpp @@ -37,22 +37,30 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RivSingleCellPartGenerator::RivSingleCellPartGenerator( RigEclipseCaseData* rigCaseData, size_t gridIndex, size_t cellIndex ) +RivSingleCellPartGenerator::RivSingleCellPartGenerator( RigEclipseCaseData* rigCaseData, + size_t gridIndex, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset ) : m_rigCaseData( rigCaseData ) , m_gridIndex( gridIndex ) , m_cellIndex( cellIndex ) , m_geoMechCase( nullptr ) + , m_displayModelOffset( displayModelOffset ) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RivSingleCellPartGenerator::RivSingleCellPartGenerator( RimGeoMechCase* rimGeoMechCase, size_t gridIndex, size_t cellIndex ) +RivSingleCellPartGenerator::RivSingleCellPartGenerator( RimGeoMechCase* rimGeoMechCase, + size_t gridIndex, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset ) : m_geoMechCase( rimGeoMechCase ) , m_gridIndex( gridIndex ) , m_cellIndex( cellIndex ) , m_rigCaseData( nullptr ) + , m_displayModelOffset( displayModelOffset ) { } @@ -88,7 +96,8 @@ cvf::ref RivSingleCellPartGenerator::createMeshDrawable() if ( m_rigCaseData && m_cellIndex != cvf::UNDEFINED_SIZE_T ) { return cvf::StructGridGeometryGenerator::createMeshDrawableFromSingleCell( m_rigCaseData->grid( m_gridIndex ), - m_cellIndex ); + m_cellIndex, + m_displayModelOffset ); } else if ( m_geoMechCase && m_cellIndex != cvf::UNDEFINED_SIZE_T ) { @@ -98,7 +107,9 @@ cvf::ref RivSingleCellPartGenerator::createMeshDrawable() RigFemPart* femPart = m_geoMechCase->geoMechData()->femParts()->part( m_gridIndex ); CVF_ASSERT( femPart ); - return RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( femPart, m_cellIndex ); + return RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( femPart, + m_cellIndex, + m_displayModelOffset ); } return nullptr; diff --git a/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.h b/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.h index 10d392df6d..d30cb258b8 100644 --- a/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.h +++ b/ApplicationCode/ModelVisualization/RivSingleCellPartGenerator.h @@ -36,8 +36,14 @@ class RimGeoMechCase; class RivSingleCellPartGenerator { public: - RivSingleCellPartGenerator( RigEclipseCaseData* rigCaseData, size_t gridIndex, size_t cellIndex ); - RivSingleCellPartGenerator( RimGeoMechCase* rimGeoMechCase, size_t gridIndex, size_t cellIndex ); + RivSingleCellPartGenerator( RigEclipseCaseData* rigCaseData, + size_t gridIndex, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset ); + RivSingleCellPartGenerator( RimGeoMechCase* rimGeoMechCase, + size_t gridIndex, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset ); cvf::ref createPart( const cvf::Color3f color ); @@ -49,4 +55,5 @@ private: RimGeoMechCase* m_geoMechCase; size_t m_gridIndex; size_t m_cellIndex; + cvf::Vec3d m_displayModelOffset; }; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 99f37cfc01..3f54c68364 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -2037,39 +2037,6 @@ bool RimEclipseView::isShowingActiveCellsOnly() return !m_showInactiveCells; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEclipseView::onCreatePartCollectionFromSelection( cvf::Collection* parts ) -{ - Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::instance(); - std::vector items; - riuSelManager->selectedItems( items ); - - for ( size_t i = 0; i < items.size(); i++ ) - { - if ( items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT ) - { - RiuEclipseSelectionItem* eclipseSelItem = static_cast( items[i] ); - - if ( eclipseSelItem && eclipseSelItem->m_view == this ) - { - CVF_ASSERT( eclipseSelItem->m_resultDefinition->eclipseCase() ); - CVF_ASSERT( eclipseSelItem->m_resultDefinition->eclipseCase()->eclipseCaseData() ); - - RivSingleCellPartGenerator partGen( eclipseSelItem->m_resultDefinition->eclipseCase()->eclipseCaseData(), - eclipseSelItem->m_gridIndex, - eclipseSelItem->m_gridLocalCellIndex ); - - cvf::ref part = partGen.createPart( eclipseSelItem->m_color ); - part->setTransform( this->scaleTransform() ); - - parts->push_back( part.p() ); - } - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.h b/ApplicationCode/ProjectDataModel/RimEclipseView.h index 0732680cc8..e279ef883f 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.h @@ -156,7 +156,6 @@ protected: void onLoadDataAndUpdate() override; caf::PdmFieldHandle* userDescriptionField() override; - void onCreatePartCollectionFromSelection( cvf::Collection* parts ) override; bool isShowingActiveCellsOnly() override; void onUpdateDisplayModelForCurrentTimeStep() override; void updateVisibleGeometriesAndCellColors(); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index f85f1fc7b8..d56a415878 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -832,37 +832,6 @@ void RimGeoMechView::calculateCurrentTotalCellVisibility( cvf::UByteArray* total m_vizLogic->calculateCurrentTotalCellVisibility( totalVisibility, timeStep ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimGeoMechView::onCreatePartCollectionFromSelection( cvf::Collection* parts ) -{ - Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::instance(); - - std::vector items; - riuSelManager->selectedItems( items ); - - for ( size_t i = 0; i < items.size(); i++ ) - { - if ( items[i]->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT ) - { - RiuGeoMechSelectionItem* geomSelItem = static_cast( items[i] ); - - if ( geomSelItem && geomSelItem->m_view == this && geomSelItem->m_resultDefinition->geoMechCase() ) - { - RivSingleCellPartGenerator partGen( geomSelItem->m_resultDefinition->geoMechCase(), - geomSelItem->m_gridIndex, - geomSelItem->m_cellIndex ); - - cvf::ref part = partGen.createPart( geomSelItem->m_color ); - part->setTransform( this->scaleTransform() ); - - parts->push_back( part.p() ); - } - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 8966f896e0..ae91d3f43b 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -111,7 +111,6 @@ protected: const QVariant& newValue ) override; void initAfterRead() override; - void onCreatePartCollectionFromSelection( cvf::Collection* parts ) override; void onCreateDisplayModel() override; RimPropertyFilterCollection* nativePropertyFilterCollection(); diff --git a/ApplicationCode/ProjectDataModel/RimGridView.cpp b/ApplicationCode/ProjectDataModel/RimGridView.cpp index 6947ee2b13..c1d2250b92 100644 --- a/ApplicationCode/ProjectDataModel/RimGridView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGridView.cpp @@ -23,6 +23,9 @@ #include "Rim3dOverlayInfoConfig.h" #include "RimAnnotationInViewCollection.h" #include "RimCellRangeFilterCollection.h" +#include "RimEclipseCase.h" +#include "RimEclipseResultDefinition.h" +#include "RimGeoMechResultDefinition.h" #include "RimGridCollection.h" #include "RimIntersectionCollection.h" #include "RimIntersectionResultsDefinitionCollection.h" @@ -36,9 +39,13 @@ #include "RimWellMeasurementInViewCollection.h" #include "Riu3DMainWindowTools.h" +#include "Riu3dSelectionManager.h" #include "RiuMainWindow.h" +#include "RivSingleCellPartGenerator.h" + #include "cvfModel.h" +#include "cvfPart.h" #include "cvfScene.h" #include @@ -419,6 +426,59 @@ void RimGridView::initAfterRead() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridView::onCreatePartCollectionFromSelection( cvf::Collection* parts ) +{ + Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::instance(); + + std::vector items; + riuSelManager->selectedItems( items ); + + for ( size_t i = 0; i < items.size(); i++ ) + { + if ( items[i]->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT ) + { + RiuGeoMechSelectionItem* geomSelItem = static_cast( items[i] ); + + if ( geomSelItem && geomSelItem->m_view == this && geomSelItem->m_resultDefinition->geoMechCase() ) + { + RivSingleCellPartGenerator partGen( geomSelItem->m_resultDefinition->geoMechCase(), + geomSelItem->m_gridIndex, + geomSelItem->m_cellIndex, + this->ownerCase()->displayModelOffset() ); + + cvf::ref part = partGen.createPart( geomSelItem->m_color ); + part->setTransform( this->scaleTransform() ); + + parts->push_back( part.p() ); + } + } + + if ( items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT ) + { + RiuEclipseSelectionItem* eclipseSelItem = static_cast( items[i] ); + + if ( eclipseSelItem && eclipseSelItem->m_view == this ) + { + CVF_ASSERT( eclipseSelItem->m_resultDefinition->eclipseCase() ); + CVF_ASSERT( eclipseSelItem->m_resultDefinition->eclipseCase()->eclipseCaseData() ); + + RivSingleCellPartGenerator partGen( eclipseSelItem->m_resultDefinition->eclipseCase()->eclipseCaseData(), + eclipseSelItem->m_gridIndex, + eclipseSelItem->m_gridLocalCellIndex, + this->ownerCase()->displayModelOffset() ); + + cvf::ref part = partGen.createPart( eclipseSelItem->m_color ); + part->setTransform( this->scaleTransform() ); + + parts->push_back( part.p() ); + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGridView.h b/ApplicationCode/ProjectDataModel/RimGridView.h index d28621eb5a..311115511c 100644 --- a/ApplicationCode/ProjectDataModel/RimGridView.h +++ b/ApplicationCode/ProjectDataModel/RimGridView.h @@ -84,7 +84,8 @@ protected: const QVariant& newValue ) override; void initAfterRead() override; -protected: // Fields +protected: + // Fields caf::PdmChildField m_intersectionCollection; caf::PdmChildField m_intersectionResultDefCollection; @@ -97,6 +98,8 @@ protected: // Fields caf::PdmChildField m_wellMeasurementCollection; private: + void onCreatePartCollectionFromSelection( cvf::Collection* parts ) override; + cvf::ref m_currentReservoirCellVisibility; RimViewLinker* viewLinkerIfMasterView() const; bool m_previousGridModeMeshLinesWasFaults; diff --git a/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.cpp b/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.cpp index 55f7a799c6..36ab18f6aa 100644 --- a/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.cpp +++ b/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.cpp @@ -260,11 +260,23 @@ ref StructGridGeometryGenerator::createOutlineMeshDrawable(double c return geo; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +ref StructGridGeometryGenerator::createMeshDrawableFromSingleCell(const StructGridInterface* grid, + size_t cellIndex) +{ + return createMeshDrawableFromSingleCell(grid, + cellIndex, + grid->displayModelOffset()); +} //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -ref StructGridGeometryGenerator::createMeshDrawableFromSingleCell(const StructGridInterface* grid, size_t cellIndex) +ref StructGridGeometryGenerator::createMeshDrawableFromSingleCell(const StructGridInterface* grid, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset) { cvf::Vec3d cornerVerts[8]; grid->cellCornerVertices(cellIndex, cornerVerts); @@ -281,7 +293,7 @@ ref StructGridGeometryGenerator::createMeshDrawableFromSingleCell(c int n; for (n = 0; n < 4; n++) { - vertices.push_back(cvf::Vec3f(cornerVerts[faceConn[n]] - grid->displayModelOffset())); + vertices.push_back(cvf::Vec3f(cornerVerts[faceConn[n]] - displayModelOffset)); } } diff --git a/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.h b/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.h index ade37fbdbc..c4946be7e3 100644 --- a/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.h +++ b/Fwk/AppFwk/CommonCode/cvfStructGridGeometryGenerator.h @@ -188,7 +188,12 @@ public: ref createMeshDrawable(); ref createOutlineMeshDrawable(double creaseAngle); - static ref createMeshDrawableFromSingleCell(const StructGridInterface* grid, size_t cellIndex); + static ref createMeshDrawableFromSingleCell(const StructGridInterface* grid, + size_t cellIndex); + + static ref createMeshDrawableFromSingleCell(const StructGridInterface* grid, + size_t cellIndex, + const cvf::Vec3d& displayModelOffset); private: static ref