MeshLib C++ Docs
Loading...
Searching...
No Matches
MR::MeshTopology Class Reference

#include <MRMesh/MRMeshTopology.h>

Public Member Functions

EdgeId makeEdge ()
 creates an edge not associated with any vertex or face
bool isLoneEdge (EdgeId a) const
 checks whether the edge is disconnected from all other edges and disassociated from all vertices and faces (as if after makeEdge)
UndirectedEdgeId lastNotLoneUndirectedEdge () const
 returns last not lone undirected edge id, or invalid id if no such edge exists
EdgeId lastNotLoneEdge () const
 returns last not lone edge id, or invalid id if no such edge exists
void excludeLoneEdges (UndirectedEdgeBitSet &edges) const
 remove all lone edges from given set
size_t edgeSize () const
 returns the number of half-edge records including lone ones
size_t edgeCapacity () const
 returns the number of allocated edge records
size_t undirectedEdgeSize () const
 returns the number of undirected edges (pairs of half-edges) including lone ones
size_t undirectedEdgeCapacity () const
 returns the number of allocated undirected edges (pairs of half-edges)
size_t computeNotLoneUndirectedEdges () const
 computes the number of not-lone (valid) undirected edges
UndirectedEdgeBitSet findNotLoneUndirectedEdges () const
 finds and returns all not-lone (valid) undirected edges
void edgeReserve (size_t newCapacity)
 sets the capacity of half-edges vector
bool hasEdge (EdgeId e) const
 returns true if given edge is within valid range and not-lone
size_t heapBytes () const
 returns the amount of memory this object occupies on heap
void shrinkToFit ()
 requests the removal of unused capacity
void splice (EdgeId a, EdgeId b)
EdgeId collapseEdge (EdgeId e, const std::function< void(EdgeId del, EdgeId rem)> &onEdgeDel)
EdgeId next (EdgeId he) const
 next (counter clock wise) half-edge in the origin ring
EdgeId prev (EdgeId he) const
 previous (clock wise) half-edge in the origin ring
VertId org (EdgeId he) const
 returns origin vertex of half-edge
VertId dest (EdgeId he) const
 returns destination vertex of half-edge
FaceId left (EdgeId he) const
 returns left face of half-edge
FaceId right (EdgeId he) const
 returns right face of half-edge
void setOrg (EdgeId a, VertId v)
void setLeft (EdgeId a, FaceId f)
bool fromSameOriginRing (EdgeId a, EdgeId b) const
 returns true if a and b are both from the same origin ring
bool fromSameLeftRing (EdgeId a, EdgeId b) const
 returns true if a and b are both from the same left face ring
int getOrgDegree (EdgeId a) const
 returns the number of edges around the origin vertex, returns 1 for lone edges
int getVertDegree (VertId v) const
 returns the number of edges around the given vertex
int getLeftDegree (EdgeId a) const
 returns the number of edges around the left face: 3 for triangular faces, ...
int getFaceDegree (FaceId f) const
 returns the number of edges around the given face: 3 for triangular faces, ...
bool isLeftTri (EdgeId a) const
 returns true if the cell to the left of a is triangular
void getTriVerts (FaceId f, VertId &v0, VertId &v1, VertId &v2) const
MR_BIND_IGNORE void getTriVerts (FaceId f, VertId(&v)[3]) const
void getTriVerts (FaceId f, ThreeVertIds &v) const
 This one is not in the bindings because of the reference-to-array parameter.
ThreeVertIds getTriVerts (FaceId f) const
bool isTriVert (FaceId f, VertId v) const
 return true if triangular face (f) has (v) as one of its vertices
std::vector< ThreeVertIdsgetAllTriVerts () const
 returns three vertex ids for valid triangles, invalid triangles are skipped
Triangulation getTriangulation () const
void getLeftTriVerts (EdgeId a, VertId &v0, VertId &v1, VertId &v2) const
MR_BIND_IGNORE void getLeftTriVerts (EdgeId a, VertId(&v)[3]) const
void getLeftTriVerts (EdgeId a, ThreeVertIds &v) const
 This one is not in the bindings because of the reference-to-array parameter.
