code: static double VoronoiArea ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, int32 VertexIndex, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< FVector3d(int32)> VertexPositionFunc )


className: FMeshWeights

description: FMeshWeightsimplements various techniques for computing local weights of a mesh, for example one-ring weights like Cotangent or Mean-Value.

module: DynamicMesh

code: class FMeshWeights


description: "Outer loop" for all remeshing operations

code: virtual void BasicRemeshPass()


description:
Test to see if flipping an edge would improve "normal error". Normal error for a triangle is: 0.5 * (1.0 - TriangleNormal  ProjectedNormal), where ProjectedNormal is the normal of the triangle returned by finding the closest point on ProjTarget. The normal error for an edge is the sum of errors for the edge's incident triangles.
True iff (CurrentEdgeError > BadEdgeErrorThreshold) and (NewEdgeError < ImprovementRatioThreshold * CurrentEdgeError)

code: bool EdgeFlipWouldReduceNormalError ( int EdgeID, double BadEdgeErrorThreshold, double ImprovementRatioThreshold ) const


description: Similar to InitializeVertexBufferForPass, but also initialize the additional per-vertex weight buffer.


description: Do remeshing with face-aligned projection. During the Projection step of RemeshIteration, perform N passes of face-aligned projection (N = FaceProjectionPassesPerRemeshIteration). Additionally, do M passes of face-aligned projection after remeshing has finished (M = NumExtraProjectionIterations).

code: void RemeshWithFaceProjection()


description: Flip all edges for which EdgeFlipWouldReduceNormalError returns true

code: void TrackedEdgeFlipPass()


description: Perform face-aligned projection onto the target mesh. Queue edges whose lengths change because of it.

code: void TrackedFaceProjectionPass ( double & MaxDistanceMoved, bool bIsTuningIteration )


code: void TrackedFaceProjectionPass_Serial ( double & MaxDistanceMoved, bool bIsTuningIteration )


description: This is called during RemeshIteration.

code: virtual void TrackedFullProjectionPass ( bool bParallel )


code: FNormalFlowRemesher ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


className: FNormalFlowRemesher

description: Remeshing with "face aligned projection". This approach to projection attempts to preserve sharp features in the mesh by aligning triangle normals with normals from the original mesh during the projection pass. This class also performs a pass of edge flips aimed at further aligning triangle normals to their originals. This can be helpful in fixing the occasional single "bad edge" along a sequence of feature edges.

code: class FNormalFlowRemesher : public [UE::Geometry::FQueueRemesher](API\Plugins\DynamicMesh\FQueueRemesher)

bEnableParallelEdgeFlipPass

type: bool

description: Gather candidates for edge flipping in parallel, then do the actual flips sequentially.

bSmoothInFillAreas

description: Control whether or not we want to apply mesh smoothing in "free" areas that have not projected to target surface.

FaceProjectionPassesPerRemeshIteration

type: int

description: During each call to RemeshIteration, do this many passes of face-aligned projection.

FillAreaDistanceMultiplier

type: float

description: This is used as a multiplier on MaxEdgeLength to determine when we identify points as being in "free" areas.

FillAreaSmoothMultiplier

description: This is used as a multiplier on the Remesher smoothing rate, applied to points identified as being in "free" areas.

MaxTriangleCount

description: Cap on triangle count, to prevent runaway mesh messes. Ignored if zero.

NormalAlignmentSpeed

type: double

description: Drag on normal alignment

NumExtraProjectionIterations

description: Additional projection iterations after the usual remesh step.

ProjectionVertexBuffer

type: TArray< FVector...

description: Per triangle-vertex projection positions for face projection pass. (Size >= 3 * MaxTriangleID)

ProjectionWeightBuffer

type: TArray< double ...

description: Per triangle-vertex weights for face projection pass. (Size >= 3 * MaxTriangleID)

SurfaceProjectionSpeed

description: Drag on surface projection


className: FQEMSimplification

code: typedef [TMeshSimplification](API\Plugins\DynamicMesh\TMeshSimplification)< [FQuadricErrord](API\Runtime\GeometryCore\FQuadricErrord) > FQEMSimplification


description: Converge on remeshed result as quickly as possible.

code: void FastestRemesh()


description:
This pass only does edge splits and enqueues modified vertex neighborhoods.
Number of split edges.

code: int FastSplitIteration()


description: Call the function above to enqueue edges in the ModifiedEdges set.

code: virtual void OnEdgeSplit ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeSplitInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeSplitInfo) & SplitInfo )


code: void QueueOneRing ( int vid )


description: This pass does all edge operations plug smoothing and reprojection. EarlyTerminationCheck will be called after remesh operations, before smoothing/reprojection. Caller can return true to abort further computation.

code: void RemeshIteration ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(void)> EarlyTerminationCheck )


className: SettingState

description: We occasionally want to override the user-specified choices of edge operations to achieve some sub-step of a full remesh algorithm. This struct encapsulates the Remesher settings so they can be saved, overwritten, and restored.

code: struct SettingState

ProjectionMode

type: ETargetProjecti...

SmoothType

type: ESmoothTypes


description: Note:FRemesherhas this: virtual voidFullProjectionPass();.


description: Note: superclass has this: virtual voidFullSmoothPass_Buffer(bool bParallel);.

code: void TrackedFullSmoothPass_Buffer ( bool bParallel )


code: FQueueRemesher ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


description: Move all vertices in parallel. Update the timestamps. Add edges whose endpoints change to ModifiedEdges. The NewVertexPosition function accepts a vertex index and returns a new vertex position, as well as setting the bool out-param to indicate that the vertex has moved.

code: void TrackedMoveVerticesParallel ( [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(int, bool &)> NewVertexPosition )


className: FQueueRemesher

description: Extension to Remesher that is smarter about which edges/vertices to touch:

code: class FQueueRemesher : public [UE::Geometry::FRemesher](API\Plugins\DynamicMesh\FRemesher)

EdgeBuffer

type: TSet< int >

description: Persistent buffer of edges to be processed. This buffer is filled then iterated over.

EdgeShouldBeQueuedBuffer

type: TArray< bool >

description: Whether an edge should be added to ModifiedEdges (used in async tasks)

MaxFastSplitIterations

description: Max number of passes just doing edge splits.

MaxRemeshIterations

description: Max number of passes doing full remeshing operations.

MinActiveEdgeFraction

description: If fraction of active edges falls below this threshold, consider result converged and terminate before MaxRemeshIterations.

ModifiedEdges

type: TOptional<TSet...

description: Set of edges that have been modified during a given iteration.

PostEdgeSplitFunction

type: TFunction< void...

description: The function called after an edge split occurs. This function will enqueue edges in ModifiedEdges.

SavedState

type: SettingState


description: Apply the given projection function to all vertices in the mesh.

code: virtual void ApplyToProjectVertices ( const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< void(int)> & VertexProjectFunc )


description: FullSmoothPass_Buffer this to calls VertexSmoothFunc for each vertex of the mesh.

code: virtual void ApplyToSmoothVertices ( const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< void(int)> & VertexSmoothFunc )


description: Linear edge-refinement pass, followed by smoothing and projection

code: virtual void BasicRemeshPass()


code: virtual void ApplyVertexBuffer ( bool bParallel )


className: EFlipMetric

description: Available Edge Flip metrics

code: enum EFlipMetric { OptimalValence = 0, MinEdgeLength = 1, }


description: This just lets us write more concise code

code: bool EnableInlineProjection() const


className: EProcessResult

code: enum EProcessResult { Ok_Collapsed, Ok_Flipped, Ok_Split, Ignored_EdgeIsFine, Ignored_EdgeIsFullyConstrained, Failed_OpNotSuccessful, Failed_NotAnEdge, }


className: ESmoothTypes

description: Built-in Smoothing types

code: enum ESmoothTypes { Uniform = 0, Cotan = 1, MeanValue = 2, }


description: Project vertices onto projection target.

code: virtual void FullProjectionPass ( bool bParallel )


description: Computes smoothed vertex position w/ proper constraints/etc. Does not modify mesh.

code: virtual FVector3d ComputeSmoothedVertexPos ( int VertexID, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) &, int, double)> SmoothFunc, bool & bModified )


description: Applies a smoothing pass to the mesh, storing intermediate positions in a buffer and then writing them at the end (so, no order effect)

code: virtual void FullSmoothPass_Buffer ( bool bParallel )


code: virtual int GetNextEdge ( int CurEdgeID, bool & bDone )


description: Used by collapse-edge to get projected position for new vertex

code: virtual FVector3d GetProjectedCollapsePosition ( int VertexID, const FVector3d & vNewPos )


description: Returns the function we want to use to compute a smoothed vertex position - will be CustomSmoothF if set, otherwise one of cotan/meanvalue/uniform

code: virtual [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) &, int, double)> GetSmoothFunction()


description: Callback for subclasses to override to implement custom behavior

code: virtual void OnEdgeCollapse ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeCollapseInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeCollapseInfo) & CollapseInfo )


description: Move all vertices in parallel. Update the timestamps. The NewVertexPosition function accepts a vertex index and returns a new vertex position, as well as setting the bool out-param to indicate that the vertex has moved.

code: void MoveVerticesParallel ( [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(int, bool &)> NewVertexPosition )


code: virtual void OnEdgeFlip ( int EdgeID, const [FDynamicMesh3::FEdgeFlipInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeFlipInfo) & FlipInfo )


description: Callbacks and in-progress informationCallback for subclasses to override to implement custom behavior

code: virtual void OnEdgeSplit ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeSplitInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeSplitInfo) & SplitInfo )


description: We can speed things up if we precompute some invariants. You need to re-run this if you are changing the mesh externally between remesh passes, otherwise you will get weird results. But you will probably still come out ahead, computation-time-wise

code: virtual void Precompute()


code: virtual [EProcessResult](API\Plugins\DynamicMesh\FRemesher\EProcessResult) ProcessEdge ( int edgeID )


code: virtual void ProfileBeginCollapse()


code: virtual void ProfileBeginFlip()


code: virtual void ProfileBeginOps()


code: virtual void ProfileBeginPass()


code: virtual void ProfileBeginProject()


code: virtual void ProfileBeginSmooth()


code: virtual void ProfileBeginSplit()


code: virtual void ProfileEndCollapse()


code: virtual void ProfileEndFlip()


code: virtual void ProfileEndProject()


code: virtual void ProfileEndSmooth()


code: virtual void ProfileEndSplit()


description: Set min/max edge-lengths to sane values for given target edge length

code: void SetTargetEdgeLength ( double fLength )


description: After we split an edge, we have created a new edge and a new vertex. The edge needs to inherit the constraint on the other pre-existing edge that we kept. In addition, if the edge vertices were both constrained, then we /might/ want to also constrain this new vertex, possibly project to constraint target.

