sofa::component::collision::DistanceGrid Class Reference

#include <DistanceGridCollisionModel.h>

Collaboration diagram for sofa::component::collision::DistanceGrid:

Collaboration graph
[legend]

Data Structures

struct  DistanceGridParams

Public Types

typedef Vector3 Coord
typedef defaulttype::ExtVector
< SReal > 
VecSReal
typedef defaulttype::ExtVector
< Coord > 
VecCoord

Public Member Functions

 DistanceGrid (int nx, int ny, int nz, Coord pmin, Coord pmax)
 DistanceGrid (int nx, int ny, int nz, Coord pmin, Coord pmax, defaulttype::ExtVectorAllocator< SReal > *alloc)
DistanceGrid * addRef ()
 Add one reference to this grid. Note that loadShared already does this.
bool release ()
 Release one reference, deleting this grid if this is the last.
bool save (const std::string &filename)
 Save current grid.
void calcDistance (sofa::helper::io::Mesh *mesh, double scale=1.0)
 Compute distance field from given mesh.
void calcCubeDistance (SReal dim=1, int np=5)
 Compute distance field for a cube of the given half-size.
void computeBBox ()
 Update bbox.
int getNx () const
int getNy () const
int getNz () const
const Coord & getCellWidth () const
int size () const
const Coord & getBBMin () const
const Coord & getBBMax () const
void setBBMin (const Coord &val)
void setBBMax (const Coord &val)
Coord getBBCorner (int i) const
bool inBBox (const Coord &p, SReal margin=0.0f) const
const Coord & getPMin () const
const Coord & getPMax () const
Coord getCorner (int i) const
bool isCube () const
SReal getCubeDim () const
bool inGrid (const Coord &p) const
Coord clamp (Coord p) const
int ix (const Coord &p) const
int iy (const Coord &p) const
int iz (const Coord &p) const
int index (const Coord &p, Coord &coefs) const
int index (const Coord &p) const
int index (int x, int y, int z)
Coord coord (int x, int y, int z)
SReal operator[] (int index) const
SReal & operator[] (int index)
SReal interp (int index, const Coord &coefs) const
SReal interp (const Coord &p) const
Coord grad (int index, const Coord &coefs) const
Coord grad (const Coord &p) const
SReal eval (const Coord &x) const
SReal quickeval (const Coord &x) const
SReal eval2 (const Coord &x) const
SReal quickeval2 (const Coord &x) const

Static Public Member Functions

static SReal maxDist ()
static DistanceGrid * load (const std::string &filename, double scale=1.0, int nx=64, int ny=64, int nz=64, Coord pmin=Coord(), Coord pmax=Coord())
 Load a distance grid.
static DistanceGrid * loadShared (const std::string &filename, double scale=1.0, int nx=64, int ny=64, int nz=64, Coord pmin=Coord(), Coord pmax=Coord())
 Load or reuse a distance grid.
static SReal interp (SReal coef, SReal a, SReal b)

Data Fields

VecCoord meshPts

Protected Types

enum  Status { FMM_FRONT0 = 0, FMM_FAR = -1, FMM_KNOWN_OUT = -2, FMM_KNOWN_IN = -3 }

Protected Member Functions

 ~DistanceGrid ()
int fmm_pop ()
void fmm_push (int index)
void fmm_swap (int entry1, int entry2)

Static Protected Member Functions

static std::map
< DistanceGridParams,
DistanceGrid * > & 
getShared ()

Protected Attributes

