mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-13 17:05:59 -06:00
#5112 Add cell highlight on intersections with separate intersection result
This commit is contained in:
parent
14d7fa3780
commit
ad25bb89c2
@ -286,8 +286,10 @@ void RivFemPartGeometryGenerator::setElementVisibility( const cvf::UByteArray* c
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
cvf::ref<cvf::DrawableGeo> RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( const RigFemPart* part,
|
||||
size_t elmIdx )
|
||||
cvf::ref<cvf::DrawableGeo>
|
||||
RivFemPartGeometryGenerator::createMeshDrawableFromSingleElement( const RigFemPart* part,
|
||||
size_t elmIdx,
|
||||
const cvf::Vec3d& displayModelOffset )
|
||||
{
|
||||
cvf::ref<cvf::Vec3fArray> quadVertices;
|
||||
|
||||
@ -301,7 +303,7 @@ cvf::ref<cvf::DrawableGeo> 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<cvf::DrawableGeo> 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
|
||||
{
|
||||
|
@ -121,7 +121,9 @@ public:
|
||||
return m_triangleMapper.p();
|
||||
}
|
||||
|
||||
static cvf::ref<cvf::DrawableGeo> createMeshDrawableFromSingleElement( const RigFemPart* grid, size_t elementIndex );
|
||||
static cvf::ref<cvf::DrawableGeo> createMeshDrawableFromSingleElement( const RigFemPart* grid,
|
||||
size_t elementIndex,
|
||||
const cvf::Vec3d& displayModelOffset );
|
||||
|
||||
private:
|
||||
static cvf::ref<cvf::UIntArray> lineIndicesFromQuadVertexArray( const cvf::Vec3fArray* vertexArray );
|
||||
|
@ -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<cvf::DrawableGeo> 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<cvf::DrawableGeo> 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;
|
||||
|
@ -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<cvf::Part> 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;
|
||||
};
|
||||
|
@ -2037,39 +2037,6 @@ bool RimEclipseView::isShowingActiveCellsOnly()
|
||||
return !m_showInactiveCells;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseView::onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts )
|
||||
{
|
||||
Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::instance();
|
||||
std::vector<RiuSelectionItem*> 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<RiuEclipseSelectionItem*>( 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<cvf::Part> part = partGen.createPart( eclipseSelItem->m_color );
|
||||
part->setTransform( this->scaleTransform() );
|
||||
|
||||
parts->push_back( part.p() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -156,7 +156,6 @@ protected:
|
||||
void onLoadDataAndUpdate() override;
|
||||
caf::PdmFieldHandle* userDescriptionField() override;
|
||||
|
||||
void onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) override;
|
||||
bool isShowingActiveCellsOnly() override;
|
||||
void onUpdateDisplayModelForCurrentTimeStep() override;
|
||||
void updateVisibleGeometriesAndCellColors();
|
||||
|
@ -832,37 +832,6 @@ void RimGeoMechView::calculateCurrentTotalCellVisibility( cvf::UByteArray* total
|
||||
m_vizLogic->calculateCurrentTotalCellVisibility( totalVisibility, timeStep );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimGeoMechView::onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts )
|
||||
{
|
||||
Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::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 == this && geomSelItem->m_resultDefinition->geoMechCase() )
|
||||
{
|
||||
RivSingleCellPartGenerator partGen( geomSelItem->m_resultDefinition->geoMechCase(),
|
||||
geomSelItem->m_gridIndex,
|
||||
geomSelItem->m_cellIndex );
|
||||
|
||||
cvf::ref<cvf::Part> part = partGen.createPart( geomSelItem->m_color );
|
||||
part->setTransform( this->scaleTransform() );
|
||||
|
||||
parts->push_back( part.p() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -111,7 +111,6 @@ protected:
|
||||
const QVariant& newValue ) override;
|
||||
void initAfterRead() override;
|
||||
|
||||
void onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) override;
|
||||
void onCreateDisplayModel() override;
|
||||
|
||||
RimPropertyFilterCollection* nativePropertyFilterCollection();
|
||||
|
@ -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 <set>
|
||||
@ -419,6 +426,59 @@ void RimGridView::initAfterRead()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimGridView::onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts )
|
||||
{
|
||||
Riu3dSelectionManager* riuSelManager = Riu3dSelectionManager::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 == this && geomSelItem->m_resultDefinition->geoMechCase() )
|
||||
{
|
||||
RivSingleCellPartGenerator partGen( geomSelItem->m_resultDefinition->geoMechCase(),
|
||||
geomSelItem->m_gridIndex,
|
||||
geomSelItem->m_cellIndex,
|
||||
this->ownerCase()->displayModelOffset() );
|
||||
|
||||
cvf::ref<cvf::Part> 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<RiuEclipseSelectionItem*>( 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<cvf::Part> part = partGen.createPart( eclipseSelItem->m_color );
|
||||
part->setTransform( this->scaleTransform() );
|
||||
|
||||
parts->push_back( part.p() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -84,7 +84,8 @@ protected:
|
||||
const QVariant& newValue ) override;
|
||||
void initAfterRead() override;
|
||||
|
||||
protected: // Fields
|
||||
protected:
|
||||
// Fields
|
||||
caf::PdmChildField<RimIntersectionCollection*> m_intersectionCollection;
|
||||
|
||||
caf::PdmChildField<RimIntersectionResultsDefinitionCollection*> m_intersectionResultDefCollection;
|
||||
@ -97,6 +98,8 @@ protected: // Fields
|
||||
caf::PdmChildField<RimWellMeasurementInViewCollection*> m_wellMeasurementCollection;
|
||||
|
||||
private:
|
||||
void onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) override;
|
||||
|
||||
cvf::ref<cvf::UByteArray> m_currentReservoirCellVisibility;
|
||||
RimViewLinker* viewLinkerIfMasterView() const;
|
||||
bool m_previousGridModeMeshLinesWasFaults;
|
||||
|
@ -260,11 +260,23 @@ ref<DrawableGeo> StructGridGeometryGenerator::createOutlineMeshDrawable(double c
|
||||
return geo;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
ref<DrawableGeo> StructGridGeometryGenerator::createMeshDrawableFromSingleCell(const StructGridInterface* grid,
|
||||
size_t cellIndex)
|
||||
{
|
||||
return createMeshDrawableFromSingleCell(grid,
|
||||
cellIndex,
|
||||
grid->displayModelOffset());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
ref<DrawableGeo> StructGridGeometryGenerator::createMeshDrawableFromSingleCell(const StructGridInterface* grid, size_t cellIndex)
|
||||
ref<DrawableGeo> 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<DrawableGeo> 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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,12 @@ public:
|
||||
ref<DrawableGeo> createMeshDrawable();
|
||||
ref<DrawableGeo> createOutlineMeshDrawable(double creaseAngle);
|
||||
|
||||
static ref<DrawableGeo> createMeshDrawableFromSingleCell(const StructGridInterface* grid, size_t cellIndex);
|
||||
static ref<DrawableGeo> createMeshDrawableFromSingleCell(const StructGridInterface* grid,
|
||||
size_t cellIndex);
|
||||
|
||||
static ref<DrawableGeo> createMeshDrawableFromSingleCell(const StructGridInterface* grid,
|
||||
size_t cellIndex,
|
||||
const cvf::Vec3d& displayModelOffset);
|
||||
|
||||
private:
|
||||
static ref<UIntArray>
|
||||
|
Loading…
Reference in New Issue
Block a user