code: virtual void UpdateAfterSplit ( int edgeID, int va, int vb, const [FDynamicMesh3::FEdgeSplitInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeSplitInfo) & splitInfo )


code: virtual void ProfileEndPass()


description: Public API

code: FRemesher ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


className: FRemesher

description: Many aspects of the algorithm can be controlled by the public variables in the block below. In addition many of the core internal functions can be overriden to customize behavior. Various callbacks functions are called when topology changes occur which allows you to for instance track changed regions of the mesh.

code: class FRemesher : public [UE::Geometry::FMeshRefinerBase](API\Plugins\DynamicMesh\FMeshRefinerBase)

bEnableCollapses

description: Controls whether edge collapses are allowed during remeshing pass

bEnableFlips

description: Configuration variables and flagsControls whether edge-flips are allowed during remeshing pass

bEnableParallelProjection

description: Enable parallel projection. Only applied in AfterRefinement mode

bEnableParallelSmooth

description: Enable parallel smoothing.

bEnableSmoothing

description: Controls whether vertex smoothing is applied during remeshing pass

bEnableSmoothInPlace

description: If smoothing is done in-place, we don't need an extra buffer, but also there will some randomness introduced in results.

bEnableSplits

description: Controls whether edge splits are allowed during remeshing pass

bMeshIsClosed

description: We can avoid some checks/etc if we know that the mesh has no boundary edges.

bPreventNormalFlips

description: Controls whether we try to prevent normal flips inside operations and smoothing.

bPreventTinyTriangles

description: Controls whether we disallow creation of triangles with small areas inside edge operations.

description: Testing/debug/profiling stuff profiling functions, turn on ENABLE_PROFILING to see output in console

CustomSmoothF

type: TFunction< FVec...

description: Override default smoothing function

CustomSmoothSpeedF

type: TFunction< doub...

description: Override constant SmoothSpeedT with function

FlipMetric

type: EFlipMetric

description: Type of flip metric that will be applied

MaxEdgeLength

description: Maximum target edge length. Edges longer than this will be split if possible.

MinEdgeLength

description: Minimum target edge length. Edges shorter than this will be collapsed if possible.

MinLengthFlipThresh

description: For MinEdgeLength metric, only flip if NewLength < (MinLengthFlipThresh * CurLength)

ModifiedEdgesLastPass

description: Number of edges that were modified in previous Remesh pass.

ModuloPrime

type: const int

description: StartEdges()andGetNextEdge()control the iteration over edges that will be refined.

SmoothSpeedT

description: Smoothing speed, in range [0,1]

SmoothType

description: Type of smoothing that will be applied unless overridden by CustomSmoothF

TempPosBuffer

type: TDynamicVector<...


description: Callback for subclasses to override to implement custom behavior

code: virtual void OnEdgeFlip ( int EdgeID, const [FDynamicMesh3::FEdgeFlipInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeFlipInfo) & FlipInfo )


description: Callbacks and in-progress informationCallback for subclasses to override to implement custom behavior

code: virtual void OnEdgeSplit ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeSplitInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeSplitInfo) & SplitInfo )


code: FRestrictedSubRegionRemesher ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, const [TSet](API\Runtime\Core\Containers\TSet)< int > & InTriangleROI )


className: FRestrictedSubRegionRemesher

description: It is initialized from a set of Triangles and the initial ROI boundary is inferred from those triangles.

code: class FRestrictedSubRegionRemesher : public [UE::Geometry::FSubRegionRemesher](API\Plugins\DynamicMesh\FSubRegionRemesher)


code: void AddEdgeToTriangleROI ( int EdgeID )


code: void AddVertexToTriangleROI ( int VertexID )


description: Forwards toFRemesher::BasicRemeshPass

code: virtual void BasicRemeshPass()


description: Call beforeBasicRemeshPass()to enable tracking of removed triangles

code: void BeginTrackRemovedTrisInPass()


description:
Extract final triangle ROI. After calling this function, the ROI will be cleared, and must be re-initialized. This can be used to avoid having to copy theTSet.
set of triangles that contains edge ROI (note: may also contain additional triangles)

code: [TSet](API\Runtime\Core\Containers\TSet)< int > && ExtractFinalTriangleROI()


description: Applies a smoothing pass to the mesh, storing intermediate positions in a buffer and then writing them at the end (so, no order effect)

code: virtual void FullSmoothPass_Buffer ( bool bParallel )


description:
This is only valid after callingUpdateROI()and before callingBasicRemeshPass().
current edge array.

code: const [TArray](API\Runtime\Core\Containers\TArray)< int > & GetCurrentEdgeArray() const


description: set of edges in current edge ROI

code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetCurrentEdgeROI() const


description: set of triangles that contains edge ROI (note: may also contain additional triangles)

code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetCurrentTriangleROI() const


code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetCurrentVertexROI() const


code: virtual int GetNextEdge ( int CurEdgeID, bool & bDone )


code: void InitializeFromTriangleROI ( const [TSet](API\Runtime\Core\Containers\TSet)< int > & InTriangleROI )


code: virtual void OnEdgeCollapse ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeCollapseInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeCollapseInfo) & CollapseInfo )


description: Initialize edge-subregion ROI from the VertexROI member that has been externally initialized

code: void InitializeFromVertexROI()


code: virtual void OnEdgeFlip ( int EdgeID, const [FDynamicMesh3::FEdgeFlipInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeFlipInfo) & FlipInfo )


description:
Call afterBasicRemeshPass()to disable and return tracking of removed triangles
set of removed triangles. This set will be cleared on next call toBeginTrackRemovedTrisInPass()

code: const [TSet](API\Runtime\Core\Containers\TSet)< int32 > & EndTrackRemovedTrisInPass()


code: virtual void OnEdgeSplit ( int EdgeID, int VertexA, int VertexB, const [FDynamicMesh3::FEdgeSplitInfo](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3\FEdgeSplitInfo) & SplitInfo )


description: Tell a MeshChangeTracker about the set of triangles that we might modify in the next remesh pass. This could include one-rings of either side of an edge in the ROI, if we collapse.

code: void SaveActiveROI ( [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * Change )


code: void SetInitialVertexROI ( const [TSet](API\Runtime\Core\Containers\TSet)< int > & Vertices )


code: void SetInitialVertexROI ( [TSet](API\Runtime\Core\Containers\TSet)< int > && Vertices )


code: void SetInitialVertexROI ( const [TArray](API\Runtime\Core\Containers\TArray)< int > & Vertices )


description: Specialization of Remesher functionality

code: virtual int StartEdges()


description: Update the internal data structures in preparation for a call toFRemesher::BasicRemeshPass. This must be called before each remesh pass!

code: void UpdateROI()


code: [EVertexControl](API\Plugins\DynamicMesh\FMeshRefinerBase\EVertexControl) VertexFilter ( int VertexID )


code: FSubRegionRemesher ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh )


code: virtual ~FSubRegionRemesher()


className: FSubRegionRemesher

description: Currently "boundary" edges of the ROI that are split will result in the ROI growing to include both new edges created by the split.

code: class FSubRegionRemesher : public [UE::Geometry::FRemesher](API\Plugins\DynamicMesh\FRemesher)

bTrackRemoved

type: bool

description: Controls whether RemovedLastPass will be populated

CurEdge

type: int

description: Index of current edge in .Edges we are at in StartEdges/GetNextEdge modulo-iteration

EdgeROI

description: Active set of edges we will consider for remeshing.

Edges

type: TArray< int >

description: Static list of edges to consider during a pass (set in UpdateROI which must be called each pass)

InitialROIEdgeVertices

type: FUniqueIndexSet

description: Temporary data structure used to quickly convert vertex set to edge set.

InitialROITriangles

description: Temporary data structure used to quickly convert vertex set to triangle set.

LastUpdateROICounter

description: Counters for making sure that UpdateROI has been called

RemovedLastPassTris

description: Set of triangles removed in last pass. Enable this by callingBeginTrackRemovedTrisInPass()

SmoothIndices

type: TArray< int32 >

description: Localized smoothing

TriangleROI

description: Active set of triangles.

VertexROI

description: Set of vertices in ROI.


description:
Adjacency of Per-Triangle integers are what define the triangle groups. Override this function to provide an alternate group definition.
group id integer for given TriangleID

code: virtual int GetGroupID ( int TriangleID ) const


description:
Build the group topology graph.
true on success, false if there was an error

code: virtual bool RebuildTopology()


code: FTriangleGroupTopology ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, bool bAutoBuild )


className: FTriangleGroupTopology

description: FTriangleGroupTopologyis a simplification ofFGroupTopologythat just represents a normal mesh. This allows algorithms to be written againstFGroupTopologythat will also work per-triangle. (However, there is enormous overhead to doing it this way!)

code: class FTriangleGroupTopology : public [UE::Geometry::FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology)


description: Combine the incoming constraint with this constraint. The combination cannot be less restrictive than the existing constraint.

code: void CombineConstraint ( const [FVertexConstraint](API\Plugins\DynamicMesh\FVertexConstraint) & OtherConstraint )


description: a fully constrained vertex: can't delete and can't move


className: InvalidSetID

description: Value for FixedSetID that is treated as not-a-fixed-set-ID by various functions (ie don't use this value yourself)

code: static constexpr int InvalidSetID = -1;


description: a movable but not "delete-able" vertex constraint


description: an unconstrained vertex constraint (ie not constrained at all)


code: FVertexConstraint ( bool bCannotDelete, bool bCanMove, int FixedSetID )


className: FVertexConstraint

description: FVertexConstraintis a constraint on a triangle mesh vertex

code: struct FVertexConstraint

bCanMove

description: Can this vertex be moved

bCannotDelete

description: Is this vertex permanent (i.e. cannot be removed by topology-change operations).

FixedSetID

description: Vertices marked as "CannotDelete" but sharing the same FixedSetID can optionally be collapsed together (ie in Remesher)

Target

type: IProjectionTarg...

description: Vertex is associated with this ProjectionTarget, and should be projected onto it (ie in Remesher)


description: Projection of Point onto this target, and set ProjectNormalOut to the triangle normal at the returned point (notinterpolated vertex normal)

code: virtual FVector3d Project ( const FVector3d & Point, FVector3d & ProjectNormalOut, int Identifier )


description: Projection of Point onto this target

code: virtual FVector3d Project ( const FVector3d & Point, int Identifier )


code: FWorldSpaceProjectionTarget()


code: FWorldSpaceProjectionTarget ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn, [FDynamicMeshAABBTree3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshAABBTree3) * SpatialIn, const [FTransformSRT3d](API\Runtime\GeometryCore\FTransformSRT3d) & TargetMeshLocalToWorldIn, const [FTransformSRT3d](API\Runtime\GeometryCore\FTransformSRT3d) & ToolMeshLocalToWorldIn )


