#5112 Sep Inter Res: Fixed result info text for gomech

This commit is contained in:
Jacob Støren 2019-11-28 09:18:19 +01:00
parent 2a3c43bcc3
commit 14d7fa3780
4 changed files with 80 additions and 71 deletions

View File

@ -41,18 +41,18 @@
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RiuFemResultTextBuilder::RiuFemResultTextBuilder( RimGeoMechView* reservoirView, RiuFemResultTextBuilder::RiuFemResultTextBuilder( RimGridView* displayCoordView,
int gridIndex, RimGeoMechResultDefinition* geomResDef,
int cellIndex, int gridIndex,
int timeStepIndex ) int cellIndex,
int timeStepIndex )
: m_isIntersectionTriangleSet( false ) : m_isIntersectionTriangleSet( false )
{ {
CVF_ASSERT( reservoirView ); m_displayCoordView = displayCoordView;
m_geomResDef = geomResDef;
m_reservoirView = reservoirView; m_gridIndex = gridIndex;
m_gridIndex = gridIndex; m_cellIndex = cellIndex;
m_cellIndex = cellIndex; m_timeStepIndex = timeStepIndex;
m_timeStepIndex = timeStepIndex;
m_intersectionPointInDisplay = cvf::Vec3d::UNDEFINED; m_intersectionPointInDisplay = cvf::Vec3d::UNDEFINED;
m_face = cvf::StructGridInterface::NO_FACE; m_face = cvf::StructGridInterface::NO_FACE;
@ -98,9 +98,7 @@ QString RiuFemResultTextBuilder::mainResultText()
{ {
QString text; QString text;
RimGeoMechResultDefinition* cellResultDefinition = m_reservoirView->cellResultResultDefinition(); text = closestNodeResultText( m_geomResDef );
text = closestNodeResultText( cellResultDefinition );
if ( !text.isEmpty() ) text += "\n"; if ( !text.isEmpty() ) text += "\n";
@ -109,7 +107,7 @@ QString RiuFemResultTextBuilder::mainResultText()
appendDetails( text, formationDetails() ); appendDetails( text, formationDetails() );
text += "\n"; text += "\n";
if ( cellResultDefinition->resultPositionType() != RIG_ELEMENT ) if ( m_geomResDef->resultPositionType() != RIG_ELEMENT )
{ {
appendDetails( text, gridResultDetails() ); appendDetails( text, gridResultDetails() );
} }
@ -124,9 +122,9 @@ QString RiuFemResultTextBuilder::geometrySelectionText( QString itemSeparator )
{ {
QString text; QString text;
if ( m_reservoirView->geoMechCase() ) if ( m_geomResDef->geoMechCase() )
{ {
RigGeoMechCaseData* geomData = m_reservoirView->geoMechCase()->geoMechData(); RigGeoMechCaseData* geomData = m_geomResDef->geoMechCase()->geoMechData();
if ( geomData ) if ( geomData )
{ {
RigFemPart* femPart = geomData->femParts()->part( m_gridIndex ); RigFemPart* femPart = geomData->femParts()->part( m_gridIndex );
@ -167,14 +165,17 @@ QString RiuFemResultTextBuilder::geometrySelectionText( QString itemSeparator )
} }
else else
{ {
cvf::ref<caf::DisplayCoordTransform> transForm = m_reservoirView->displayCoordTransform(); if ( m_displayCoordView )
cvf::Vec3d domainCoord = transForm->translateToDomainCoord( m_intersectionPointInDisplay ); {
cvf::ref<caf::DisplayCoordTransform> transForm = m_displayCoordView->displayCoordTransform();
cvf::Vec3d domainCoord = transForm->translateToDomainCoord( m_intersectionPointInDisplay );
formattedText.sprintf( "Intersection point : [E: %.2f, N: %.2f, Depth: %.2f]", formattedText.sprintf( "Intersection point : [E: %.2f, N: %.2f, Depth: %.2f]",
domainCoord.x(), domainCoord.x(),
domainCoord.y(), domainCoord.y(),
-domainCoord.z() ); -domainCoord.z() );
text += formattedText; text += formattedText;
}
} }
} }
} }
@ -190,16 +191,11 @@ QString RiuFemResultTextBuilder::gridResultDetails()
{ {
QString text; QString text;
if ( m_reservoirView->geoMechCase() && m_reservoirView->geoMechCase()->geoMechData() ) if ( m_geomResDef->geoMechCase() && m_geomResDef->geoMechCase()->geoMechData() )
{ {
RigGeoMechCaseData* eclipseCaseData = m_reservoirView->geoMechCase()->geoMechData(); RigGeoMechCaseData* eclipseCaseData = m_geomResDef->geoMechCase()->geoMechData();
this->appendTextFromResultColors( eclipseCaseData, this->appendTextFromResultColors( eclipseCaseData, m_gridIndex, m_cellIndex, m_timeStepIndex, m_geomResDef, &text );
m_gridIndex,
m_cellIndex,
m_timeStepIndex,
m_reservoirView->cellResultResultDefinition(),
&text );
if ( !text.isEmpty() ) if ( !text.isEmpty() )
{ {
@ -216,7 +212,7 @@ QString RiuFemResultTextBuilder::gridResultDetails()
QString RiuFemResultTextBuilder::formationDetails() QString RiuFemResultTextBuilder::formationDetails()
{ {
QString text; QString text;
RimCase* rimCase = m_reservoirView->ownerCase(); RimCase* rimCase = m_geomResDef->geoMechCase();
if ( rimCase ) if ( rimCase )
{ {
if ( rimCase->activeFormationNames() && rimCase->activeFormationNames()->formationNamesData() ) if ( rimCase->activeFormationNames() && rimCase->activeFormationNames()->formationNamesData() )
@ -225,9 +221,9 @@ QString RiuFemResultTextBuilder::formationDetails()
size_t k = cvf::UNDEFINED_SIZE_T; size_t k = cvf::UNDEFINED_SIZE_T;
{ {
if ( m_reservoirView->geoMechCase() ) if ( m_geomResDef->geoMechCase() )
{ {
RigGeoMechCaseData* geomData = m_reservoirView->geoMechCase()->geoMechData(); RigGeoMechCaseData* geomData = m_geomResDef->geoMechCase()->geoMechData();
if ( geomData ) if ( geomData )
{ {
size_t i = 0; size_t i = 0;
@ -394,29 +390,31 @@ QString RiuFemResultTextBuilder::closestNodeResultText( RimGeoMechResultDefiniti
if ( resultColors->hasResult() ) if ( resultColors->hasResult() )
{ {
if ( !( m_reservoirView->geoMechCase() && m_reservoirView->geoMechCase()->geoMechData() ) ) return text; if ( !( m_geomResDef->geoMechCase() && m_geomResDef->geoMechCase()->geoMechData() ) ) return text;
RigGeoMechCaseData* geomData = m_reservoirView->geoMechCase()->geoMechData(); RigGeoMechCaseData* geomData = m_geomResDef->geoMechCase()->geoMechData();
const std::vector<float>& scalarResults = geomData->femPartResults()->resultValues( resultColors->resultAddress(), const std::vector<float>& scalarResults = geomData->femPartResults()->resultValues( resultColors->resultAddress(),
m_gridIndex, m_gridIndex,
m_timeStepIndex ); m_timeStepIndex );
if ( scalarResults.size() ) if ( scalarResults.size() && m_displayCoordView )
{ {
RigFemPart* femPart = geomData->femParts()->part( m_gridIndex ); RigFemPart* femPart = geomData->femParts()->part( m_gridIndex );
RigFemResultPosEnum activeResultPosition = resultColors->resultPositionType(); RigFemResultPosEnum activeResultPosition = resultColors->resultPositionType();
cvf::Vec3d intersectionPointInDomain = m_reservoirView->displayCoordTransform()->translateToDomainCoord( cvf::Vec3d intersectionPointInDomain = m_displayCoordView->displayCoordTransform()->translateToDomainCoord(
m_intersectionPointInDisplay ); m_intersectionPointInDisplay );
RigFemClosestResultIndexCalculator closestIndexCalc( femPart, RigFemClosestResultIndexCalculator closestIndexCalc( femPart,
activeResultPosition, activeResultPosition,
m_cellIndex, m_cellIndex,
m_face, m_face,
intersectionPointInDomain ); intersectionPointInDomain );
int resultIndex = closestIndexCalc.resultIndexToClosestResult();
int closestNodeId = closestIndexCalc.closestNodeId(); int resultIndex = closestIndexCalc.resultIndexToClosestResult();
int closestElmNodResIdx = closestIndexCalc.closestElementNodeResIdx(); int closestNodeId = closestIndexCalc.closestNodeId();
int closestElmNodResIdx = closestIndexCalc.closestElementNodeResIdx();
float scalarValue = ( resultIndex >= 0 ) ? scalarResults[resultIndex] float scalarValue = ( resultIndex >= 0 ) ? scalarResults[resultIndex]
: std::numeric_limits<float>::infinity(); : std::numeric_limits<float>::infinity();

View File

@ -30,6 +30,7 @@ class RimEclipseCellColors;
class RimGeoMechResultDefinition; class RimGeoMechResultDefinition;
class RimGeoMechView; class RimGeoMechView;
class Rim2dIntersectionView; class Rim2dIntersectionView;
class RimGridView;
namespace cvf namespace cvf
{ {
@ -43,7 +44,11 @@ class Part;
class RiuFemResultTextBuilder class RiuFemResultTextBuilder
{ {
public: public:
RiuFemResultTextBuilder( RimGeoMechView* reservoirView, int gridIndex, int cellIndex, int timeStepIndex ); RiuFemResultTextBuilder( RimGridView* displayCoordView,
RimGeoMechResultDefinition* geomResDef,
int gridIndex,
int cellIndex,
int timeStepIndex );
void setFace( int face ); void setFace( int face );
void setIntersectionPointInDisplay( cvf::Vec3d intersectionPointInDisplay ); void setIntersectionPointInDisplay( cvf::Vec3d intersectionPointInDisplay );
void setIntersectionTriangle( const std::array<cvf::Vec3f, 3>& triangle ); void setIntersectionTriangle( const std::array<cvf::Vec3f, 3>& triangle );
@ -69,8 +74,9 @@ private:
QString* resultInfoText ); QString* resultInfoText );
private: private:
caf::PdmPointer<RimGeoMechView> m_reservoirView; caf::PdmPointer<RimGridView> m_displayCoordView;
caf::PdmPointer<Rim2dIntersectionView> m_2dIntersectionView; caf::PdmPointer<RimGeoMechResultDefinition> m_geomResDef;
caf::PdmPointer<Rim2dIntersectionView> m_2dIntersectionView;
int m_gridIndex; int m_gridIndex;
int m_cellIndex; int m_cellIndex;

View File

@ -255,14 +255,17 @@ QString RiuResultTextBuilder::geometrySelectionText( QString itemSeparator )
} }
else else
{ {
cvf::ref<caf::DisplayCoordTransform> transForm = m_displayCoordView->displayCoordTransform(); if ( m_displayCoordView )
cvf::Vec3d domainCoord = transForm->translateToDomainCoord( m_intersectionPointInDisplay ); {
cvf::ref<caf::DisplayCoordTransform> transForm = m_displayCoordView->displayCoordTransform();
cvf::Vec3d domainCoord = transForm->translateToDomainCoord( m_intersectionPointInDisplay );
formattedText.sprintf( "Intersection point : [E: %.2f, N: %.2f, Depth: %.2f]", formattedText.sprintf( "Intersection point : [E: %.2f, N: %.2f, Depth: %.2f]",
domainCoord.x(), domainCoord.x(),
domainCoord.y(), domainCoord.y(),
-domainCoord.z() ); -domainCoord.z() );
text += formattedText; text += formattedText;
}
} }
} }
} }
@ -396,10 +399,12 @@ QString RiuResultTextBuilder::faultResultText()
if ( m_eclResDef->eclipseCase() && m_eclResDef->eclipseCase()->eclipseCaseData() ) if ( m_eclResDef->eclipseCase() && m_eclResDef->eclipseCase()->eclipseCaseData() )
{ {
RigEclipseCaseData* eclipseCaseData = m_eclResDef->eclipseCase()->eclipseCaseData(); RigEclipseCaseData* eclipseCaseData = m_eclResDef->eclipseCase()->eclipseCaseData();
RigGridBase* grid = eclipseCaseData->grid( m_gridIndex );
RigMainGrid* mainGrid = grid->mainGrid(); RigGridBase* grid = eclipseCaseData->grid( m_gridIndex );
RigMainGrid* mainGrid = grid->mainGrid();
const RigFault* fault = mainGrid->findFaultFromCellIndexAndCellFace( m_cellIndex, m_face ); const RigFault* fault = mainGrid->findFaultFromCellIndexAndCellFace( m_cellIndex, m_face );
if ( fault ) if ( fault )
{ {
cvf::StructGridInterface::FaceEnum faceHelper( m_face ); cvf::StructGridInterface::FaceEnum faceHelper( m_face );
@ -434,7 +439,8 @@ QString RiuResultTextBuilder::nncResultText()
if ( nncData && m_nncIndex < nncData->connections().size() ) if ( nncData && m_nncIndex < nncData->connections().size() )
{ {
const RigConnection& conn = nncData->connections()[m_nncIndex]; const RigConnection& conn = nncData->connections()[m_nncIndex];
cvf::StructGridInterface::FaceEnum face( conn.m_c1Face ); cvf::StructGridInterface::FaceEnum face( conn.m_c1Face );
if ( m_viewWithFaultsSettings && m_viewWithFaultsSettings->currentFaultResultColors() ) if ( m_viewWithFaultsSettings && m_viewWithFaultsSettings->currentFaultResultColors() )
@ -443,6 +449,7 @@ QString RiuResultTextBuilder::nncResultText()
m_viewWithFaultsSettings->currentFaultResultColors()->eclipseResultAddress(); m_viewWithFaultsSettings->currentFaultResultColors()->eclipseResultAddress();
RiaDefines::ResultCatType resultType = RiaDefines::ResultCatType resultType =
m_viewWithFaultsSettings->currentFaultResultColors()->resultType(); m_viewWithFaultsSettings->currentFaultResultColors()->resultType();
const std::vector<double>* nncValues = nullptr; const std::vector<double>* nncValues = nullptr;
if ( resultType == RiaDefines::STATIC_NATIVE ) if ( resultType == RiaDefines::STATIC_NATIVE )

View File

@ -379,26 +379,24 @@ void RiuSelectionChangedHandler::updateResultInfo( const RiuSelectionItem* itemA
{ {
const RiuGeoMechSelectionItem* geomSelectionItem = static_cast<const RiuGeoMechSelectionItem*>( selItem ); const RiuGeoMechSelectionItem* geomSelectionItem = static_cast<const RiuGeoMechSelectionItem*>( selItem );
RimGeoMechView* geomView = dynamic_cast<RimGeoMechView*>( geomSelectionItem->m_view.p() ); RiuFemResultTextBuilder textBuilder( geomSelectionItem->m_view,
geomSelectionItem->m_resultDefinition,
(int)geomSelectionItem->m_gridIndex,
(int)geomSelectionItem->m_cellIndex,
(int)geomSelectionItem->m_timestepIdx );
if ( geomView ) textBuilder.setIntersectionPointInDisplay( geomSelectionItem->m_localIntersectionPointInDisplay );
textBuilder.setFace( geomSelectionItem->m_elementFace );
textBuilder.set2dIntersectionView( intersectionView );
if ( geomSelectionItem->m_hasIntersectionTriangle )
{ {
RiuFemResultTextBuilder textBuilder( geomView, textBuilder.setIntersectionTriangle( geomSelectionItem->m_intersectionTriangle );
(int)geomSelectionItem->m_gridIndex,
(int)geomSelectionItem->m_cellIndex,
(int)geomSelectionItem->m_timestepIdx );
textBuilder.setIntersectionPointInDisplay( geomSelectionItem->m_localIntersectionPointInDisplay );
textBuilder.setFace( geomSelectionItem->m_elementFace );
textBuilder.set2dIntersectionView( intersectionView );
if ( geomSelectionItem->m_hasIntersectionTriangle )
textBuilder.setIntersectionTriangle( geomSelectionItem->m_intersectionTriangle );
resultInfo = textBuilder.mainResultText();
pickInfo = textBuilder.geometrySelectionText( ", " );
} }
resultInfo = textBuilder.mainResultText();
pickInfo = textBuilder.geometrySelectionText( ", " );
} }
} }