iMSTK
Interactive Medical Simulation Toolkit
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
imstk::MeshCut Class Referenceabstract

Base abstract class for discrete cut algorithms. More...

#include <imstkMeshCut.h>

Inheritance diagram for imstk::MeshCut:
Inheritance graph
[legend]
Collaboration diagram for imstk::MeshCut:
Collaboration graph
[legend]

Public Member Functions

void requestUpdate () override
 Users can implement this for the logic to be run.
 
std::shared_ptr< std::map< int, int > > getCutVertMap ()
 
 imstkGetMacro (CutData, std::shared_ptr< std::vector< CutData >>)
 
 imstkSetMacro (CutData, std::shared_ptr< std::vector< CutData >>)
 
 imstkGetMacro (CutGeometry, std::shared_ptr< Geometry >)
 
 imstkSetMacro (CutGeometry, std::shared_ptr< Geometry >)
 
 imstkGetMacro (Epsilon, double)
 
 imstkSetMacro (Epsilon, double)
 
 imstkGetMacro (RemoveConstraintVertices, std::shared_ptr< std::unordered_set< size_t >>)
 
 imstkGetMacro (AddConstraintVertices, std::shared_ptr< std::unordered_set< size_t >>)
 
- Public Member Functions inherited from imstk::GeometryAlgorithm
std::shared_ptr< GeometrygetInput (size_t port=0) const
 Returns input geometry given port, returns nullptr if doesn't exist.
 
std::shared_ptr< GeometrygetOutput (size_t port=0) const
 Returns output geometry given port, returns nullptr if doesn't exist.
 
void setInput (std::shared_ptr< Geometry > inputGeometry, size_t port=0)
 Set the input at the port.
 
void update ()
 Do the actual algorithm.
 

Protected Member Functions

virtual std::shared_ptr< std::vector< CutData > > generateCutData (std::shared_ptr< Geometry > cuttingGeom, std::shared_ptr< AbstractCellMesh > geomToCut)=0
 Generate CutData which defines how the cut should be performed.
 
virtual void refinement (std::shared_ptr< AbstractCellMesh > outputGeom, std::map< int, bool > &cutVerts)=0
 Refine the mesh adding vertices and changing connectivity along the cut. More...
 
virtual void splitVerts (std::shared_ptr< AbstractCellMesh > outputGeom, std::map< int, bool > &cutVerts, std::shared_ptr< Geometry > cuttingGeom)=0
 Split the cutting vertices, separating them into two. More...
 
int ptBoundarySign (const Vec3d &pt, std::shared_ptr< Geometry > geometry)
 Determine the sign of the point -1 if inside, 1 if outside, 0 if on boundary defined by epsilon.
 
template<int N>
bool vertexOnBoundary (std::shared_ptr< VecDataArray< int, N >> cells, std::set< int > &cellSet)
 
bool pointProjectionInSurface (const Vec3d &pt, std::shared_ptr< SurfaceMesh > surface)
 
- Protected Member Functions inherited from imstk::GeometryAlgorithm
void setOutput (std::shared_ptr< Geometry > inputGeometry, const size_t port=0)
 Set the output at the port.
 
template<typename T >
void setRequiredInputType (const size_t port)
 Declares the type for the port with the given number, also defines that the give port is required for the filter to run correctly.
 
template<typename T >
void setOptionalInputType (const size_t port)
 Declares the type for the port with the given number, the data for this port is optional and may be omitted.
 
virtual bool areInputsValid ()
 Check inputs are correct. More...
 
void setNumInputPorts (const size_t numPorts)
 Get/Set the amount of input ports.
 
 imstkGetMacro (NumInputPorts, size_t)
 
void setNumOutputPorts (const size_t numPorts)
 Get/Set the amount of output ports.
 
 imstkGetMacro (NumOutputPorts, size_t)
 

Protected Attributes

std::shared_ptr< std::vector< CutData > > m_CutData = nullptr
 
std::shared_ptr< std::map< int, int > > m_CutVertMap
 
std::shared_ptr< Geometrym_CutGeometry = nullptr
 
std::shared_ptr< std::unordered_set< size_t > > m_RemoveConstraintVertices = nullptr
 
std::shared_ptr< std::unordered_set< size_t > > m_AddConstraintVertices = nullptr
 
double m_Epsilon = 0.001
 
- Protected Attributes inherited from imstk::GeometryAlgorithm
TypeCheckContainer m_requiredTypeChecks
 
TypeCheckContainer m_optionalTypeChecks
 

Additional Inherited Members

- Protected Types inherited from imstk::GeometryAlgorithm
using GeometryCheck = std::function< bool(Geometry *)>
 
using TypeCheckContainer = std::unordered_map< size_t, GeometryCheck >
 

Detailed Description

Base abstract class for discrete cut algorithms.

Todo:
: Generalize the cutting into composited bits and provide one concrete MeshCut instead of many subclasses of this

Definition at line 41 of file imstkMeshCut.h.

Member Function Documentation

◆ refinement()

virtual void imstk::MeshCut::refinement ( std::shared_ptr< AbstractCellMesh outputGeom,
std::map< int, bool > &  cutVerts 
)
protectedpure virtual

Refine the mesh adding vertices and changing connectivity along the cut.

Parameters
Geometryto cut
verticeson cutting path and whether they should be split

Implemented in imstk::SurfaceMeshCut, and imstk::LineMeshCut.

Here is the caller graph for this function:

◆ splitVerts()

virtual void imstk::MeshCut::splitVerts ( std::shared_ptr< AbstractCellMesh outputGeom,
std::map< int, bool > &  cutVerts,
std::shared_ptr< Geometry cuttingGeom 
)
protectedpure virtual

Split the cutting vertices, separating them into two.

Parameters
Geometryto cut
verticeson cutting path and whether they should be split
Geometryto cut with

Implemented in imstk::SurfaceMeshCut, and imstk::LineMeshCut.

Here is the caller graph for this function:

Member Data Documentation

◆ m_CutVertMap

std::shared_ptr<std::map<int, int> > imstk::MeshCut::m_CutVertMap
protected
Initial value:
=
std::make_shared<std::map<int, int>>()

Definition at line 127 of file imstkMeshCut.h.


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