Prep for Gromech range filters:

* Generalized RangeFilter vs view
* Added stub implememntation of a StructGridInterface implementation for
Fem parts
This commit is contained in:
Jacob Støren
2015-05-21 15:39:44 +02:00
parent d82d88d592
commit 68caed93b4
10 changed files with 371 additions and 45 deletions

View File

@@ -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;
}

View File

@@ -28,6 +28,8 @@
#include "cvfVector3.h"
#include <vector>
class RigFemPartGrid;
class RigFemPartNodes
{
public:
@@ -57,6 +59,8 @@ public:
RigFemPartNodes& nodes() {return m_nodes;}
const RigFemPartNodes& nodes() const {return m_nodes;}
const RigFemPartGrid* structGrid();
private:
int m_elementPartId;
std::vector<int> m_elementId;
@@ -66,4 +70,38 @@ private:
RigFemPartNodes m_nodes;
cvf::ref<RigFemPartGrid> 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;
};

View File

@@ -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<int>(grid->cellCountI()));
startIndexI = cvf::Math::clamp(startIndexI.v(), 1, static_cast<int>(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<caf::PdmOptionItemInfo> 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<caf::PdmOptionItemInfo> 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<size_t>(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;
}

View File

@@ -30,6 +30,7 @@ class RimEclipseView;
namespace cvf
{
class CellRangeFilter;
class StructGridInterface;
}
//==================================================================================================
@@ -67,7 +68,7 @@ protected:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly );
private:
RigGridBase* selectedGrid();
const cvf::StructGridInterface* selectedGrid();
RimCellRangeFilterCollection* m_parentContainer;
};

View File

@@ -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<RimEclipseView*>(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<RimGeoMechView*>(m_reservoirView);
if (eclipseView &&
eclipseView->geoMechCase() &&
eclipseView->geoMechCase()->geoMechData() )
{
return eclipseView->geoMechCase()->geoMechData()->femParts();
}
return NULL;
}

View File

@@ -22,6 +22,8 @@
class RigActiveCellInfo;
class RigGridBase;
class RimView;
class RigFemPartCollection;
//==================================================================================================
///
@@ -46,9 +48,13 @@ public:
bool hasActiveFilters() const;
bool hasActiveIncludeFilters() const;
void setReservoirView(RimEclipseView* reservoirView);
RimEclipseView* reservoirView();
RigMainGrid* mainGrid() 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
@@ -61,5 +67,9 @@ protected:
private:
RimEclipseView* m_reservoirView;
RimEclipseView* eclipseView() const;
RigMainGrid* mainGrid() const;
RigFemPartCollection* femPartColl() const;
RimView* m_reservoirView;
};

View File

@@ -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();

View File

@@ -44,6 +44,7 @@
#include "cafFrameAnimationControl.h"
#include <QMessageBox>
#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);

View File

@@ -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<RimGeoMechResultSlot*> cellResult;
caf::PdmField<RimCellRangeFilterCollection*> rangeFilterCollection;
bool isTimeStepDependentDataVisible();
private:
virtual void scheduleGeometryRegen(unsigned short geometryType){}
virtual void createDisplayModel();
virtual void updateDisplayModelVisibility();
virtual void updateScaleTransform();

View File

@@ -92,6 +92,7 @@ public:
void updateCurrentTimeStepAndRedraw();
void endAnimation();
virtual void scheduleGeometryRegen(unsigned short geometryType) = 0;
void scheduleCreateDisplayModelAndRedraw();
void createDisplayModelAndRedraw();