Add helper functions to convert from cellIndex to cafVecIjk

This commit is contained in:
Magne Sjaastad
2023-11-13 10:20:24 +01:00
parent 68a4d54af2
commit 9e65eb3be9
4 changed files with 45 additions and 1 deletions

View File

@@ -218,6 +218,34 @@ bool RigGridBase::ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::optional<caf::VecIjk> RigGridBase::ijkFromCellIndex( size_t cellIndex ) const
{
size_t i, j, k;
if ( ijkFromCellIndex( cellIndex, &i, &j, &k ) )
{
return caf::VecIjk( i, j, k );
}
return std::nullopt;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::optional<caf::VecIjk> RigGridBase::ijkFromCellIndexOneBased( size_t cellIndex ) const
{
size_t i, j, k;
if ( ijkFromCellIndex( cellIndex, &i, &j, &k ) )
{
return caf::VecIjk( ++i, ++j, ++k );
}
return std::nullopt;
}
//--------------------------------------------------------------------------------------------------
/// This version does no if-guarding. Check that all dimensions of the grid are non-zero before using.
/// Useful for running in a loop after doing the sanity check once.

View File

@@ -23,11 +23,13 @@
#include "RifReaderInterface.h"
#include "RigFault.h"
#include "cafVecIjk.h"
#include "cvfBoundingBox.h"
#include "cvfStructGrid.h"
#include "cvfStructGridGeometryGenerator.h"
#include "cvfVector3.h"
#include <optional>
#include <string>
#include <vector>
@@ -95,6 +97,9 @@ public:
bool ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const override;
void ijkFromCellIndexUnguarded( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const;
std::optional<caf::VecIjk> ijkFromCellIndex( size_t cellIndex ) const;
std::optional<caf::VecIjk> ijkFromCellIndexOneBased( size_t cellIndex ) const;
bool cellIJKFromCoordinate( const cvf::Vec3d& coord, size_t* i, size_t* j, size_t* k ) const override;
void cellCornerVertices( size_t cellIndex, cvf::Vec3d vertices[8] ) const override;
cvf::Vec3d cellCentroid( size_t cellIndex ) const override;