code: virtual ~FWorldSpaceProjectionTarget()


className: FWorldSpaceProjectionTarget

code: class FWorldSpaceProjectionTarget : public [UE::Geometry::FMeshProjectionTarget](API\Plugins\DynamicMesh\FMeshProjectionTarget)


description:
Compute the per-vertex values which are the weighted average of all vertex element values stored in the overlay.
true on success, false otherwise

code: template<typename RealType, int ElementSize> bool AverageOverlay ( const [TDynamicMeshOverlay](API\Runtime\GeometryCore\DynamicMesh\TDynamicMeshOverlay)< RealType, ElementSize > * Overlay, [TArray](API\Runtime\Core\Containers\TArray)< RealType > & VertexValues, [TArray](API\Runtime\Core\Containers\TArray)< bool > & HasElements )


className: ETriangleWeight

description: The type of weight used for each element.

code: enum ETriangleWeight { Uniform, Angle = 0, Area = 1, AngleArea = 2, }


code: FAverageOverlayToVertices ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & InMesh )


code: virtual ~FAverageOverlayToVertices()


className: FAverageOverlayToVertices

description: Compute the per-vertex values which are the weighted average of all vertex element values stored in the overlay.

code: class FAverageOverlayToVertices

bUseParallel

description: Optional InputsEnable/disable multi-threading.

Mesh

type: constFDynamicM...

Selection

description: Array of vertex IDs whose vertices will be affected.

TriangleWeight

type: ETriangleWeight


description: an array of surface points relative to the SurfaceMesh that define this path. Note the first and last surfacepoints correspond to the start and end vertex, but all other surface points may be either edge crossings or vertex points.

code: [TArray](API\Runtime\Core\Containers\TArray)< [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FDeformableEdgePath\FSurfacePoint) > AsSurfacePoints ( double CoalesceThreshold ) const


description: It is assumed the specified edges do in fact have vertex CVID in common, but this is not checked.

code: void ComputeWedgeAngles ( int32 IncomingEID, int32 OutgoingEID, int32 CenterVID, double & LeftSideAngle, double & RightSideAngle ) const


description: Replace the specified two connected edge segments (FPathJoint) in the main path with a new sub-path that connects the same end points. This new path is formed by flipping the adjacent edges to the left (or right) of the joint vertex and may have one, two, or more segments

code: void DeformJoint ( [FPathJoint](API\Plugins\DynamicMesh\Operations\FDeformableEdgePath\FPathJoint) & PathJoint )


description: Edge flip the adjacent edges to the JointVID and collect the DeformedPath that can be used to replace the local incoming and outgoing edge path

code: bool DeformJoint ( const int32 IncomingEID, const int32 OutgoingEID, int32 JointVID, [TArray](API\Runtime\Core\Containers\TArray)< [FEdgePath::FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) > & DeformedPath, const bool bClockwise )


className: ESide

code: enum ESide { Left, Right, }


className: FEdgePathDeformationInfo

description: Information gathered during minimization

code: struct FEdgePathDeformationInfo

FinalLength

type: double


className: FSurfacePoint

description: Struct that references a point on a mesh, by vertex, by edge-crossing, or barycentric coords


description: a const reference to the edge path.

code: const [FEdgePath](API\Plugins\DynamicMesh\Operations\FEdgePath) & GetEdgePath() const


description: const reference to the intrinsic mesh on which the EdgePath is defined.

code: const [FIntrinsicEdgeFlipMesh](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh) & GetIntrinsicMesh() const


description: Length of the path.

code: double GetPathLength() const


className: InvalidID

code: static constexpr int InvalidID = IndexConstants::InvalidID;


description: true if no part of the global path lies in the wedge (partial one-ring) on PathJoint.Interior side

code: bool IsJointFlexible ( const [FPathJoint](API\Plugins\DynamicMesh\Operations\FDeformableEdgePath\FPathJoint) & PathJoint ) const


description: Remove specified segment from the linked-list path and clean up joint-related data for the joint that ends with this segment. note: the joint data (e.g. joint angle queue) for the joint that started with this segment will be dirty.

code: void RemoveSegment ( int32 SID )


description: Note: in the false case, some of the edges may have been flipped before encountering the boundary edge

code: bool OuterArcFlipEdges ( int32 StartEID, int32 EndEID, int32 CenterVID, bool bClockwise )


description: Splice in a path to replace the joint and update the joint angle queue.

code: void ReplaceJointWithPath ( const [FPathJoint](API\Plugins\DynamicMesh\Operations\FDeformableEdgePath\FPathJoint) PathJoint, const [TArray](API\Runtime\Core\Containers\TArray)< [FEdgePath::FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) > & PathAsDirectedEdges )


description: the ID of the vertex at the "tail" of the specified segment

code: int32 SegmentTailVID ( int32 SID ) const


description: the ID of the vertex at the "head" of the specified segment

code: int32 SegmentHeadVID ( int32 SID ) const


description: Compute data associated with the joint formed by the specified segment (outgoing), and the preceding segment (incoming) in the path. Also update the JointAngleQueue that tracks straightness of each joint.

code: void UpdateJointAndQueue ( int32 OutgoingSegmentID )


description: Only allow construction from a path and mesh.

code: FDeformableEdgePath()


code: FDeformableEdgePath ( const [FDeformableEdgePath](API\Plugins\DynamicMesh\Operations\FDeformableEdgePath) & )


description: Constructor assumes the directed segments are ordered from tail (at index 0) to head

code: FDeformableEdgePath ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfaceMeshIn, const [TArray](API\Runtime\Core\Containers\TArray)< [FEdgePath::FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) > & OriginalPathAsDirectedSegments )


code: virtual ~FDeformableEdgePath()


className: FDeformableEdgePath

description: The original path is constructed as a sequence of mesh edges relative to the SurfaceMesh ( theFDynamicMesh3), these edges are encoded with path direction as FDirectedSegments. Note: The current implementation does not support closed paths or multiple paths.

code: class FDeformableEdgePath

EdgeFlipMesh

type: IntrinsicMeshTy...

EdgePath

type: FEdgePath

EIDToSIDsMap

type: TMap< int32,TA...

JointAngleQueue

type: FBinaryHeap< do...


code: static void DisplaceMeshWithVertexWeights ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FMeshNormals](API\Runtime\GeometryCore\DynamicMesh\FMeshNormals) & Normals, const [TArray](API\Runtime\Core\Containers\TArray)< float > & VertexWeights, float Intensity )


className: FDisplaceMesh

code: class FDisplaceMesh


description: segment ID of a new segment appended to the tail of the path

code: int32 AppendSegment ( const [FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) & Segment )


className: FDirectedSegment

code: struct FDirectedSegment


className: FSegmentAndSID

code: struct FSegmentAndSID : public [UE::Geometry::FEdgePath::FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment)


description: the segment ID of the {first, last} segment in the path, or InvalidID if the path is empty

code: int32 GetHeadSegmentID() const


code: int32 GetNextSegmentID ( int32 SID ) const


description: segment ID of {previous, next} segment in the path, or InvalidID if if no {previous, next} exists or if SID itself is not in the path

code: int32 GetPrevSegmentID ( int32 SID ) const


description: requested segment if it is part of the path, otherwise return invalid segment (with EID = InvalidID)

code: [FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) GetSegment ( int32 SID ) const


code: int32 GetTailSegmentID() const


description: segment ID of a new segment inserted before the specified existing segment. If SegmentIDToInsertBefore is InvalidID, then insert at head

code: int32 InsertSegmentBefore ( const [FDirectedSegment](API\Plugins\DynamicMesh\Operations\FEdgePath\FDirectedSegment) & DirectedSegment, int32 SegmentIDToInsertBefore )


code: static constexpr int InvalidID = IndexConstants::InvalidID;


description: upper bound on the segment ID used in path. i.e. all segment IDs < MaxSegmentID

code: int32 MaxSegmentID() const


description: number of segments in path

code: int32 NumSegments() const


description: Remove specified segment from path. Note SID is added to an internal free list and maybe reused

code: void RemoveSegment ( int32 SID )


code: FEdgePath ( const [FEdgePath](API\Plugins\DynamicMesh\Operations\FEdgePath) & )


className: FEdgePath

description: Note: this exists primarily for use withFDeformableEdgePathand no checking is done to ensure the path is continuous, in fact it could be used to represent multiple disconnected paths.

code: class FEdgePath

DirectedSegmentRefCounts

type: FRefCountVector

PathLinkList

type: TDoubleLinkedLi...


description:
Apply the Extrude operation to the input mesh.
true if the algorithm succeeds

code: virtual bool Apply()


code: bool ApplyExtrude ( [FExtrusionInfo](API\Plugins\DynamicMesh\Operations\FExtrudeMesh\FExtrusionInfo) & Region, [FMeshNormals](API\Runtime\GeometryCore\DynamicMesh\FMeshNormals) * UseNormals )


description: EOperationValidationResult::Okif we can apply operation, or error code if we cannot


className: FExtrusionInfo

description: OutputsFExtrusionInfostores info about extrusion for a single mesh connected component. Note that this may involve multiple boundary loops (eg if a region has holes)

code: struct FExtrusionInfo

InitialLoops

type: FMeshRegionBoun...

description: Initial boundary loops on the mesh (may be empty)

InitialToOffsetMapV

type: TMap< int, int ...

description: Map from initial vertices to new offset vertices

InitialTriangles

description: Set of triangles that were extruded

InitialVertices

description: Set of vertices that were extruded

NewLoops

type: TArray<FEdgeLo...

description: New edge loops on borders of offset patches (1-1 correspondence w/ InitialLoops.Loops)

OffsetTriangles

description: List of triangles on offset surface, in correspondence with InitialTriangles (note: can get vertices via InitialToOffsetMapV(InitialVertices)

OffsetTriGroups

description: List of new groups of triangles on offset surface

StitchPolygonIDs

type: TArray<TArray<...

description: List of group ids / polygon ids on each triangle-strip "tube"

StitchTriangles

description: Lists of triangle-strip "tubes" that connect each loop-pair


code: FExtrudeMesh ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * mesh )


className: FExtrudeMesh

description: Each quad of the border loop is assigned it's own normal and UVs (ie each is a separate UV-island)

code: class FExtrudeMesh

bSkipClosedComponents

type: bool

description: If true, skip closed components

DefaultExtrudeDistance

description: If no Extrude function is set, we will displace by DefaultExtrudeDistance*Normal

ExtrudedPositionFunc

type: TFunction< FVec...

description: This function is called to generate the offset vertex position.

Extrusions

type: TArray<FExtrus...

description: List of extrusion regions, one per connected component of input