ThreeVertIds getLeftTriVerts (EdgeId a) const
template<typename T>
void forEachVertex (const MeshTriPoint &p, T &&callback) const
void getLeftTriEdges (EdgeId e0, EdgeId &e1, EdgeId &e2) const
void getTriEdges (FaceId f, EdgeId &e0, EdgeId &e1, EdgeId &e2) const
MR_BIND_IGNORE void getTriEdges (FaceId f, EdgeId(&e)[3]) const
bool isLeftQuad (EdgeId a) const
 This one is not in the bindings because of the reference-to-array parameter.
const Vector< EdgeId, VertId > & edgePerVertex () const
 for all valid vertices this vector contains an edge with the origin there
EdgeId edgeWithOrg (VertId a) const
 returns valid edge if given vertex is present in the mesh
bool hasVert (VertId a) const
 returns true if given vertex is present in the mesh
int numValidVerts () const
 returns the number of valid vertices
VertId lastValidVert () const
 returns last valid vertex id, or invalid id if no single valid vertex exists
VertId addVertId ()
 creates new vert-id not associated with any edge yet
void vertResize (size_t newSize)
 explicitly increases the size of vertices vector
void vertResizeWithReserve (size_t newSize)
 explicitly increases the size of vertices vector, doubling the current capacity if it was not enough
void vertReserve (size_t newCapacity)
 sets the capacity of vertices vector
size_t vertSize () const
 returns the number of vertex records including invalid ones
size_t vertCapacity () const
 returns the number of allocated vert records
const VertBitSet & getValidVerts () const
 returns cached set of all valid vertices
void flip (VertBitSet &vs) const
 sets in (vs) all valid vertices that were not selected before the call, and resets other bits
const VertBitSet & getVertIds (const VertBitSet *region) const
 if region pointer is not null then converts it in reference, otherwise returns all valid vertices in the mesh
const Vector< EdgeId, FaceId > & edgePerFace () const
 for all valid faces this vector contains an edge with that face at left
EdgeId edgeWithLeft (FaceId a) const
 returns valid edge if given vertex is present in the mesh
bool hasFace (FaceId a) const
 returns true if given face is present in the mesh
EdgeId sharedEdge (FaceId l, FaceId r) const
 if two valid faces share the same edge then it is found and returned
EdgeId sharedVertInOrg (EdgeId a, EdgeId b) const
 if two valid edges share the same vertex then it is found and returned as Edge with this vertex in origin
EdgeId sharedVertInOrg (FaceId l, FaceId r) const
 if two valid faces share the same vertex then it is found and returned as Edge with this vertex in origin
FaceId sharedFace (EdgeId a, EdgeId b) const
 if two valid edges belong to same valid face then it is found and returned
int numValidFaces () const
 returns the number of valid faces
FaceId lastValidFace () const
 returns last valid face id, or invalid id if no single valid face exists
FaceId addFaceId ()
 creates new face-id not associated with any edge yet
void deleteFace (FaceId f, const UndirectedEdgeBitSet *keepEdges=nullptr)
 deletes the face, also deletes its edges and vertices if they were not shared by other faces and not in
void deleteFaces (const FaceBitSet &fs, const UndirectedEdgeBitSet *keepEdges=nullptr)
 deletes multiple given faces by calling deleteFace for each
void faceResize (size_t newSize)
 explicitly increases the size of faces vector
void faceResizeWithReserve (size_t newSize)
 explicitly increases the size of faces vector, doubling the current capacity if it was not enough
void faceReserve (size_t newCapacity)
 sets the capacity of faces vector
size_t faceSize () const
 returns the number of face records including invalid ones
size_t faceCapacity () const
 returns the number of allocated face records
const FaceBitSet & getValidFaces () const
 returns cached set of all valid faces
