Support for copying GeoMech case settings using new input (#6471)

* Support copy and replace geomech case, to support importing another data file, but keep the view setup

* Make sure surfaces and intersections get updated with the correct separate result, too

* Simplify/refactor code

* Better naming
This commit is contained in:
jonjenssen
2020-09-10 12:54:43 +02:00
committed by GitHub
parent 5eae17551f
commit bc82166151
15 changed files with 294 additions and 48 deletions

View File

@@ -97,17 +97,25 @@ bool RimIntersectionResultDefinition::isActive() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimIntersectionResultDefinition::autoName() const
void RimIntersectionResultDefinition::assignCaseIfMissing() const
{
QString timestepName;
QString caseName = "Default undefined source";
if ( !m_case )
{
RimCase* ownerCase = nullptr;
this->firstAncestorOrThisOfType( ownerCase );
const_cast<RimIntersectionResultDefinition*>( this )->setActiveCase( ownerCase );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimIntersectionResultDefinition::autoName() const
{
QString timestepName;
QString caseName = "Default undefined source";
assignCaseIfMissing();
if ( m_case )
{
@@ -129,6 +137,7 @@ QString RimIntersectionResultDefinition::autoName() const
}
else if ( geomCase )
{
m_geomResultDefinition->setGeoMechCase( geomCase );
resultVarUiName = m_geomResultDefinition->resultFieldUiName() + ":" +
m_geomResultDefinition->resultComponentUiName();
}
@@ -150,11 +159,7 @@ RimCase* RimIntersectionResultDefinition::activeCase() const
void RimIntersectionResultDefinition::setActiveCase( RimCase* activeCase )
{
m_case = activeCase;
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>( m_case.value() );
m_geomResultDefinition->setGeoMechCase( geomCase );
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case.value() );
m_eclipseResultDefinition->setEclipseCase( eclipseCase );
updateCaseInResultDefinitions();
}
//--------------------------------------------------------------------------------------------------
@@ -234,6 +239,8 @@ void RimIntersectionResultDefinition::updateLegendRangesTextAndVisibility( const
RiuViewer* nativeOrOverrideViewer,
bool isUsingOverrideViewer )
{
assignCaseIfMissing();
if ( !this->isInAction() ) return;
if ( ( this->isEclipseResultDefinition() && m_eclipseResultDefinition()->hasCategoryResult() ) ||
@@ -316,12 +323,18 @@ void RimIntersectionResultDefinition::fieldChangedByUi( const caf::PdmFieldHandl
const QVariant& oldValue,
const QVariant& newValue )
{
bool reDraw = false;
assignCaseIfMissing();
if ( changedField == &m_case )
{
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>( m_case.value() );
m_geomResultDefinition->setGeoMechCase( geomCase );
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case.value() );
m_eclipseResultDefinition->setEclipseCase( eclipseCase );
reDraw = true;
}
this->updateConnectedEditors();
@@ -339,6 +352,11 @@ void RimIntersectionResultDefinition::fieldChangedByUi( const caf::PdmFieldHandl
obj->updateConnectedEditors();
}
reDraw = true;
}
if ( reDraw )
{
RimGridView* gridView = nullptr;
this->firstAncestorOrThisOfType( gridView );
if ( gridView ) gridView->scheduleCreateDisplayModelAndRedraw();
@@ -355,6 +373,7 @@ void RimIntersectionResultDefinition::fieldChangedByUi( const caf::PdmFieldHandl
void RimIntersectionResultDefinition::update2dIntersectionViews()
{
// Update 2D Intersection views
updateCaseInResultDefinitions();
std::vector<RimExtrudedCurveIntersection*> intersections;
this->objectsWithReferringPtrFieldsOfType( intersections );
@@ -443,21 +462,28 @@ void RimIntersectionResultDefinition::defineUiTreeOrdering( caf::PdmUiTreeOrderi
//--------------------------------------------------------------------------------------------------
void RimIntersectionResultDefinition::initAfterRead()
{
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>( m_case.value() );
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case.value() );
if ( eclipseCase )
{
m_eclipseResultDefinition->setEclipseCase( eclipseCase );
}
else if ( geomCase )
{
m_geomResultDefinition->setGeoMechCase( geomCase );
}
updateCaseInResultDefinitions();
this->updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersectionResultDefinition::updateCaseInResultDefinitions()
{
if ( m_geomResultDefinition->geoMechCase() == nullptr )
{
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>( m_case.value() );
m_geomResultDefinition->setGeoMechCase( geomCase );
}
if ( m_eclipseResultDefinition->eclipseCase() == nullptr )
{
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case.value() );
m_eclipseResultDefinition->setEclipseCase( eclipseCase );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------