IsPositiveOffset

description: If Extrusion is "negative" (ie negative distance, inset, etc) then this value must be set to false or the output will have incorrect winding orientation

Mesh

description: InputsThe mesh that we are modifying

UVScaleFactor

type: float

description: Quads on the stitch loop are planar-projected and scaled by this amount


description: For each vertex in Mesh, compute the lattice cell it resides in and its weighting.

code: void ComputeInitialEmbedding ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FLatticeExecutionInfo](API\Plugins\DynamicMesh\Operations\FLatticeExecutionInfo) ExecutionInfo )


description: Clamp the given index to [0, Dims] and return the current lattice point position at the clamped index.

code: FVector3d ClosestLatticePosition ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & VirtualControlPointIndex, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


description: Compute cell index and linear interpolation weights for a given point.

code: FVector3d ComputeTrilinearWeights ( const FVector3d & Pt, [FVector3i](API\Runtime\GeometryCore\FVector3i) & GridCoordinates ) const


description: Get the index into the flatTArrayof positions given the (i,j,k) coordinates in the lattice.

code: int ControlPointIndexFromCoordinates ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


code: int ControlPointIndexFromCoordinates ( int i, int j, int k ) const


code: [FMatrix3d](API\Runtime\GeometryCore\FMatrix3d) CubicInterpolationJacobian ( const [FEmbedding](API\Plugins\DynamicMesh\Operations\FFFDLattice\FEmbedding) & VertexEmbedding, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


description: Compute the extrapolated position for a "virtual" lattice control point outside of the actual lattice.

code: FVector3d ExtrapolatedLatticePosition ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & VirtualPointIndex, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


description: Return the set of lattice corner positions in undeformed state.

code: void GenerateInitialLatticePositions ( [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & OutLatticePositions ) const


className: FEmbedding

description: Linear interpolation information. There should be one of these per mesh vertex.

code: struct FEmbedding


description: Number of lattice points in each dimension.

code: const [FVector3i](API\Runtime\GeometryCore\FVector3i) & GetDimensions() const


description: Extents of the lattice before it is deformed.

code: const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & GetInitialBounds() const


description: Using the Lattice's current control point positions, the original embedding information, and the original normals, compute the new rotated normals

code: void GetRotatedMeshVertexNormals ( const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3f > & OriginalNormals, [TArray](API\Runtime\Core\Containers\TArray)< FVector3f > & OutNormals, [ELatticeInterpolation](API\Plugins\DynamicMesh\Operations\UE__Geometry__ELatticeInterpolat-) Interpolation, [FLatticeExecutionInfo](API\Plugins\DynamicMesh\Operations\FLatticeExecutionInfo) ExecutionInfo, [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress ) const


description: Helper for linear interpolation. Returns lattice points at (I,J,K) and (I+1,J,K).

code: void GetValuePair ( int I, int J, int K, FVector3d & A, FVector3d & B, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


description: Using the Lattice's current control point positions, the original embedding information, and the original normals contained in an overlay, compute the new rotated normals

code: void GetRotatedOverlayNormals ( const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints, const [FDynamicMeshNormalOverlay](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshNormalOverlay) * NormalOverlay, [TArray](API\Runtime\Core\Containers\TArray)< FVector3f > & OutNormals, [ELatticeInterpolation](API\Plugins\DynamicMesh\Operations\UE__Geometry__ELatticeInterpolat-) Interpolation, [FLatticeExecutionInfo](API\Plugins\DynamicMesh\Operations\FLatticeExecutionInfo) ExecutionInfo, [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress ) const


description: Use the given cell index and weights to compute the interpolated position.

code: FVector3d InterpolatedPosition ( const [FEmbedding](API\Plugins\DynamicMesh\Operations\FFFDLattice\FEmbedding) & VertexEmbedding, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


code: FVector3d InterpolatedPositionCubic ( const [FEmbedding](API\Plugins\DynamicMesh\Operations\FFFDLattice\FEmbedding) & VertexEmbedding, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


description: Create a lattice that fits the given mesh and has the given resolution along each dimension. Also precompute the weight of each mesh vertex inside the appropriate lattice cell.

code: FFFDLattice ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & InDims, const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & InMesh, float Padding )


code: [FMatrix3d](API\Runtime\GeometryCore\FMatrix3d) LinearInterpolationJacobian ( const [FEmbedding](API\Plugins\DynamicMesh\Operations\FFFDLattice\FEmbedding) & VertexEmbedding, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & LatticeControlPoints ) const


className: FFFDLattice

description: Free-form deformation lattice. Initialize it with a mesh and desired resolution, get the initial lattice points out. Then pass in deformed lattice points and it will compute deformed mesh vertex positions.

code: class FFFDLattice

CellSize

description: 3D size of a lattice cell

InitialBounds

type: FAxisAlignedBox...

VertexEmbeddings

type: TArray<FEmbedd...

description: Interpolation weights and cell indices per vertex of the inputFDynamicMesh3.


className: FEdgeLoopInsertionParams

description: Parameters for anInsertEdgeLoops()call.

code: struct FEdgeLoopInsertionParams

bSimplifyAlongPath

description: When inserting edges, we can locally simplify to improve mesh quality along the edge path.

GroupEdgeID

description: Edge loops will be inserted perpendicular to this group edge

Mesh

description: Both of these get updated in the operation

Mode

type: EInsertionMode

description: Determines how the edge is inserted: by using a cutting plane to cut existing triangles along the path, or deleting triangles and retriangulating.

SortedInputLengths

type: constTArray< d...

description: Inputs can be proportions in the range (0,1), or absolute lengths.

StartCornerID

description: One of the endpoints of the group edge, from which the arc lengths or proportions should be measured

Topology

type: FGroupTopology...

VertexTolerance

type: double

description: When inserting edges, this is the distance that a desired new point can be to use a nearby vertex rather than splitting an edge to create a new one.


className: EInsertionMode

code: enum EInsertionMode { Retriangulate, PlaneCut, }


className: FGroupEdgeInsertionParams

description: Parameters for anInsertGroupEdge()call

code: struct FGroupEdgeInsertionParams

EndPoint

type: FGroupEdgeSplit...

GroupBoundaryIndex

description: Indexinto the group's Boundary array that holds the boundary that the start and end points share.

GroupID

description: Group across which the cut is inserted.

Mesh

description: These are both modified in the operation

description: When inserting edges, this is the distance that a desired new point can be to use a nearby vertex rather than splitting an edge to create a new one (used when inserting using plane cut).


className: FGroupEdgeSplitPoint

description: Point along a group edge that is used as a start/endpoint for an inserted group edge.

code: struct FGroupEdgeSplitPoint

bIsVertex

description: Whether the point is an edge or vertex.

EdgeTValue

description: Only relevant for edges.

ElementID

description: Either vertex ID or edge ID of the point.

Tangent

description: When using a cutting plane, tangent that is used to help position the plane.


description: Some compilers (clang, at least) have issues with using a nested class with default initializers and a default constructor as default argument in a function, hence this constructor.


description: Inserts an edge loop into a mesh, where an edge loop is a sequence of (group) edges across quads.

code: bool InsertEdgeLoops ( const [FEdgeLoopInsertionParams](API\Plugins\DynamicMesh\Operations\FGroupEdgeInserter\FEdgeLoopInsertionParams) & Params, [FOptionalOutputParams](API\Plugins\DynamicMesh\Operations\FGroupEdgeInserter\FOptionalOutputParams) OptionalOut, [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


className: FOptionalOutputParams

code: struct FOptionalOutputParams

ChangedTidsOut

description: Any triangle IDs whose triangles were deleted or changed by the operation (but not newly created tids).

NewEidsOut

description: Edge IDs of the edges composing the newly inserted group edges.

ProblemGroupEdgeIDsOut

description: In loop insertion, the group edge IDs in the original topology that surround non-quad-like groups that stopped the loop.


description: Inserts a group edge into a given group.

code: bool InsertGroupEdge ( [FGroupEdgeInsertionParams](API\Plugins\DynamicMesh\Operations\FGroupEdgeInserter\FGroupEdgeInsertionParams) & Params, [FOptionalOutputParams](API\Plugins\DynamicMesh\Operations\FGroupEdgeInserter\FOptionalOutputParams) OptionalOut, [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


className: FGroupEdgeInserter

description: Used to insert group edges and group edge loops.

code: class FGroupEdgeInserter


description: Populate the internal ROI data structures based on the given HandleGroups and ROIGroups. HandleGroups will be empty if the Handle is a set of Vertices or Edges.

code: virtual void CalculateROI ( const [TArray](API\Runtime\Core\Containers\TArray)< int > & HandleGroups, const [TArray](API\Runtime\Core\Containers\TArray)< int > & ROIGroups )


description: Restore the Handle and ROI vertex positions to their initial state

code: virtual void ClearSolution ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * TargetMesh )


description: Precompute the representation of the ROI vertices at the initial positions.

code: virtual void ComputeEncoding()


description: Call EdgeSpanFunc for every groupFEdgeSpanin the modified-area ROI that will be modified by the solver (does not include edges that are encompassed by the Handle)

code: void EnumerateROIEdges ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(const [FEdgeSpan](API\Runtime\GeometryCore\FEdgeSpan) &EdgeSpan)> EdgeSpanFunc ) const


className: FEdgeEncoding

code: struct FEdgeEncoding

Vertices

type: TArray<FEdgeVe...


className: FEdgeVertexEncoding

description: Deformation strategy (should be in subclass?)

code: struct FEdgeVertexEncoding


className: FFaceEncoding

code: struct FFaceEncoding

type: TArray<FFaceVe...


className: FFaceVertexEncoding

code: struct FFaceVertexEncoding

Deltas

type: TArray< FVector...

Weights

type: TArray< double ...


className: FROIEdge

code: struct FROIEdge

EdgeIndex

type: int

Span

type: FEdgeSpan


className: FROIFace

code: struct FROIFace

BoundaryVerts

type: TArray< int >


description: the set of handle vertices

code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetHandleVertices() const


code: const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * GetMesh() const


description: the set of all overlay normals that will be modified by the deformation

code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetModifiedOverlayNormals() const


description: the set of all vertices whose positions will be modified by the deformation

code: const [TSet](API\Runtime\Core\Containers\TSet)< int > & GetModifiedVertices() const


description: Set the Mesh and Topology to use for the deformation

code: void Initialize ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) * Topology )


code: const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) * GetTopology() const


description: These are functions that subclasses may wish to overridereset all internal data structures, eg when changing handle

code: virtual void Reset()


description: Save the positions of all vertices that will be modified

code: virtual void SaveInitialPositions()


description: Set the active handle to the given Edges

code: virtual void SetActiveHandleEdges ( const [TArray](API\Runtime\Core\Containers\TArray)< int > & TopologyEdgeIDs )


description: Set the active handle to the given Corners

code: virtual void SetActiveHandleCorners ( const [TArray](API\Runtime\Core\Containers\TArray)< int > & TopologyCornerIDs )


description: Set the active handle from GeometrySelection

code: virtual void SetActiveHandleFromSelection ( const [FGeometrySelection](API\Plugins\DynamicMesh\Selections\FGeometrySelection) & Selection )


description: Handle setup/configuraiton Set the active handle to the given Faces

code: virtual void SetActiveHandleFaces ( const [TArray](API\Runtime\Core\Containers\TArray)< int > & FaceGroupIDs )


description: Solving Update TargetMesh by first calling HandleVertexDeformFunc() to get new handle vertex positions, then solving for new ROI vertex positions.

code: virtual void UpdateSolution ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * TargetMesh, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d([FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) *[Mesh](API\Plugins\DynamicMesh\Operations\FGroupTopologyDeformer\Mesh), int)> & HandleVertexDeformFunc )


code: virtual ~FGroupTopologyDeformer()


className: FGroupTopologyDeformer

description: Various functions can be overrided to customize behavior.

code: class FGroupTopologyDeformer

EdgeEncodings

type: TArray<FEdgeEn...

FaceBoundaryVertsTemp

type: TSet< int >

FaceEncodings

type: TArray<FFaceEn...

InitialPositions

type: FVertexPosition...

Mesh

type: constFDynamicM...

ROIEdges

type: TArray<FROIEdg...

ROIFaces

type: TArray<FROIFac...

Topology

type: constFGroupTop...


description:
Apply the Inset operation to the input mesh.
true if the algorithm succeeds

code: virtual bool Apply()


code: virtual bool ApplyInset ( [FInsetInfo](API\Plugins\DynamicMesh\Operations\FInsetMeshRegion\FInsetInfo) & Region, [FMeshNormals](API\Runtime\GeometryCore\DynamicMesh\FMeshNormals) * UseNormals )


className: FInsetInfo

description: Outputs Inset information for a single connected component

code: struct FInsetInfo

BaseLoops

type: TArray<FEdgeLo...

description: Initial loops on the mesh

InitialTriangles

type: TArray< int32 >

description: Set of triangles for this region

InsetLoops

description: Inset loops on the mesh.

StitchPolygonIDs

type: TArray<TArray<...

description: List of group ids / polygon ids on each triangle-strip "tube"

StitchTriangles

description: Lists of triangle-strip "tubes" that connect each loop-pair


description: EOperationValidationResult::Okif we can apply operation, or error code if we cannot


code: FInsetMeshRegion ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * mesh )


className: FInsetMeshRegion

description: Each quad of the border loop is assigned it's own normal and UVs (ie each is a separate UV-island)

code: class FInsetMeshRegion

AllModifiedTriangles

description: List of all triangles created/modified by this operation

AreaCorrection

type: float

description: Linear attenuation of area correction factor, valid range [0,1], 0 means ignore area correction entirely

bReproject

type: bool

description: Reproject positions onto input surface

bSolveRegionInteriors

description: Update positions of any non-boundary vertices in inset regions (via laplacian solve)

ChangeTracker

type: TUniquePtr<FDy...

description: If set, change tracker will be updated based on edit

InsetDistance

type: double

description: Inset by this distance

InsetRegions

type: TArray<FInsetI...

description: List of Inset regions/components

Mesh

description: InputsThe mesh that we are modifying

ProjectionTarget

type: FMeshProjection...

description: Projection target

Softness

description: Determines how strongly laplacian solve constraints are enforced.

Triangles

description: The triangle region we are modifying

UVScaleFactor

description: Quads on the stitch loop are planar-projected and scaled by this amount


description:
Flip a single edge in the Intrinsic Mesh.
a success or failure info.

code: [EMeshResult](API\Runtime\GeometryCore\UE__Geometry__EMeshResult) FlipEdge ( int32 EID, [FEdgeFlipInfo](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicEdgeFlipMesh\FEdgeFlipInfo) & EdgeFlipInfo )


description: pointer the reference mesh, note theFIntrinsicTriangulationdoes not manage the lifetime of this mesh

code: const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * GetExtrinsicMesh() const


description:
Trace the specified surface (extrinsic) mesh edge across the intrinsic mesh.Bydefault this traces from vertex EdgeV.A to vertex EdgeV.B where EdgeV = SurfaceMesh.GetEdgeV(SurfaceEID).
array of intrinsic edges crossed between the specified vertices. This can be used to compute the actual MeshPoints on the surface if desired.

code: [TArray](API\Runtime\Core\Containers\TArray)< [FEdgeAndCrossingIdx](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh\FEdgeAndCrossingIdx) > GetImplicitEdgeCrossings ( const int32 SurfaceEID, const bool bReverse ) const


description: NormalCoordinate data structure that counts the number of regular surface (extrinsic) mesh edge-crossings for each intrinsic mesh edge.

code: const [IntrinsicCorrespondenceUtils::FNormalCoordinates](API\Plugins\DynamicMesh\Operations\FNormalCoordinates) & GetNormalCoordinates() const


description: the position of the intrinsic vertex relative to the underlying surface mesh

code: [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh\FSurfacePoint) GetVertexSurfacePoint ( int32 VID ) const


description: true if the intrinsic vertex corresponds to a surface vertex.

code: bool IsSurfaceVertex ( int VID ) const


description:
Note: when tracing few edges, this method is preferred to using the FEdgeCorrespondence based tracing (see FEdgeCorrespondence below). But when tracing a large percentage of the mesh edges the FEdgeCorrespondence will be faster as it reuses intermediate results.
Array of FSurfacePoints relative to the surface mesh that represent the specified intrinsic mesh edge. This is directed relative to traversal of the first adjacent triangle (GetEdgeT().[0]), unless bReverse is true

code: [TArray](API\Runtime\Core\Containers\TArray)< [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh\FSurfacePoint) > TraceEdge ( int32 IntrinsicEID, double CoalesceThreshold, bool bReverse ) const


description:
Trace the specified surface (extrinsic) mesh edge across the intrinsic mesh.Bydefault this traces from vertex EdgeV.A to vertex EdgeV.B where EdgeV = SurfaceMesh.GetEdgeV(SurfaceEID).
array of surface points defined relative to the intrinsic mesh. In particular, the array will be a vertex followed by a sequence of (intrinsic) edge crossings.

code: [TArray](API\Runtime\Core\Containers\TArray)< [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh\FSurfacePoint) > TraceSurfaceEdge ( int32 SurfaceEID, double CoalesceThreshold, bool bReverse ) const


description: FIntrinsicEdgeFlipMeshMethods

code: FIntrinsicEdgeFlipMesh ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfaceMesh )


code: FIntrinsicEdgeFlipMesh ( const [FIntrinsicEdgeFlipMesh](API\Plugins\DynamicMesh\Operations\FIntrinsicEdgeFlipMesh) & )


className: FIntrinsicEdgeFlipMesh

description: NB: The lifetime of this structure should not exceed that of the original FDynamicMesh as this class holds a pointer to that mesh to reference locations on its surface. Also, this class isn't currently expected to work with surface meshes that have bow-ties.

code: class FIntrinsicEdgeFlipMesh : public [UE::Geometry::FSimpleIntrinsicEdgeFlipMesh](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicEdgeFlipMesh)

NormalCoordinates

type: FNormalCoordina...


code: [TArray](API\Runtime\Core\Containers\TArray)< [FEdgeAndCrossingIdx](API\Plugins\DynamicMesh\Operations\FIntrinsicMesh\FEdgeAndCrossingIdx) > GetImplicitEdgeCrossings ( const int32 SurfaceEID, const bool bReverse ) const


description: NormalCoordinate data structure that counts regular surface (extrinsic) mesh edge-crossing for each intrinsic mesh edge.


description: position in r3 of an intrinsic vertex.

code: FVector3d GetVertexPosition ( int32 VID ) const


code: [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicMesh\FSurfacePoint) GetVertexSurfacePoint ( int32 VID ) const


description:
Insert a new vertex inside an intrinsic triangle, ie do a 1 to 3 triangle split
Ok on success, or enum value indicates why operation cannot be applied. Mesh remains unmodified on error.

code: [EMeshResult](API\Runtime\GeometryCore\UE__Geometry__EMeshResult) PokeTriangle ( int32 TID, const FVector3d & BaryCoordinates, [FPokeTriangleInfo](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicMesh\FPokeTriangleInfo) & PokeInfo )


description:
Split an intrinsic edge of the mesh by inserting a vertex. This creates a new triangle on either side of the edge (ie a 2-4 split). If the original edge had vertices [a,b], with triangles t0=[a,b,c] and t1=[b,a,d], then the split inserts new vertex f. After the split t0=[a,f,c] and t1=[f,a,d], and we have t2=[f,b,c] and t3=[f,d,b] (it's best to draw it out on paper...) SplitInfo.OriginalTriangles = {t0, t1} and SplitInfo.NewTriangles = {t2, t3}
Ok on success, or enum value indicates why operation cannot be applied. Mesh remains unmodified on error.

code: [EMeshResult](API\Runtime\GeometryCore\UE__Geometry__EMeshResult) SplitEdge ( int32 EdgeAB, [FEdgeSplitInfo](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicMesh\FEdgeSplitInfo) & SplitInfo, double SplitParameterT )


description:
Note: when tracing few edges, this method is preferred to using the FEdgeCorrespondence based tracing (see FEdgeCorrespondence below). But when tracing a large percentage of the mesh edges the FEdgeCorrespondence will be faster as it reuses intermediate results.
Array of FSurfacePoints relative to the surface mesh that represent the specified intrinsic mesh edge. This is directed relative to traversal of the first adjacent triangle (GetEdgeT()[0]), unless bReverse is true

code: [TArray](API\Runtime\Core\Containers\TArray)< [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicMesh\FSurfacePoint) > TraceEdge ( int32 IntrinsicEID, double CoalesceThreshold, bool bReverse ) const


code: [TArray](API\Runtime\Core\Containers\TArray)< [FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicMesh\FSurfacePoint) > TraceSurfaceEdge ( int32 SurfaceEID, double CoalesceThreshold, bool bReverse ) const


description: FIntrinsicMeshMethods

code: FIntrinsicMesh ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfaceMesh )


code: FIntrinsicMesh ( const [FIntrinsicMesh](API\Plugins\DynamicMesh\Operations\FIntrinsicMesh) & )


className: FIntrinsicMesh

code: class FIntrinsicMesh : public [UE::Geometry::FSimpleIntrinsicMesh](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicMesh)

IntrinsicVertexPositions

type: TDynamicVector<...


code: [EMeshResult](API\Runtime\GeometryCore\UE__Geometry__EMeshResult) FlipEdge ( int32 EID, [FEdgeFlipInfo](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicEdgeFlipMesh\FEdgeFlipInfo) & EdgeFlipInfo )


code: const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * GetExtrinsicMesh() const


description: FSurfacePoint for the specified intrinsic vertex.

code: const [FIntrinsicTriangulation::FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicTriangulation\FSurfacePoint) & GetVertexSurfacePoint ( int32 VID ) const


description: Array of FSurfacePoints relative to the ExtrinsicMesh that represent the specified intrinsic mesh edge. This is directed from vertex EdgeV.A to vertex EdgeV.B unless bReverse is true

code: [TArray](API\Runtime\Core\Containers\TArray)< [FIntrinsicTriangulation::FSurfacePoint](API\Plugins\DynamicMesh\Operations\FIntrinsicTriangulation\FSurfacePoint) > TraceEdge ( int32 EID, double CoalesceThreshold, bool bReverse ) const


description: Given edge EID connects UpdateVID and StartVID, this update the SurfacePosition of the vertex UpdateVID by tracing the edge EID a distance TraceDistance from StartVID.

code: double UpdateVertexByEdgeTrace ( const int32 UpdateVID, const int32 StartVID, const double TracePolarDir, const double TraceDistance )


description: FIntrinsicTriangulationMethods

code: FIntrinsicTriangulation ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SrcMesh )


code: FIntrinsicTriangulation ( const [FIntrinsicTriangulation](API\Plugins\DynamicMesh\Operations\FIntrinsicTriangulation) & )


className: FIntrinsicTriangulation

code: class FIntrinsicTriangulation : public [UE::Geometry::FSimpleIntrinsicMesh](API\Plugins\DynamicMesh\Operations\FSimpleIntrinsicMesh)

SignpostData

type: FSignpost


description:
Apply the Extrude operation to the input mesh.
true if the algorithm succeeds

code: virtual bool Apply()


description: EOperationValidationResult::Okif we can apply operation, or error code if we cannot


code: FJoinMeshLoops ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh )


