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()
|
ref<DrawableGeo> RivFemPartGeometryGenerator::createMeshDrawable()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!(m_quadVertices.notNull() && m_quadVertices->size() != 0)) return NULL;
|
if (!(m_quadVertices.notNull() && m_quadVertices->size() != 0)) return NULL;
|
||||||
|
|
||||||
ref<DrawableGeo> geo = new DrawableGeo;
|
ref<DrawableGeo> geo = new DrawableGeo;
|
||||||
@ -265,3 +264,57 @@ void RivFemPartGeometryGenerator::setElementVisibility(const cvf::UByteArray* ce
|
|||||||
m_elmVisibility = cellVisibility;
|
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();}
|
RivFemPartTriangleToElmMapper* triangleToElementMapper() { return m_triangleMapper.p();}
|
||||||
|
|
||||||
|
static cvf::ref<cvf::DrawableGeo> createMeshDrawableFromSingleElement(const RigFemPart* grid, size_t elementIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static cvf::ref<cvf::UIntArray>
|
static cvf::ref<cvf::UIntArray>
|
||||||
lineIndicesFromQuadVertexArray(const cvf::Vec3fArray* vertexArray);
|
lineIndicesFromQuadVertexArray(const cvf::Vec3fArray* vertexArray);
|
||||||
|
@ -20,6 +20,12 @@
|
|||||||
#include "RivSingleCellPartGenerator.h"
|
#include "RivSingleCellPartGenerator.h"
|
||||||
|
|
||||||
#include "RigCaseData.h"
|
#include "RigCaseData.h"
|
||||||
|
#include "RigFemPartCollection.h"
|
||||||
|
#include "RigGeoMechCaseData.h"
|
||||||
|
|
||||||
|
#include "RimGeoMechCase.h"
|
||||||
|
|
||||||
|
#include "RivFemPartGeometryGenerator.h"
|
||||||
|
|
||||||
#include "cafEffectGenerator.h"
|
#include "cafEffectGenerator.h"
|
||||||
#include "cvfPart.h"
|
#include "cvfPart.h"
|
||||||
@ -33,7 +39,19 @@
|
|||||||
RivSingleCellPartGenerator::RivSingleCellPartGenerator(RigCaseData* rigCaseData, size_t gridIndex, size_t cellIndex)
|
RivSingleCellPartGenerator::RivSingleCellPartGenerator(RigCaseData* rigCaseData, size_t gridIndex, size_t cellIndex)
|
||||||
: m_rigCaseData(rigCaseData),
|
: m_rigCaseData(rigCaseData),
|
||||||
m_gridIndex(gridIndex),
|
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->setEffect(eff.p());
|
||||||
|
|
||||||
|
part->setPriority(10000);
|
||||||
|
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,11 +84,20 @@ cvf::ref<cvf::Part> RivSingleCellPartGenerator::createPart(const cvf::Color3f co
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
cvf::ref<cvf::DrawableGeo> RivSingleCellPartGenerator::createMeshDrawable()
|
cvf::ref<cvf::DrawableGeo> RivSingleCellPartGenerator::createMeshDrawable()
|
||||||
{
|
{
|
||||||
if (m_rigCaseData &&
|
if (m_rigCaseData && m_cellIndex != cvf::UNDEFINED_SIZE_T)
|
||||||
m_cellIndex != cvf::UNDEFINED_SIZE_T)
|
|
||||||
{
|
{
|
||||||
return cvf::StructGridGeometryGenerator::createMeshDrawableFromSingleCell(m_rigCaseData->grid(m_gridIndex), m_cellIndex);
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ namespace cvf
|
|||||||
}
|
}
|
||||||
|
|
||||||
class RigCaseData;
|
class RigCaseData;
|
||||||
|
class RimGeoMechCase;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
@ -37,6 +38,7 @@ class RivSingleCellPartGenerator
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RivSingleCellPartGenerator(RigCaseData* rigCaseData, size_t gridIndex, size_t cellIndex);
|
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);
|
cvf::ref<cvf::Part> createPart(const cvf::Color3f color);
|
||||||
|
|
||||||
@ -45,6 +47,7 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
RigCaseData* m_rigCaseData;
|
RigCaseData* m_rigCaseData;
|
||||||
|
RimGeoMechCase* m_geoMechCase;
|
||||||
size_t m_gridIndex;
|
size_t m_gridIndex;
|
||||||
size_t m_cellIndex;
|
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";
|
cvf::String highlightModelName = "HighLightModel";
|
||||||
|
|
||||||
this->removeModelByName(frameScene, highlightModelName);
|
this->removeModelByName(frameScene, highlightModelName);
|
||||||
@ -698,7 +689,9 @@ void RimEclipseView::updateCurrentTimeStep()
|
|||||||
riuSelManager->selectedItems(items);
|
riuSelManager->selectedItems(items);
|
||||||
for (size_t i = 0; i < items.size(); i++)
|
for (size_t i = 0; i < items.size(); i++)
|
||||||
{
|
{
|
||||||
RiuEclipseSelectionItem* eclipseSelItem = dynamic_cast<RiuEclipseSelectionItem*>(items[i]);
|
if (items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT)
|
||||||
|
{
|
||||||
|
RiuEclipseSelectionItem* eclipseSelItem = static_cast<RiuEclipseSelectionItem*>(items[i]);
|
||||||
if (eclipseSelItem &&
|
if (eclipseSelItem &&
|
||||||
eclipseSelItem->m_view)
|
eclipseSelItem->m_view)
|
||||||
{
|
{
|
||||||
@ -709,14 +702,13 @@ void RimEclipseView::updateCurrentTimeStep()
|
|||||||
|
|
||||||
cvf::ref<cvf::Part> part = partGen.createPart(eclipseSelItem->m_color);
|
cvf::ref<cvf::Part> part = partGen.createPart(eclipseSelItem->m_color);
|
||||||
part->setTransform(this->scaleTransform());
|
part->setTransform(this->scaleTransform());
|
||||||
part->setPriority(10000);
|
|
||||||
|
|
||||||
highlightModelBasicList->addPart(part.p());
|
highlightModelBasicList->addPart(part.p());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
highlightModelBasicList->updateBoundingBoxesRecursive();
|
highlightModelBasicList->updateBoundingBoxesRecursive();
|
||||||
|
|
||||||
frameScene->addModel(highlightModelBasicList.p());
|
frameScene->addModel(highlightModelBasicList.p());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,18 +34,23 @@
|
|||||||
#include "RimGeoMechCellColors.h"
|
#include "RimGeoMechCellColors.h"
|
||||||
#include "RimGeoMechPropertyFilterCollection.h"
|
#include "RimGeoMechPropertyFilterCollection.h"
|
||||||
#include "RimLegendConfig.h"
|
#include "RimLegendConfig.h"
|
||||||
|
#include "RimViewLinker.h"
|
||||||
|
|
||||||
#include "RiuMainWindow.h"
|
#include "RiuMainWindow.h"
|
||||||
|
#include "RiuSelectionManager.h"
|
||||||
#include "RiuViewer.h"
|
#include "RiuViewer.h"
|
||||||
|
|
||||||
#include "RivGeoMechPartMgr.h"
|
#include "RivGeoMechPartMgr.h"
|
||||||
#include "RivGeoMechPartMgrCache.h"
|
#include "RivGeoMechPartMgrCache.h"
|
||||||
#include "RivGeoMechVizLogic.h"
|
#include "RivGeoMechVizLogic.h"
|
||||||
|
#include "RivSingleCellPartGenerator.h"
|
||||||
|
|
||||||
#include "cafCadNavigation.h"
|
#include "cafCadNavigation.h"
|
||||||
#include "cafCeetronPlusNavigation.h"
|
#include "cafCeetronPlusNavigation.h"
|
||||||
#include "cafFrameAnimationControl.h"
|
#include "cafFrameAnimationControl.h"
|
||||||
|
#include "cafPdmUiTreeOrdering.h"
|
||||||
#include "cafProgressInfo.h"
|
#include "cafProgressInfo.h"
|
||||||
|
|
||||||
#include "cvfModelBasicList.h"
|
#include "cvfModelBasicList.h"
|
||||||
#include "cvfOverlayScalarMapperLegend.h"
|
#include "cvfOverlayScalarMapperLegend.h"
|
||||||
#include "cvfPart.h"
|
#include "cvfPart.h"
|
||||||
@ -54,9 +59,6 @@
|
|||||||
#include "cvfqtUtils.h"
|
#include "cvfqtUtils.h"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include "RimViewLinker.h"
|
|
||||||
#include "cafPdmUiTreeOrdering.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(RimGeoMechView, "GeoMechView");
|
CAF_PDM_SOURCE_INIT(RimGeoMechView, "GeoMechView");
|
||||||
@ -282,6 +284,36 @@ void RimGeoMechView::updateCurrentTimeStep()
|
|||||||
femBBox,
|
femBBox,
|
||||||
scaleTransform());
|
scaleTransform());
|
||||||
frameScene->addModel(wellPathModel.p());
|
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