Navigation
API > API/Runtime > API/Runtime/GeometryCore > API/Runtime/GeometryCore/DynamicMesh
References
| Module | GeometryCore |
| Header | /Engine/Source/Runtime/GeometryCore/Public/DynamicMesh/DynamicMesh3.h |
| Include | #include "DynamicMesh/DynamicMesh3.h" |
Syntax
class FDynamicMesh3
Remarks
FDynamicMesh3 is a dynamic triangle mesh class. The mesh has has connectivity, is an indexed mesh, and allows for gaps in the index space.
internally, all data is stored in POD-type buffers, except for the vertex->edge links, which are stored as List
Reference counts for verts/tris/edges are stored as separate FRefCountVector instances.
Vertices are stored as doubles, although this should be easily changed if necessary, as the internal data structure is not exposed
Per-vertex Vertex Normals, Colors, and UVs are optional and stored as floats. Note that in practice, these are generally only used as scratch space, in limited circumstances, usually when needed for performance reasons. Most of our geometry code instead prefers to read attributes from the per-triangle AttributeSet accessed via Attributes() (see TDynamicMeshOverlay for a description of the structure). For instance, an empty (but existing) attribute set will take precedence over non-empty vertex normals in much of our processing code.
For each vertex, VertexEdgeLists[i] is the unordered list of connected edges. The elements of the list are indices into the edges list. This list is unsorted but can be traversed in-order (ie cw/ccw) at some additional cost.
Triangles are stored as 3 ints, with optionally a per-triangle integer group id. The group IDs stored here DO get widely used and preserved in our geometry code (unlike the per-vertex attributes described earlier), even though the AttributeSet can store group IDs as well (potentially in multiple layers).
The edges of a triangle are similarly stored as 3 ints, in triangle_edes. If the triangle is [v1,v2,v3], then the triangle edges [e1,e2,e3] are e1=edge(v1,v2), e2=edge(v2,v3), e3=edge(v3,v1), where the e# are indexes into edges.
Edges are stored as tuples of 4 ints. If the edge is between v1 and v2, with neighbour tris t1 and t2, then the edge is [min(v1,v2), max(v1,v2), t1, t2]. For a boundary edge, t2 is InvalidID. t1 is never InvalidID.
Most of the class assumes that the mesh is manifold. Many functions will work if the topology is non-manifold, but behavior of operators like Split/Flip/Collapse edge is untested.
The function CheckValidity() does extensive sanity checking on the mesh data structure. Use this to test your code, both for mesh construction and editing!!
Variables
| Type | Name | Description | |
|---|---|---|---|
| TUniquePtr< FDynamicMeshAttributeSet > | AttributeSet | Extended Attributes for the Mesh (UV layers, Hard Normals, additional Polygroup Layers, etc) | |
| bool | bEnableShapeChangeStamp | Enable/Disable updating of ShapeChangeStamp. | |
| FRefCountVector | EdgeRefCounts | Reference counts of edge indices. | |
| TDynamicVector< FEdge > | Edges | List of edge elements. | |
| int | GroupIDCounter | Upper bound on the triangle group IDs used in the mesh (may be larger than the actual maximum if triangles have been deleted) | |
| std::atomic< uint32 > | ShapeChangeStamp | If bEnableShapeChangeStamp=true, The shape change stamp is incremented any time a function that modifies the mesh shape or topology is called | |
| std::atomic< uint32 > | TopologyChangeStamp | The topology change stamp is incremented any time a function that modifies the mesh topology is called | |
| TDynamicVector< FIndex3i > | TriangleEdges | List of triangle edge triplets [Edge0 Edge1 Edge2] | |
| TOptional< TDynamicVector< int > > | TriangleGroups | (optional) List of per-triangle group identifiers | |
| FRefCountVector | TriangleRefCounts | Reference counts of triangle indices. | |
| TDynamicVector< FIndex3i > | Triangles | List of triangle vertex-index triplets [Vert0 Vert1 Vert2] | |
| TOptional< TDynamicVector< FVector3f > > | VertexColors | (optional) List of per-vertex colors | |
| FSmallListSet | VertexEdgeLists | List of per-vertex edge one-rings | |
| TOptional< TDynamicVector< FVector3f > > | VertexNormals | (optional) List of per-vertex normals | |
| FRefCountVector | VertexRefCounts | Reference counts of vertex indices. | |
| TOptional< TDynamicVector< FVector2f > > | VertexUVs | (optional) List of per-vertex uv's | |
| TDynamicVector< FVector3d > | Vertices | List of vertex positions |
Constructors
| Type | Name | Description | |
|---|---|---|---|
| Default constructor | |||
FDynamicMesh3
(
const FDynamicMesh3& CopyMesh |
Copy/Move construction | ||
FDynamicMesh3
(
FDynamicMesh3&& MoveMesh |
|||
FDynamicMesh3
(
EMeshComponents flags |
|||
FDynamicMesh3
(
const FMeshShapeGenerator* Generator |
Construction from Mesh Generator | ||
FDynamicMesh3
(
bool bWantNormals, |
Construct an empty mesh with specified attributes |
Destructors
| Type | Name | Description | |
|---|---|---|---|
| Destructor |
Functions
| Type | Name | Description | |
|---|---|---|---|
| int | AddEdgeInternal
(
int vA, |
||
| void | AddTriangleEdge
(
int TriangleID, |
||
| int | AddTriangleInternal
(
int a, |
||
| void | AllocateEdgesList
(
int VertexID |
||
| int | |||
| int | AppendTriangle
(
int Vertex0, |
Vertex0, Vertex1, and Vertex2 must be distinct and refer to existing, valid vertices | |
| int | AppendTriangle
(
const FIndex3i& TriVertices, |
TriVertices must be distinct and refer to existing, valid vertices | |
| int | AppendVertex
(
const FVector3d& Position |
Append vertex at position, returns vid | |
| int | AppendVertex
(
const FVertexInfo& VertInfo |
Mesh Construction Append vertex at position and other fields, returns vid | |
| int | AppendVertex
(
const FDynamicMesh3& SourceMesh, |
Copy vertex SourceVertexID from existing SourceMesh, returns new vertex id | |
| FDynamicMeshAttributeSet * | Attributes () |
||
| const FDynamicMeshAttributeSet * | Attributes () |
||
| void | Call this before a set of unsafe InsertTriangle() calls | ||
| void | Support for inserting vertex and triangle at specific IDs. | ||
| FRefCountVector::FilteredEnumerable | |||
| double | CalculateWindingNumber
(
const FVector3d& QueryPoint |
Compute mesh winding number, from Jacobson et. | |
| EMeshResult | CanCollapseEdge
(
int vKeep, |
Tests whether collapsing the specified edge using the CollapseEdge function would succeed. | |
| EMeshResult | CanCollapseEdge
(
int vKeep, |
||
| EMeshResult | CanCollapseEdgeInternal
(
int vKeep, |
We keep this version of CanCollapseEdge internal because the CollapseInfo struct may only be partially filled out by the function | |
| bool | CheckValidity
(
FValidityOptions ValidityOptions, |
Checks that the mesh is well-formed, ie all internal data structures are consistent | |
| void | Clear () |
Discard all data | |
| EMeshResult | CollapseEdge
(
int KeepVertID, |
Collapse the edge between the two vertices, if topologically possible. | |
| EMeshResult | CollapseEdge
(
int KeepVertID, |
Collapse the edge between the two vertices, if topologically possible. | |
| EMeshResult | CollapseEdge
(
int KeepVertID, |
Collapse the edge between the two vertices, if topologically possible. | |
| EMeshResult | CollapseEdge
(
int KeepVertID, |
Collapse the edge between the two vertices, if topologically possible. | |
| void | CompactCopy
(
const FDynamicMesh3& CopyMesh, |
Copy input mesh while compacting, i.e. removing unused vertices/triangles/edges. | |
| void | CompactInPlace
(
FCompactMaps* CompactInfo |
Mesh Edit operations Compact mesh in-place, by moving vertices around and rewriting indices. | |
| double | Returns measure of compactness in range [0,1], where 1 is fully compacted | ||
| bool | Copy
(
const FMeshShapeGenerator* Generator |
Initialize mesh from the output of a MeshShapeGenerator (assumes Generate() was already called) | |
| void | Copy
(
const FDynamicMesh3& CopyMesh, |
Set internal data structures to be a copy of input mesh using the specified attributes | |
| void | |||
| void | |||
| void | |||
| void | |||
| void | |||
| int | EdgeCount () |
||
| bool | EdgeHasTriangle
(
int EdgeID, |
||
| bool | EdgeHasVertex
(
int EdgeID, |
||
| edge_iterator | |||
| value_iteration< FEdge > | EdgesItr () |
Enumerate edges. | |
| void | |||
| void | EnableMatchingAttributes
(
const FDynamicMesh3& ToMatch, |
Ensure that all the same extended attributes available in ToMatch are also enabled. | |
| void | EnableMeshComponents
(
int MeshComponentsFlags |
Vertex and Triangle attribute arrays Enable requested set of mesh components (triangle groups and vertex normals/colors/UVs) and discard any that are not requested | |
| void | EnableTriangleGroups
(
int InitialGroupID |
||
| void | EnableVertexColors
(
const FVector3f& InitialColor |
||
| void | EnableVertexNormals
(
const FVector3f& InitialNormal |
||
| void | EnableVertexUVs
(
const FVector2f& InitialUV |
||
| void | Call after a set of unsafe InsertTriangle() calls to rebuild free list | ||
| void | Call after a set of unsafe InsertVertex() calls to rebuild free list | ||
| void | EnumerateEdgeTriangles
(
int32 EdgeID, |
Call ApplyFunc for each triangle connected to an Edge (1 or 2 triangles) | |
| void | EnumerateTriEdgeIDsFromEdgeID
(
const int32 EdgeID, |
Applies a given function to both TriEdgeIDs which a given EdgeID is associated with | |
| void | EnumerateTriEdgeIDsFromTriID
(
const int TriID, |
Applies a given function to both TriEdgeIDs which each EdgeID in a given Triangle is associated with | |
| void | EnumerateVertexEdges
(
int32 VertexID, |
Call EdgeFunc for each one-ring edge of a vertex. | |
| void | EnumerateVertexTriangles
(
int32 VertexID, |
Call ApplyFunc for each one-ring triangle of a vertex. | |
| void | EnumerateVertexVertices
(
int32 VertexID, |
Call VertexFunc for each one-ring vertex neighbour of a vertex. | |
| int | FindEdge
(
int VertexA, |
Find id of edge connecting A and B | |
| int | FindEdgeFromTri
(
int VertexA, |
Find edgeid for edge [a,b] from triangle that contains the edge. | |
| int | FindEdgeFromTriPair
(
int TriangleA, |
Find edgeid for edge connecting two triangles | |
| int32 | FindEdgeInternal
(
int32 vA, |
||
| int | FindTriangle
(
int A, |
Find triangle made up of any permutation of vertices [a,b,c] | |
| int | FindTriangleEdge
(
int TriangleID, |
Returns edge ID | |
| EMeshResult | FlipEdge
(
int EdgeVertA, |
Calls FlipEdge() on the edge between two vertices, if it exists | |
| EMeshResult | FlipEdge
(
int EdgeAB, |
Flip/Rotate an edge of the mesh. | |
| bool | GetAllVertexGroups
(
int VertexID, |
Returns all group IDs at vertex | |
| int | GetAllVtxBoundaryEdges
(
int VertexID, |
Find edge ids of boundary edges connected to vertex. | |
| FAxisAlignedBox3d | GetBounds
(
bool bParallel |
Geometric queries Returns bounding box of all mesh vertices (including unreferenced vertices) | |
| uint64 | ChangeStamp is a combination of the Shape and Topology ChangeStamps | ||
| const TDynamicVector< FVector3f > * | |||
| int | |||
| FEdge | GetEdge
(
int EdgeID |
Get the vertices and triangles of an edge, returned as [v0,v1,t0,t1], where t1 may be InvalidID | |
| FVector3d | GetEdgeNormal
(
int EdgeID |
Returns average normal of connected face normals | |
| FIndex2i | GetEdgeOpposingV
(
int EdgeID |
If edge has vertices [a,b], and is connected two triangles [a,b,c] and [a,b,d], this returns [c,d], or [c,InvalidID] for a boundary edge | |
| FVector3d | GetEdgePoint
(
int EdgeID, |
Get point along edge, t clamped to range [0,1] | |
| const FEdge & | GetEdgeRef
(
int EdgeID |
Get the vertices and triangles of an edge, returned as [v0,v1,t0,t1], where t1 may be InvalidID | |
| const TDynamicVector< FEdge > & | |||
| const FRefCountVector & | |||
| FIndex2i | GetEdgeT
(
int EdgeID |
Get the triangle pair for an edge. The second triangle may be InvalidID | |
| FIndex2i | GetEdgeV
(
int EdgeID |
Get the vertex pair for an edge | |
| bool | Get the vertex positions of an edge | ||
| int | |||
| const TDynamicVector< FVector3f > * | |||
| FIndex2i | GetOrderedOneRingEdgeTris
(
int VertexID, |
Utility function that returns one or two triangles of edge, used to enumerate vertex one-ring triangles The logic is a bit tricky to follow without drawing it out on paper, but this will only return each triangle once, for the 'outgoing' edge from the vertex, and each triangle only has one such edge at any vertex (including boundary triangles) | |
| FIndex2i | GetOrientedBoundaryEdgeV
(
int EdgeID |
Return edge vertex indices, but oriented based on attached triangle (rather than min-sorted) | |
| int | GetOtherEdgeTriangle
(
int EdgeID, |
||
| int | GetOtherEdgeVertex
(
int EdgeID, |
||
| uint32 | ShapeChangeStamp is incremented any time a mesh vertex position is changed or the mesh topology is modified, if bEnableShapeChangeStamp=true | ||
| uint32 | TopologyChangeStamp is incremented when the mesh topology is modified | ||
| FIndex3i | GetTriangle
(
int TriangleID |
Get triangle vertices | |
| const TDynamicVector< FIndex3i > & | |||
| int | GetTriangleGroup
(
int tID |
||
| const TDynamicVector< int > * | |||
| const FIndex3i & | GetTriangleRef
(
int TriangleID |
Get triangle vertices | |
| const TDynamicVector< FIndex3i > & | |||
| const FRefCountVector & | |||
| double | GetTriArea
(
int TriangleID |
Calculate area triangle | |
| FVector3d | GetTriBaryNormal
(
int TriangleID, |
Interpolate vertex normals of triangle using barycentric coordinates | |
| FVector3d | GetTriBaryPoint
(
int TriangleID, |
Interpolate vertex positions of triangle using barycentric coordinates | |
| void | GetTriBaryPoint
(
int TriangleID, |
Compute interpolated vertex attributes at point of triangle | |
| FAxisAlignedBox3d | GetTriBounds
(
int TriangleID |
Construct bounding box of triangle as efficiently as possible | |
| FVector3d | GetTriCentroid
(
int TriangleID |
Compute centroid of triangle | |
| int | GetTriEdge
(
int TriangleID, |
Get one of the edges of a triangle | |
| FMeshTriEdgeID | GetTriEdgeIDFromEdgeID
(
int EdgeID |
Return (triangle, edge_index) representation for given Edge ID | |
| FIndex3i | GetTriEdges
(
int TriangleID |
Get triangle edges | |
| const FIndex3i & | GetTriEdgesRef
(
int TriangleID |
Get triangle edges | |
| FFrame3d | GetTriFrame
(
int TriangleID, |
Construct stable frame at triangle centroid, where frame.Z is face normal, and frame.X is aligned with edge nEdge of triangle. | |
| void | GetTriInfo
(
int TriangleID, |
Compute triangle normal, area, and centroid all at once. | |
| double | GetTriInternalAngleR
(
int TriangleID, |
Compute internal angle at vertex i of triangle (where i is 0,1,2); | |
| FVector3d | GetTriInternalAnglesR
(
int TriangleID |
Compute internal angles at all vertices of triangle | |
| FIndex3i | GetTriNeighbourTris
(
int TriangleID |
Find the neighbour triangles of a triangle (any of them might be InvalidID) | |
| FVector3d | GetTriNormal
(
int TriangleID |
Calculate face normal of triangle | |
| double | GetTriSolidAngle
(
int TriangleID, |
Compute solid angle of oriented triangle tID relative to point p - see WindingNumber() | |
| FVector3d | GetTriVertex
(
int TriangleID, |
Get the position of one of the vertices of a triangle | |
| void | GetTriVertices
(
int TriangleID, |
Get the three vertex positions of a triangle | |
| const TDynamicVector< FVector2f > * | GetUVBuffer () |
||
| FVector3d | GetVertex
(
int VertexID |
Vertex/Tri/Edge accessors | |
| bool | GetVertex
(
int VertexID, |
Get extended vertex information | |
| FVector3f | GetVertexColor
(
int vID |
||
| const FSmallListSet & | |||
| void | GetVertexEdgesList
(
int VertexID, |
||
| FFrame3d | GetVertexFrame
(
int VertexID, |
Compute a normal/tangent frame at vertex that is "stable" as long as the mesh topology doesn't change, meaning that one axis of the frame will be computed from projection of outgoing edge. | |
| bool | GetVertexGroups
(
int VertexID, |
Returns up to 4 group IDs at vertex. Returns false if > 4 encountered | |
| FVertexInfo | GetVertexInfo
(
int VertexID |
Get all vertex information available | |
| FVector3f | GetVertexNormal
(
int vID |
||
| const FVector3d & | GetVertexRef
(
int VertexID |
||
| FVector2f | GetVertexUV
(
int vID |
||
| const TDynamicVector< FVector3d > & | Direct buffer access | ||
| const FRefCountVector & | |||
| int | GetVtxBoundaryEdges
(
int VertexID, |
Returns count of boundary edges at vertex, and the first two boundary edges if found. | |
| EMeshResult | GetVtxContiguousTriangles
(
int VertexID, |
Get triangles connected to vertex in contiguous order, with multiple groups if vertex is a bowtie. | |
| int | GetVtxEdgeCount
(
int VertexID |
||
| void | GetVtxNbrhood
(
int EdgeID, |
Given an edge and vertex on that edge, returns other vertex of edge, the two opposing verts, and the two connected triangles (OppVert2Out and Tri2Out are be InvalidID for boundary edge) | |
| void | GetVtxOneRingCentroid
(
int VertexID, |
Fastest possible one-ring centroid. | |
| int | GetVtxSingleTriangle
(
int VertexID |
||
| int | GetVtxTriangleCount
(
int VertexID |
Return # of triangles attached to vID, or -1 if invalid vertex | |
| EMeshResult | GetVtxTriangles
(
int VertexID, |
Get triangle one-ring at vertex. | |
| bool | |||
| bool | |||
| bool | |||
| bool | |||
| bool | |||
| bool | |||
| bool | HasVertexUVs () |
||
| EMeshResult | InsertTriangle
(
int TriangleID, |
Insert triangle at given index, assuming it is unused. | |
| EMeshResult | InsertVertex
(
int VertexID, |
Insert vertex at given index, assuming it is unused. | |
| bool | IsBoundaryEdge
(
int EdgeID |
Topological queries Returns true if edge is on the mesh boundary, ie only connected to one triangle | |
| bool | IsBoundaryTriangle
(
int TriangleID |
Returns true if any edge of triangle is a boundary edge | |
| bool | IsBoundaryVertex
(
int VertexID |
Returns true if the vertex is part of any boundary edges | |
| bool | IsBowtieVertex
(
int VertexID |
Returns true if vID is a "bowtie" vertex, ie multiple disjoint triangle sets in one-ring | |
| bool | IsClosed () |
||
| bool | IsCompact () |
Returns true if vertices, edges, and triangles are all dense (Count == MaxID) | |
| bool | IsCompactT () |
||
| bool | IsCompactV () |
||
| bool | IsEdge
(
int EdgeID |
||
| bool | IsGroupBoundaryEdge
(
int EdgeID |
Returns true if the two triangles connected to edge have different group IDs | |
| bool | IsGroupBoundaryVertex
(
int VertexID |
Returns true if vertex has more than one tri group in its tri nbrhood | |
| bool | IsGroupJunctionVertex
(
int VertexID |
Returns true if more than two group boundary edges meet at vertex (ie 3+ groups meet at this vertex) | |
| bool | IsReferencedVertex
(
int VertexID |
||
| bool | IsSameAs
(
const FDynamicMesh3& OtherMesh, |
Check if another mesh is the same as this mesh. | |
| bool | IsSameAs
(
const FDynamicMesh3& OtherMesh, |
Check if another mesh is the same as this mesh. | |
| bool | IsTriangle
(
int TriangleID |
||
| bool | IsVertex
(
int VertexID |
||
| int | MaxEdgeID () |
||
| int | MaxGroupID () |
||
| int | |||
| int | MaxVertexID () |
||
| EMeshResult | MergeEdges
(
int KeepEdgeID, |
Weld one edge to the other. | |
| EMeshResult | MergeEdges
(
int KeepEdgeID, |
Given two edges of the mesh, weld both their vertices, so that one edge is removed. | |
| EMeshResult | MergeVertices
(
int KeepVid, |
Weld DiscardVid to KeepVid. | |
| EMeshResult | MergeVertices
(
int KeepVid, |
Weld DiscardVid to KeepVid. Equivalent to calling the options overload with default options. | |
| EMeshResult | MergeVertices
(
int KeepVid, |
Weld DiscardVid to KeepVid, if topologically possible and options allow. | |
| FString | Debug utility functions Returns a debug string that contains mesh statistics and other information | ||
| EMeshResult | PokeTriangle
(
int TriangleID, |
Call PokeTriangle at the centroid of the triangle | |
| EMeshResult | PokeTriangle
(
int TriangleID, |
Insert a new vertex inside a triangle, ie do a 1 to 3 triangle split | |
| EMeshResult | RemoveTriangle
(
int TriangleID, |
Remove a triangle from the mesh. | |
| void | Remove unused vertices. Note: Does not compact the remaining vertices. | ||
| EMeshResult | RemoveVertex
(
int VertexID, |
Remove vertex VertexID and all connected triangles. | |
| int | ReplaceEdgeTriangle
(
int EdgeID, |
||
| int | ReplaceEdgeVertex
(
int EdgeID, |
||
| int | ReplaceTriangleEdge
(
int EdgeID, |
||
| int | ReplaceTriangleVertex
(
int TriangleID, |
||
| void | ReverseOrientation
(
bool bFlipNormals |
Reverse the ccw/cw orientation of all triangles in the mesh, and optionally flip the vertex normals if they exist | |
| EMeshResult | ReverseTriOrientation
(
int TriangleID |
Reverse the ccw/cw orientation of a triangle | |
| void | ReverseTriOrientationInternal
(
int TriangleID |
||
| void | Serialize the mesh to an archive. | ||
| void | SerializeInternal
(
FArchive& Ar, |
||
| void | SerializeInternal
(
FArchive&, |
||
| void | SerializeInternal
(
FArchive& Ar, |
Internal implementations for serialization to allow for better code separation between different versions and other implementation details. | |
| void | SetEdgeTrianglesInternal
(
int EdgeID, |
||
| void | SetEdgeVerticesInternal
(
int EdgeID, |
||
| void | SetShapeChangeStampEnabled
(
bool bEnabled |
Change Tracking support | |
| EMeshResult | SetTriangle
(
int TriangleID, |
Rewrite the triangle to reference the new tuple of vertices. | |
| void | SetTriangleEdgesInternal
(
int TriangleID, |
||
| void | SetTriangleGroup
(
int tid, |
||
| void | SetTriangleInternal
(
int TriangleID, |
Internal functions | |
| void | Set vertex position | ||
| void | SetVertexColor
(
int vID, |
||
| void | SetVertexNormal
(
int vID, |
||
| void | SetVertexUV
(
int vID, |
||
| EMeshResult | SplitEdge
(
int EdgeVertA, |
Splits the edge between two vertices at the midpoint, if this edge exists | |
| EMeshResult | SplitEdge
(
int EdgeAB, |
Split an edge of the mesh by inserting a vertex. | |
| EMeshResult | SplitVertex
(
int VertexID, |
Clones the given vertex and updates any provided triangles to use the new vertex if/where they used the old one. | |
| bool | SplitVertexWouldLeaveIsolated
(
int VertexID, |
Tests whether splitting the given vertex with the given triangles would leave no triangles attached to the original vertex (creating an isolated vertex) | |
| int | |||
| bool | TriangleHasVertex
(
int TriangleID, |
||
| triangle_iterator | |||
| value_iteration< FIndex3i > | TrianglesItr () |
Enumerate all triangles in the mesh | |
| bool | TriHasNeighbourTri
(
int CheckTriID, |
||
| bool | TriHasSequentialVertices
(
int TriangleID, |
||
| void | UpdateChangeStamps
(
bool bShapeChange, |
Increment the specified ChangeStamps, if they are enabled. Thread-safe. | |
| int | VertexCount () |
||
| vertex_iterator | |||
| value_iteration< FVector3d > | VerticesItr () |
Enumerate positions of all vertices in mesh | |
| FSmallListSet::ValueEnumerable | VtxEdgesItr
(
int VertexID |
||
| vtx_triangles_enumerable | VtxTrianglesItr
(
int VertexID |
||
| FSmallListSet::MappedValueEnumerable | VtxVerticesItr
(
int VertexID |
Operators
| Type | Name | Description | |
|---|---|---|---|
| const FDynamicMesh3 & | operator=
(
const FDynamicMesh3& CopyMesh |
Copy and move assignment | |
| const FDynamicMesh3 & | operator=
(
FDynamicMesh3&& MoveMesh |
Classes
| Type | Name | Description | |
|---|---|---|---|
| FCollapseEdgeOptions | |||
| FEdge | |||
| FMergeVerticesOptions | |||
| FMeshDifferenceInfo | |||
| FSameAsOptions | Options for the IsSameAs check | ||
| FValidityOptions | Options for what the validity check will permit |
Typedefs
| Name | Description |
|---|---|
| edge_iterator | |
| FEdgeCollapseInfo | |
| FEdgeFlipInfo | TODO: |
| FEdgeSplitInfo | |
| FMergeEdgesInfo | |
| FMergeVerticesInfo | |
| FPokeTriangleInfo | |
| FVertexSplitInfo | |
| triangle_iterator | |
| value_iteration | |
| vertex_iterator | Simplify names for iterations |
| vtx_triangles_enumerable |
Constants
| Name | Description |
|---|---|
| DuplicateTriangleID | DuplicateTriangleID is returned by AppendTriangle() to indicate that the added triangle already exists in the mesh, and was ignored because we do not support duplicate triangles |
| InvalidEdge | |
| InvalidID | InvalidID indicates that a vertex/edge/triangle ID is invalid |
| InvalidTriangle | |
| InvalidVertex | |
| NonManifoldID | NonManifoldID is returned by AppendTriangle() to indicate that the added triangle would result in nonmanifold geometry and hence was ignored |