void flip (FaceBitSet &fs) const
 sets in (fs) all valid faces that were not selected before the call, and resets other bits
const FaceBitSet & getFaceIds (const FaceBitSet *region) const
 if region pointer is not null then converts it in reference, otherwise returns all valid faces in the mesh
EdgeId bdEdgeSameLeft (EdgeId e, const FaceBitSet *region=nullptr) const
bool isLeftBdFace (EdgeId e, const FaceBitSet *region=nullptr) const
EdgeId bdEdgeWithLeft (FaceId f, const FaceBitSet *region=nullptr) const
bool isBdFace (FaceId f, const FaceBitSet *region=nullptr) const
 returns true if given face belongs to the region and it has a boundary edge (isBdEdge(e,region) == true)
FaceBitSet findBdFaces (const FaceBitSet *region=nullptr) const
 returns all faces for which isBdFace(f, region) is true
bool isLeftInRegion (EdgeId e, const FaceBitSet *region=nullptr) const
 return true if left face of given edge belongs to region (or just have valid id if region is nullptr)
bool isInnerEdge (EdgeId e, const FaceBitSet *region=nullptr) const
 return true if given edge is inner for given region (or for whole mesh if region is nullptr)
bool isBdEdge (EdgeId e, const FaceBitSet *region=nullptr) const
EdgeBitSet findLeftBdEdges (const FaceBitSet *region=nullptr, const EdgeBitSet *test=nullptr) const
 returns all (test) edges for which left(e) does not belong to the region and isBdEdge(e, region) is true
EdgeId bdEdgeSameOrigin (EdgeId e, const FaceBitSet *region=nullptr) const
bool isBdVertexInOrg (EdgeId e, const FaceBitSet *region=nullptr) const
 returns true if edge's origin is on (region) boundary
EdgeId bdEdgeWithOrigin (VertId v, const FaceBitSet *region=nullptr) const
bool isBdVertex (VertId v, const FaceBitSet *region=nullptr) const
 returns true if given vertex is on (region) boundary
VertBitSet findBdVerts (const FaceBitSet *region=nullptr, const VertBitSet *test=nullptr) const
 returns all (test) vertices for which isBdVertex(v, region) is true
bool isInnerOrBdVertex (VertId v, const FaceBitSet *region=nullptr) const
 returns true if one of incident faces of given vertex pertain to given region (or any such face exists if region is nullptr)
bool isLeftBdEdge (EdgeId e, const FaceBitSet *region=nullptr) const
 returns true if left face of given edge belongs to given region (if provided) and right face either does not exist or does not belong
bool isInnerOrBdEdge (EdgeId e, const FaceBitSet *region=nullptr) const
 return true if given edge is inner or boundary for given region (or for whole mesh if region is nullptr), returns false for lone edges
EdgeId nextLeftBd (EdgeId e, const FaceBitSet *region=nullptr, Turn turn=Turn::Rightmost) const
EdgeId prevLeftBd (EdgeId e, const FaceBitSet *region=nullptr, Turn turn=Turn::Rightmost) const
EdgeId findEdge (VertId o, VertId d) const
 finds and returns edge from o to d in the mesh; returns invalid edge otherwise
bool isClosed (const FaceBitSet *region=nullptr) const
 returns true if the mesh (region) does not have any neighboring holes
std::vector< EdgeId > findHoleRepresentiveEdges (const FaceBitSet *region=nullptr) const
int findNumHoles (EdgeBitSet *holeRepresentativeEdges=nullptr) const
EdgeLoop getLeftRing (EdgeId e) const
 returns full edge-loop of left face from (e) starting from (e) itself
std::vector< EdgeLoopgetLeftRings (const std::vector< EdgeId > &es) const
MR_BIND_IGNORE EdgeBitSet findBoundaryEdges () const
 returns all boundary edges, where each edge does not have valid left face
MR_BIND_IGNORE FaceBitSet findBoundaryFaces (const FaceBitSet *region=nullptr) const
MR_BIND_IGNORE VertBitSet findBoundaryVerts (const VertBitSet *region=nullptr) const
VertBitSet getPathVertices (const EdgePath &path) const
 returns all vertices incident to path edges
