10namespace MeshComponents
43 int * numSmallerComponents = nullptr );
54 UndirectedEdgeBitSet * outBdEdgesBetweenLargeComps =
nullptr );
66 const UndirectedEdgeBitSet *
isCompBd =
nullptr;
89 const UndirectedEdgeBitSet *
isCompBd =
nullptr;
98 UndirectedEdgeBitSet * outBdEdgesBetweenLargeComps =
nullptr );
124[[nodiscard]]
MRMESH_API std::vector<FaceBitSet>
getAllComponents( Face2RegionMap& componentsMap,
int componentsCount,
const FaceBitSet& region,
125 int maxComponentCount );
135 const Face2RegionMap & regionMap,
int numRegions );
141 const Face2RegionMap & regionMap,
int numRegions,
float minArea );
191 VertBitSet * outPathVerts =
nullptr );
194 VertBitSet* outPathVerts =
nullptr );
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
Definition MRMesh/MRMeshTopology.h:18
Union-find data structure for representing disjoin sets of elements with few very quick operations: 1...
Definition MRUnionFind.h:20
std::vector<T>-like container that requires specific indexing type,
Definition MRMesh/MRVector.h:19
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:663
MRMESH_API UnionFind< FaceId > getUnionFindStructureFacesPerEdge(const MeshPart &meshPart, const UndirectedEdgeBitSet *isCompBd={})
MRMESH_API std::vector< VertBitSet > getAllComponentsVertsSeparatedByPaths(const Mesh &mesh, const std::vector< SurfacePath > &paths)
gets all connected components, separating vertices by given paths (either closed or from boundary to ...
MRMESH_API UnionFind< VertId > getUnionFindStructureVerts(const Mesh &mesh, const VertBitSet *region=nullptr)
gets union-find structure for vertices
MRMESH_API std::vector< FaceBitSet > getAllComponents(const MeshPart &meshPart, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
MRMESH_API VertBitSet getComponentVerts(const Mesh &mesh, VertId id, const VertBitSet *region=nullptr)
MRMESH_API std::vector< VertBitSet > getAllComponentsVertsSeparatedByPath(const Mesh &mesh, const SurfacePath &path)
gets all connected components, separating vertices by given path (either closed or from boundary to b...
MRMESH_API FaceBitSet getLargeByAreaComponents(const MeshPart &meshPart, float minArea, const UndirectedEdgeBitSet *isCompBd)
returns the union of connected components, each having at least given area
const UndirectedEdgeBitSet * isCompBd
optional predicate of boundaries between components
Definition MRMesh/MRMeshComponents.h:89
MRMESH_API size_t getNumComponents(const MeshPart &meshPart, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
returns the number of connected components in mesh part
int maxLargeComponents
return at most given number of largest by area connected components
Definition MRMesh/MRMeshComponents.h:80
MRMESH_API UnionFind< VertId > getUnionFindStructureVertsSeparatedByPath(const Mesh &mesh, const SurfacePath &path, VertBitSet *outPathVerts=nullptr)
gets union-find structure for vertices, separating vertices by given path (either closed or from boun...
const UndirectedEdgeBitSet * isCompBd
optional predicate of boundaries between components
Definition MRMesh/MRMeshComponents.h:66
MRMESH_API UndirectedEdgeBitSet getComponentsUndirectedEdges(const Mesh &mesh, const UndirectedEdgeBitSet &seeds)
returns union of connected components, each of which contains at least one seed edge
MRMESH_API Vector< double, RegionId > getRegionAreas(const MeshPart &meshPart, const Face2RegionMap ®ionMap, int numRegions)
computes the area of each region given via the map
MRMESH_API std::vector< FaceBitSet > getNLargeByAreaComponents(const MeshPart &meshPart, const LargeByAreaComponentsSettings &settings)
returns requested number of largest by area connected components in descending by area order
float minArea
do not consider a component large if its area is below this value
Definition MRMesh/MRMeshComponents.h:86
FaceIncidence
Face incidence type.
Definition MRMesh/MRMeshComponents.h:19
MRMESH_API std::vector< EdgeBitSet > getAllComponentsEdges(const Mesh &mesh, const EdgeBitSet &edges)
subdivides given edges on connected components
MRMESH_API FaceBitSet getComponents(const MeshPart &meshPart, const FaceBitSet &seeds, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
returns union of connected components, each of which contains at least one seed face
MRMESH_API VertBitSet getLargestComponentVerts(const Mesh &mesh, const VertBitSet *region=nullptr)
returns the largest by number of elements component
FaceIncidence incidence
Definition MRMesh/MRMeshComponents.h:63
MRMESH_API std::vector< UndirectedEdgeBitSet > getAllComponentsUndirectedEdges(const Mesh &mesh, const UndirectedEdgeBitSet &edges)
subdivides given edges on connected components
int * optOutNumComponents
optional output number of components
Definition MRMesh/MRMeshComponents.h:69
MRMESH_API FaceBitSet getLargeByAreaSmoothComponents(const MeshPart &meshPart, float minArea, float angleFromPlanar, UndirectedEdgeBitSet *outBdEdgesBetweenLargeComps=nullptr)
float coverRatio
Definition MRMesh/MRMeshComponents.h:61
MRMESH_API UnionFind< FaceId > getUnionFindStructureFaces(const MeshPart &meshPart, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
gets union-find structure for faces with different options of face-connectivity
MRMESH_API std::pair< FaceBitSet, int > getLargeByAreaRegions(const MeshPart &meshPart, const Face2RegionMap ®ionMap, int numRegions, float minArea)
MRMESH_API bool hasFullySelectedComponent(const Mesh &mesh, const VertBitSet &selection)
returns true if all vertices of a mesh connected component are present in selection
MRMESH_API UnionFind< VertId > getUnionFindStructureVertsEx(const Mesh &mesh, const UndirectedEdgeBitSet &ignoreEdges)
gets union-find structure for vertices, considering connections by all edges excluding given ones
MRMESH_API std::vector< VertBitSet > getAllComponentsVerts(const Mesh &mesh, const VertBitSet *region=nullptr)
gets all connected components of mesh part
MRMESH_API std::pair< Face2RegionMap, int > getAllComponentsMap(const MeshPart &meshPart, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
MRMESH_API FaceBitSet getLargestComponent(const MeshPart &meshPart, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={}, float minArea=0, int *numSmallerComponents=nullptr)
returns the largest by surface area component or empty set if its area is smaller than
MRMESH_API void excludeFullySelectedComponents(const Mesh &mesh, VertBitSet &selection)
if all vertices of a mesh connected component are present in selection, excludes these vertices
MRMESH_API VertBitSet getLargeComponentVerts(const Mesh &mesh, int minVerts, const VertBitSet *region=nullptr)
returns the union of vertex connected components, each having at least
MRMESH_API FaceBitSet getComponent(const MeshPart &meshPart, FaceId id, FaceIncidence incidence=FaceIncidence::PerEdge, const UndirectedEdgeBitSet *isCompBd={})
MRMESH_API VertBitSet getComponentsVerts(const Mesh &mesh, const VertBitSet &seeds, const VertBitSet *region=nullptr)
returns union of connected components, each of which contains at least one seed vert
MRMESH_API UnionFind< UndirectedEdgeId > getUnionFindStructureUndirectedEdges(const Mesh &mesh, bool allPointToRoots=false)
int * numSmallerComponents
optional output: the number of components in addition to returned ones
Definition MRMesh/MRMeshComponents.h:83
ProgressCallback cb
Definition MRMesh/MRMeshComponents.h:71
MRMESH_API UnionFind< VertId > getUnionFindStructureVertsSeparatedByPaths(const Mesh &mesh, const std::vector< SurfacePath > &paths, VertBitSet *outPathVerts=nullptr)
MRMESH_API Expected< FaceBitSet > expandToComponents(const MeshPart &mp, const FaceBitSet &seeds, const ExpandToComponentsParams ¶ms={})
expands given seeds to whole components
@ PerVertex
face can have neighbor via vertex
Definition MRMesh/MRMeshComponents.h:21
@ PerEdge
face can have neighbor only via edge
Definition MRMesh/MRMeshComponents.h:20
Definition MRCameraOrientationPlugin.h:8
tl::expected< T, E > Expected
Definition MRExpected.h:25
std::vector< MeshEdgePoint > SurfacePath
Definition MRMesh/MRMeshFwd.h:416
Definition MRMesh/MRMeshComponents.h:57
Definition MRMesh/MRMeshComponents.h:78
Definition MRMesh/MRMesh.h:22