code: FJoinMeshLoops ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & LoopA, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & LoopB )


className: FJoinMeshLoops

description: The fill strip currently is configured so that:

code: class FJoinMeshLoops

JoinQuads

description: Quads along the join strip, in order of loops. Each quad is two triangle indices

JoinTriangles

description: Triangles of the quads flattend out (convenient), ie size = 2*NumQuads

LoopA

description: First loop

LoopB

description: Second loop

Mesh

description: InputsThe mesh that we are modifying

NewGroups

description: Groups created by the operation (currently 1)

QuadGroups

description: Group for each quad, ie size = NumQuads (currently all have same value)

UVScaleFactor

description: Quads on the stitch loop are scaled by this amount


className: FLatticeExecutionInfo

code: struct FLatticeExecutionInfo

CancelCheckSize

type: int


description:
Run the operation and modify .Mesh
true if the algorithm succeeds


code: FMeshAttributeTransfer ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * SourceMeshIn, [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * TargetMeshIn )


code: virtual ~FMeshAttributeTransfer()


className: FMeshAttributeTransfer

description: FMeshAttributeTransfertransfers attributes from a SourceMesh to a TargetMesh

code: class FMeshAttributeTransfer

Errors

type: TArray<EMeshAt...

SourceMesh

type: constFDynamicM...

