Meshes¶
This module provides a MeshData class for defining a Surface_Mesh and performing related operations.
-
class
MeshData¶ Class to hold a polyhedron mesh.
This is a wrapper of the Surface_mesh from CGAL and is the foundation used for the asteroid polyhedron potential model.
- Author
- Shankar Kulumani
- Version
- 28 October 2018
Public Functions
-
void
update_mesh(const Eigen::Ref<const Eigen::MatrixXd> &V, const Eigen::Ref<const Eigen::MatrixXi> &F)¶ Completely update the mesh with new vertices and faces. This will also completely regenerate the mesh properties
- Return
- void
- Author
- Shankar Kulumani
- Version
- 9 June 2018
- Parameters
V: Eigen matrix with the verticesF: Eigen matrix with teh faces
-
build_edge_factor(const Eigen::Ref<const Eigen::Vector3d> &pos)¶ Build the per edge factor L for the polyhedron potential model
- Return
- bool Success if true
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
pos: Position of test point
-
build_face_factor(const Eigen::Ref<const Eigen::Vector3d> &pos)¶ Build the per face factor w for the polyhedron potential model
- Return
- bool success if true
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
pos: Position of test point
-
get_verts(void) const¶ Return the vertices of the mesh as an Eigen array
- Return
- vertices Eigen arrays for the mesh nx3
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
Eigen::Matrix<int, Eigen::Dynamic, 3>
get_faces(void) const¶ Return the faces of the mesh as an eigen array
- Return
- faces Eigen array for the faces of the mesh nx3
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
std::size_t
number_of_vertices(void) const¶ Return the number of vertices of the mesh
- Return
- num_vert Return the number of vertices
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
std::size_t
number_of_edges(void) const¶ Return number of edges of the mesh
- Return
- num_edge Number of edges
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
std::size_t
number_of_faces(void) const¶ Return number of faces of the mesh
- Return
- num_face Number of faces
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
std::size_t
number_of_halfedges(void) const¶ Return number of halfedges of the mesh
- Return
- num_half Number of halfedges
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
Mesh::Vertex_range
vertices(void) const¶ Return vertex range for iteration
- Return
- Vertex_range Range of vertices of the mesh
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
Mesh::Face_range
faces(void) const¶ Return face range for iteration
- Return
- Face_range Range of faces of the mesh
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
Mesh::Edge_range
edges(void) const¶ Return edge range for iteration
- Return
- Edge_range Range of edges of the mesh
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
Mesh::Halfedge_range
halfedges(void) const¶ Return halfedge range for iteration
- Return
- Halfedge_range Range of halfedges of the mesh
- Author
- Shankar Kulumani
- Version
- 28 October 2018
-
bool
refine_faces(const std::vector<Face_index> &face_vec, std::vector<Face_index> &new_faces, std::vector<Vertex_index> &new_vertices, const int &density = 4.0)¶ Given a set of faces, this will refine them by adding new faces/ vertices within them. The new faces and vertices are returned. The surface mesh member variable is updated.
This tends to make a very craggly shape. Better to use remesh instead
- Return
- new_faces Vector of new faces
- Return
- new_vertices Vector of new vertices
- Author
- Shankar Kulumani
- Version
- 10 June 2018
- Parameters
face_vec: Vector of faces to refinedensity: integer defining the density control factor
-
remesh_faces(const std::vector<Face_index> &face_vec, const double &target_edge_length, const int &number_of_iterations = 3)¶ Perform isotropic remeshing of the desired faces of the mesh.
- Return
- bool True if success
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
face_vec: Vector of faces to remeshtarget_edge_length: Target length of the new edgesnumber_of_iterations: Iterations for isotropic_remeshing
-
std::vector<Face_index>
faces_in_fov(const Eigen::Ref<const Eigen::Vector3d> &pos, const double &max_fov = 0.52)¶ Find the faces that are within a FOV of the current position
- Return
- face_vec Vector of face indices
- Author
- Shankar Kulumani
- Version
- 11 June 2018
- Parameters
pos: Position of spacecraft in the asteroid fixed frame
-
std::vector<Face_index>
vertices_in_fov(const Eigen::Ref<const Eigen::Vector3d> &pos, const double &max_fov = 0.52)¶ Find the vertices that are within a FOV of the current position
- Return
- vertex_vec Vector of vertex indices
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
pos: Position of spacecraft in the asteroid fixed frame
-
Eigen::Matrix<double, Eigen::Dynamic, 3>
refine_faces_in_view(const Eigen::Ref<const Eigen::Vector3d> &pos, const double &max_fov = 0.52)¶ Use the refinement function for the faces within a certain angle of the position
- Return
- Face_centers get the center of the new faces in view
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
pos: Eigen vector for positionmax_fov: Maximum cosine(angle) for faces to refine
-
bool
remesh_faces_in_view(const Eigen::Ref<const Eigen::Vector3d> &pos, const double &max_fov = 0.52, const double &edge_length = 0.01)¶ Use isotropic remeshing to remesh the faces that are in view of the point
- Return
- bool Success if true
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
pos: Position vectormax_fov: Field of view to use to compute the faces in viewedge_length: Target edge length for the new faces
-
template <typename Index>
Eigen::RowVector3dget_vertex(const Index &index) const¶ Get the desired vertex given an index
- Return
- vertex Eigen array of the specific vertex
- Author
- Shankar Kulumani
- Version
- 28 October 2018
- Parameters
Index: Index of vertex to get
-
bool
set_vertex(const Vertex_index &vd, const Eigen::Ref<const Eigen::Vector3d> &vec)¶ Update the position of a single vertex and recompute the affected mesh properties
- Return
- bool True if good
- Author
- Shankar Kulumani
- Version
- 9 June 2018
- Parameters
vd: Vertex index to modifyvec: Eigen vector of the new vertex position
-
template <typename Index>
Eigen::RowVector3iget_face_vertices(const Index &index) const¶ Get the vertex indecies of all vertices in the face
- Return
- row a row vector of indices
- Author
- Shankar Kulumani
- Version
- 6 June 2018
- Parameters
index: A face index (basically an integer)
-
Eigen::VectorXd
get_all_face_area(void) const¶ Get the area of each face of the mesh
- Return
- Vector of all face areas
- Author
- Shankar Kulumani
- Version
- 12 June 2018
- Parameters
void: none
Public Members
-
Mesh
surface_mesh¶ Surface_mesh object