mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
(#646) Show selected cells in geo mech view
This commit is contained in:
parent
a13376a8bf
commit
6063ca1b54
@ -68,7 +68,6 @@ ref<DrawableGeo> RivFemPartGeometryGenerator::generateSurface()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
ref<DrawableGeo> RivFemPartGeometryGenerator::createMeshDrawable()
|
||||
{
|
||||
|
||||
if (!(m_quadVertices.notNull() && m_quadVertices->size() != 0)) return NULL;
|
||||
|
||||
ref<DrawableGeo> geo = new DrawableGeo;
|
||||
@ -265,3 +264,57 @@ void RivFemPartGeometryGenerator::setElementVisibility(const cvf::UByteArray* ce
|
||||
m_elmVisibility = cellVisibility;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
cvf::ref<cvf::DrawableGeo> RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement(const RigFemPart* part, size_t elmIdx)
|
||||
{
|
||||
cvf::ref<cvf::Vec3fArray> quadVertices;
|
||||
|
||||
{
|
||||
std::vector<Vec3f> vertices;
|
||||
|
||||
const std::vector<cvf::Vec3f>& nodeCoordinates = part->nodes().coordinates;
|
||||
|
||||
RigElementType eType = part->elementType(elmIdx);
|
||||
int faceCount = RigFemTypes::elmentFaceCount(eType);
|
||||
int elmQuadCount = 0;
|
||||
|
||||
const int* elmNodeIndices = part->connectivities(elmIdx);
|
||||
|
||||
for (int lfIdx = 0; lfIdx < faceCount; ++lfIdx)
|
||||
{
|
||||
int elmNeighbor = part->elementNeighbor(static_cast<int>(elmIdx), lfIdx);
|
||||
|
||||
int faceNodeCount = 0;
|
||||
const int* localElmNodeIndicesForFace = RigFemTypes::localElmNodeIndicesForFace(eType, lfIdx, &faceNodeCount);
|
||||
if (faceNodeCount == 4)
|
||||
{
|
||||
vertices.push_back(nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[0]]]);
|
||||
vertices.push_back(nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[1]]]);
|
||||
vertices.push_back(nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[2]]]);
|
||||
vertices.push_back(nodeCoordinates[elmNodeIndices[localElmNodeIndicesForFace[3]]]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Handle triangles and 6 node and 8 node faces
|
||||
}
|
||||
}
|
||||
|
||||
quadVertices = new cvf::Vec3fArray;
|
||||
quadVertices->assign(vertices);
|
||||
}
|
||||
|
||||
if (!(quadVertices.notNull() && quadVertices->size() != 0)) return NULL;
|
||||
|
||||
ref<DrawableGeo> geo = new DrawableGeo;
|
||||
geo->setVertexArray(quadVertices.p());
|
||||
|
||||
ref<UIntArray> indices = lineIndicesFromQuadVertexArray(quadVertices.p());
|
||||
ref<PrimitiveSetIndexedUInt> prim = new PrimitiveSetIndexedUInt(PT_LINES);
|
||||
prim->setIndices(indices.p());
|
||||
|
||||
geo->addPrimitiveSet(prim.p());
|
||||
return geo;
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,8 @@ public:
|
||||
|
||||
RivFemPartTriangleToElmMapper* triangleToElementMapper() { return m_triangleMapper.p();}
|
||||
|
||||
static cvf::ref<cvf::DrawableGeo> createMeshDrawableFromSingleElement(const RigFemPart* grid, size_t elementIndex);
|
||||
|
||||
private:
|
||||
static cvf::ref<cvf::UIntArray>
|
||||
lineIndicesFromQuadVertexArray(const cvf::Vec3fArray* vertexArray);
|
||||
|
@ -20,6 +20,12 @@
|
||||
#include "RivSingleCellPartGenerator.h"
|
||||
|
||||
#include "RigCaseData.h"
|
||||
#include "RigFemPartCollection.h"
|
||||
#include "RigGeoMechCaseData.h"
|
||||
|
||||
#include "RimGeoMechCase.h"
|
||||
|
||||
#include "RivFemPartGeometryGenerator.h"
|
||||
|
||||
#include "cafEffectGenerator.h"
|
||||
#include "cvfPart.h"
|
||||
@ -33,7 +39,19 @@
|
||||
RivSingleCellPartGenerator::RivSingleCellPartGenerator(RigCaseData* rigCaseData, size_t gridIndex, size_t cellIndex)
|
||||
: m_rigCaseData(rigCaseData),
|
||||
m_gridIndex(gridIndex),
|
||||
m_cellIndex(cellIndex)
|
||||
m_cellIndex(cellIndex),
|
||||
m_geoMechCase(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RivSingleCellPartGenerator::RivSingleCellPartGenerator(RimGeoMechCase* rimGeoMechCase, size_t gridIndex, size_t cellIndex)
|
||||
: m_geoMechCase(rimGeoMechCase),
|
||||
m_gridIndex(gridIndex),
|
||||
m_cellIndex(cellIndex),
|
||||
m_rigCaseData(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -56,6 +74,8 @@ cvf::ref<cvf::Part> RivSingleCellPartGenerator::createPart(const cvf::Color3f co
|
||||
|
||||
part->setEffect(eff.p());
|
||||
|
||||
part->setPriority(10000);
|
||||
|
||||
return part;
|
||||
}
|
||||
|
||||
@ -64,11 +84,20 @@ cvf::ref<cvf::Part> RivSingleCellPartGenerator::createPart(const cvf::Color3f co
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
cvf::ref<cvf::DrawableGeo> RivSingleCellPartGenerator::createMeshDrawable()
|
||||
{
|
||||
if (m_rigCaseData &&
|
||||
m_cellIndex != cvf::UNDEFINED_SIZE_T)
|
||||
if (m_rigCaseData && m_cellIndex != cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
return cvf::StructGridGeometryGenerator::createMeshDrawableFromSingleCell(m_rigCaseData->grid(m_gridIndex), m_cellIndex);
|
||||
}
|
||||
else if (m_geoMechCase && m_cellIndex != cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
CVF_ASSERT(m_geoMechCase->geoMechData());
|
||||
CVF_ASSERT(m_geoMechCase->geoMechData()->femParts()->partCount() > m_gridIndex);
|
||||
|
||||
RigFemPart* femPart = m_geoMechCase->geoMechData()->femParts()->part(m_gridIndex);
|
||||
CVF_ASSERT(femPart);
|
||||
|
||||
return RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement(femPart, m_cellIndex);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ namespace cvf
|
||||
}
|
||||
|
||||
class RigCaseData;
|
||||
class RimGeoMechCase;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -37,6 +38,7 @@ class RivSingleCellPartGenerator
|
||||
{
|
||||
public:
|
||||
RivSingleCellPartGenerator(RigCaseData* rigCaseData, size_t gridIndex, size_t cellIndex);
|
||||
RivSingleCellPartGenerator(RimGeoMechCase* rimGeoMechCase, size_t gridIndex, size_t cellIndex);
|
||||
|
||||
cvf::ref<cvf::Part> createPart(const cvf::Color3f color);
|
||||
|
||||
@ -44,7 +46,8 @@ private:
|
||||
cvf::ref<cvf::DrawableGeo> createMeshDrawable();
|
||||
|
||||
private:
|
||||
RigCaseData* m_rigCaseData;
|
||||
size_t m_gridIndex;
|
||||
size_t m_cellIndex;
|
||||
RigCaseData* m_rigCaseData;
|
||||
RimGeoMechCase* m_geoMechCase;
|
||||
size_t m_gridIndex;
|
||||
size_t m_cellIndex;
|
||||
};
|
||||
|
@ -677,15 +677,6 @@ void RimEclipseView::updateCurrentTimeStep()
|
||||
|
||||
|
||||
{
|
||||
// Actions related to highlight items in scene
|
||||
//
|
||||
// Removed highlight model by name
|
||||
// Create new highlight model with name
|
||||
// Create and add selected parts
|
||||
// Modify with scaletransform()
|
||||
// Add parts to model
|
||||
// Add model to scene
|
||||
|
||||
cvf::String highlightModelName = "HighLightModel";
|
||||
|
||||
this->removeModelByName(frameScene, highlightModelName);
|
||||
@ -698,25 +689,26 @@ void RimEclipseView::updateCurrentTimeStep()
|
||||
riuSelManager->selectedItems(items);
|
||||
for (size_t i = 0; i < items.size(); i++)
|
||||
{
|
||||
RiuEclipseSelectionItem* eclipseSelItem = dynamic_cast<RiuEclipseSelectionItem*>(items[i]);
|
||||
if (eclipseSelItem &&
|
||||
eclipseSelItem->m_view)
|
||||
if (items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT)
|
||||
{
|
||||
CVF_ASSERT(eclipseSelItem->m_view->eclipseCase());
|
||||
CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()->reservoirData());
|
||||
RiuEclipseSelectionItem* eclipseSelItem = static_cast<RiuEclipseSelectionItem*>(items[i]);
|
||||
if (eclipseSelItem &&
|
||||
eclipseSelItem->m_view)
|
||||
{
|
||||
CVF_ASSERT(eclipseSelItem->m_view->eclipseCase());
|
||||
CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()->reservoirData());
|
||||
|
||||
RivSingleCellPartGenerator partGen(eclipseSelItem->m_view->eclipseCase()->reservoirData(), eclipseSelItem->m_gridIndex, eclipseSelItem->m_cellIndex);
|
||||
RivSingleCellPartGenerator partGen(eclipseSelItem->m_view->eclipseCase()->reservoirData(), eclipseSelItem->m_gridIndex, eclipseSelItem->m_cellIndex);
|
||||
|
||||
cvf::ref<cvf::Part> part = partGen.createPart(eclipseSelItem->m_color);
|
||||
part->setTransform(this->scaleTransform());
|
||||
part->setPriority(10000);
|
||||
cvf::ref<cvf::Part> part = partGen.createPart(eclipseSelItem->m_color);
|
||||
part->setTransform(this->scaleTransform());
|
||||
|
||||
highlightModelBasicList->addPart(part.p());
|
||||
highlightModelBasicList->addPart(part.p());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
highlightModelBasicList->updateBoundingBoxesRecursive();
|
||||
|
||||
frameScene->addModel(highlightModelBasicList.p());
|
||||
}
|
||||
}
|
||||
|
@ -34,18 +34,23 @@
|
||||
#include "RimGeoMechCellColors.h"
|
||||
#include "RimGeoMechPropertyFilterCollection.h"
|
||||
#include "RimLegendConfig.h"
|
||||
#include "RimViewLinker.h"
|
||||
|
||||
#include "RiuMainWindow.h"
|
||||
#include "RiuSelectionManager.h"
|
||||
#include "RiuViewer.h"
|
||||
|
||||
#include "RivGeoMechPartMgr.h"
|
||||
#include "RivGeoMechPartMgrCache.h"
|
||||
#include "RivGeoMechVizLogic.h"
|
||||
#include "RivSingleCellPartGenerator.h"
|
||||
|
||||
#include "cafCadNavigation.h"
|
||||
#include "cafCeetronPlusNavigation.h"
|
||||
#include "cafFrameAnimationControl.h"
|
||||
#include "cafPdmUiTreeOrdering.h"
|
||||
#include "cafProgressInfo.h"
|
||||
|
||||
#include "cvfModelBasicList.h"
|
||||
#include "cvfOverlayScalarMapperLegend.h"
|
||||
#include "cvfPart.h"
|
||||
@ -54,9 +59,6 @@
|
||||
#include "cvfqtUtils.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include "RimViewLinker.h"
|
||||
#include "cafPdmUiTreeOrdering.h"
|
||||
|
||||
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimGeoMechView, "GeoMechView");
|
||||
@ -282,6 +284,36 @@ void RimGeoMechView::updateCurrentTimeStep()
|
||||
femBBox,
|
||||
scaleTransform());
|
||||
frameScene->addModel(wellPathModel.p());
|
||||
|
||||
{
|
||||
cvf::String highlightModelName = "HighLightModel";
|
||||
cvf::ref<cvf::ModelBasicList> highlightModelBasicList = new cvf::ModelBasicList;
|
||||
highlightModelBasicList->setName(highlightModelName);
|
||||
|
||||
RiuSelectionManager* riuSelManager = RiuSelectionManager::instance();
|
||||
std::vector<RiuSelectionItem*> 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<RiuGeoMechSelectionItem*>(items[i]);
|
||||
if (geomSelItem &&
|
||||
geomSelItem->m_view &&
|
||||
geomSelItem->m_view->geoMechCase())
|
||||
{
|
||||
RivSingleCellPartGenerator partGen(geomSelItem->m_view->geoMechCase(), geomSelItem->m_gridIndex, geomSelItem->m_cellIndex);
|
||||
cvf::ref<cvf::Part> part = partGen.createPart(geomSelItem->m_color);
|
||||
part->setTransform(this->scaleTransform());
|
||||
|
||||
highlightModelBasicList->addPart(part.p());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
highlightModelBasicList->updateBoundingBoxesRecursive();
|
||||
frameScene->addModel(highlightModelBasicList.p());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user