iMSTK
Interactive Medical Simulation Toolkit
|
This class defines a method of removing cells and their associated constraints from a Pbd object. Can update the visual and collision representation when using a tetrahedral mesh as physics object Does not support updating visual and collision representation when the physics mesh is a LineMesh or a SurfaceMesh AND they differ. Note: The two modes for visual meshes exist to support generating new texture coordinates, when reusing a vertex from a visual mesh the vertex should already have uv coordinates assigned to it. Assigning new ones may break the current look of the object as the vertex may still be in use. With the VisualSeparateVertices
mode, new vertices will be generated for newly exposed surface. This allows the user to assign new uv coordinates to those new points.
More...
#include <imstkPbdObjectCellRemoval.h>
Public Types | |
enum | OtherMeshUpdateType { None = 0, Collision = 1, VisualReuseVertices = 2, VisualSeparateVertices = 4, CollisionAndVisualSeparate = Collision | VisualSeparateVertices, CollisionAndVisualReused = Collision | VisualReuseVertices } |
![]() | |
using | Observer = std::tuple< bool, std::weak_ptr< EventObject >, std::function< void(Event *)> > |
Public Member Functions | |
PbdObjectCellRemoval (std::shared_ptr< PbdObject > pbdObj, OtherMeshUpdateType alsoUpdate=OtherMeshUpdateType::None) | |
void | removeCellOnApply (int cellId) |
Adds cell to list of cells to be removed. | |
void | apply () |
removed cells and associated constraints | |
std::vector< int > | getRemovedCells () |
Get ids of cells that have been removed. | |
![]() | |
SceneObject (const std::string &name="SceneObject") | |
std::shared_ptr< TaskGraph > | getTaskGraph () const |
Get the computational graph. | |
std::shared_ptr< Geometry > | getVisualGeometry () const |
Sets the visual geometry, adds (sets the first) VisualModel. | |
void | setVisualGeometry (std::shared_ptr< Geometry > geometry) |
std::shared_ptr< VisualModel > | getVisualModel (const int index) const |
Get/add visual model. | |
void | addVisualModel (std::shared_ptr< VisualModel > visualModel) |
void | removeVisualModel (std::shared_ptr< VisualModel > visualModel) |
std::shared_ptr< TaskNode > | getUpdateNode () const |
Returns the computational node for updating. | |
std::shared_ptr< TaskNode > | getUpdateGeometryNode () const |
Returns the computational node for updating geometry. | |
virtual void | update () |
Update the SceneObject, called during scene update. | |
virtual void | visualUpdate () |
Update the visuals, called before render. | |
virtual void | updateGeometries () |
Update the geometries. | |
virtual bool | initialize () |
Initialize the scene object. | |
void | initGraphEdges () |
Initializes the edges of the SceneObject's computational graph. | |
virtual void | reset () |
![]() | |
Entity (const std::string &name="Entity") | |
SIGNAL (Entity, modified) | |
EntityID | getID () const |
Get ID (ALWAYS query the ID in your code, DO NOT hardcode it) More... | |
virtual const std::string | getTypeName () const |
template<typename T > | |
std::shared_ptr< T > | addComponent () |
Create and return a component on this entity. | |
template<typename T > | |
std::shared_ptr< T > | addComponent (std::string name) |
void | addComponent (std::shared_ptr< Component > component) |
Add existing component to entity. | |
std::shared_ptr< Component > | getComponent (const unsigned int index) const |
Get a component by index. | |
template<typename T > | |
std::shared_ptr< T > | getComponent () const |
Get the first component of type T. | |
template<typename T > | |
std::shared_ptr< T > | getComponentN (const int index) const |
Get's the Nth component of type T. | |
template<class T > | |
bool | containsComponent () const |
Check if contains component of type T. | |
bool | containsComponent (std::shared_ptr< Component > component) const |
Check if contains given component. | |
template<typename T > | |
std::vector< std::shared_ptr< T > > | getComponents () const |
Get all components of type T. | |
const std::vector< std::shared_ptr< Component > > & | getComponents () |
void | removeComponent (std::shared_ptr< Component > component) |
Remove component if it exists. | |
const std::string & | getName () const |
Get/Set the name of the entity. | |
void | setName (const std::string &name) |
![]() | |
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 Member Functions | |
void | removeConstraints () |
void | addDummyVertexPointSet (std::shared_ptr< PointSet > pointSet) |
void | addDummyVertex (std::shared_ptr< AbstractCellMesh > mesh) |
void | fixup () |
![]() | |
virtual void | initGraphEdges (std::shared_ptr< TaskNode > source, std::shared_ptr< TaskNode > sink) |
Setup connectivity of the compute graph. | |
virtual void | postModifiedAll () |
Posts modified for all geometries. | |
Protected Attributes | |
std::shared_ptr< PbdObject > | m_obj |
Object that cells are removed from. | |
std::shared_ptr< AbstractCellMesh > | m_mesh |
Mesh from object cells are removed from. | |
std::vector< int > | m_cellsToRemove |
List of cells to remove, cleared after removal. | |
std::vector< int > | m_removedCells |
Cells that have been removed. | |
![]() | |
std::shared_ptr< TaskGraph > | m_taskGraph = nullptr |
Computational Graph. | |
![]() | |
std::vector< std::shared_ptr< Component > > | m_components |
EntityID | m_ID |
unique ID of entity | |
std::string | m_name |
Not unique name. | |
![]() | |
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 | |
![]() | |
static std::atomic< EntityID > | m_count { 0 } |
current count of entities | |
This class defines a method of removing cells and their associated constraints from a Pbd object. Can update the visual and collision representation when using a tetrahedral mesh as physics object Does not support updating visual and collision representation when the physics mesh is a LineMesh or a SurfaceMesh AND they differ. Note: The two modes for visual meshes exist to support generating new texture coordinates, when reusing a vertex from a visual mesh the vertex should already have uv coordinates assigned to it. Assigning new ones may break the current look of the object as the vertex may still be in use. With the VisualSeparateVertices
mode, new vertices will be generated for newly exposed surface. This allows the user to assign new uv coordinates to those new points.
Definition at line 37 of file imstkPbdObjectCellRemoval.h.