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; 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. /// 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. /// Useful for running in a loop after doing the sanity check once.

View File

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

View File

@ -70,4 +70,12 @@ size_t VecIjk::k() const
return m_values[2]; return m_values[2];
} }
}; // namespace caf //--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::string VecIjk::toString() const
{
return std::to_string( i() ) + ", " + std::to_string( j() ) + ", " + std::to_string( k() );
}
}; // namespace caf

View File

@ -38,6 +38,7 @@
#include <array> #include <array>
#include <cstddef> #include <cstddef>
#include <string>
namespace caf namespace caf
{ {
@ -50,6 +51,8 @@ public:
size_t j() const; size_t j() const;
size_t k() const; size_t k() const;
std::string toString() const;
private: private:
std::array<size_t, 3> m_values; std::array<size_t, 3> m_values;
}; };