description: The mesh that we are transferring from

TargetMesh

description: The mesh that we are transferring to

TransferType

type: EMeshAttributeT...

description: What is being transferred


code: void AddBevelEdgeLoop ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FEdgeLoop](API\Runtime\GeometryCore\FEdgeLoop) & Loop )


description: Setup phase: register Edges (spans) and (isolated) Loops that need to be beveled and precompute/store any mesh topology that must be tracked across the operation Required BevelVertex's are added byAddBevelGroupEdge()Once edges are configured,BuildVertexSets()is called to precompute the vertex topological information

code: void AddBevelGroupEdge ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) & Topology, int32 GroupEdgeID )


code: void AppendEdgeQuads ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelEdge](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelEdge) & Edge )


code: void AppendJunctionVertexPolygon ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex )


code: void AppendLoopQuads ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelLoop](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelLoop) & Loop )


code: void AppendTerminatorVertexPairQuad ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex0, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex1 )


code: void AppendTerminatorVertexTriangle ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex )


description: Apply the bevel operation to the mesh, and optionally track changes

code: bool Apply ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void BuildJunctionVertex ( [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex, const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void BuildTerminatorVertex ( [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & Vertex, const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void BuildVertexSets ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void ComputeMaterialIDs ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void ComputeNormals ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void ComputeUVs ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


description: Meshing phase - append quad-strips between unlinked edge spans/loops, polygons at junction vertices where required, and triangles at terminator vertices

code: void CreateBevelMeshing ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: void DisplaceVertices ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, double Distance )


className: EBevelVertexType

description: AFBevelVertexcan have various types, depending on the topology of the bevel edge graph and input mesh

code: enum EBevelVertexType { JunctionVertex, TerminatorVertex, BoundaryVertex, Unknown, }


className: EMaterialIDMode

description: Options for MaterialID assignment on the new triangles generated for the bevel

code: enum EMaterialIDMode { ConstantMaterialID, InferMaterialID, InferMaterialID_ConstantIfAmbiguous, }


className: FBevelEdge

description: FBevelEdgeis the accumulated data for an open span of mesh-edges, which possibly meets up with other bevel-edges at the vertices on either end of the span. Each mesh-edge of the bevel-edge will become a quad

code: struct FBevelEdge

MeshVertices

description: Initial topological information that defines what happens in unlink/displace/mesh steps

NewGroupID

description: New geometry computed during mesh step

NewMeshVertices

description: New mesh topology computed during unlink step

type: TArray< FVector...

description: Buffers for new vertex positions computed during displace step


className: FBevelVertex

description: AFBevelVertexrepesents/stores the accumulated data at a "bevel vertex", which is the mesh vertex at the end of aFBevelEdge. AFBevelVertexmay be expanded out into a polygon or just an edge, depending on its Type

code: struct FBevelVertex

VertexType

type: EBevelVertexTyp...

Wedges

type: TArray<FOneRin...


className: FBevelLoop

description: The data structures below are used to track this topological information during the operation. Note that some parts of these data structures may become invalid/incorrect as the operation proceeds...POSSIBLE IMPROVEMENTS:

code: struct FBevelLoop

MeshEdges

type: TArray< int32 >

NewGroupIDs

description: New geometry computed during mesh step


className: FOneRingWedge

description: AFOneRingWedgerepresents a sequential set of connected triangles around a vertex, ie a subset of an ordered triangle one-ring. Used to represent the desired bevel topology inFBevelVertex

code: struct FOneRingWedge


code: void FixUpUnlinkedBevelEdges ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh )


code: [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) * GetBevelVertexFromVertexID ( int32 VertexID )


description: Initialize the bevel with all edges of the given GroupTopology

code: void InitializeFromGroupTopology ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) & Topology )


description: Initialize the bevel with the specified edges of a GroupTopology

code: void InitializeFromGroupTopologyEdges ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) & Topology, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & GroupEdges )


description:
Initialize the bevel with border loops of the selected triangles.
false if any selection-bowtie vertices were found, in this case we cannot compute the bevel

code: bool InitializeFromTriangleSet ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & Triangles )


code: void UnlinkBevelEdgeInterior ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelEdge](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelEdge) & BevelEdge, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void UnlinkBevelLoop ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelLoop](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelLoop) & BevelLoop, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


description: Unlink phase - disconnect triangles along bevel edges/loops, and at vertices. Vertices may expand out into multiple "wedges" depending on incoming bevel-edge topology.

code: void UnlinkEdges ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void UnlinkJunctionVertex ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & BevelVertex, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void UnlinkLoops ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void UnlinkTerminatorVertex ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FBevelVertex](API\Plugins\DynamicMesh\Operations\FMeshBevel\FBevelVertex) & BevelVertex, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


code: void UnlinkVertices ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, [FDynamicMeshChangeTracker](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshChangeTracker) * ChangeTracker )


className: FMeshBevel

description: Currently "updating" the bevel shape, once the topology is known, is not supported, but could be implemented relatively easily, as all the relevant information is already tracked and stored.

code: class FMeshBevel

Edges

type: TArray<FBevelE...

InsetDistance

description: InputsDistance that bevel edges/vertices are inset from their initial position.

Loops

type: TArray<FBevelL...

MaterialIDMode

type: EMaterialIDMode

description: Which MaterialID assignment mode to use

MeshEdgePairs

type: TMap< int32, in...

NewTriangles

description: Outputslist of all new triangles created by the operation

Progress

type: FProgressCancel...

description: Set this member to support progress/cancel in the computations below

ResultInfo

type: FGeometryResult

description: Status of the operation, warnings/errors may be returned here

SetConstantMaterialID

description: Constant MaterialID used for various MaterialIDMode settings

Vertices

type: TArray<FBevelV...


description: Reset the connection to the given (not owned) surface mesh

code: void Reset ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfMesh )


description: Reset the connection to used a internally owned surface mesh

code: void Reset ( [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) > & SurfMesh )


description:
Initialize the bevel with the specified faces of a GroupTopology
false if any selection-bowtie vertices were found, in this case we cannot compute the bevel

code: bool InitializeFromGroupTopologyFaces ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, const [FGroupTopology](API\Plugins\DynamicMesh\FGroupTopology) & Topology, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & GroupFaces )


description: FMeshConnection

code: FMeshConnection ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfMesh )


className: FMeshConnection

description: A Connection stores the information needed to define a local reference direction for each vertex and triangle.

code: struct FMeshConnection

OwnedSurfaceMesh

type: TUniquePtr<FDy...


description:
Calculate output ConvexHull mesh for vertices of input Mesh
true on success

