iMSTK
Interactive Medical Simulation Toolkit
|
Structured field of signed distances implemented with ImageData The SDF differs in that when you scale an image via its spacing the distance samples are then wrong. Here you can isotropically scale as you wish. More...
#include <imstkSignedDistanceField.h>
Public Member Functions | |
SignedDistanceField (std::shared_ptr< ImageData > imageData) | |
Constructor. More... | |
double | getFunctionValue (const Vec3d &pos) const |
Returns signed distance to surface at pos, returns clamped/nearest if out of bounds. | |
double | getFunctionValueCoord (const Vec3i &coord) const |
Returns signed distance to surface at coordinate inlined for performance. | |
const Vec6d & | getBounds () const |
Returns the bounds of the field. | |
void | setScale (const double scale) |
Set the isotropic scale that is used/multplied with samples. | |
double | getScale () const |
Get the isotropic scale. | |
std::shared_ptr< ImageData > | getImage () const |
Get the SDF as a float image. | |
void | computeBoundingBox (Vec3d &min, Vec3d &max, const double paddingPercent) override |
Compute the bounding box for the geometry. More... | |
std::unique_ptr< SignedDistanceField > | clone () |
Polymorphic clone, hides the declaration in superclass return own type. | |
![]() | |
Geometry (const Geometry &other) | |
void | operator= (const Geometry &other) |
virtual const std::string | getTypeName () const =0 |
Returns the string representing the type name of the geometry. More... | |
SIGNAL (Geometry, modified) | |
virtual void | print () const |
Print. | |
virtual double | getVolume () |
Returns the volume of the geometry (if valid) | |
virtual Vec3d | getCenter () |
Returns the bounding box center. | |
void | transform (const Mat4d &T, TransformType type=TransformType::ConcatenateToTransform) |
Applies a rigid transform to the geometry. | |
std::unique_ptr< Geometry > | clone () |
polymorphic clone function, utilize this to get a copy of the geometry without casting to the expected geometry type | |
const std::string & | getName () const |
Get the name of the geometry. | |
void | setName (const std::string &name) |
size_t | getGlobalId () const |
Get the global (unique) index of the geometry. | |
virtual bool | isMesh () const |
Returns true if the geometry is a mesh, else returns false. | |
void | postModified () |
Post modified event. | |
virtual void | updatePostTransformData () const |
void | translate (const Vec3d &t, TransformType type=TransformType::ConcatenateToTransform) |
Translate the geometry in Cartesian space. | |
void | translate (double x, double y, double z, TransformType type=TransformType::ConcatenateToTransform) |
void | rotate (const Quatd &q, TransformType type=TransformType::ConcatenateToTransform) |
Rotate the geometry in Cartesian space. | |
void | rotate (const Mat3d &m, TransformType type=TransformType::ConcatenateToTransform) |
void | rotate (const Vec3d &axis, double radians, TransformType type=TransformType::ConcatenateToTransform) |
void | scale (const Vec3d &scaling, TransformType type=TransformType::ConcatenateToTransform) |
Scale in Cartesian directions. | |
void | scale (const double scaling, TransformType type=TransformType::ConcatenateToTransform) |
Vec3d | getTranslation () const |
Get/Set translation. | |
void | setTranslation (const Vec3d &t) |
void | setTranslation (const double x, const double y, const double z) |
Mat3d | getRotation () const |
Get/Set rotation. | |
void | setRotation (const Mat3d &m) |
void | setRotation (const Quatd &q) |
void | setRotation (const Vec3d &axis, const double angle) |
Vec3d | getScaling () const |
Get/Set scaling. | |
void | setScaling (const Vec3d &s) |
void | setScaling (const double s) |
const Mat4d & | getTransform () const |
Get/Set the transform. | |
void | setTransform (const Mat4d &m) |
![]() | |
template<typename T > | |
void | postEvent (const T &e) |
Emits the event Direct observers will be immediately called, in sync Queued observers will receive the Command in their queue for later execution, reciever must implement doEvent. | |
template<typename T > | |
void | queueEvent (const T &e) |
Queues event directly to this. | |
void | doEvent () |
Do an event, if none exists return. | |
void | doAllEvents () |
Do all the events in the event queue. | |
void | foreachEvent (std::function< void(Command cmd)> func) |
Thread safe loop over all event commands, one can implement a custom handler. | |
void | rforeachEvent (std::function< void(Command cmd)> func) |
thread safe reverse loop over all event commands, one can implement a custom handler | |
void | clearEvents () |
Removes all events from queue cleans up copies of the event. | |
Protected Attributes | |
std::shared_ptr< ImageData > | m_imageDataSdf |
Vec3d | m_invSpacing |
Vec6d | m_bounds |
Vec3d | m_shift |
double | m_scale |
std::shared_ptr< DataArray< double > > | m_scalars |
![]() | |
bool | m_transformApplied = true |
bool | m_boundsDirty = true |
Mat4d | m_transform = Mat4d::Identity() |
Transformation matrix. | |
size_t | m_globalId |
Unique ID assigned to each geometry upon construction. | |
std::string | m_name = "unnamed" |
![]() | |
ParallelUtils::SpinLock | eventQueueLock |
std::deque< Command > | eventQueue |
std::vector< std::pair< std::string, std::vector< Observer > > > | queuedObservers |
std::vector< std::pair< std::string, std::vector< Observer > > > | directObservers |
Additional Inherited Members | |
![]() | |
enum | TransformType { ApplyToData, ConcatenateToTransform } |
Enumeration for the transformation to apply ApplyToTransform to apply the transformation to the data ConcatenateToTransform to apply the transformation to the transform matrix. | |
enum | DataType { PreTransform, PostTransform } |
Enumeration for the data to retrieve PreTransform for data where transform matrix is not applied PostTransform for data where transform matrix is applied. | |
![]() | |
using | Observer = std::tuple< bool, std::weak_ptr< EventObject >, std::function< void(Event *)> > |
![]() | |
static size_t | getNumGlobalIds () |
Get number of ids/geometries. | |
![]() | |
virtual void | applyTransform (const Mat4d &) |
Directly apply transform to data. | |
![]() | |
static size_t | getUniqueId () |
Get a unique ID for the new generated geometry object. | |
![]() | |
static std::atomic< size_t > | s_numGlobalIds = { 0 } |
Total number of geometries that have been created in this program. | |
Structured field of signed distances implemented with ImageData The SDF differs in that when you scale an image via its spacing the distance samples are then wrong. Here you can isotropically scale as you wish.
Definition at line 26 of file imstkSignedDistanceField.h.
imstk::SignedDistanceField::SignedDistanceField | ( | std::shared_ptr< ImageData > | imageData | ) |
Constructor.
ImageData | to utilize |
geometry | name |
Definition at line 68 of file imstkSignedDistanceField.cpp.
|
overridevirtual |
Compute the bounding box for the geometry.
Reimplemented from imstk::Geometry.
Definition at line 102 of file imstkSignedDistanceField.cpp.