#5379 Surface : Fix slicing in IJ direction

This commit is contained in:
Magne Sjaastad 2020-05-02 09:41:08 +02:00
parent 5d31912971
commit 0eb94ef574

View File

@ -158,38 +158,59 @@ void RimGridCaseSurface::fieldChangedByUi( const caf::PdmFieldHandle* changedFie
//--------------------------------------------------------------------------------------------------
void RimGridCaseSurface::extractDataFromGrid()
{
std::vector<unsigned> tringleIndices;
std::vector<cvf::Vec3d> vertices;
clearNativeGridData();
cvf::StructGridInterface::FaceType faceType = cvf::StructGridInterface::NO_FACE;
{
if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_K )
{
faceType = cvf::StructGridInterface::NEG_K;
}
else if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_J )
{
faceType = cvf::StructGridInterface::NEG_J;
}
else if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_I )
{
faceType = cvf::StructGridInterface::NEG_I;
}
}
if ( m_sliceDirection() == RiaDefines::GridCaseAxis::UNDEFINED_AXIS ) return;
if ( m_case && faceType != cvf::StructGridInterface::NO_FACE )
if ( m_case )
{
RimEclipseCase* eclCase = dynamic_cast<RimEclipseCase*>( m_case() );
if ( eclCase && eclCase->mainGrid() )
{
const RigMainGrid* grid = eclCase->mainGrid();
size_t minI = 0;
size_t minJ = 0;
size_t minK = 0;
size_t maxI = grid->cellCountI();
size_t maxJ = grid->cellCountJ();
size_t maxK = grid->cellCountK();
size_t zeroBasedLayerIndex = static_cast<size_t>( m_oneBasedSliceIndex - 1 );
for ( size_t i = 0; i < grid->cellCountI(); i++ )
cvf::StructGridInterface::FaceType faceType = cvf::StructGridInterface::NO_FACE;
{
for ( size_t j = 0; j < grid->cellCountJ(); j++ )
if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_K )
{
size_t cellIndex = grid->cellIndexFromIJK( i, j, zeroBasedLayerIndex );
faceType = cvf::StructGridInterface::NEG_K;
minK = zeroBasedLayerIndex;
maxK = zeroBasedLayerIndex + 1;
}
else if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_J )
{
faceType = cvf::StructGridInterface::NEG_J;
minJ = zeroBasedLayerIndex;
maxJ = zeroBasedLayerIndex + 1;
}
else if ( m_sliceDirection() == RiaDefines::GridCaseAxis::AXIS_I )
{
faceType = cvf::StructGridInterface::NEG_I;
minI = zeroBasedLayerIndex;
maxI = zeroBasedLayerIndex + 1;
}
}
std::vector<unsigned> tringleIndices;
std::vector<cvf::Vec3d> vertices;
for ( size_t i = minI; i < maxI; i++ )
{
for ( size_t j = minJ; j < maxJ; j++ )
{
for ( size_t k = minK; k < maxK; k++ )
{
size_t cellIndex = grid->cellIndexFromIJK( i, j, k );
if ( grid->cell( cellIndex ).isInvalid() ) continue;
@ -216,11 +237,12 @@ void RimGridCaseSurface::extractDataFromGrid()
}
}
}
}
m_vertices = vertices;
m_tringleIndices = tringleIndices;
}
}
}
//--------------------------------------------------------------------------------------------------
///
@ -242,7 +264,7 @@ void RimGridCaseSurface::updateUserDescription()
switch ( dirValue )
{
case RiaDefines::GridCaseAxis::AXIS_I:
name = "Surface I : %1";
name = "Surface I : ";
break;
case RiaDefines::GridCaseAxis::AXIS_J:
name = "Surface J : ";
@ -258,6 +280,12 @@ void RimGridCaseSurface::updateUserDescription()
name += QString::number( m_oneBasedSliceIndex );
const double epsilon = 1.0e-3;
if ( std::fabs( depthOffset() ) > epsilon )
{
name += ", Offset : " + QString::number( depthOffset() );
}
setUserDescription( name );
}
@ -279,8 +307,8 @@ bool RimGridCaseSurface::updateSurfaceDataFromGridCase()
if ( !tringleIndices.empty() )
{
{
// Modify the z-value slightly to avoid geometrical numerical issues when the surface intersects exactly at
// the cell face
// Modify the z-value slightly to avoid geometrical numerical issues when the surface intersects
// exactly at the cell face
double delta = 1.0e-5;