Public Member Functions | |
DeformableSimplicialComplex (std::vector< vec3 > &points, std::vector< int > &tets, const std::vector< int > &tet_labels) | |
SimplicialComplex constructor. | |
DeformableSimplicialComplex (std::shared_ptr< is_mesh::ISMesh > ismesh) | |
SimplicialComplex constructor. | |
std::shared_ptr< is_mesh::ISMesh > | get_shared_is_mesh () |
is_mesh::ISMesh & | get_is_mesh () |
virtual void | set_is_mesh (std::shared_ptr< is_mesh::ISMesh > ismesh) |
void | set_avg_edge_length (double avg_edge_length=0.) |
void | set_parameters (parameters pars_) |
parameters | get_parameters () |
virtual void | add_design_domain (std::shared_ptr< is_mesh::Geometry > geometry) |
virtual void | clear_design_domain () |
void | set_subdomain (std::shared_ptr< is_mesh::Geometry > subdomain) |
void | clear_subdomain () |
std::shared_ptr < is_mesh::Geometry > | get_subdomain () |
virtual void | set_labels (const is_mesh::Geometry &geometry, int label) |
virtual bool | is_movable (const is_mesh::NodeKey &nid) |
virtual void | set_destination (const is_mesh::NodeKey &nid, const vec3 &dest) |
is_mesh::NodeIterator | nodes () const |
is_mesh::EdgeIterator | edges () const |
is_mesh::FaceIterator | faces () const |
is_mesh::TetrahedronIterator | tetrahedra () const |
double | get_min_tet_quality () const |
double | get_deg_tet_quality () const |
double | get_deg_face_quality () const |
double | get_min_face_quality () const |
double | get_avg_edge_length () const |
const is_mesh::MultipleGeometry & | get_design_domain () const |
void | smooth_interface_laplacian (is_mesh::SimplexSet< is_mesh::NodeKey > nodes, double weight=0.5) |
void | smooth_interface_taubin (is_mesh::SimplexSet< is_mesh::NodeKey > nodes, double u=0.5, double v=-0.52) |
void | deform (int num_steps=10, bool optimizeMeshStructure=true) |
double | intersection_with_link (const is_mesh::NodeKey &n, const vec3 &destination) |
is_mesh::NodeKey | split (const is_mesh::TetrahedronKey &tid) |
is_mesh::NodeKey | split (const is_mesh::FaceKey &fid) |
is_mesh::NodeKey | split (const is_mesh::EdgeKey &eid) |
std::vector< vec3 > | get_interface_face_positions () |
vec3 | get_normal (const is_mesh::FaceKey &fid) |
vec3 | get_normal (const is_mesh::NodeKey &nid) |
vec3 | get_barycenter (const is_mesh::NodeKey &nid, bool interface=false) |
double | quality (const is_mesh::EdgeKey &eid) |
is_mesh::FaceKey | largest_face (const is_mesh::SimplexSet< is_mesh::FaceKey > &fids) |
is_mesh::EdgeKey | shortest_edge (const is_mesh::SimplexSet< is_mesh::EdgeKey > &eids) |
is_mesh::EdgeKey | longest_edge (const is_mesh::SimplexSet< is_mesh::EdgeKey > &eids) |
double | min_quality (const is_mesh::SimplexSet< is_mesh::TetrahedronKey > &tids) |
double | min_quality (const is_mesh::SimplexSet< is_mesh::FaceKey > &fids, const vec3 &pos) |
double | min_quality (const is_mesh::SimplexSet< is_mesh::FaceKey > &fids, const vec3 &pos_old, const vec3 &pos_new) |
void | min_quality (const is_mesh::SimplexSet< is_mesh::FaceKey > &fids, const vec3 &pos_old, const vec3 &pos_new, double &min_q_old, double &min_q_new) |
double | get_max_edge_length () const |
double | compute_avg_edge_length () |
double | cos_dihedral_angle (const is_mesh::FaceKey &f1, const is_mesh::FaceKey &f2) |
double | dihedral_angle (const is_mesh::FaceKey &f1, const is_mesh::FaceKey &f2) |
std::vector< double > | cos_dihedral_angles (const is_mesh::TetrahedronKey &tid) |
double | min_cos_dihedral_angle (const is_mesh::TetrahedronKey &t) |
double | min_dihedral_angle (const is_mesh::TetrahedronKey &t) |
void | get_qualities (std::vector< int > &histogram, double &min_quality) |
void | get_dihedral_angles (std::vector< int > &histogram, double &min_angle, double &max_angle) |
double | min_quality () |
void | count_nodes (int &total, int &object) |
Counts the total number of nodes and the number of nodes on the interface(s). | |
void | count_edges (int &total, int &object) |
Counts the total number of edges and the number of edges on the interface(s). | |
void | count_faces (int &total, int &object) |
Counts the total number of faces and the number of faces on the interface(s). | |
void | count_tetrahedra (int &total, int &object) |
Counts the total number of tetrahedra and the number of tetrahedra in the object(s). | |
void | test_split_collapse () |
void | test_flip23_flip32 () |
void | test_flip44 () |
void | test_flip22 () |
bool | validity_check () |
Static Public Member Functions | |
static std::string | header_version () |
static std::string | lib_version () |
Protected Member Functions | |
virtual bool | is_unsafe_editable (const is_mesh::NodeKey &nid) |
virtual bool | is_unsafe_editable (const is_mesh::EdgeKey &eid) |
virtual bool | is_unsafe_editable (const is_mesh::FaceKey &fid) |
virtual bool | is_unsafe_editable (const is_mesh::TetrahedronKey &tid) |
virtual bool | is_safe_editable (const is_mesh::NodeKey &nid) |
virtual bool | is_safe_editable (const is_mesh::EdgeKey &eid) |
virtual bool | is_safe_editable (const is_mesh::FaceKey &fid) |
virtual bool | is_safe_editable (const is_mesh::TetrahedronKey &tid) |
void | set_pos (const is_mesh::NodeKey &nid, const vec3 &p) |
Protected Attributes | |
std::shared_ptr< is_mesh::ISMesh > | is_mesh_ptr |
is_mesh::MultipleGeometry | design_domain |
double | AVG_LENGTH |
double | AVG_AREA |
double | AVG_VOLUME |
double | FLIP_EDGE_INTERFACE_FLATNESS = 0.995 |
parameters | pars |
double DSC::DeformableSimplicialComplex::cos_dihedral_angle | ( | const is_mesh::FaceKey & | f1, |
const is_mesh::FaceKey & | f2 | ||
) |
Returns the cosine to the dihedral angle between face f1 and face f2.
void DSC::DeformableSimplicialComplex::deform | ( | int | num_steps = 10 , |
bool | optimizeMeshStructure = true |
||
) |
Moves all the vertices to their destination which can be set by the set_destination() function.
double DSC::DeformableSimplicialComplex::dihedral_angle | ( | const is_mesh::FaceKey & | f1, |
const is_mesh::FaceKey & | f2 | ||
) |
Returns the dihedral angle between face f1 and face f2.
vec3 DSC::DeformableSimplicialComplex::get_barycenter | ( | const is_mesh::NodeKey & | nid, |
bool | interface = false |
||
) |
Calculates the average position of the neighbouring nodes to node n. If interface is true, the average position is only calculated among the neighbouring nodes which are interface.
void DSC::DeformableSimplicialComplex::get_dihedral_angles | ( | std::vector< int > & | histogram, |
double & | min_angle, | ||
double & | max_angle | ||
) |
Calculates the dihedral angles in the SimplicialComplex and returns these in a histogram, along with the minimum and maximum dihedral angles.
vec3 DSC::DeformableSimplicialComplex::get_normal | ( | const is_mesh::FaceKey & | fid | ) |
Returns the normal to interface face fid.
vec3 DSC::DeformableSimplicialComplex::get_normal | ( | const is_mesh::NodeKey & | nid | ) |
Returns the normal to interface node n.
double DSC::DeformableSimplicialComplex::intersection_with_link | ( | const is_mesh::NodeKey & | n, |
const vec3 & | destination | ||
) |
Returns the intersection point (= pos + t*(destination-pos)) with the link of the node n and when moving the node n to the new position destination.
|
protectedvirtual |
key exists and is non interface and non boundary
|
protectedvirtual |
key exists and is non interface and non boundary
|
protectedvirtual |
key exists and is non interface and non boundary
|
protectedvirtual |
key exists
|
protectedvirtual |
key exists and is non boundary
|
protectedvirtual |
key exists and is non boundary
|
protectedvirtual |
key exists and is non boundary
|
protectedvirtual |
key exists
FaceKey DSC::DeformableSimplicialComplex::largest_face | ( | const is_mesh::SimplexSet< is_mesh::FaceKey > & | fids | ) |
Returns the largest face in the simplex set.
EdgeKey DSC::DeformableSimplicialComplex::longest_edge | ( | const is_mesh::SimplexSet< is_mesh::EdgeKey > & | eids | ) |
Returns the longest edge in the simplex set.
double DSC::DeformableSimplicialComplex::min_cos_dihedral_angle | ( | const is_mesh::TetrahedronKey & | t | ) |
Returns the cosine of the minimum dihedral angle between the faces of tetrahedron t.
double DSC::DeformableSimplicialComplex::min_dihedral_angle | ( | const is_mesh::TetrahedronKey & | t | ) |
Returns the minimum dihedral angle between the faces of tetrahedron t.
double DSC::DeformableSimplicialComplex::min_quality | ( | const is_mesh::SimplexSet< is_mesh::TetrahedronKey > & | tids | ) |
Returns the minimum quality of the tetrahedra in simplex set s.
double DSC::DeformableSimplicialComplex::min_quality | ( | const is_mesh::SimplexSet< is_mesh::FaceKey > & | fids, |
const vec3 & | pos | ||
) |
Returns the minimum tetrahedral quality of a node with position pos. The faces in the link of the node should be passed in fids.
double DSC::DeformableSimplicialComplex::min_quality | ( | const is_mesh::SimplexSet< is_mesh::FaceKey > & | fids, |
const vec3 & | pos_old, | ||
const vec3 & | pos_new | ||
) |
Returns the new minimum tetrahedral quality when moving a node from old_pos to new_pos. The faces in the link of the node should be passed in fids.
void DSC::DeformableSimplicialComplex::min_quality | ( | const is_mesh::SimplexSet< is_mesh::FaceKey > & | fids, |
const vec3 & | pos_old, | ||
const vec3 & | pos_new, | ||
double & | min_q_old, | ||
double & | min_q_new | ||
) |
Returns the old (in min_q_old) and new (in min_q_new) minimum tetrahedral quality of when moving a node from old_pos to new_pos. The faces in the link of the node should be passed in fids.
|
virtual |
Sets the destination where the node n is moved to when deform() is called.
|
protected |
Sets the position of node n.
EdgeKey DSC::DeformableSimplicialComplex::shortest_edge | ( | const is_mesh::SimplexSet< is_mesh::EdgeKey > & | eids | ) |
Returns the shortest edge in the simplex set.
NodeKey DSC::DeformableSimplicialComplex::split | ( | const is_mesh::TetrahedronKey & | tid | ) |
Split a tetrahedron t and returns the new node which is positioned at the barycenter of the vertices of t.
NodeKey DSC::DeformableSimplicialComplex::split | ( | const is_mesh::FaceKey & | fid | ) |
Split a face f and returns the new node which is positioned at the barycenter of the vertices of f.
NodeKey DSC::DeformableSimplicialComplex::split | ( | const is_mesh::EdgeKey & | eid | ) |
Split an edge e and returns the new node which is placed at the middle of e.
bool DSC::DeformableSimplicialComplex::validity_check | ( | ) |
Validates that the constraints in the parameters is satisfied