|
|
virtual | ~MbPolymeshTopo () |
| | Destructor.
|
| |
| virtual bool | GetMesh (MbMesh &mesh) const =0 |
| | Create a polygonal geometric object MbMesh by segmentation. More...
|
| |
|
virtual MbPolymeshTopo * | Clone () const =0 |
| | Clone.
|
| |
| virtual void | CalculateGabarit (const MbMatrix3D &matrInto, MbCube &bb) const =0 |
| | Calculate a bounding box in the local coordinate system. More...
|
| |
|
virtual const MbHalfedge & | GetMeshTopo () const =0 |
| | Get mesh topology.
|
| |
| virtual void | Reserve (size_t nVx, size_t nEd, size_t nF)=0 |
| | Reserve memory for vertices, edges and facets. More...
|
| |
| virtual size_t | CloneVertex (size_t iVx)=0 |
| | Clone vertex. More...
|
| |
|
virtual size_t | AddVertex ()=0 |
| | Add an active vertex.
|
| |
|
virtual size_t | AddEdge ()=0 |
| | Add an active edge.
|
| |
|
virtual size_t | AddFacet ()=0 |
| | Add an active facet.
|
| |
| virtual void | MakeVertexInactive (size_t iVx)=0 |
| | Make a vertex inactive. More...
|
| |
| virtual void | MakeEdgeInactive (size_t iEd)=0 |
| | Make an edge inactive. More...
|
| |
| virtual void | MakeFacetInactive (size_t iF)=0 |
| | Make an facet inactive. More...
|
| |
| virtual void | SewEdges (size_t iEd0, size_t iEd1)=0 |
| | Sew the edges. More...
|
| |
| virtual size_t | AddFacet (const c3d::IndicesVector &vertices)=0 |
| | Add a facet by given vertices. More...
|
| |
|
virtual void | SewByVertices ()=0 |
| | Sew mesh (set twins) after adding all facets by AddFacet( const c3d::IndicesVector & vertices ) function.
|
| |
|
virtual void | DeleteInactive ()=0 |
| | Remove inactive vertices, edges, facets, regions and loops.
|
| |
|
virtual void | Invert ()=0 |
| | Invert normals.
|
| |
|
virtual void | Transform (const MbMatrix3D &matr)=0 |
| | Transform according to the matrix.
|
| |
|
virtual void | Move (const MbVector3D &to)=0 |
| | Translate along a vector.
|
| |
|
virtual void | Rotate (const MbAxis3D &axis, double angle)=0 |
| | Rotate around an axis.
|
| |
| virtual void | DeleteFacets (const c3d::IndicesVector &facets)=0 |
| | Delete facets. More...
|
| |
| virtual bool | FlipEdge (size_t iEd)=0 |
| | Flip an edge. More...
|
| |
| virtual size_t | SplitEdge (size_t iEd, double prm)=0 |
| | Split an edge at a ratio. More...
|
| |
| virtual void | SplitFacet (size_t eVx0, size_t eVx1, c3d::IndicesPair &eNew)=0 |
| | Split a facet by creating an edge connecting its two given edges. More...
|
| |
| virtual bool | JoinEdgeFacets (size_t iEd)=0 |
| | Join facets sharing a given edge. More...
|
| |
| virtual bool | RemoveVertexValence2 (size_t iVx)=0 |
| | Remove the vertex of valence two and join the corresponding edges into one. More...
|
| |
| virtual size_t | InsertVertexTriangle (size_t iTr, double u, double v)=0 |
| | Insert a vertex into a triangle by baricentric coordinates. More...
|
| |
| virtual size_t | InsertVertexFacet (const c3d::IndicesVector &edgesSplit, const std::array< size_t, 3 > &edgesInterpolate, double u, double v)=0 |
| | Insert a vertex into a facet by baricentric coordinates. More...
|
| |
| virtual double | FindNearest (const MbCartPoint3D &pnt, MbCartPoint3D &pntProj, size_t &iFacet) const =0 |
| | Find the nearest point and return the distance to it. More...
|
| |
| virtual bool | FindLineIntersection (const MbAxis3D &ray, MbCartPoint3D &pntCross, double &tRes, size_t &iFacet) const =0 |
| | Find the nearest point of intersection with a ray. More...
|
| |
| virtual bool | TriangulateFacet (size_t iFacet)=0 |
| | Triangulate a given facet. More...
|
| |
| virtual void | GetPart (const c3d::IndicesVector &facets, MbPolymeshTopo &part) const =0 |
| | Gather selected facets into a separate object. More...
|
| |
|
virtual bool | IsSegmented () const =0 |
| | Check whether the segmentation is initialized.
|
| |
|
virtual void | Initialize (const MbHalfedgeBoundaryCriterionBase &crit)=0 |
| | Initialize a segmentation by a boundary criterion.
|
| |
|
virtual void | Initialize ()=0 |
| | Initialize segmentation with one region.
|
| |
|
virtual const MbHalfedge & | GetSegmTopo () const =0 |
| | Get the topology of a segmentation.
|
| |
|
virtual size_t | LoopsCount () const =0 |
| | Get loop count.
|
| |
|
virtual const MbSegmentationLoop & | Loop (size_t iLoop) const =0 |
| | Get a loop.
|
| |
|
virtual bool | IsInnerLoop (size_t iLoop) const =0 |
| | Check whether the loop is inner.
|
| |
|
virtual size_t | RegionCount () const =0 |
| | Get region count.
|
| |
|
virtual bool | IsRegionActive (size_t iRegion) const =0 |
| | Check whether the region is active.
|
| |
|
virtual size_t | SubRegionsCount () const =0 |
| | Get subregions count.
|
| |
|
virtual size_t | SubRegionsCount (size_t iRegion) const =0 |
| | Get subregion count for a given region.
|
| |
|
virtual const MbSegmentationSubRegion & | SubRegion (size_t iSub) const =0 |
| | Get a subregion.
|
| |
|
virtual size_t | EdgeSegmCount () const =0 |
| | Get segmentation edge count.
|
| |
|
virtual const MbHalfedgeEdge & | EdgeSegm (size_t iEdSegm) const =0 |
| | Get a segmentation edge.
|
| |
|
virtual bool | IsInnerEdge (size_t iEdSegm) const =0 |
| | Is a segmentation edge inner.
|
| |
|
virtual size_t | GetSegmEdgeId (size_t iEdTopo) const =0 |
| | Get the index of a segmentation edge for a mesh edge.
|
| |
|
virtual void | GetFacetRegionId (size_t iFacet, size_t &iRegion, size_t &iSubRegion) const =0 |
| | Get the region index and subregion index for the given facet.
|
| |
|
virtual size_t | VertexSegmCount () const =0 |
| | Get segmentation vertex count.
|
| |
|
virtual const MbHalfedgeVertex & | VertexSegm (size_t iVxSegm) const =0 |
| | Get a segmentation vertex.
|
| |
| virtual void | GetRegion (size_t r, c3d::IndicesVector &facets) const =0 |
| | Get the indices of facets inside a region. More...
|
| |
| virtual void | GetSubRegion (size_t iSub, c3d::IndicesVector &facets, bool bAdd=false) const =0 |
| | Get the indices of facets inside a subregion. More...
|
| |
|
virtual void | DeleteRegion (size_t iRegion)=0 |
| | Delete a region.
|
| |
| virtual void | SplitByEdgesTopo (const c3d::IndicesVector &splitSet, bool bKeepRegions)=0 |
| | Split a segmentation by seleted edges. More...
|
| |
| virtual void | RemoveTopoEdgesFromSegm (const c3d::IndicesVector &edgesToDel)=0 |
| | Remove mesh edges from segmentation edges. More...
|
| |
| virtual bool | RemoveSegmEdges (const c3d::IndicesVector &edgesToDel)=0 |
| | Segmentation edges to remove. Merges all regions connected through removed edges into one. This region has the ID of the original region with the largest area. More...
|
| |
| virtual void | MergeRegions (const c3d::IndicesVector ®ions, bool bRemoveValence2)=0 |
| | Merge several regions into one. More...
|
| |
| virtual void | UnsewSegmEdges (const c3d::IndicesVector &edgesSegmToUnsew)=0 |
| | Unsew segmentation edges. More...
|
| |
| virtual void | UnsewTopoEdges (const c3d::IndicesVector &edgesTopoToUnsew)=0 |
| | Unsew topology edges. More...
|
| |
| virtual void | SplitByFacetsTopo (const c3d::IndicesVector &splitSet, bool bMakeOneRegion, bool bKeepRegions)=0 |
| | Split a segmentation by a given facet set. More...
|
| |
|
virtual void | SplitRegionBySubregions (size_t iReg)=0 |
| | Make new regions from the subregions of a region.
|
| |
| virtual c3d::IndicesPair | SplitSegmentationEdge (size_t iEdSegm, size_t iEdTopo, size_t iVxSegmSplit=SYS_MAX_T)=0 |
| | Split a segmentation edge by a given mesh edge. More...
|
| |
|
virtual bool | ExtractSubRegionAsRegion (size_t iSub)=0 |
| | Make a new region from a given subregion.
|
| |
|
virtual void | RemoveSegmVertexValence2 (size_t iVx)=0 |
| | Remove the segmentation vertex of valence two and join the corresponding segmentation edges into one.
|
| |
|
virtual size_t | GetTopoVertex (size_t iVxSegm) const =0 |
| | Get the index of a mesh vertex corresponding to a given segmentation vertex.
|
| |
| virtual size_t | NextLoopEdge (size_t iEdSegm, bool bExcudeInner) const =0 |
| | Get the next segmentation edge in a loop. More...
|
| |
| virtual size_t | PrevLoopEdge (size_t iEdSegm, bool bExcudeInner) const =0 |
| | Get the previous segmentation edge in a loop. More...
|
| |
|
virtual size_t | GetSegmEdgeRegionId (size_t iEdSegm) const =0 |
| | Get the index of a region containing a given segmentation edge.
|
| |
|
virtual size_t | GetSegmEdgeSubRegionId (size_t iEdSegm) const =0 |
| | Get the index of a subregion containing a given segmentation edge.
|
| |
|
virtual size_t | GetLoopRegionId (size_t iLoop) const =0 |
| | Get the index of a region containing a given loop.
|
| |
|
virtual size_t | GetLoopSubRegionId (size_t iLoop) const =0 |
| | Get the index of a subregion containing a given loop.
|
| |
|
virtual size_t | GetNeighborRegionId (size_t iEdSegm) const =0 |
| | Get the index of a region on the other side of a segmentation edge.
|
| |
|
virtual size_t | GetNeighborSubRegionId (size_t iEdSegm) const =0 |
| | Get the index of a subregion on the other side of a segmentation edge.
|
| |
|
virtual MbAttributeContainer * | GetSegmRegionModelAttributes (size_t iRegion, bool bCreate)=0 |
| | Get the region attribute container.
|
| |
|
virtual const MbAttributeContainer * | GetSegmRegionModelAttributes (size_t iRegion) const =0 |
| | Get the region attribute container.
|
| |
|
virtual MbAttributeContainer * | GetSegmEdgeModelAttributes (size_t iEdSegm, bool bCreate)=0 |
| | Get the segmentation edge attribute container.
|
| |
|
virtual const MbAttributeContainer * | GetSegmEdgeModelAttributes (size_t iEdSegm) const =0 |
| | Get the segmentation edge attribute container.
|
| |
|
virtual MbAttributeContainer * | GetSegmVertexModelAttributes (size_t iVxSegm, bool bCreate)=0 |
| | Get the segmentation vertex attribute container.
|
| |
|
virtual const MbAttributeContainer * | GetSegmVertexModelAttributes (size_t iVxSegm) const =0 |
| | Get the segmentation vertex attribute container.
|
| |
|
size_t | MeshHalfedgeAttributeCount () const |
| | Get mesh attribute count.
|
| |
|
size_t | SegmHalfedgeAttributeCount () const |
| | Get segmentation attribute count.
|
| |
|
template<class T > |
| T * | AddMeshHalfedgeAttribute () |
| | Add to the mesh an attribute of a given type.
|
| |
|
template<class T > |
| T * | AddSegmHalfedgeAttribute () |
| | Add to the segmentation an attribute of a given type.
|
| |
|
template<class T > |
| T * | GetMeshHalfedgeAttribute () |
| | Get the mesh attribute of a given type for editing.
|
| |
|
template<class T > |
| const T * | GetMeshHalfedgeAttribute () const |
| | Get the mesh attribute of a given type.
|
| |
|
template<class T > |
| T * | GetSegmHalfedgeAttribute () |
| | Get the segmentation attribute of a given type for editing.
|
| |
|
template<class T > |
| const T * | GetSegmHalfedgeAttribute () const |
| | Get the segmentation attribute of a given type.
|
| |
|
template<class T > |
| void | DeleteMeshHalfedgeAttribute () |
| | Delete the mesh attribute of a given type.
|
| |
|
template<class T > |
| void | DeleteSegmHalfedgeAttribute () |
| | Delete the segmentation attribute of a given type.
|
| |
|
MbHalfedgeAttrBase * | GetMeshHalfedgeAttributeByIndex (size_t ind) |
| | Get the mesh attribute by index for editing.
|
| |
|
const MbHalfedgeAttrBase * | GetMeshHalfedgeAttributeByIndex (size_t ind) const |
| | Get the mesh attribute by index.
|
| |
|
MbHalfedgeAttrBase * | GetSegmHalfedgeAttributeByIndex (size_t ind) |
| | Get the segmentation attribute by index for editing.
|
| |
|
const MbHalfedgeAttrBase * | GetSegmHalfedgeAttributeByIndex (size_t ind) const |
| | Get the segmentation attribute by index.
|
| |
|
void | DeleteMeshHalfedgeAttribute (MbHalfedgeAttrBase *pAttr) |
| | Delete the given mesh attribute.
|
| |
|
void | DeleteSegmHalfedgeAttribute (MbHalfedgeAttrBase *pAttr) |
| | Delete the given segmentation attribute.
|
| |
|
virtual const MbFaceShell * | GetSubstrateShell () const =0 |
| | Get the substrate shell.
|
| |
|
virtual void | DeleteSubstrateShell ()=0 |
| | Delete the substrate shell.
|
| |
|
virtual const MbFace * | GetSubstrateShellFace (size_t iRegion) const =0 |
| | Get the shell face corresponding to a given segmentation region.
|
| |
|
virtual const MbCurveEdge * | GetSubstrateShellEdge (size_t iEdSegm) const =0 |
| | Get the shell edge corresponding to a given segmentation edge.
|
| |
| virtual bool | GetRegionPointByParameter (size_t iReg, const MbCartPoint &uv, bool bPercents, MbCartPoint3D &point) const =0 |
| | Get the region 3D point by the 2D parameter. More...
|
| |
|
virtual MbeRefType | RefType () const |
| | Registration type (for copying, duplication).
|
| |
|
void | AddRegistrator (MbRegDuplicate *reg) const |
| | Add the register.
|
| |
|
void | RemoveRegistrator (MbRegDuplicate *reg) const |
| | Remove the register.
|
| |
|
refcount_t | GetUseCount () const |
| | Get count of references (get count of owners of an object).
|
| |
|
refcount_t | AddRef () const |
| | Increase count of references by one.
|
| |
|
refcount_t | DecRef () const |
| | Decrease count of references by one.
|
| |
|
refcount_t | Release () const |
| | Decrease count of references by one and if count of references became zero, then remove itself.
|
| |
Mesh topology representation as a halfedge.
Halfedge representation portrays a polygonal model as a directed graph. The key element is a directed edge associated with the facet to which it belongs and the vertex from which the edge originates. Each non-boundary edge of the surface in this model is represented as a pair of oppositely directed edges (the edge itself and its twin).
With graph representation information about the topology can be stored and used in a wide range of more efficient graph-based algorithms as compared with the traditional representation, which suffers with inefficiency.
For traversal edges are organized into closed loops around facets. For an edge, you can get the next edge in this loop, the previous edge in the loop, the facet to which the loop belongs, and the twin edge. Facets are grouped around the vertex form a vertex fan. An additional way to iterate through the topology is to cycle through facets or edge pairs in the vertex fan. For this purpose each vertex contains a reference to a beginning edge for a counterclockwise traversal.
To provide a flexible way to manipulate data associated with the topology, each element can be assigned with an attribute that stores additional information. For example, a vertex can have an attribute that stores its 3D coordinats. With attributes it is possible to store user data with bool, float, double, unsigned int, int, and size_t information.
This object, in addition to the topology, stores information about the object's segmentation.
An object can be logically divided into regions. Each region can store a set of connected components, named subregions. Similar to the halfedge organization, each subregion can have one or more edge loops.
- Warning
- Under development.