code: bool Compute ( [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


code: bool Compute_FullMesh ( [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


code: bool Compute_VertexSubset ( [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


description: Choose a more or less evenly-spaced subset of mesh vertices. Conceptually, this function creates a uniform grid with given cell size. (Cell size is given roughly as a percentage of the total mesh bounding box.) Each grid cell can hold up to one vertex. Return the set of representative vertices, maximum one per cell.

code: static void GridSample ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, int GridResolutionMaxAxis, [TArray](API\Runtime\Core\Containers\TArray)< int32 > & OutSamples )


description: Used for testing/debugging

code: static [FVector3i](API\Runtime\GeometryCore\FVector3i) DebugGetCellIndex ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & Mesh, int GridResolutionMaxAxis, int VertexIndex )


description:
Simplify the output convex hull. Assumes ConvexHull is already computed.
true on success

code: static bool SimplifyHull ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & HullMesh, int32 MaxTargetFaceCount, [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


code: FMeshConvexHull ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


className: FMeshConvexHull

description: Calculate Convex Hull of a Mesh

code: class FMeshConvexHull

bPostSimplify

type: bool

description: If true, output convex hull is simplified down to MaxTargetFaceCount

ConvexHull

description: Output convex hull

MaxTargetFaceCount

description: Target triangle count of the output Convex Hull

Mesh

description: Input Mesh

VertexSet

description: If set, hull will be computed on subset of vertices


description: Access to the trace results

code: [TArray](API\Runtime\Core\Containers\TArray)< [FTraceResult](API\Plugins\DynamicMesh\Operations\FMeshGeodesicSurfaceTracer\FTraceResult) > & GetTraceResults()


description: Access to the last tri traced in 2d form.

code: const [FTangentTri2](API\Plugins\DynamicMesh\Operations\FMeshGeodesicSurfaceTracer\FTangentTri2) & GetLastTri()


description: Access to the trace results

code: const [TArray](API\Runtime\Core\Containers\TArray)< [FTraceResult](API\Plugins\DynamicMesh\Operations\FMeshGeodesicSurfaceTracer\FTraceResult) > & GetTraceResults() const


code: void Reset ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & MeshIn )


description:
NB: the BaryPoint must be a valid point within or on the boundary of the triangle.
total distance of the trace, this may be less than the MaxDist (e.g. in the event the trace encounters a mesh edge)

code: double TraceMeshFromBaryPoint ( const int32 TriID, const FVector3d & BaryPoint, const FVector3d & RayDir3, double MaxDistance )


description:
NB: the BaryPoint must be a valid point within or on the boundary of the triangle. NB: it is assumed the edge Direction.EdgeID is part of the triangle TriID. ( otherwise the result will be unexpected)
total distance of the trace, this may be less than the MaxDist (e.g. in the event the trace encounters a mesh edge)

code: double TraceMeshFromBaryPoint ( const int32 TriID, const FVector3d & BaryPoint, const [FMeshSurfaceDirection](API\Plugins\DynamicMesh\Operations\FMeshGeodesicSurfaceTracer\FMeshSurfaceDire-) & Direction, double MaxDistance )


description:
NB: it is assumed the edge Direction.EdgeID is adjacent to VID. ( otherwise the result will be unexpected)
total distance of the trace, this may be less than the MaxDist (e.g. in the event the trace encounters a mesh edge)

code: double TraceMeshFromVertex ( const [FMeshTangentDirection](API\Plugins\DynamicMesh\Operations\FMeshGeodesicSurfaceTracer\FMeshTangentDire-) & Direction, double MaxDistance )


code: FMeshGeodesicSurfaceTracer ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & MeshIn )


className: FMeshGeodesicSurfaceTracer

description: At each point where the path crosses into a new triangle, this class records the point and direction in terms of barycentric coordinates, triangle references and local path direction relative to a local frame (in the form of one of the edges of the triangle).

code: class FMeshGeodesicSurfaceTracer

SurfaceTrace

type: TArray<FTraceR...


description: Alters the existing mesh to be mirrored across the mirror plane.

code: void Mirror ( [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


code: FMeshMirror ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, FVector3d Origin, FVector3d Normal )


description: Appends a mirrored copy of the mesh to the mesh.

code: void MirrorAndAppend ( [FProgressCancel](API\Runtime\GeometryCore\Util\FProgressCancel) * Progress )


className: FMeshMirror

code: class FMeshMirror

bAllowBowtieVertexCreation

description: Whether, when welding, the creation of new bowtie vertices should be allowed (if a point lies in the mirror plane without an edge in the plane).

bWeldAlongPlane

description: Whether, when using MirrorAndAppend, vertices on the mirror plane should be welded.

PlaneTolerance

type: double

description: Tolerance distance for considering a vertex to be "on the plane".


description: Deprecated* Use the single-set CollapseDegenerateEdges instead

code: void CollapseDegenerateEdges ( const [TSet](API\Runtime\Core\Containers\TSet)< int > & OnCutEdges, const [TSet](API\Runtime\Core\Containers\TSet)< int > & ZeroEdges )


description: Collapse degenerate edges

code: void CollapseDegenerateEdges ( [TSet](API\Runtime\Core\Containers\TSet)< int > & Edges, bool bRemoveAllDegenerateFromInputSet, [TSet](API\Runtime\Core\Containers\TSet)< int > * TriangleSelection )


description:
Compute the plane cut by splitting mesh edges that cross the cut plane, and then deleting any triangles on the positive side of the cutting plane.
true if operation succeeds

code: virtual bool Cut()


description:
Compute the plane cut by splitting mesh edges that cross the cut plane, but not deleting triangles on positive side.
true if operation succeeds

code: virtual bool CutWithoutDelete ( bool bSplitVerticesAtPlane, float OffsetSeparatedPortion, [TDynamicMeshScalarTriangleAttribute](API\Runtime\GeometryCore\DynamicMesh\TDynamicMeshScalarTriangleAttrib-)< int > * TriLabels, int NewLabelStartID, bool bAddBoundariesFirstHalf, bool bAddBoundariesSecondHalf )


code: bool ExtractBoundaryLoops ( const [TSet](API\Runtime\Core\Containers\TSet)< int > & OnCutEdges, const [TSet](API\Runtime\Core\Containers\TSet)< int > & ZeroEdges, [FMeshPlaneCut::FOpenBoundary](API\Plugins\DynamicMesh\Operations\FMeshPlaneCut\FOpenBoundary) & Boundary )


className: FOpenBoundary

description: TODO support optionally restricting plane cut to a mesh selection MeshFaceSelection CutFaceSet; Outputs

code: struct FOpenBoundary

CutLoops

type: TArray<FEdgeLo...

CutSpans

type: TArray<FEdgeSp...

Label

type: int

NormalSign

type: float


className: FCutResultRegion

code: struct FCutResultRegion


description: Fill cut loops withFPlanarHoleFiller, using a caller-provided triangulation function

code: virtual bool HoleFill ( [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< [TArray](API\Runtime\Core\Containers\TArray)< [FIndex3i](API\Runtime\GeometryCore\FIndex3i) >(const [FGeneralPolygon2d](API\Runtime\GeometryCore\Curve\FGeneralPolygon2d) &)> PlanarTriangulationFunc, bool bFillSpans, int ConstantGroupID )


code: virtual bool MinimalHoleFill ( int ConstantGroupID )


description: Fill cut loops withFSimpleHoleFiller

code: virtual bool SimpleHoleFill ( int ConstantGroupID )


code: void SplitCrossingEdges ( bool bDeleteTrisOnPlane, [TArray](API\Runtime\Core\Containers\TArray)< double > & Signs, [TSet](API\Runtime\Core\Containers\TSet)< int > & AlreadyOnPlaneEdges, [TSet](API\Runtime\Core\Containers\TSet)< int32 > & CutPlaneEdges, [TSet](API\Runtime\Core\Containers\TSet)< int > * SplitEdges, [TSet](API\Runtime\Core\Containers\TSet)< int > * OnPlaneVertices, [TSet](API\Runtime\Core\Containers\TSet)< int > * TriangleSelection )


code: void SplitCrossingEdges ( [TArray](API\Runtime\Core\Containers\TArray)< double > & Signs, [TSet](API\Runtime\Core\Containers\TSet)< int > & ZeroEdges, [TSet](API\Runtime\Core\Containers\TSet)< int > & OnCutEdges, [TSet](API\Runtime\Core\Containers\TSet)< int > & OnSplitEdges, bool bDeleteTrisOnPlane )


description: Deprecated* Instead use the two-parameter version of SplitEdgesOnly, which has direction selection tracking and does not populate the deprecated ResultSeedTriangles

code: virtual bool SplitEdgesOnly ( bool bAssignNewGroups )


description:
Compute the plane cut by splitting mesh edges that cross the cut plane, and then optionally update groups
true if operation succeeds

code: virtual bool SplitEdgesOnly ( bool bAssignNewGroups, [TSet](API\Runtime\Core\Containers\TSet)< int32 > * OptionalTriangleSelection )


code: void SplitCrossingEdges ( [TArray](API\Runtime\Core\Containers\TArray)< double > & Signs, [TSet](API\Runtime\Core\Containers\TSet)< int > & ZeroEdges, [TSet](API\Runtime\Core\Containers\TSet)< int > & OnCutEdges, bool bDeleteTrisOnPlane )


code: virtual void TransferTriangleLabelsToHoleFillTriangles ( [TDynamicMeshScalarTriangleAttribute](API\Runtime\GeometryCore\DynamicMesh\TDynamicMeshScalarTriangleAttrib-)< int > * TriLabels )


description: EOperationValidationResult::Okif we can apply operation, or error code if we cannot


description: Cut mesh with plane. Assumption is that plane normal is Z value.

code: FMeshPlaneCut ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, FVector3d Origin, FVector3d Normal )


description: Note: deprecation warnings disabled on destructor due to deprecated member variables.


className: FMeshPlaneCut

description: Algorithm is: 1) find all edge crossings 2) optionally discard any triangles with all vertex distances < epsilon. 3) Do edge splits at crossings 4 option a) (optionally) delete all vertices on positive side 4 option b) (OR optionally) disconnect all triangles w/ vertices on positive side (if keeping both sides) 4 option c) do nothing (if keeping both sides and not disconnecting them) 5) (optionally) collapse any degenerate boundary edges 6) (optionally) change an attribute tag for all triangles on positive side 7) find loops through valid boundary edges (ie connected to splits, or on-plane edges) (if second half was kept, do this separately for each separate mesh ID label)

code: class FMeshPlaneCut

bSimplifyAlongNewEdges

description: Control whether we attempt to auto-simplify the small planar triangles that the plane cut operation tends to generate

EdgeFilterFunc

type: TUniqueFunction...

description: If set, only edges that pass this filter will be split

HoleFillTriangles

type: TArray<TArray<...

description: Triangle IDs of hole fill triangles. Outer array is 1:1 with the OpenBoundaries array.

Mesh

description: Inputs

OpenBoundaries

type: TArray<FOpenBo...

description: Note: loops and spans within a singleFOpenBoundarycould be part of the same hole-fill triangulation separate open boundary structs will be considered separately and will not share hole fill triangles

PlaneTolerance

description: Tolerance distance for considering a vertex to be 'on plane'

ResultRegions

type: TArray<FCutRes...

description: List of output cut regions (eg that have separate GroupIDs).

SimplifySettings

type: FLocalPlanarSim...

description: Settings to apply if bSimplifyAlongNewEdges == true

UVScaleFactor

description: UVs on any hole fill surfaces are scaled by this amount


