25 #ifndef WGRIDREGULAR3D_H
26 #define WGRIDREGULAR3D_H
31 #include <boost/array.hpp>
32 #include <boost/shared_ptr.hpp>
37 #include "../common/math/WMatrix.h"
38 #include "../common/math/linearAlgebra/WLinearAlgebra.h"
39 #include "../common/WBoundingBox.h"
40 #include "../common/WCondition.h"
41 #include "../common/WDefines.h"
42 #include "WExportDataHandler.h"
44 #include "WGridTransformOrtho.h"
64 typedef boost::shared_ptr< WGridRegular3D >
SPtr;
69 typedef boost::shared_ptr< const WGridRegular3D >
ConstSPtr;
80 WGridRegular3D(
unsigned int nbPosX,
unsigned int nbPosY,
unsigned int nbPosZ,
87 unsigned int getNbCoordsX()
const;
93 unsigned int getNbCoordsY()
const;
99 unsigned int getNbCoordsZ()
const;
105 double getOffsetX()
const;
111 double getOffsetY()
const;
117 double getOffsetZ()
const;
184 WPosition getPosition(
unsigned int i )
const;
194 WPosition getPosition(
unsigned int iX,
unsigned int iY,
unsigned int iZ )
const;
244 int getVoxelNum(
const WPosition& pos )
const;
256 int getVoxelNum(
const size_t x,
const size_t y,
const size_t z )
const;
268 int getXVoxelCoord(
const WPosition& pos )
const;
280 int getYVoxelCoord(
const WPosition& pos )
const;
292 int getZVoxelCoord(
const WPosition& pos )
const;
304 int getXVoxelCoordRotated(
const WPosition& pos )
const;
316 int getYVoxelCoordRotated(
const WPosition& pos )
const;
328 int getZVoxelCoordRotated(
const WPosition& pos )
const;
352 size_t getCellId(
const WPosition& pos,
bool* success )
const;
374 std::vector< size_t > getCellVertexIds(
const size_t cellId )
const;
402 boost::shared_ptr< std::vector< WPosition > > getVoxelVertices(
const WPosition& point,
403 const double margin = 0.0 )
const;
414 std::vector< size_t > getNeighbours(
size_t id )
const;
425 std::vector< size_t > getNeighbours27(
size_t id )
const;
436 std::vector< size_t > getNeighbours9XY(
size_t id )
const;
447 std::vector< size_t > getNeighbours9YZ(
size_t id )
const;
458 std::vector< size_t > getNeighbours9XZ(
size_t id )
const;
467 bool encloses(
const WPosition& pos )
const;
473 bool isNotRotated()
const;
494 int getNVoxelCoord(
const WPosition& pos,
size_t axis )
const;
500 void initInformationProperties();
517 inline boost::array< double, 3 > getOffsets( boost::shared_ptr< const WGridRegular3D > grid )
519 boost::array< double, 3 > result = { { grid->getOffsetX(), grid->getOffsetY(), grid->getOffsetZ() } };
530 inline boost::array< unsigned int, 3 > getNbCoords( boost::shared_ptr< const WGridRegular3D > grid )
532 boost::array< unsigned int, 3 > result = { { grid->getNbCoordsX(), grid->getNbCoordsY(), grid->getNbCoordsZ() } };
543 inline boost::array< WVector3d, 3 > getDirections( boost::shared_ptr< const WGridRegular3D > grid )
545 boost::array< WVector3d, 3 > result = { { grid->getDirectionX(), grid->getDirectionY(), grid->getDirectionZ() } };
556 inline boost::array< WVector3d, 3 > getUnitDirections( boost::shared_ptr< const WGridRegular3D > grid )
558 boost::array< WVector3d, 3 > result = { { grid->getUnitDirectionX(), grid->getUnitDirectionY(), grid->getUnitDirectionZ() } };
636 #endif // WGRIDREGULAR3D_H