SOFA plugin: SofaDistanceGrid  master
Open source framework for multi-physics simuation
sofa::gpu::cuda::CudaDistanceGrid Class Reference

#include <CudaDistanceGridCollisionModel.h>

Classes

struct  CudaDistanceGridParams
 

Public Attributes

CudaVector< CoordmeshPts
 
sofa::core::topology::BaseMeshTopology::SeqTriangles meshTriangles
 
sofa::core::topology::BaseMeshTopology::SeqQuads meshQuads
 

Protected Attributes

int nbRef
 
VecReal dists
 
const int nx
 
const int ny
 
const int nz
 
const int nxny
 
const int nxnynz
 
const Coord pmin
 
const Coord pmax
 
const Coord cellWidth
 
const Coord invCellWidth
 
Coord bbmin
 
Coord bbmax
 bounding box of the object, smaller than the grid More...
 
Real cubeDim
 Cube dimension (!=0 if this is actually a cube. More...
 

Public Member Functions

 CudaDistanceGrid (int nx, int ny, int nz, Coord pmin, Coord pmax)
 
CudaDistanceGridaddRef ()
 Add one reference to this grid. Note that loadShared already does this. More...
 
bool release ()
 Release one reference, deleting this grid if this is the last. More...
 
bool save (const std::string &filename)
 Save current grid. More...
 
void calcDistance ()
 Compute distance field from stored mesh. More...
 
void calcCubeDistance (Real dim=1, int np=5)
 
void sampleSurface (double sampling=-1.0)
 Sample the surface with points approximately separated by the given sampling distance (expressed in voxels if the value is negative) More...
 
void computeBBox ()
 Update bbox. More...
 
int getNx () const
 
int getNy () const
 
int getNz () const
 
const CoordgetCellWidth () const
 
const CoordgetInvCellWidth () const
 
const VecRealgetDists () const
 
VecRealgetDists ()
 
int size () const
 
const CoordgetBBMin () const
 
const CoordgetBBMax () const
 
void setBBMin (const Coord &val)
 
void setBBMax (const Coord &val)
 
Coord getBBCorner (int i) const
 
bool inBBox (const Coord &p, Real margin=0.0f) const
 
const CoordgetPMin () const
 
const CoordgetPMax () const
 
Coord getCorner (int i) const
 
bool isCube () const
 
Real getCubeDim () const
 
bool inGrid (const Coord &p) const
 
Coord clamp (Coord p) const
 
Index ix (const Coord &p) const
 
Index iy (const Coord &p) const
 
Index iz (const Coord &p) const
 
Index index (const Coord &p, Coord &coefs) const
 
Index index (const Coord &p) const
 
Index index (int x, int y, int z)
 
Coord coord (int x, int y, int z)
 
Real operator[] (Index index) const
 
Realoperator[] (Index index)
 
Real interp (Index index, const Coord &coefs) const
 
Real interp (const Coord &p) const
 
Coord grad (Index index, const Coord &coefs) const
 
Coord grad (const Coord &p) const
 
Real eval (const Coord &x) const
 
Real quickeval (const Coord &x) const
 
Real eval2 (const Coord &x) const
 
Real quickeval2 (const Coord &x) const
 

Static Public Member Functions

static Real maxDist ()
 
static CudaDistanceGridload (const std::string &filename, double scale=1.0, double sampling=0.0, int nx=64, int ny=64, int nz=64, Coord pmin=Coord(), Coord pmax=Coord())
 Load a distance grid. More...
 
static CudaDistanceGridloadShared (const std::string &filename, double scale=1.0, double sampling=0.0, int nx=64, int ny=64, int nz=64, Coord pmin=Coord(), Coord pmax=Coord())
 Load or reuse a distance grid. More...
 
static Real interp (Real coef, Real a, Real b)
 

Protected Member Functions

 ~CudaDistanceGrid ()
 

Static Protected Member Functions

static std::map< CudaDistanceGridParams, CudaDistanceGrid * > & getShared ()
 

Attribute details

◆ bbmax

Coord sofa::gpu::cuda::CudaDistanceGrid::bbmax
protected

bounding box of the object, smaller than the grid

◆ bbmin

Coord sofa::gpu::cuda::CudaDistanceGrid::bbmin
protected

◆ cellWidth

const Coord sofa::gpu::cuda::CudaDistanceGrid::cellWidth
protected

◆ cubeDim

Real sofa::gpu::cuda::CudaDistanceGrid::cubeDim
protected

Cube dimension (!=0 if this is actually a cube.

◆ dists

VecReal sofa::gpu::cuda::CudaDistanceGrid::dists
protected

◆ invCellWidth

const Coord sofa::gpu::cuda::CudaDistanceGrid::invCellWidth
protected

◆ meshPts

CudaVector<Coord> sofa::gpu::cuda::CudaDistanceGrid::meshPts

◆ meshQuads

sofa::core::topology::BaseMeshTopology::SeqQuads sofa::gpu::cuda::CudaDistanceGrid::meshQuads

◆ meshTriangles

sofa::core::topology::BaseMeshTopology::SeqTriangles sofa::gpu::cuda::CudaDistanceGrid::meshTriangles

◆ nbRef

int sofa::gpu::cuda::CudaDistanceGrid::nbRef
protected

◆ nx

const int sofa::gpu::cuda::CudaDistanceGrid::nx
protected

◆ nxny

const int sofa::gpu::cuda::CudaDistanceGrid::nxny
protected

◆ nxnynz

const int sofa::gpu::cuda::CudaDistanceGrid::nxnynz
protected

◆ ny

const int sofa::gpu::cuda::CudaDistanceGrid::ny
protected

◆ nz

const int sofa::gpu::cuda::CudaDistanceGrid::nz
protected

◆ pmax

const Coord sofa::gpu::cuda::CudaDistanceGrid::pmax
protected

◆ pmin

const Coord sofa::gpu::cuda::CudaDistanceGrid::pmin
protected

Constructor details

◆ CudaDistanceGrid()

sofa::gpu::cuda::CudaDistanceGrid::CudaDistanceGrid ( int  nx,
int  ny,
int  nz,
Coord  pmin,
Coord  pmax 
)

◆ ~CudaDistanceGrid()

sofa::gpu::cuda::CudaDistanceGrid::~CudaDistanceGrid ( )
protected

Function details

◆ addRef()

CudaDistanceGrid * sofa::gpu::cuda::CudaDistanceGrid::addRef ( )

Add one reference to this grid. Note that loadShared already does this.

◆ calcCubeDistance()

void sofa::gpu::cuda::CudaDistanceGrid::calcCubeDistance ( Real  dim = 1,
int  np = 5 
)

Compute distance field for a cube of the given half-size. Also create a mesh of points using np points per axis

◆ calcDistance()

void sofa::gpu::cuda::CudaDistanceGrid::calcDistance ( )

Compute distance field from stored mesh.

Compute distance field from given mesh.

◆ clamp()

Coord sofa::gpu::cuda::CudaDistanceGrid::clamp ( Coord  p) const
inline

◆ computeBBox()

void sofa::gpu::cuda::CudaDistanceGrid::computeBBox ( )

Update bbox.

◆ coord()

Coord sofa::gpu::cuda::CudaDistanceGrid::coord ( int  x,
int  y,
int  z 
)
inline

◆ eval()

Real sofa::gpu::cuda::CudaDistanceGrid::eval ( const Coord x) const
inline

◆ eval2()

Real sofa::gpu::cuda::CudaDistanceGrid::eval2 ( const Coord x) const
inline

◆ getBBCorner()

Coord sofa::gpu::cuda::CudaDistanceGrid::getBBCorner ( int  i) const
inline

◆ getBBMax()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getBBMax ( ) const
inline

◆ getBBMin()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getBBMin ( ) const
inline

◆ getCellWidth()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getCellWidth ( ) const
inline

◆ getCorner()

Coord sofa::gpu::cuda::CudaDistanceGrid::getCorner ( int  i) const
inline

◆ getCubeDim()

Real sofa::gpu::cuda::CudaDistanceGrid::getCubeDim ( ) const
inline

◆ getDists() [1/2]

VecReal& sofa::gpu::cuda::CudaDistanceGrid::getDists ( )
inline

◆ getDists() [2/2]

const VecReal& sofa::gpu::cuda::CudaDistanceGrid::getDists ( ) const
inline

◆ getInvCellWidth()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getInvCellWidth ( ) const
inline

◆ getNx()

int sofa::gpu::cuda::CudaDistanceGrid::getNx ( ) const
inline

◆ getNy()

int sofa::gpu::cuda::CudaDistanceGrid::getNy ( ) const
inline

◆ getNz()

int sofa::gpu::cuda::CudaDistanceGrid::getNz ( ) const
inline

◆ getPMax()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getPMax ( ) const
inline

◆ getPMin()

const Coord& sofa::gpu::cuda::CudaDistanceGrid::getPMin ( ) const
inline

◆ getShared()

std::map< CudaDistanceGrid::CudaDistanceGridParams, CudaDistanceGrid * > & sofa::gpu::cuda::CudaDistanceGrid::getShared ( )
staticprotected

◆ grad() [1/2]

Coord sofa::gpu::cuda::CudaDistanceGrid::grad ( const Coord p) const
inline

◆ grad() [2/2]

Coord sofa::gpu::cuda::CudaDistanceGrid::grad ( Index  index,
const Coord coefs 
) const
inline

◆ inBBox()

bool sofa::gpu::cuda::CudaDistanceGrid::inBBox ( const Coord p,
Real  margin = 0.0f 
) const
inline

◆ index() [1/3]

Index sofa::gpu::cuda::CudaDistanceGrid::index ( const Coord p) const
inline

◆ index() [2/3]

Index sofa::gpu::cuda::CudaDistanceGrid::index ( const Coord p,
Coord coefs 
) const
inline

◆ index() [3/3]

Index sofa::gpu::cuda::CudaDistanceGrid::index ( int  x,
int  y,
int  z 
)
inline

◆ inGrid()

bool sofa::gpu::cuda::CudaDistanceGrid::inGrid ( const Coord p) const
inline

◆ interp() [1/3]

Real sofa::gpu::cuda::CudaDistanceGrid::interp ( const Coord p) const
inline

◆ interp() [2/3]

Real sofa::gpu::cuda::CudaDistanceGrid::interp ( Index  index,
const Coord coefs 
) const
inline

◆ interp() [3/3]

static Real sofa::gpu::cuda::CudaDistanceGrid::interp ( Real  coef,
Real  a,
Real  b 
)
inlinestatic

◆ isCube()

bool sofa::gpu::cuda::CudaDistanceGrid::isCube ( ) const
inline

◆ ix()

Index sofa::gpu::cuda::CudaDistanceGrid::ix ( const Coord p) const
inline

◆ iy()

Index sofa::gpu::cuda::CudaDistanceGrid::iy ( const Coord p) const
inline

◆ iz()

Index sofa::gpu::cuda::CudaDistanceGrid::iz ( const Coord p) const
inline

◆ load()

CudaDistanceGrid * sofa::gpu::cuda::CudaDistanceGrid::load ( const std::string &  filename,
double  scale = 1.0,
double  sampling = 0.0,
int  nx = 64,
int  ny = 64,
int  nz = 64,
Coord  pmin = Coord(),
Coord  pmax = Coord() 
)
static

Load a distance grid.

◆ loadShared()

CudaDistanceGrid * sofa::gpu::cuda::CudaDistanceGrid::loadShared ( const std::string &  filename,
double  scale = 1.0,
double  sampling = 0.0,
int  nx = 64,
int  ny = 64,
int  nz = 64,
Coord  pmin = Coord(),
Coord  pmax = Coord() 
)
static

Load or reuse a distance grid.

◆ maxDist()

static Real sofa::gpu::cuda::CudaDistanceGrid::maxDist ( )
inlinestatic

◆ operator[]() [1/2]

Real& sofa::gpu::cuda::CudaDistanceGrid::operator[] ( Index  index)
inline

◆ operator[]() [2/2]

Real sofa::gpu::cuda::CudaDistanceGrid::operator[] ( Index  index) const
inline

◆ quickeval()

Real sofa::gpu::cuda::CudaDistanceGrid::quickeval ( const Coord x) const
inline

◆ quickeval2()

Real sofa::gpu::cuda::CudaDistanceGrid::quickeval2 ( const Coord x) const
inline

◆ release()

bool sofa::gpu::cuda::CudaDistanceGrid::release ( )

Release one reference, deleting this grid if this is the last.

◆ sampleSurface()

void sofa::gpu::cuda::CudaDistanceGrid::sampleSurface ( double  sampling = -1.0)

Sample the surface with points approximately separated by the given sampling distance (expressed in voxels if the value is negative)

◆ save()

bool sofa::gpu::cuda::CudaDistanceGrid::save ( const std::string &  filename)

Save current grid.

◆ setBBMax()

void sofa::gpu::cuda::CudaDistanceGrid::setBBMax ( const Coord val)
inline

◆ setBBMin()

void sofa::gpu::cuda::CudaDistanceGrid::setBBMin ( const Coord val)
inline

◆ size()

int sofa::gpu::cuda::CudaDistanceGrid::size ( ) const
inline