description:
Calculate output 2D Convex Polygon and Swept-Polygon 3D Mesh for vertices of input Mesh
true on success

code: bool Compute()


code: FMeshProjectionHull ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


className: FMeshProjectionHull

description: Calculate a Convex Hull for a Mesh by first Projecting all vertices to a plane, computing a 2D convex polygon that contains them, and then sweeping that 2D hull to create an extruded 3D volume.

code: class FMeshProjectionHull

bSimplifyPolygon

description: If true, 2D convex hull is simplified using MinEdgeLength and DeviationTolerance

description: Calculated convex hull polygon

description: Output swept-polygon convex hull

DeviationTolerance

description: Deviation Tolerance of the simplified 2D Convex Hull

Mesh

type: constFDynamicM...

description: Input Mesh

MinEdgeLength

description: Minimum Edge Length of the simplified 2D Convex Hull

MinThickness

description: Minimum thickness of extrusion.

ProjectionFrame

description: Input 3D Frame/Plane

description: Simplified convex hull polygon. Not initialized if bSimplifyPolygon == false


description: base mesh interior vertices of region (does not include region boundary vertices)

code: [TSet](API\Runtime\Core\Containers\TSet)< int > CurrentBaseInteriorVertices() const


description:
Remove the original submesh region and merge in the remeshed version. You can call this multiple times as the base-triangle-set is updated.
false if there were errors in insertion, ie if some triangles failed to insert. Does not revert changes that were successful.

code: bool BackPropropagate ( bool bAllowSubmeshRepairs )


description:
Transfer vertex positions in submesh back to base mesh; for use when the vertices in submesh still directly correspond back
true on success

code: bool BackPropropagateVertices ( bool bRecomputeBoundaryNormals )


description: the array of sub-region triangles. This is either the input regionTris or the submesh triangles after they are re-inserted.

code: const [TArray](API\Runtime\Core\Containers\TArray)< int > & CurrentBaseTriangles() const


description: This is very hard to remove, but we can at least avoid creating non-manifold edges (which with the current DMesh3 will be prevented, hence leaving a hole) by splitting the internal edge in the submesh (which presumably we were remeshing anyway, so changes are ok).

code: void RepairPossibleNonManifoldEdges()


code: void SetSubmeshGroupID ( int GID )


code: FMeshRegionOperator ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Base, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const int > & RegionTris )


code: FMeshRegionOperator ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Base, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const int > & RegionTris, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void([FDynamicSubmesh3](API\Runtime\GeometryCore\FDynamicSubmesh3) &)> ConfigSubmeshFunc )


className: FMeshRegionOperator

description: [TODO] Should this share any code w/ RegionRemesher? [TODO] ReinsertSubToBaseMapT is not returned by theFDynamicMeshEditor.ReinsertSubmesh, instead we are trying to guess it here, by making some assumptions about what happens. It works for now, but it would better ifFDynamicMeshEditorreturned this information.

code: class FMeshRegionOperator

CurrentBaseTris

type: TArray< int >

description: IDs of triangles in the base mesh that correspond to the submesh at time of last Compute or BackPropagate.

Region

type: FDynamicSubmesh...

ReinsertDuplicateTriBehavior

type: FDynamicMeshEdi...

description: Handle a tricky problem...see comments for EDuplicateTriBehavior enum

ReinsertSubToBaseMapT

type: FOptionallySpar...

description: Note computation of this is kind of a hack right now; see TODO in class comment above.

ReinsertSubToBaseMapV

description: This is only valid after BackPropagate() call!! maps submeshverts to base mesh


code: void ComputeComponentStatistics ( [FDynamicMeshAABBTree3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshAABBTree3) * Tree, [Component](API\Plugins\DynamicMesh\Operations\FMeshRepairOrientation\Component) & c )


description: Locally orient connected components

code: void OrientComponents()


code: void ComputeStatistics ( [FDynamicMeshAABBTree3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshAABBTree3) * Tree )


description: Globally orient  to be called after OrientComponents if a more globally consistent result is desired

code: void SolveGlobalOrientation ( [FDynamicMeshAABBTree3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMeshAABBTree3) * Tree )


description: EOperationValidationResult::Okif we can apply operation, or error code if we cannot


code: FMeshRepairOrientation ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh )


code: virtual ~FMeshRepairOrientation()


className: FMeshRepairOrientation

description: Invert triangles as needed to a consistent ~"outward" orientation

code: class FMeshRepairOrientation

Components

type: TArray<Compone...

Mesh

description: Inputs


className: Component

code: struct Component


description:
Run the resolve operation and modify .Mesh
true if the algorithm succeeds

code: bool Apply()


code: FMeshResolveTJunctions ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * MeshIn )


description: Default tolerance is float ZeroTolerance

code: static const double DEFAULT_TOLERANCE = FMathf::ZeroTolerance;


className: FMeshResolveTJunctions

description: Current implementation is O(N*M) in the number of boundary edges (N) and boundary vertices (M). Could be improved with a spatial data structure.

code: class FMeshResolveTJunctions

BoundaryEdges

type: TSet< int32 >

description: Subset of mesh boundary edges (otherwise all boundary edges are processed)

DistanceTolerance

description: Distance threshold used for various checks (eg is vertex on edge, end endpoint tolerance, etc)

description: The mesh that we are modifying

NumSplitEdges

description: Number of edges that were split to resolve T-junctions


code: FMeshSurfaceDirection ( int EID, const FVector2d & DirIn )


code: FMeshSurfaceDirection ( int EID, const double PolarAngle )


className: FMeshSurfaceDirection

code: struct FMeshSurfaceDirection


code: virtual bool Fill ( int32 GroupID )


className: FMeshTangentDirection

code: struct FMeshTangentDirection

PolarAngle

type: double


className: FMinimalHoleFiller

description: Construct a "minimal" fill surface for the hole. This surface is often quasi-developable, reconstructs sharp edges, etc. There are various options.

code: class FMinimalHoleFiller : public [UE::Geometry::IHoleFiller](API\Plugins\DynamicMesh\Operations\IHoleFiller)

bIgnoreBoundaryTriangles

type: bool

description: Settings.


className: FEdgeAndCrossingIdx

code: struct FEdgeAndCrossingIdx


description: the Order of the edge EID about VID (counting CCW from the surface reference edge for this vertex). Note: this assumes that edge EID is adjacent to vertex VID - otherwise -1 is returned.

code: int32 GetEdgeOrder ( const int32 VID, const int32 SurfaceEID ) const


description: the edgeID of the N-th out-going edge in the SurfaceMesh (counting CCW from the reference edge for this vertex).

code: int32 GetNthEdgeID ( const int32 VID, const int32 N ) const


description: true if the specified intrinsic edge ( indicated by IntrinsicEID) is a segment of a surface edge. Note:Byconstruction the initial intrinsic edges will have the same ID as the corresponding surface mesh edges, but edge splits will disrupt this. Also note: it is the responsibility of the caller to ensure IntrinsicEID is a valid edge on the intrinsic mesh.

code: bool IsSurfaceEdgeSegment ( const int32 IntrinsicEID ) const


description: number of surface edges that cross corner the specified corner of the intrinsic triangle defined by the given edges. note, it is assumed that IntrinsicTriEIDs are edge ID of an intrinsic triangle, but no checking is done.

code: int32 NumCornerCrossingRefEdges ( const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & IntrinsicTriEIDs, const int32 TriCornerIndex ) const


description: number of surface edges within the specified intrinsic triangle that are adjacent to the specified triangle corner. This excludes any surface edges that are along the intrinsic triangle boundary edges. note it is assumed that IntrinsicTriEIDs are edge ID of an intrinsic triangle, but no checking is done.

code: int32 NumCornerEmanatingRefEdges ( const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & IntrinsicTriEIDs, const int32 TriCornerIndex ) const


description: the number of surface edges that cross this intrinsic edge. Note: it is the responsibility of the caller to ensure IntrinsicEID is a valid edge on the intrinsic mesh.

code: int32 NumEdgeCrossing ( const int32 IntrinsicEID ) const


description:
Update the NormalCoords and RoundaboutOrder after an intrinsic mesh edge flip. TriAEID, and TriBEID are the triangle edges of the two affected triangles prior (!) to flipping the specified edge.
false if something failed

code: bool OnFlipEdge ( const int32 T0ID, const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & BeforeT0EIDs, const int32 T0OppVID, const int32 T1ID, const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & BeforeT1EIDs, const int32 T1OppVID, const int32 FlippedEID )


description: Rebuild the normal coordinate data in this connection. Assumes the base connection data is consistent with this surface mesh

code: void RebuildNormalCoordinates ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfMesh )


description: Reset the connection to used an internally owned surface mesh

code: void Reset ( [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) > & SurfMesh )


description: Reset the connection to the given (not owned) surface mesh

code: void Reset ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfMesh )


description: FNormalCoordinates

code: FNormalCoordinates ( const [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) & SurfMesh )


className: FNormalCoordinates

description: Normal Coordinates as defined by "Discrete Conformal Equivalence of Polyhedral Surfaces" - Gillespi, Springborn, Crane, TOG V40 No4, 2021 This structure assumes that the surface mesh is fixed, and the intrinsic mesh shares the same vertex set as the surface mesh and is initialized with the same connectivity as the surface mesh. Note, it is assumed that the surface mesh has no bow-ties.

code: struct FNormalCoordinates : public [UE::Geometry::IntrinsicCorrespondenceUtils::FMeshConnection](API\Plugins\DynamicMesh\Operations\FMeshConnection)

NormalCoord

type: TDynamicVector<...

RefVertDegree

type: TArray< int32 >


description:
Apply the Offset operation to the input mesh.
true if the algorithm succeeds

code: virtual bool Apply()


code: virtual bool ApplyOffset ( [FOffsetInfo](API\Plugins\DynamicMesh\Operations\FOffsetMeshRegion\FOffsetInfo) & Region )


code: virtual bool ApplyOffset_Legacy ( [FOffsetInfo](API\Plugins\DynamicMesh\Operations\FOffsetMeshRegion\FOffsetInfo) & Region )


description: The default function used for LoopEdgesShouldHaveSameGroup.

code: static bool EdgesSeparateSameGroupsAndAreColinearAtBorder ( [FDynamicMesh3](API\Runtime\GeometryCore\DynamicMesh\FDynamicMesh3) * Mesh, int32 Eid1, int32 Eid2, bool bCheckColinearityAtBorder )


code: virtual bool ApplyOffset_Version1 ( [FOffsetInfo](API\Plugins\DynamicMesh\Operations\FOffsetMeshRegion\FOffsetInfo) & Region )


className: EVersion

description: Support for different versions of the OffsetMeshRegion geometric operation. We default to the latest version.

code: enum EVersion { Current = 0, Legacy = 1, Version1 = 2, }