#5865 Fault and NNC performance : Build NNC geometry when needed

This commit is contained in:
Magne Sjaastad 2020-05-04 15:00:14 +02:00
parent 943d977298
commit 6d9985d2ef
2 changed files with 120 additions and 62 deletions

View File

@ -64,6 +64,11 @@ RivFaultPartMgr::RivFaultPartMgr( const RigGridBase* grid,
, m_rimFault( rimFault ) , m_rimFault( rimFault )
, m_opacityLevel( 1.0f ) , m_opacityLevel( 1.0f )
, m_defaultColor( cvf::Color3::WHITE ) , m_defaultColor( cvf::Color3::WHITE )
, m_isNativeFaultsGenerated( false )
, m_isOppositeFaultsGenerated( false )
, m_isNativeNncsGenerated( false )
, m_isAllNncsGenerated( false )
{ {
CVF_ASSERT( rimFault->faultGeometry() ); CVF_ASSERT( rimFault->faultGeometry() );
cvf::ref<cvf::Array<size_t>> connIdxes = new cvf::Array<size_t>; cvf::ref<cvf::Array<size_t>> connIdxes = new cvf::Array<size_t>;
@ -100,7 +105,7 @@ void RivFaultPartMgr::setCellVisibility( cvf::UByteArray* cellVisibilities )
m_NNCGenerator->setCellVisibility( cellVisibilities, m_grid.p() ); m_NNCGenerator->setCellVisibility( cellVisibilities, m_grid.p() );
m_allenNNCGenerator->setCellVisibility( cellVisibilities, m_grid.p() ); m_allenNNCGenerator->setCellVisibility( cellVisibilities, m_grid.p() );
generatePartGeometry(); clearFlags();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -379,16 +384,24 @@ void RivFaultPartMgr::generatePartGeometry()
} }
} }
{ m_isNativeFaultsGenerated = true;
m_isOppositeFaultsGenerated = true;
createLabelWithAnchorLine( m_nativeFaultFaces.p() );
updatePartEffect();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::generateNativeNncPartGeometry()
{
cvf::ref<cvf::DrawableGeo> geo = m_NNCGenerator->generateSurface(); cvf::ref<cvf::DrawableGeo> geo = m_NNCGenerator->generateSurface();
if ( geo.notNull() ) if ( geo.notNull() )
{ {
geo->computeNormals(); geo->computeNormals();
if ( useBufferObjects )
{
geo->setRenderMode( cvf::DrawableGeo::BUFFER_OBJECT ); geo->setRenderMode( cvf::DrawableGeo::BUFFER_OBJECT );
}
cvf::ref<cvf::Part> part = new cvf::Part; cvf::ref<cvf::Part> part = new cvf::Part;
part->setName( "NNC in Fault. Grid " + cvf::String( static_cast<int>( m_grid->gridIndex() ) ) ); part->setName( "NNC in Fault. Grid " + cvf::String( static_cast<int>( m_grid->gridIndex() ) ) );
@ -407,19 +420,24 @@ void RivFaultPartMgr::generatePartGeometry()
part->setEffect( eff.p() ); part->setEffect( eff.p() );
m_NNCFaces = part; m_NNCFaces = part;
}
updatePartEffect();
} }
{ m_isNativeNncsGenerated = true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::generateAllNncPartGeometry()
{
cvf::ref<cvf::DrawableGeo> geo = m_allenNNCGenerator->generateSurface(); cvf::ref<cvf::DrawableGeo> geo = m_allenNNCGenerator->generateSurface();
if ( geo.notNull() ) if ( geo.notNull() )
{ {
geo->computeNormals(); geo->computeNormals();
if ( useBufferObjects )
{
geo->setRenderMode( cvf::DrawableGeo::BUFFER_OBJECT ); geo->setRenderMode( cvf::DrawableGeo::BUFFER_OBJECT );
}
cvf::ref<cvf::Part> part = new cvf::Part; cvf::ref<cvf::Part> part = new cvf::Part;
part->setName( "Allen NNC in Fault. Grid " + cvf::String( static_cast<int>( m_grid->gridIndex() ) ) ); part->setName( "Allen NNC in Fault. Grid " + cvf::String( static_cast<int>( m_grid->gridIndex() ) ) );
@ -438,12 +456,22 @@ void RivFaultPartMgr::generatePartGeometry()
part->setEffect( eff.p() ); part->setEffect( eff.p() );
m_allenNNCFaces = part; m_allenNNCFaces = part;
}
}
createLabelWithAnchorLine( m_nativeFaultFaces.p() );
updatePartEffect(); updatePartEffect();
}
m_isAllNncsGenerated = true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::clearFlags()
{
m_isNativeFaultsGenerated = false;
m_isOppositeFaultsGenerated = false;
m_isNativeNncsGenerated = false;
m_isAllNncsGenerated = false;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -651,6 +679,11 @@ cvf::Vec3f RivFaultPartMgr::findClosestVertex( const cvf::Vec3f& point, const cv
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::appendNativeFaultFacesToModel( cvf::ModelBasicList* model ) void RivFaultPartMgr::appendNativeFaultFacesToModel( cvf::ModelBasicList* model )
{ {
if ( !m_isNativeFaultsGenerated )
{
generatePartGeometry();
}
if ( m_nativeFaultFaces.notNull() ) if ( m_nativeFaultFaces.notNull() )
{ {
model->addPart( m_nativeFaultFaces.p() ); model->addPart( m_nativeFaultFaces.p() );
@ -662,6 +695,11 @@ void RivFaultPartMgr::appendNativeFaultFacesToModel( cvf::ModelBasicList* model
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::appendOppositeFaultFacesToModel( cvf::ModelBasicList* model ) void RivFaultPartMgr::appendOppositeFaultFacesToModel( cvf::ModelBasicList* model )
{ {
if ( !m_isOppositeFaultsGenerated )
{
generatePartGeometry();
}
if ( m_oppositeFaultFaces.notNull() ) if ( m_oppositeFaultFaces.notNull() )
{ {
model->addPart( m_oppositeFaultFaces.p() ); model->addPart( m_oppositeFaultFaces.p() );
@ -691,6 +729,11 @@ void RivFaultPartMgr::appendMeshLinePartsToModel( cvf::ModelBasicList* model )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::appendCompleteNNCFacesToModel( cvf::ModelBasicList* model ) void RivFaultPartMgr::appendCompleteNNCFacesToModel( cvf::ModelBasicList* model )
{ {
if ( !m_isAllNncsGenerated )
{
generateAllNncPartGeometry();
}
if ( m_allenNNCFaces.notNull() ) model->addPart( m_allenNNCFaces.p() ); if ( m_allenNNCFaces.notNull() ) model->addPart( m_allenNNCFaces.p() );
} }
@ -699,6 +742,11 @@ void RivFaultPartMgr::appendCompleteNNCFacesToModel( cvf::ModelBasicList* model
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivFaultPartMgr::appendNativeNNCFacesToModel( cvf::ModelBasicList* model ) void RivFaultPartMgr::appendNativeNNCFacesToModel( cvf::ModelBasicList* model )
{ {
if ( !m_isNativeNncsGenerated )
{
generateNativeNncPartGeometry();
}
if ( m_NNCFaces.notNull() ) model->addPart( m_NNCFaces.p() ); if ( m_NNCFaces.notNull() ) model->addPart( m_NNCFaces.p() );
} }

View File

@ -71,6 +71,12 @@ public:
private: private:
void generatePartGeometry(); void generatePartGeometry();
void generateNativeNncPartGeometry();
void generateAllNncPartGeometry();
void clearFlags();
void updatePartEffect(); void updatePartEffect();
void updateNNCColors( size_t timeStepIndex, RimEclipseCellColors* cellResultColors ); void updateNNCColors( size_t timeStepIndex, RimEclipseCellColors* cellResultColors );
@ -91,20 +97,24 @@ private:
cvf::ref<cvf::UByteArray> m_cellVisibility; cvf::ref<cvf::UByteArray> m_cellVisibility;
bool m_isNativeFaultsGenerated;
cvf::ref<RivFaultGeometryGenerator> m_nativeFaultGenerator; cvf::ref<RivFaultGeometryGenerator> m_nativeFaultGenerator;
cvf::ref<cvf::Part> m_nativeFaultFaces; cvf::ref<cvf::Part> m_nativeFaultFaces;
cvf::ref<cvf::Part> m_nativeFaultGridLines; cvf::ref<cvf::Part> m_nativeFaultGridLines;
cvf::ref<cvf::Vec2fArray> m_nativeFaultFacesTextureCoords; cvf::ref<cvf::Vec2fArray> m_nativeFaultFacesTextureCoords;
bool m_isOppositeFaultsGenerated;
cvf::ref<RivFaultGeometryGenerator> m_oppositeFaultGenerator; cvf::ref<RivFaultGeometryGenerator> m_oppositeFaultGenerator;
cvf::ref<cvf::Part> m_oppositeFaultFaces; cvf::ref<cvf::Part> m_oppositeFaultFaces;
cvf::ref<cvf::Part> m_oppositeFaultGridLines; cvf::ref<cvf::Part> m_oppositeFaultGridLines;
cvf::ref<cvf::Vec2fArray> m_oppositeFaultFacesTextureCoords; cvf::ref<cvf::Vec2fArray> m_oppositeFaultFacesTextureCoords;
bool m_isNativeNncsGenerated;
cvf::ref<RivNNCGeometryGenerator> m_NNCGenerator; cvf::ref<RivNNCGeometryGenerator> m_NNCGenerator;
cvf::ref<cvf::Part> m_NNCFaces; cvf::ref<cvf::Part> m_NNCFaces;
cvf::ref<cvf::Vec2fArray> m_NNCTextureCoords; cvf::ref<cvf::Vec2fArray> m_NNCTextureCoords;
bool m_isAllNncsGenerated;
cvf::ref<RivNNCGeometryGenerator> m_allenNNCGenerator; cvf::ref<RivNNCGeometryGenerator> m_allenNNCGenerator;
cvf::ref<cvf::Part> m_allenNNCFaces; cvf::ref<cvf::Part> m_allenNNCFaces;
cvf::ref<cvf::Vec2fArray> m_allenNNCTextureCoords; cvf::ref<cvf::Vec2fArray> m_allenNNCTextureCoords;