FaceBitSet getPathLeftFaces (const EdgePath &path) const
 returns all valid left faces of path edges
FaceBitSet getPathRightFaces (const EdgePath &path) const
 returns all valid right faces of path edges
void flipEdge (EdgeId e)
template<typename T>
void flipEdgesIn (EdgeId e0, T &&flipNeeded)
template<typename T>
void flipEdgesIn (VertId v, T &&flipNeeded)
template<typename T>
void flipEdgesOut (EdgeId e0, T &&flipNeeded)
template<typename T>
void flipEdgesOut (VertId v, T &&flipNeeded)
EdgeId splitEdge (EdgeId e, FaceBitSet *region=nullptr, FaceHashMap *new2Old=nullptr)
VertId splitFace (FaceId f, FaceBitSet *region=nullptr, FaceHashMap *new2Old=nullptr)
void flipOrientation (const UndirectedEdgeBitSet *fullComponents=nullptr)
void addPart (const MeshTopology &from, const PartMapping &map={}, bool rearrangeTriangles=false)
void addPart (const MeshTopology &from, FaceMap *outFmap=nullptr, VertMap *outVmap=nullptr, WholeEdgeMap *outEmap=nullptr, bool rearrangeTriangles=false)
void addPartByMask (const MeshTopology &from, const FaceBitSet *fromFaces, const PartMapping &map={})
 the same but copies only portion of (from) specified by fromFaces,
MR_BIND_IGNORE void addPartByMask (const MeshTopology &from, const FaceBitSet &fromFaces, const PartMapping &map={})
 This is skipped in the bindings because it conflicts with the overload taking a pointer in C#. Since that overload is strictly more useful, we're keeping that one.
void addPartByMask (const MeshTopology &from, const FaceBitSet *fromFaces, bool flipOrientation=false, const std::vector< EdgePath > &thisContours={}, const std::vector< EdgePath > &fromContours={}, const PartMapping &map={})
MR_BIND_IGNORE void addPartByMask (const MeshTopology &from, const FaceBitSet &fromFaces, bool flipOrientation=false, const std::vector< EdgePath > &thisContours={}, const std::vector< EdgePath > &fromContours={}, const PartMapping &map={})
 This is skipped in the bindings because it conflicts with the overload taking a pointer in C#. Since that overload is strictly more useful, we're keeping that one.
void rotateTriangles ()
 for each triangle selects edgeWithLeft with minimal origin vertex
void pack (FaceMap *outFmap=nullptr, VertMap *outVmap=nullptr, WholeEdgeMap *outEmap=nullptr, bool rearrangeTriangles=false)
void pack (const PackMapping &map)
void packMinMem (const PackMapping &map)
void write (std::ostream &s) const
 saves in binary stream
Expected< void > read (std::istream &s, ProgressCallback callback={})
bool operator== (const MeshTopology &b) const
 compare that two topologies are exactly the same
void resizeBeforeParallelAdd (size_t edgeSize, size_t vertSize, size_t faceSize)
void addPackedPart (const MeshTopology &from, EdgeId toEdgeId, const FaceMap &fmap, const VertMap &vmap)
bool computeValidsFromEdges (ProgressCallback cb={})
void stopUpdatingValids ()
 stops updating validVerts(), validFaces(), numValidVerts(), numValidFaces() for parallel processing of mesh parts
bool updatingValids () const
 returns whether the methods validVerts(), validFaces(), numValidVerts(), numValidFaces() can be called
void preferEdges (const UndirectedEdgeBitSet &stableEdges)
bool buildGridMesh (const GridSettings &settings, ProgressCallback cb={})
 constructs triangular grid mesh topology in parallel
bool checkValidity (ProgressCallback cb={}, bool allVerts=true) const

Friends

class MeshTopologyDiff

Detailed Description

Mesh Topology


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