int nbRef
VecSReal 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
SReal cubeDim
 Cube dimension (!=0 if this is actually a cube.
helper::vector< int > fmm_status
helper::vector< int > fmm_heap
int fmm_heap_size

Detailed Description

Definition at line 48 of file DistanceGridCollisionModel.h.


Member Typedef Documentation

Definition at line 52 of file DistanceGridCollisionModel.h.

Definition at line 54 of file DistanceGridCollisionModel.h.

Definition at line 53 of file DistanceGridCollisionModel.h.


Member Enumeration Documentation

Enumerator:
FMM_FRONT0 
FMM_FAR 
FMM_KNOWN_OUT 
FMM_KNOWN_IN 

Definition at line 316 of file DistanceGridCollisionModel.h.


Constructor & Destructor Documentation

sofa::component::collision::DistanceGrid::DistanceGrid ( int  nx,
int  ny,
int  nz,
Coord  pmin,
Coord  pmax 
)

Definition at line 694 of file DistanceGridCollisionModel.cpp.

Referenced by load().

sofa::component::collision::DistanceGrid::DistanceGrid ( int  nx,
int  ny,
int  nz,
Coord  pmin,
Coord  pmax,
defaulttype::ExtVectorAllocator< SReal > *  alloc 
)

Definition at line 703 of file DistanceGridCollisionModel.cpp.

sofa::component::collision::DistanceGrid::~DistanceGrid (  )  [protected]

Definition at line 712 of file DistanceGridCollisionModel.cpp.

References getShared().


Member Function Documentation

DistanceGrid * sofa::component::collision::DistanceGrid::addRef (  ) 

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

Definition at line 722 of file DistanceGridCollisionModel.cpp.

References nbRef.

Referenced by sofa::component::collision::RigidDistanceGridCollisionModel::setGrid(), and sofa::component::collision::RigidDistanceGridCollisionModel::setNewState().

void sofa::component::collision::DistanceGrid::calcCubeDistance ( SReal  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

Also create a mesh of points using np points per axis

Definition at line 963 of file DistanceGridCollisionModel.cpp.

References bbmax, bbmin, coord(), cubeDim, dists, meshPts, norm(), nx, ny, nz, sofa::helper::rabs(), sofa::defaulttype::ExtVector< T >::resize(), and sofa::helper::rmax().

Referenced by load().

void sofa::component::collision::DistanceGrid::calcDistance ( sofa::helper::io::Mesh *  mesh,
double  scale = 1.0 
)

Coord sofa::component::collision::DistanceGrid::clamp ( Coord  p  )  const [inline]

Definition at line 123 of file DistanceGridCollisionModel.h.

References pmax, and pmin.

Referenced by eval(), eval2(), quickeval(), and quickeval2().

void sofa::component::collision::DistanceGrid::computeBBox (  ) 

Update bbox.

compute the SReal bbox from the grid content

Definition at line 939 of file DistanceGridCollisionModel.cpp.

References bbmax, bbmin, sofa::defaulttype::ExtVector< T >::empty(), meshPts, pmax, pmin, and sofa::defaulttype::ExtVector< T >::size().

Referenced by load().

Coord sofa::component::collision::DistanceGrid::coord ( int  x,
int  y,
int  z 
) [inline]

SReal sofa::component::collision::DistanceGrid::eval ( const Coord &  x  )  const [inline]

SReal sofa::component::collision::DistanceGrid::eval2 ( const Coord &  x  )  const [inline]

Definition at line 269 of file DistanceGridCollisionModel.h.

References clamp(), inGrid(), interp(), and norm2().

int sofa::component::collision::DistanceGrid::fmm_pop (  )  [protected]

Definition at line 1404 of file DistanceGridCollisionModel.cpp.

References dists, fmm_heap, fmm_heap_size, fmm_swap(), nx, nxny, and ny.

Referenced by calcDistance().

void sofa::component::collision::DistanceGrid::fmm_push ( int  index  )  [protected]

Definition at line 1460 of file DistanceGridCollisionModel.cpp.

References dists, FMM_FRONT0, fmm_heap, fmm_heap_size, fmm_status, fmm_swap(), nx, nxny, and ny.

Referenced by calcDistance().

void sofa::component::collision::DistanceGrid::fmm_swap ( int  entry1,
int  entry2 
) [inline, protected]

Definition at line 1394 of file DistanceGridCollisionModel.cpp.

References FMM_FRONT0, fmm_heap, and fmm_status.

Referenced by fmm_pop(), and fmm_push().

Coord sofa::component::collision::DistanceGrid::getBBCorner ( int  i  )  const [inline]

const Coord& sofa::component::collision::DistanceGrid::getBBMax (  )  const [inline]

const Coord& sofa::component::collision::DistanceGrid::getBBMin (  )  const [inline]

const Coord& sofa::component::collision::DistanceGrid::getCellWidth (  )  const [inline]

Coord sofa::component::collision::DistanceGrid::getCorner ( int  i  )  const [inline]

SReal sofa::component::collision::DistanceGrid::getCubeDim (  )  const [inline]

int sofa::component::collision::DistanceGrid::getNx (  )  const [inline]

int sofa::component::collision::DistanceGrid::getNy (  )  const [inline]

int sofa::component::collision::DistanceGrid::getNz (  )  const [inline]

const Coord& sofa::component::collision::DistanceGrid::getPMax (  )  const [inline]

const Coord& sofa::component::collision::DistanceGrid::getPMin (  )  const [inline]

std::map< DistanceGrid::DistanceGridParams, DistanceGrid * > & sofa::component::collision::DistanceGrid::getShared (  )  [static, protected]

Definition at line 1552 of file DistanceGridCollisionModel.cpp.

Referenced by loadShared(), and ~DistanceGrid().

Coord sofa::component::collision::DistanceGrid::grad ( const Coord &  p  )  const [inline]

Definition at line 230 of file DistanceGridCollisionModel.h.

References grad(), and index().

Coord sofa::component::collision::DistanceGrid::grad ( int  index,
const Coord &  coefs 
) const [inline]

bool sofa::component::collision::DistanceGrid::inBBox ( const Coord &  p,
SReal  margin = 0.0f 
) const [inline]

int sofa::component::collision::DistanceGrid::index ( int  x,
int  y,
int  z 
) [inline]

Definition at line 169 of file DistanceGridCollisionModel.h.

References nx, and ny.

int sofa::component::collision::DistanceGrid::index ( const Coord &  p  )  const [inline]

Definition at line 163 of file DistanceGridCollisionModel.h.

References index().

int sofa::component::collision::DistanceGrid::index ( const Coord &  p,
Coord &  coefs 
) const [inline]

bool sofa::component::collision::DistanceGrid::inGrid ( const Coord &  p  )  const [inline]

SReal sofa::component::collision::DistanceGrid::interp ( const Coord &  p  )  const [inline]

Definition at line 195 of file DistanceGridCollisionModel.h.

References index(), and interp().

SReal sofa::component::collision::DistanceGrid::interp ( int  index,
const Coord &  coefs 
) const [inline]

Definition at line 187 of file DistanceGridCollisionModel.h.

References dists, interp(), nx, and nxny.

static SReal sofa::component::collision::DistanceGrid::interp ( SReal  coef,
SReal  a,
SReal  b 
) [inline, static]

bool sofa::component::collision::DistanceGrid::isCube (  )  const [inline]

int sofa::component::collision::DistanceGrid::ix ( const Coord &  p  )  const [inline]

Definition at line 131 of file DistanceGridCollisionModel.h.

References invCellWidth, pmin, and sofa::helper::rfloor().

Referenced by calcDistance().

int sofa::component::collision::DistanceGrid::iy ( const Coord &  p  )  const [inline]

Definition at line 136 of file DistanceGridCollisionModel.h.

References invCellWidth, pmin, and sofa::helper::rfloor().

Referenced by calcDistance().

int sofa::component::collision::DistanceGrid::iz ( const Coord &  p  )  const [inline]

Definition at line 141 of file DistanceGridCollisionModel.h.

References invCellWidth, pmin, and sofa::helper::rfloor().

Referenced by calcDistance().

DistanceGrid * sofa::component::collision::DistanceGrid::load ( const std::string &  filename,
double  scale = 1.0,
int  nx = 64,
int  ny = 64,
int  nz = 64,
Coord  pmin = Coord(),
Coord  pmax = Coord() 
) [static]

DistanceGrid * sofa::component::collision::DistanceGrid::loadShared ( const std::string &  filename,
double  scale = 1.0,
int  nx = 64,
int  ny = 64,
int  nz = 64,
Coord  pmin = Coord(),
Coord  pmax = Coord() 
) [static]

static SReal sofa::component::collision::DistanceGrid::maxDist (  )  [inline, static]

Definition at line 51 of file DistanceGridCollisionModel.h.

Referenced by calcDistance().

SReal& sofa::component::collision::DistanceGrid::operator[] ( int  index  )  [inline]

Definition at line 180 of file DistanceGridCollisionModel.h.

References dists.

SReal sofa::component::collision::DistanceGrid::operator[] ( int  index  )  const [inline]

Definition at line 179 of file DistanceGridCollisionModel.h.

References dists.

SReal sofa::component::collision::DistanceGrid::quickeval ( const Coord &  x  )  const [inline]

SReal sofa::component::collision::DistanceGrid::quickeval2 ( const Coord &  x  )  const [inline]

Definition at line 286 of file DistanceGridCollisionModel.h.

References cellWidth, clamp(), dists, index(), inGrid(), and norm2().

bool sofa::component::collision::DistanceGrid::release (  ) 

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

Definition at line 729 of file DistanceGridCollisionModel.cpp.

References nbRef.

bool sofa::component::collision::DistanceGrid::save ( const std::string &  filename  ) 

Save current grid.

!!!TODO!!! ///

Definition at line 897 of file DistanceGridCollisionModel.cpp.

References dists, and nxnynz.

Referenced by sofa::component::collision::FFDDistanceGridCollisionModel::init().

void sofa::component::collision::DistanceGrid::setBBMax ( const Coord &  val  )  [inline]

Definition at line 99 of file DistanceGridCollisionModel.h.

References bbmax.

void sofa::component::collision::DistanceGrid::setBBMin ( const Coord &  val  )  [inline]

Definition at line 98 of file DistanceGridCollisionModel.h.

References bbmin.

int sofa::component::collision::DistanceGrid::size ( void   )  const [inline]

Definition at line 94 of file DistanceGridCollisionModel.h.

References nxnynz.

Referenced by calcDistance().


Field Documentation

bounding box of the object, smaller than the grid

Definition at line 311 of file DistanceGridCollisionModel.h.

Referenced by calcCubeDistance(), calcDistance(), computeBBox(), getBBCorner(), getBBMax(), inBBox(), load(), and setBBMax().

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

Definition at line 313 of file DistanceGridCollisionModel.h.

Referenced by calcCubeDistance(), getCubeDim(), and isCube().

Definition at line 318 of file DistanceGridCollisionModel.h.

Referenced by calcDistance(), fmm_pop(), fmm_push(), and fmm_swap().

Definition at line 319 of file DistanceGridCollisionModel.h.

Referenced by calcDistance(), fmm_pop(), and fmm_push().

Definition at line 317 of file DistanceGridCollisionModel.h.

Referenced by calcDistance(), fmm_push(), and fmm_swap().

Definition at line 310 of file DistanceGridCollisionModel.h.

Referenced by index(), ix(), iy(), and iz().

Definition at line 306 of file DistanceGridCollisionModel.h.

Referenced by addRef(), and release().

Definition at line 308 of file DistanceGridCollisionModel.h.

Referenced by calcDistance(), fmm_pop(), fmm_push(), grad(), and interp().

Definition at line 308 of file DistanceGridCollisionModel.h.

Referenced by calcDistance(), load(), save(), and size().

Definition at line 308 of file DistanceGridCollisionModel.h.

Referenced by calcCubeDistance(), calcDistance(), getNz(), and index().

Definition at line 309 of file DistanceGridCollisionModel.h.

Referenced by clamp(), computeBBox(), getCorner(), getPMax(), and inGrid().


The documentation for this class was generated from the following files:

Generated on Sun Nov 23 04:17:26 2008 for Sofa by  doxygen 1.5.7.1