diff --git a/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.cpp b/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.cpp index b36bd8ede7..3f7e0f8fff 100644 --- a/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.cpp +++ b/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.cpp @@ -46,7 +46,7 @@ void RigFemPart::preAllocateElementStorage(int elementCount) m_elementTypes.reserve(elementCount); m_elementConnectivityStartIndices.reserve(elementCount); - m_allAlementConnectivities.reserve(elementCount*8); + m_allAlementConnectivities.reserve(elementCount*8); } //-------------------------------------------------------------------------------------------------- @@ -64,3 +64,176 @@ void RigFemPart::appendElement(RigElementType elmType, int id, const int* connec m_allAlementConnectivities.push_back(connectivities[lnIdx]); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const RigFemPartGrid* RigFemPart::structGrid() +{ + if (m_structGrid.isNull()) + { + m_structGrid = new RigFemPartGrid(this); + } + + return m_structGrid.p(); +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigFemPartGrid::RigFemPartGrid(RigFemPart* femPart) +{ + m_femPart = femPart; + generateStructGridData(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigFemPartGrid::~RigFemPartGrid() +{ + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigFemPartGrid::generateStructGridData() +{ + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigFemPartGrid::gridPointCountI() const +{ + CVF_ASSERT(false); + return cvf::UNDEFINED_SIZE_T; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigFemPartGrid::gridPointCountJ() const +{ + CVF_ASSERT(false); + return cvf::UNDEFINED_SIZE_T; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigFemPartGrid::gridPointCountK() const +{ + CVF_ASSERT(false); + return cvf::UNDEFINED_SIZE_T; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RigFemPartGrid::isCellValid(size_t i, size_t j, size_t k) const +{ + CVF_ASSERT(false); + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RigFemPartGrid::minCoordinate() const +{ + CVF_ASSERT(false); + return cvf::Vec3d::ZERO; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RigFemPartGrid::maxCoordinate() const +{ + CVF_ASSERT(false); + return cvf::Vec3d::ZERO; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RigFemPartGrid::cellIJKNeighbor(size_t i, size_t j, size_t k, FaceType face, size_t* neighborCellIndex) const +{ + CVF_ASSERT(false); + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigFemPartGrid::cellIndexFromIJK(size_t i, size_t j, size_t k) const +{ + CVF_ASSERT(false); + return cvf::UNDEFINED_SIZE_T; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RigFemPartGrid::ijkFromCellIndex(size_t cellIndex, size_t* i, size_t* j, size_t* k) const +{ + CVF_ASSERT(false); + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RigFemPartGrid::cellIJKFromCoordinate(const cvf::Vec3d& coord, size_t* i, size_t* j, size_t* k) const +{ + CVF_ASSERT(false); + return false; + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigFemPartGrid::cellCornerVertices(size_t cellIndex, cvf::Vec3d vertices[8]) const +{ + CVF_ASSERT(false); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RigFemPartGrid::cellCentroid(size_t cellIndex) const +{ + CVF_ASSERT(false); + return cvf::Vec3d::ZERO; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigFemPartGrid::cellMinMaxCordinates(size_t cellIndex, cvf::Vec3d* minCoordinate, cvf::Vec3d* maxCoordinate) const +{ + CVF_ASSERT(false); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigFemPartGrid::gridPointIndexFromIJK(size_t i, size_t j, size_t k) const +{ + CVF_ASSERT(false); + return cvf::UNDEFINED_SIZE_T; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RigFemPartGrid::gridPointCoordinate(size_t i, size_t j, size_t k) const +{ + CVF_ASSERT(false); + return cvf::Vec3d::ZERO; +} diff --git a/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.h b/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.h index 6782c0a8c2..4f7b8d0711 100644 --- a/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.h +++ b/ApplicationCode/GeoMech/GeoMechDataModel/RigFemPart.h @@ -28,6 +28,8 @@ #include "cvfVector3.h" #include +class RigFemPartGrid; + class RigFemPartNodes { public: @@ -56,6 +58,8 @@ public: RigFemPartNodes& nodes() {return m_nodes;} const RigFemPartNodes& nodes() const {return m_nodes;} + + const RigFemPartGrid* structGrid(); private: int m_elementPartId; @@ -66,4 +70,38 @@ private: RigFemPartNodes m_nodes; + cvf::ref m_structGrid; }; + +#include "cvfStructGrid.h" + +class RigFemPartGrid : public cvf::StructGridInterface +{ +public: + RigFemPartGrid(RigFemPart* femPart); + virtual ~RigFemPartGrid(); + + virtual size_t gridPointCountI() const; + virtual size_t gridPointCountJ() const; + virtual size_t gridPointCountK() const; + + virtual bool isCellValid(size_t i, size_t j, size_t k) const; + virtual cvf::Vec3d minCoordinate() const; + virtual cvf::Vec3d maxCoordinate() const; + virtual bool cellIJKNeighbor(size_t i, size_t j, size_t k, FaceType face, size_t* neighborCellIndex) const; + virtual size_t cellIndexFromIJK(size_t i, size_t j, size_t k) const; + virtual bool ijkFromCellIndex(size_t cellIndex, size_t* i, size_t* j, size_t* k) const; + virtual bool cellIJKFromCoordinate(const cvf::Vec3d& coord, size_t* i, size_t* j, size_t* k) const; + virtual void cellCornerVertices(size_t cellIndex, cvf::Vec3d vertices[8]) const; + virtual cvf::Vec3d cellCentroid(size_t cellIndex) const; + virtual void cellMinMaxCordinates(size_t cellIndex, cvf::Vec3d* minCoordinate, cvf::Vec3d* maxCoordinate) const; + virtual size_t gridPointIndexFromIJK(size_t i, size_t j, size_t k) const; + virtual cvf::Vec3d gridPointCoordinate(size_t i, size_t j, size_t k) const; + + + private: + void generateStructGridData(); + + + RigFemPart* m_femPart; +}; \ No newline at end of file diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp b/ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp index 4a2fae7d53..88f79f8a6c 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp @@ -102,8 +102,8 @@ void RimCellRangeFilter::computeAndSetValidValues() { CVF_ASSERT(m_parentContainer); - RigGridBase* grid = selectedGrid(); - if (grid && grid->cellCount() > 0 ) + const cvf::StructGridInterface* grid = selectedGrid(); + if (grid && grid->cellCountI() > 0 && grid->cellCountJ() > 0 && grid->cellCountK() > 0) { cellCountI = cvf::Math::clamp(cellCountI.v(), 1, static_cast(grid->cellCountI())); startIndexI = cvf::Math::clamp(startIndexI.v(), 1, static_cast(grid->cellCountI())); @@ -124,10 +124,10 @@ void RimCellRangeFilter::setDefaultValues() { CVF_ASSERT(m_parentContainer); - RigGridBase* grid = selectedGrid(); + const cvf::StructGridInterface* grid = selectedGrid(); RigActiveCellInfo* actCellInfo = m_parentContainer->activeCellInfo(); - if (grid == m_parentContainer->mainGrid() && actCellInfo) + if (grid == m_parentContainer->gridByIndex(0) && actCellInfo) { cvf::Vec3st min, max; actCellInfo->IJKBoundingBox(min, max); @@ -178,7 +178,7 @@ void RimCellRangeFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, return; } - RigGridBase* grid = selectedGrid(); + const cvf::StructGridInterface* grid = selectedGrid(); if (field == &startIndexI || field == &cellCountI) { @@ -197,7 +197,7 @@ void RimCellRangeFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, } RigActiveCellInfo* actCellInfo = m_parentContainer->activeCellInfo(); - if (grid == m_parentContainer->mainGrid() && actCellInfo) + if (grid == m_parentContainer->gridByIndex(0) && actCellInfo) { cvf::Vec3st min, max; actCellInfo->IJKBoundingBox(min, max); @@ -240,17 +240,11 @@ QList RimCellRangeFilter::calculateValueOptions(const ca if (&gridIndex == fieldNeedingOptions) { - RigMainGrid * mainGrid = NULL; - - if (parentContainer() && parentContainer()->reservoirView() && parentContainer()->reservoirView()->eclipseCase() && parentContainer()->reservoirView()->eclipseCase()->reservoirData()) - mainGrid = parentContainer()->reservoirView()->eclipseCase()->reservoirData()->mainGrid(); - - for (size_t gIdx = 0; gIdx < mainGrid->gridCount(); ++gIdx) + for (int gIdx = 0; gIdx < parentContainer()->gridCount(); ++gIdx) { - RigGridBase* grid = mainGrid->gridByIndex(gIdx); QString gridName; - gridName += grid->gridName().c_str(); + gridName += parentContainer()->gridName(gIdx); if (gIdx == 0) { if (gridName.isEmpty()) @@ -269,19 +263,17 @@ QList RimCellRangeFilter::calculateValueOptions(const ca //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RigGridBase* RimCellRangeFilter::selectedGrid() +const cvf::StructGridInterface* RimCellRangeFilter::selectedGrid() { - RigMainGrid* mainGrid = m_parentContainer->mainGrid(); - CVF_ASSERT(mainGrid); - - RigGridBase* grid = NULL; - if (static_cast(gridIndex()) >= mainGrid->gridCount()) + if (gridIndex() >= m_parentContainer->gridCount()) { gridIndex = 0; } - grid = mainGrid->gridByIndex(gridIndex()); + const cvf::StructGridInterface* grid = m_parentContainer->gridByIndex(gridIndex()); + CVF_ASSERT(grid); + return grid; } diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilter.h b/ApplicationCode/ProjectDataModel/RimCellRangeFilter.h index 8004a4a7f8..07164269cd 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilter.h +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilter.h @@ -30,6 +30,7 @@ class RimEclipseView; namespace cvf { class CellRangeFilter; + class StructGridInterface; } //================================================================================================== @@ -67,7 +68,7 @@ protected: virtual QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly ); private: - RigGridBase* selectedGrid(); + const cvf::StructGridInterface* selectedGrid(); RimCellRangeFilterCollection* m_parentContainer; }; diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp index 886716de12..e8f5d99739 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp @@ -24,6 +24,10 @@ #include "RigGridBase.h" #include "RimEclipseView.h" #include "RigCaseData.h" +#include "RigFemPartCollection.h" +#include "RimGeoMechView.h" +#include "RimGeoMechCase.h" +#include "RigGeomechCaseData.h" CAF_PDM_SOURCE_INIT(RimCellRangeFilterCollection, "CellRangeFilterCollection"); @@ -55,7 +59,7 @@ RimCellRangeFilterCollection::~RimCellRangeFilterCollection() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimCellRangeFilterCollection::setReservoirView(RimEclipseView* reservoirView) +void RimCellRangeFilterCollection::setReservoirView(RimView* reservoirView) { m_reservoirView = reservoirView; } @@ -108,13 +112,14 @@ void RimCellRangeFilterCollection::compoundCellRangeFilter(cvf::CellRangeFilter* //-------------------------------------------------------------------------------------------------- RigMainGrid* RimCellRangeFilterCollection::mainGrid() const { - if (m_reservoirView && - m_reservoirView->eclipseCase() && - m_reservoirView->eclipseCase()->reservoirData() && - m_reservoirView->eclipseCase()->reservoirData()->mainGrid()) + RimEclipseView* eclipseView = this->eclipseView(); + if (eclipseView && + eclipseView->eclipseCase() && + eclipseView->eclipseCase()->reservoirData() && + eclipseView->eclipseCase()->reservoirData()->mainGrid()) { - return m_reservoirView->eclipseCase()->reservoirData()->mainGrid(); + return eclipseView->eclipseCase()->reservoirData()->mainGrid(); } return NULL; @@ -126,9 +131,10 @@ RigMainGrid* RimCellRangeFilterCollection::mainGrid() const //-------------------------------------------------------------------------------------------------- RigActiveCellInfo* RimCellRangeFilterCollection::activeCellInfo() const { - if (m_reservoirView ) + RimEclipseView* eclipseView = this->eclipseView(); + if (eclipseView ) { - return m_reservoirView->currentActiveCellInfo(); + return eclipseView->currentActiveCellInfo(); } return NULL; @@ -140,6 +146,7 @@ RigActiveCellInfo* RimCellRangeFilterCollection::activeCellInfo() const //-------------------------------------------------------------------------------------------------- void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { + this->updateUiIconFromToggleField(); CVF_ASSERT(m_reservoirView); @@ -166,13 +173,20 @@ RimCellRangeFilter* RimCellRangeFilterCollection::createAndAppendRangeFilter() return rangeFilter; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimView* RimCellRangeFilterCollection::reservoirView() +{ + return m_reservoirView; +} //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimEclipseView* RimCellRangeFilterCollection::reservoirView() +RimEclipseView* RimCellRangeFilterCollection::eclipseView() const { - return m_reservoirView; + return dynamic_cast(m_reservoirView); } //-------------------------------------------------------------------------------------------------- @@ -240,3 +254,90 @@ bool RimCellRangeFilterCollection::hasActiveIncludeFilters() const } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const cvf::StructGridInterface* RimCellRangeFilterCollection::gridByIndex(int gridIndex) const +{ + RigMainGrid* mnGrid = mainGrid(); + RigFemPartCollection* femPartColl = this->femPartColl(); + + if (mnGrid) + { + RigGridBase* grid = NULL; + + grid = mnGrid->gridByIndex(gridIndex); + + CVF_ASSERT(grid); + + return grid; + } + else if (femPartColl) + { + if (gridIndex < femPartColl->partCount()) + return femPartColl->part(gridIndex)->structGrid(); + else + return NULL; + } + + return NULL; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimCellRangeFilterCollection::gridCount() const +{ + RigMainGrid* mnGrid = mainGrid(); + RigFemPartCollection* femPartColl = this->femPartColl(); + + if (mnGrid) + { + return (int)mnGrid->gridCount(); + } + else if (femPartColl) + { + return femPartColl->partCount(); + } + + return 0; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimCellRangeFilterCollection::gridName(int gridIndex) const +{ + RigMainGrid* mnGrid = mainGrid(); + RigFemPartCollection* femPartColl = this->femPartColl(); + + if (mnGrid) + { + return mnGrid->gridByIndex(gridIndex)->gridName().c_str(); + } + else if (femPartColl) + { + return QString::number(gridIndex); + } + + return ""; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigFemPartCollection* RimCellRangeFilterCollection::femPartColl() const +{ + RimGeoMechView* eclipseView = dynamic_cast(m_reservoirView); + + if (eclipseView && + eclipseView->geoMechCase() && + eclipseView->geoMechCase()->geoMechData() ) + { + + return eclipseView->geoMechCase()->geoMechData()->femParts(); + } + + return NULL; +} + diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h index 1f1656955d..56c04cf9fa 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h @@ -22,6 +22,8 @@ class RigActiveCellInfo; class RigGridBase; +class RimView; +class RigFemPartCollection; //================================================================================================== /// @@ -39,17 +41,21 @@ public: caf::PdmField< std::list< caf::PdmPointer< RimCellRangeFilter > > > rangeFilters; // Methods - RimCellRangeFilter* createAndAppendRangeFilter(); - void remove(RimCellRangeFilter* rangeFilter); + RimCellRangeFilter* createAndAppendRangeFilter(); + void remove(RimCellRangeFilter* rangeFilter); - void compoundCellRangeFilter(cvf::CellRangeFilter* cellRangeFilter, size_t gridIndex) const; - bool hasActiveFilters() const; - bool hasActiveIncludeFilters() const; + void compoundCellRangeFilter(cvf::CellRangeFilter* cellRangeFilter, size_t gridIndex) const; + bool hasActiveFilters() const; + bool hasActiveIncludeFilters() const; - void setReservoirView(RimEclipseView* reservoirView); - RimEclipseView* reservoirView(); - RigMainGrid* mainGrid() const; - RigActiveCellInfo* activeCellInfo() const; + void setReservoirView(RimView* reservoirView); + + RimView* reservoirView(); + const cvf::StructGridInterface* gridByIndex(int gridIndex) const; + int gridCount() const; + QString gridName(int gridIndex) const; + + RigActiveCellInfo* activeCellInfo() const; // Overridden methods virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ); @@ -57,9 +63,13 @@ public: protected: // Overridden methods - virtual void initAfterRead(); + virtual void initAfterRead(); private: - RimEclipseView* m_reservoirView; + RimEclipseView* eclipseView() const; + RigMainGrid* mainGrid() const; + RigFemPartCollection* femPartColl() const; + + RimView* m_reservoirView; }; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.h b/ApplicationCode/ProjectDataModel/RimEclipseView.h index 28606e91ed..e0d80285fa 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.h @@ -121,7 +121,7 @@ public: virtual void loadDataAndUpdate(); bool isTimeStepDependentDataVisible() const; - void scheduleGeometryRegen(unsigned short geometryType); + virtual void scheduleGeometryRegen(unsigned short geometryType); void scheduleReservoirGridGeometryRegen(); void schedulePipeGeometryRegen(); void updateDisplayModelForWellResults(); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 6241bf94e5..ffca5ed54c 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -44,6 +44,7 @@ #include "cafFrameAnimationControl.h" #include #include "cafProgressInfo.h" +#include "RimCellRangeFilterCollection.h" @@ -63,6 +64,11 @@ RimGeoMechView::RimGeoMechView(void) CAF_PDM_InitFieldNoDefault(&cellResult, "GridCellResult", "Color Result", ":/CellResult.png", "", ""); cellResult = new RimGeoMechResultSlot(); + CAF_PDM_InitFieldNoDefault(&rangeFilterCollection, "RangeFilters", "Range Filters", "", "", ""); + rangeFilterCollection = new RimCellRangeFilterCollection(); + rangeFilterCollection->setReservoirView(this); + + this->cellResult()->setReservoirView(this); this->cellResult()->legendConfig()->setPosition(cvf::Vec2ui(10, 120)); this->cellResult()->legendConfig()->setReservoirView(this); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 5e6ae260aa..ddb1a58536 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -34,8 +34,10 @@ class Rim3dOverlayInfoConfig; class RiuViewer; class RimGeoMechCase; class RivGeoMechPartMgr; +class RimCellRangeFilterCollection; class RigFemPart; + namespace cvf { class Transform; } @@ -60,11 +62,13 @@ public: virtual void endAnimation() {} caf::PdmField cellResult; + caf::PdmField rangeFilterCollection; bool isTimeStepDependentDataVisible(); private: + virtual void scheduleGeometryRegen(unsigned short geometryType){} virtual void createDisplayModel(); virtual void updateDisplayModelVisibility(); virtual void updateScaleTransform(); diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index 4fea5f4b90..fa5d6347de 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -92,6 +92,7 @@ public: void updateCurrentTimeStepAndRedraw(); void endAnimation(); + virtual void scheduleGeometryRegen(unsigned short geometryType) = 0; void scheduleCreateDisplayModelAndRedraw(); void createDisplayModelAndRedraw();