GeoMech: show deformations in grid view (#8123)

Enable support in geomech view to show grid deformations
This commit is contained in:
jonjenssen
2021-10-07 02:12:42 +02:00
committed by GitHub
parent 0e620c8408
commit 7b78c2d35b
17 changed files with 361 additions and 51 deletions

View File

@@ -19,12 +19,15 @@
#include <cstdlib>
#include "RivFemPartPartMgr.h"
#include "RivGeoMechPartMgr.h"
#include "RiaPreferences.h"
#include "RifGeoMechReaderInterface.h"
#include "RigFemPart.h"
#include "RigFemPartResultsCollection.h"
#include "RigFemScalarResultFrames.h"
#include "RigGeoMechCaseData.h"
@@ -103,6 +106,33 @@ void RivFemPartPartMgr::setCellVisibility( cvf::UByteArray* cellVisibilities )
generatePartGeometry( m_surfaceGenerator );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivFemPartPartMgr::setDisplacements( bool useDisplacements,
double scalingFactor,
const std::vector<cvf::Vec3f>& displacements )
{
size_t nodeCount = m_part->nodes().coordinates.size();
m_displacedNodeCoordinates.resize( nodeCount );
const auto coords = m_part->nodes().coordinates;
if ( useDisplacements )
{
for ( size_t i = 0; i < nodeCount; i++ )
{
m_displacedNodeCoordinates[i] = coords[i] + displacements[i] * scalingFactor;
}
}
else
{
for ( size_t i = 0; i < nodeCount; i++ )
{
m_displacedNodeCoordinates[i] = coords[i];
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -113,7 +143,7 @@ void RivFemPartPartMgr::generatePartGeometry( RivFemPartGeometryGenerator& geoBu
{
m_surfaceFaces = nullptr; // To possibly free memory before adding the new stuff
cvf::ref<cvf::DrawableGeo> geo = geoBuilder.generateSurface();
cvf::ref<cvf::DrawableGeo> geo = geoBuilder.generateSurface( m_displacedNodeCoordinates );
if ( geo.notNull() )
{
geo->computeNormals();