description: Return an ordering of the vertex indices so that each connected component is in a contiguous block.

code: [TArray](API\Runtime\Core\Containers\TArray)< int32 > MakeContiguousComponentsArray ( int32 MaxVID )


module: GeometryCore

code: FVertexConnectedComponents()


code: FVertexConnectedComponents ( int32 MaxVertexID )


className: FVertexConnectedComponents

description: Functions templated on TemplateMeshType are designed to work with any mesh that implements the standard MeshAdapter functions (see MeshAdapter.h) Functions templated on TriangleType are designed to work with triangles with vertex IDs that can be array-accessed (i.e.: Tri[0], Tri[1], Tri[2])

code: class FVertexConnectedComponents

DisjointSet

type: FSizedDisjointS...


className: FVolPresQuadricErrord

code: typedef [TVolPresQuadricError](API\Runtime\GeometryCore\TVolPresQuadricError)< double > FVolPresQuadricErrord


className: FVolPresQuadricErrorf

code: typedef [TVolPresQuadricError](API\Runtime\GeometryCore\TVolPresQuadricError)< float > FVolPresQuadricErrorf


code: void DistributeAdditionalLengthSamples ( int TargetSamples )


description: Generate the mesh

code: virtual [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


className: FArrowGenerator

description: Generate a 3D arrow

code: class FArrowGenerator : public [UE::Geometry::FVerticalCylinderGeneratorBase](API\Runtime\GeometryCore\Generators\FVerticalCylinderGeneratorBase)

HeadBaseRadius

type: float


className: ECapFillMode

code: enum ECapFillMode { None, EarClipping, }


className: FBaseRevolveGenerator

description: Revolve generators currently depend on the ability to use DynamicMesh operations to (eg) triangulate endcaps/etc, and so they are not currently FMeshShapeGenerators (this may be resolved in future)

code: class FBaseRevolveGenerator

bFillPartialRevolveEndcaps

type: bool

description: Whether or not to fill the open ends of a partial revolve, if possible

bReverseDirection

description: Reverse the direction of the revolution, for non-closed revolutions

bUVScaleRelativeWorld

description: When true, the generator attempts to scale UV's in a way that preserves scaling across different mesh results, aiming for 1.0 in UV space to be equal to UnitUVInWorldCoordinates in world space.

DegreeOffset

description: Offset for revolution degrees, eg to shift partial revolution around the revolve circle

DiagonalTolerance

type: double

description: When QuadSplitMode is ShortestDiagonal, biases one of the diagonals so that symmetric quads are split uniformly.

PolygonGroupingMode

type: EProfileSweepPo...

description: PolygonGroupingMode controls how polygroups are assigned on the output mesh

QuadSplitMethod

type: EProfileSweepQu...

description: QuadSplitMethod controls how quads are split into triangles (see enum comments)

RevolveDegrees

description: Degrees of the revolution path (eg circle for a regular revolution). Maybe clamped in some cases.

Steps

description: Number of discrete steps used to sample the revolution path

UnitUVInWorldCoordinates

description: Only relevant if bUVScaleRelativeWorld is true (see that description)

UVOffset

description: These values will be added to the generated UV coordinates after applying UVScale.

UVScale

description: Generated UV coordinates will be multiplied by these values.


className: ESphereProjectionMethod

description: Options for methods to project cube vertices to the sphere

code: enum ESphereProjectionMethod { NormalizedVector, CubeMapping, }


className: FBoxSphereGenerator

description: Generate a sphere by pushing a boxes vertices onto a sphere  often more useful

code: class FBoxSphereGenerator : public [UE::Geometry::FGridBoxMeshGenerator](API\Runtime\GeometryCore\Generators\FGridBoxMeshGenerator)

Radius

description: Sphere radius

SphereProjectionMethod

type: ESphereProjecti...


description: All normals for a given side are shared except for Front & Top. Border vertex normals per side are not shared.

code: virtual FVector3f GenerateNormal ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexId )


className: FCapsuleGenerator

description: The Capsule line segment is oriented along +Z, with the start point at (0,0,0) and the end point at (0,0,SegmentLength). So the lower hemispherical cap is below the origin, ie the bottom pole is at (0,0,-Radius) and the top pole is at (0,0,SegmentLength+Radius).

code: class FCapsuleGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bPolygroupPerQuad

description: If true, each quad gets a separate polygroup, otherwise the entire mesh is a single polygroup

NumCircleSteps

type: int

description: Number of vertices along each circle

NumHemisphereArcSteps

description: Number of vertices along the 90-degree arc from the pole to edge of spherical cap.

Radius

description: Radius of capsule

SegmentLength

description: Length of capsule line segment, so total height is SegmentLength + 2*Radius


description: All UVs for a given side are shared except for Front & Top. Border edges along each side are UV island edges.

code: virtual FVector2f GenerateUV ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int Step, int VertexId, float UVScale )


description: Mesh count protected variables are the only transient variables guaranteed to be valid at the time GenerateVertex is invoked.

code: virtual FVector3d GenerateVertex ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexColumn, int VertexRow )


description: Returns the max dimension of the staircase for the purposes of computing the world UV scale.

code: virtual float GetMaxDimension()


description: FCurvedStairGenerator

code: virtual void ResetData()


code: virtual ~FCurvedStairGenerator()


className: FCurvedStairGenerator

description: Generate an oriented Curved Stair mesh.

code: class FCurvedStairGenerator : public [UE::Geometry::FStairGenerator](API\Runtime\GeometryCore\Generators\FStairGenerator)

bIsClockwise

description: Precompute/cached data

CurveAngle

description: Curve angle of the staircase (in degrees)

InnerRadius

description: Inner radius of the curved staircase


className: FCylinderGenerator

description: Generate a cylinder with optional end caps

code: class FCylinderGenerator : public [UE::Geometry::FVerticalCylinderGeneratorBase](API\Runtime\GeometryCore\Generators\FVerticalCylinderGeneratorBase)


description: Generate the disc


description: Create vertex at position under IndicesMap, shifted to Origin

code: FVector3d MakeVertex ( double x, double y )


className: FDiscMeshGenerator

description: Generate planar disc (a circle polygon)

code: class FDiscMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

AngleSamples

description: Number of vertices around circumference

bSinglePolygroup

description: If true, output mesh has a single polygroup, otherwise each quad/tri gets a separate group

EndAngle

description: End of angle range spanned by disc, in degrees

IndicesMap

description: How to map 2D indices to 3D. Default is (0,1) = (x,y,0).

Normal

description: Normal vector of all vertices will be set to this value. Default is +Z axis.

RadialSamples

description: Number of vertices along radial spokes

Radius

description: Radius

StartAngle

description: Start of angle range spanned by disc, in degrees


description: Generate the triangulation

code: virtual [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


code: FFlatTriangulationMeshGenerator()


className: FFlatTriangulationMeshGenerator

description: Generate planar triangulation of a Polygon.

code: class FFlatTriangulationMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

description: Source triangle indices

type: TArray< int >

description: Optional polygroup IDs per triangle  ignored if empty

type: TArray< FVector...

description: Vertices of 2D triangulation.


code: virtual ~FFloatingStairGenerator()


className: FFloatingStairGenerator

description: Generate an oriented Floating Stair mesh.

code: class FFloatingStairGenerator : public [UE::Geometry::FLinearStairGenerator](API\Runtime\GeometryCore\Generators\FLinearStairGenerator)


description: Generate the mesh


className: FGeneralizedCylinderGenerator

description: TODO:

code: class FGeneralizedCylinderGenerator : public [UE::Geometry::FSweepGeneratorBase](API\Runtime\GeometryCore\Generators\FSweepGeneratorBase)

bUVScaleRelativeWorld

description: When true, the generator attempts to scale UV's in a way that preserves scaling across different mesh results, aiming for 1.0 in UV space to be equal to UnitUVInWorldCoordinates in world space.

CapType

type: ECapType

CrossSectionTexCoord

type: TArray< float >

description: -IfFSweepGeneratorBase::bProfileCurveIsClosed== true andCrossSectionTexCoord.Num()>=CrossSection.VertexCount()+ 1 then the firstCrossSection.VertexCount()+ 1 values will be used as U coordinates.

PathFrames

description: IfPathFrames.Num==Path.Num, then PathFrames[k] is used for each step instead of the propagated InitialFrame.

PathScales

description: IfPathScales.Num==Path.Num, then PathScales[k] is applied to the CrossSection at each step (this is combined with StartScale/EndScale, but ignored if bLoop=true)

PathTexCoord

description: -If bLoop == true andPathTexCoord.Num()>=Path.Num()+ 1 then the firstPath.Num()+ 1 values will be used as V coordinates.

StartScale

description: 2D uniform scale of the CrossSection, interpolated along the Path (via arc length) from StartScale to EndScale

UnitUVInWorldCoordinates

description: Only relevant if bUVScaleRelativeWorld is true (see that description)


description: FFloatingStairGenerator


className: FGridBoxMeshGenerator

description: Generate a mesh of a box that has "gridded" faces, i.e. grid of triangulated quads, with EdgeVertices setting the number of verts along each edge in each dimension

code: class FGridBoxMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

Box

description: 3D box

bPolygroupPerQuad

description: If true, each quad of box gets a separate polygroup

bScaleUVByAspectRatio

description: If true (default), UVs are scaled so that there is no stretching.


description: All normals for a given side are shared except for Front & Top. Border vertex normals per side are not shared.

code: virtual FVector3f GenerateNormal ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexId )


description: All UVs for a given side are shared except for Front & Top. Border edges along each side are UV island edges.

code: virtual FVector2f GenerateUV ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int Step, int VertexId, float UVScale )


description: FLinearStairGenerator

code: virtual FVector3d GenerateVertex ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexColumn, int VertexRow )


description: Returns the max dimension of the staircase for the purposes of computing the world UV scale.

code: virtual float GetMaxDimension()


code: virtual ~FLinearStairGenerator()


className: FLinearStairGenerator

description: Generate an oriented Linear Stair mesh.

code: class FLinearStairGenerator : public [UE::Geometry::FStairGenerator](API\Runtime\GeometryCore\Generators\FStairGenerator)

StepDepth

description: The depth of each step.


code: int AppendOrFindVertexID ( int64 hash, [TVector](API\Runtime\Core\Math\TVector)< double > Pos )


description: Add triangle to mesh, with locking if we are computing in parallel

code: void append_triangle ( int A, int B, int C, int64 CellHash )


description: Add vertex to mesh, with locking if we are computing in parallel

code: int append_vertex ( [TVector](API\Runtime\Core\Math\TVector)< double > V, int64 CellHash )


description: PopulateFMeshShapeGeneratordata structures from accumulated vertex/triangle sets

code: void BuildMesh()


code: [FVector3i](API\Runtime\GeometryCore\FVector3i) cell_index ( const [TVector](API\Runtime\Core\Math\TVector)< double > & Pos )


description: Corner and edge hash functions, these pack the coordinate integers into 16-bits, so max of 65536 in any dimension.

code: int64 corner_hash ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


code: int64 corner_hash ( int X, int Y, int Z )


code: [TVector](API\Runtime\Core\Math\TVector)< double > corner_pos ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK )


code: void corner_pos ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK, [TVector](API\Runtime\Core\Math\TVector)< double > & Pos )


code: double corner_value_grid ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


code: double corner_value_grid_parallel ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


description: Explicitly compute corner values as necessary

code: double corner_value_nohash ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


className: EdgeIndices

description: Below here are standard marching-cubes tables.


className: EdgeTable

code: static constexpr int EdgeTable;


code: int64 edge_hash ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx1, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx2 )


code: int edge_vertex_id ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx1, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx2, double F1, double F2 )


className: FIndexedVertex

code: struct FIndexedVertex


className: FGridCell

description: We pass Cells around, this makes code cleaner

code: struct FGridCell

i

description: TODO we do not actually need to store i, we just need the min-corner!


code: int FindVertexID ( int64 hash )


description: Root-find the intersection along edge from f(P1)=ValP1 to f(P2)=ValP2

code: void find_iso ( const [TVector](API\Runtime\Core\Math\TVector)< double > & P1, const [TVector](API\Runtime\Core\Math\TVector)< double > & P2, double ValP1, double ValP2, [TVector](API\Runtime\Core\Math\TVector)< double > & PIso )


description: Run MC algorithm and generate Output mesh

code: virtual [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


code: [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & GenerateContinuation ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Seeds )


description: Fully sequential version, no threading

code: void generate_basic()


description: Fully sequential version, no threading

code: void generate_continuation ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Seeds )


description: Parallel seed evaluation

code: void generate_continuation_parallel ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Seeds )


description: Processing z-slabs of cells in parallel

code: void generate_parallel()


code: int GetTriangleSectionIndex ( int64 hash )


code: int GetVertexSectionIndex ( int64 hash )


description: Compute 3D corner-positions and field values for cell at index

code: void initialize_cell ( [FGridCell](API\Runtime\GeometryCore\Generators\FMarchingCubes\FGridCell) & Cell, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


code: void initialize_cell_values_grid ( [FGridCell](API\Runtime\GeometryCore\Generators\FMarchingCubes\FGridCell) & Cell, bool Shift )


code: void initialize_cell_values_nohash ( [FGridCell](API\Runtime\GeometryCore\Generators\FMarchingCubes\FGridCell) & Cell, bool Shift )


description: Reset internal mesh-assembly data structures

code: void ResetMesh()


code: bool set_cell_if_not_done ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx )


description: Assume we just want to slide cell at XIdx-1 to cell at XIdx, while keeping yi and ZIdx constant. Then only x-coords change, and we have already computed half the values

code: void shift_cell_x ( [FGridCell](API\Runtime\GeometryCore\Generators\FMarchingCubes\FGridCell) & Cell, int XIdx )


className: TriTable

code: static constexpr int TriTable;


description: Find edge crossings and generate triangles for this cell

code: bool polygonize_cell ( [FGridCell](API\Runtime\GeometryCore\Generators\FMarchingCubes\FGridCell) & Cell, int VertIndexArray )


className: FMarchingCubes

code: class FMarchingCubes : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bEnableValueCaching

description: If true, code will assume thatImplicit()is expensive enough that it is worth it to cache evaluations when possible.

BlockedCornerValuesGrid

type: FBlockedDenseGr...

description: Store corner values in pre-allocated grid that has FMathf::MaxReal as sentinel.

Bounds

type: TAxisAlignedBox...

description: Bounding-box we will mesh inside of.

bParallelCompute

description: Use multi-threading? Generally a good idea unless problem is very small or you are multi-threading at a higher level (which may be more efficient)

CancelF

type: TFunction< bool...

description: If this function returns true, we should abort calculation

CellDimensions

description: Cube indices range from [Origin,CellDimensions)

CubeSize

description: Length of edges of cubes that are marching.

type: const int64

EdgeVertexSectionLocks

type: TArray< FCritic...

EdgeVertexSections

type: TArray<TMap< i...

GridBounds

type: FAxisAlignedBox...

Implicit

type: TFunction< doub...

description: This is the function we will evaluate

IsoValue

description: Mesh surface will be at this isovalue.

NumEdgeVertexSections

description: Hash table for edge vertices

RootMode

type: ERootfindingMod...

description: Which rootfinding method will be used to converge on surface along edges

RootModeSteps

description: Number of iterations of rootfinding method (ignored for SingleLerp)

SafetyMaxDimension

description: Max number of cells on any dimension; if exceeded, CubeSize will be automatically increased to fix

TriangleSectionLists

type: TArray<TArray<...

VertexCounter

type: std::atomic< in...


code: int AppendNormal ( const FVector3f & Normal, int ParentVertex )


code: int AppendTriangle ( int A, int B, int C )


code: int AppendUV ( const FVector2f & UV, int ParentVertex )


description: Append a new vertex at the given Position

code: int AppendVertex ( const FVector3d & Position )


code: static FVector2f BilinearInterp ( const FVector2f & v00, const FVector2f & v10, const FVector2f & v11, const FVector2f & v01, float tx, float ty )


code: static FVector2d BilinearInterp ( const FVector2d & v00, const FVector2d & v10, const FVector2d & v11, const FVector2d & v01, double tx, double ty )


description: Extends the various internal buffers to the correct sizes for the given additional element counts

code: void ExtendBufferSizes ( int AddVertices, int AddTriangles, int AddUVs, int AddNormals )


description: Subclasses implement this to generate mesh


code: static FVector3d BilinearInterp ( const FVector3d & v00, const FVector3d & v10, const FVector3d & v11, const FVector3d & v01, double tx, double ty )


code: static [FVector3i](API\Runtime\GeometryCore\FVector3i) LinearInterp ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & a, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & b, double t )


description: Clear arrays so thatGenerate()can be run again

code: void Reset()


description: Set the various internal buffers to the correct sizes for the given element counts

code: void SetBufferSizes ( int NumVertices, int NumTriangles, int NumUVs, int NumNormals )


description: Set Normal atIndexto given value with given ParentVertex

code: void SetNormal ( int Index, const FVector3f & Normal, int ParentVertex )


code: void SetTriangle ( int Index, const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & Tri )


code: void SetTriangle ( int Index, int A, int B, int C )


code: void SetTriangle ( int Index, int A, int B, int C, bool bClockwiseOverride )


code: void SetTriangleNormals ( int Index, const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & Tri )


code: void SetTriangleNormals ( int Index, int A, int B, int C )


code: void SetTriangleNormals ( int Index, int A, int B, int C, bool bClockwiseOverride )


code: void SetTrianglePolygon ( int Index, int PolygonID )


code: void SetTriangleUVs ( int Index, const [FIndex3i](API\Runtime\GeometryCore\FIndex3i) & Tri )


code: void SetTriangleUVs ( int Index, int A, int B, int C, bool bClockwiseOverride )


code: void SetTriangleUVs ( int Index, int A, int B, int C )


description: Set triangle and UVs and normals with matching indices Convenience function for shapes with no uv or normal seams

code: void SetTriangleWithMatchedUVNormal ( int Index, int A, int B, int C )


description: Set UV atIndexto given value with given ParentVertex

code: void SetUV ( int Index, const FVector2f & UV, int ParentVertex )


description: Set vertex atIndexto given Position

code: void SetVertex ( int Index, const FVector3d & Position )


code: virtual ~FMeshShapeGenerator()


className: FMeshShapeGenerator

description: Base class for triangle mesh generators (eg like to generate sphere, cylinder, etc) Subclasses must implementGenerate()

code: class FMeshShapeGenerator

bReverseOrientation

type: bool

description: If true, reverse orientation of created mesh

NormalParentVertex

description: Parent vertex index for each Normal. Same length as Normals array.

Normals

description: Array of Normals.

TriangleNormals

description: Array of triangle corner Normals, stored as tuples of indices into Normals array.

TrianglePolygonIDs

description: Array of per-triangle integer polygon IDs. Same length as Triangles array.

Triangles

description: Array of triangle corner positions, stored as tuples of indices into Vertices array

TriangleUVs

description: Array of triangle corner UVs, stored as tuples of indices into UVs array.

UVParentVertex

description: Parent vertex index for each UV. Same length as UVs array.

UVs

description: Array of UV positions.

Vertices

description: Array of vertex positions


description: Generate the mesh

code: virtual [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


className: FMinimalBoxMeshGenerator

description: Generate an oriented Box mesh with the smallest number of triangles possible (6 vertices, 12 triangles)

code: class FMinimalBoxMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

Box

description: 3D box

bScaleUVByAspectRatio

description: If true (default), UVs are scaled so that there is no stretching.


description: Generate the triangulation


description: Create vertex at position under IndicesMap, shifted to Origin

code: FVector3d MakeVertex ( double x, double y )


description: Initialize the polygon from an array of 2D vertices

code: void SetPolygon ( const [TArray](API\Runtime\Core\Containers\TArray)< FVector2D > & PolygonVerts )


code: FPlanarPolygonMeshGenerator()


className: FPlanarPolygonMeshGenerator

description: Generate planar triangulation of a Polygon.

code: class FPlanarPolygonMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

IndicesMap

description: How to map 2D indices to 3D. Default is (0,1) = (x,y,0).

Normal

description: Normal vector of all vertices will be set to this value. Default is +Z axis.

Polygon

description: Polygon to triangulate. If Polygon has self-intersections or degenerate edges, result is undefined.


description: Generate triangulation TODO: Enable more subdivisions along the width and length dimensions if requested


className: FPolygonEdgeMeshGenerator

description: Mesh generator that generates a quad for each edge of a closed polygon

code: class FPolygonEdgeMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bLimitCornerRadius

description: Limit corner radius to prevent overlapping

bRoundedCorners

description: Use arc segments instead of straight lines in corners

bSinglePolyGroup

description: If true, output mesh has a single polygroup, otherwise each quad gets a separate group

CornerRadius

type: double

description: Radius of the corner arcs; this is only available if Rounded Corners is enabled

NumArcVertices

type: int

description: Number of radial subdivisions for rounded corners


code: FPolygonEdgeMeshGenerator ( const [TArray](API\Runtime\Core\Containers\TArray)< [FFrame3d](API\Runtime\GeometryCore\FFrame3d_1) > & InPolygon, bool bInClosed, const [TArray](API\Runtime\Core\Containers\TArray)< double > & InOffsetScaleFactors, double InWidth, FVector3d InNormal, bool bInRoundedCorners, double InCornerRadius, bool bInLimitCornerRadius, int InNumArcVertices )


description: Utility function for calculating the contribution of triangle normals to average normals. AbNormalized (ie, the normalized vector from the first vertex to the second) is taken as a parameter so that it can be reused in dealing with a planar quad.

code: void AdjustNormalsForTriangle ( int32 TriIndex, int32 FirstIndex, int32 SecondIndex, int32 ThirdIndex, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & WeightedNormals, const FVector3d & AbNormalized )


description: Utility function for calculating the triangle normal contributions to average normals.

code: void AdjustNormalsForTriangle ( int32 TriIndex, int32 FirstIndex, int32 SecondIndex, int32 ThirdIndex, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & WeightedNormals )


description: TODO: We could allow the user to dissallow bowtie vertex creation, which currently could happen depending on which vertices are welded. Generate the mesh


description: Initializes the UV buffer with UV's that are set according to the diagram at the start ofGenerate(), with an extra element on each end in the case of closed curves, and distances weighted by distances in the corresponding curves. This function should get called after setting vertex positions so that the function can use them in case bUVScaleRelativeWorld is true.

code: void InitializeUvBuffer ( const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & VertPositionOffsets, int32 & NumUvRowsOut, int32 & NumUvColumnsOut )


className: FProfileSweepGenerator

description: Because it supports open profile curves, as well as welded points (for welding points on an axis of rotation), it cannot actually use the utility function fromFSweepGeneratorBase, and so it doesn't inherit from that class.

code: class FProfileSweepGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bProfileCurveIsClosed

description: If true, the last point of the profile curve is considered to be connected to the first.

bSharpNormals

description: If true, each triangle will have its own normals at each vertex, rather than sharing averaged ones with nearby triangles.

bSweepCurveIsClosed

description: If true, the last point of the sweep curve is considered to be connected to the first.

bUVScaleRelativeWorld

description: When true, the generator attempts to scale UV's in a way that preserves scaling across different mesh results, aiming for 1.0 in UV space to be equal to UnitUVInWorldCoordinates in world space.

bUVsSkipFullyWeldedEdges

description: If true, welded-to-welded connections in the profile curve (which can't result in triangles) do not affect the UV layout.

DiagonalTolerance

description: When QuadSplitMode is ShortestDiagonal, biases one of the diagonals so that symmetric quads are split uniformly.

EndProfiles

type: TArray< int32 >...

description: If the sweep curve is not closed, this will store the vertex ids of the first and last instances of the profile curve.

PolygonGroupingMode

type: EProfileSweepPo...

ProfileCurve

type: TArray< FVector...

description: Curve that will be swept along the curve, given in coordinates of the frames used in the sweep curve.

Progress

type: FProgressCancel...

description: If not null, this pointer is intermittently used to check whether the current operation should stop early.

QuadSplitMethod

type: EProfileSweepQu...

SweepCurve

description: Curve along which to sweep the profile curve.

SweepScaleCurve

description: (Optional) Curve along which to scale the profile curve, corresponding to each frame in SweepCurve.

UnitUVInWorldCoordinates

type: float

description: Only relevant if bUVScaleRelativeWorld is true (see that description)

UVOffset

description: These values will be added to the generated UV coordinates after applying UVScale.

UVScale

description: Generated UV coordinates will be multiplied by these values.

WeldedVertices

type: TSet< int32 >

description: Indices into ProfileCurve that should not be swept along the curve, instead being instantiated just once.


code: FPuncturedDiscMeshGenerator()


description: Generate the disc


className: FPuncturedDiscMeshGenerator

description: Generate planar disc with a hole

code: class FPuncturedDiscMeshGenerator : public [UE::Geometry::FDiscMeshGenerator](API\Runtime\GeometryCore\Generators\FDiscMeshGenerator)

HoleRadius

description: Hole Radius


description: Generate the mesh


description: Create vertex at position under IndicesMap, shifted to Origin

code: virtual FVector3d MakeVertex ( int CornerIndex, double x, double y )


className: FRectangleMeshGenerator

description: Generate planar rectangular mesh with variable number of subdivisions along width and height.Bydefault, center of rectangle is centered at (0,0,0) origin

code: class FRectangleMeshGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bScaleUVByAspectRatio

description: If true (default), UVs are scaled so that there is no stretching.

bSinglePolyGroup

description: If true, output mesh has a single polygroup, otherwise each quad gets a separate group

Height

description: Height of rectangle

HeightVertexCount

description: Number of vertices along Height axis

IndicesMap

description: Specifies how 2D indices are mapped to 3D points. Default is (0,1) = (x,y,0).

Normal

description: Normal vector of all vertices will be set to this value. Default is +Z axis.

Origin

description: Rectangle will be translated so that center is at this point

Width

description: Width of rectangle

WidthVertexCount

description: Number of vertices along Width axis


description: Generate the mesh


className: FRevolvePlanarPathGenerator

description: Revolve a planar polyline (in the XY plane) around the +Z axis along a circular path (+X, +Y) in the 2D polyline is mapped to (+X, 0, +Z)

code: class FRevolvePlanarPathGenerator : public [UE::Geometry::FBaseRevolveGenerator](API\Runtime\GeometryCore\Generators\FBaseRevolveGenerator)

bCapped

description: If true, open tops/bottoms of the revolved shape are capped

PathVertices

description: Vertices of the planar polyline/path that will be revolved


className: FRevolvePlanarPolygonGenerator

description: Revolve a planar polygon (in the XY plane) around the +Z axis along a circular path (+X, +Y) in the 2D polygon is mapped to (+X, 0, +Z)

code: class FRevolvePlanarPolygonGenerator : public [UE::Geometry::FBaseRevolveGenerator](API\Runtime\GeometryCore\Generators\FBaseRevolveGenerator)

bWeldVertsOnAxis

description: If true, vertices that lie on the +Z axis will be welded

PolygonVertices

description: Vertices of the planar polygon that will be revolved


code: static int NumSharpCorners ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) SharpFlags )


code: static bool SideInCorners ( int SideX, int SideY, [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Corners )


code: FRoundedRectangleMeshGenerator()


className: FRoundedRectangleMeshGenerator

description: Adds rounded corners to the rectangle mesh

code: class FRoundedRectangleMeshGenerator : public [UE::Geometry::FRectangleMeshGenerator](API\Runtime\GeometryCore\Generators\FRectangleMeshGenerator)

AngleSamples

description: Number of samples to put per rounded corner

Radius

description: Radius of rounded corners

SharpCorners

type: ERoundedRectang...


className: FSphereGenerator

description: Generate a sphere mesh, with UVs wrapped cylindrically

code: class FSphereGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bPolygroupPerQuad

description: If true, each quad of box gets a separate polygroup

Radius

description: Radius


className: FSpiralRevolvePlanarPolygonGenerator

description: Revolve a planar polygon (in the XY plane) around the +Z axis along a spiral path. (+X, +Y) in the 2D polygon is mapped to (+X, 0, +Z)

code: class FSpiralRevolvePlanarPolygonGenerator : public [UE::Geometry::FBaseRevolveGenerator](API\Runtime\GeometryCore\Generators\FBaseRevolveGenerator)

RisePerFullRevolution

description: Vertical rise of the spiral path per full 360-degree revolution


description: All UVs for a given side are shared except for Front & Top. Border edges along each side are UV island edges.

code: virtual FVector2f GenerateUV ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int Step, int VertexId, float UVScale )


description: FSpiralStairGenerator

code: virtual FVector3d GenerateVertex ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexColumn, int VertexRow )


code: virtual ~FSpiralStairGenerator()


className: FSpiralStairGenerator

description: Generate an oriented Curved Stair mesh.

code: class FSpiralStairGenerator : public [UE::Geometry::FCurvedStairGenerator](API\Runtime\GeometryCore\Generators\FCurvedStairGenerator)


className: ESide

code: enum ESide { Right, Left, Front, Top, Back, Bottom, }


className: EStairStyle

code: enum EStairStyle { Solid, Floating, }


description: FStairGenerator

code: virtual [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


description: All normals for a given side are shared except for Front & Top. Border vertex normals per side are not shared.

code: FVector3f GenerateNormal ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexId )


code: FVector2f GenerateUV ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int Step, int VertexId, float UVScale )


description: Mesh count protected variables are the only transient variables guaranteed to be valid at the time GenerateVertex is invoked.

code: FVector3d GenerateVertex ( [ESide](API\Runtime\GeometryCore\Generators\FStairGenerator\ESide) Side, int VertexColumn, int VertexRow )


description: This is invoked at the head of theGenerate()method.

code: virtual void ResetData()


description: Returns the max dimension of the staircase for the purposes of computing the world UV scale.

code: float GetMaxDimension()


className: FStairGenerator

description: Base Stair mesh generator class.

code: class FStairGenerator : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bScaleUVByAspectRatio

description: If true (default), UVs are scaled so that there is no stretching.

FaceDesc

type: TArray< int >

NumQuadsPerSide

description: Mesh counts.

NumSteps

description: The number of steps in this staircase.

RightSideColumnId

description: Vertex column indices.

RightStartFaceId

description: Face descriptor indices.

StairStyle

type: EStairStyle

description: The style of the stairs

StepHeight

description: The height of each step.

StepWidth

description: The width of each step.


description: Shared logic for creating vertex buffers and triangulations across all sweep primitives Note: Does not set vertex positions or normals; a separate call must do that.

code: void ConstructMeshTopology ( const [FPolygon2d](API\Runtime\GeometryCore\FPolygon2d) & CrossSection, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const int32 > & UVSections, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const int32 > & NormalSections, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const int32 > & SharpNormalsAlongLength, bool bEvenlySpaceUVs, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > & Path, int32 NumCrossSections, bool bLoop, const [ECapType](API\Runtime\GeometryCore\Generators\UE__Geometry__ECapType) Caps, FVector2f SectionsUVScale, FVector2f CapUVScale, FVector2f CapUVOffset, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > & CustomCrossSectionTexCoord, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > & CustomPathTexCoord )


code: virtual ~FSweepGeneratorBase()


className: FSweepGeneratorBase

code: class FSweepGeneratorBase : public [UE::Geometry::FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator)

bPolygroupPerQuad

description: If true, each quad gets a separate polygroup

bProfileCurveIsClosed

description: If true, the last point of the profile curve is considered to be connected to the first.


code: static float ComputeSegLengths ( const [TArrayView](API\Runtime\Core\Containers\TArrayView)< float > & Radii, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< float > & Heights, [TArray](API\Runtime\Core\Containers\TArray)< float > & AlongPercents )


code: bool GenerateVerticalCircleSweep ( const [TArrayView](API\Runtime\Core\Containers\TArrayView)< float > & Radii, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< float > & Heights, const [TArrayView](API\Runtime\Core\Containers\TArrayView)< int > & SharpNormalsAlongLength )


className: FVerticalCylinderGeneratorBase

description: Generate a cylinder with optional end caps

code: class FVerticalCylinderGeneratorBase : public [UE::Geometry::FSweepGeneratorBase](API\Runtime\GeometryCore\Generators\FSweepGeneratorBase)

CapType

type: ECapType


description: ECapType indicates the type of cap to use on a sweep

code: namespace UE { namespace Geometry { enum ECapType { None = 0, FlatTriangulation = 1, FlatMidpointFan = 2, } } }


description: Forward declarations

code: namespace UE { namespace Geometry { enum EProfileSweepPolygonGrouping { Single, PerFace, PerSweepSegment, PerProfileSegment, } } }


description: Forward declarations

code: namespace UE { namespace Geometry { enum EProfileSweepQuadSplit { Uniform, ShortestDiagonal, } } }


description: Forward declarations

code: namespace UE { namespace Geometry { enum ERootfindingModes { SingleLerp, LerpSteps, Bisection, } } }


description: Forward declarations

code: namespace UE { namespace Geometry { enum ERoundedRectangleCorner { None = 0, BottomLeft = 1, BottomRight = 2, TopLeft = 4, TopRight = 8, All = 15, } } }


description: Call EmitLineFunc for the line segments that make up the Circular Arc defined by the given parameters and sampled with NumSteps vertices

code: namespace UE { namespace Geometry { template<typename RealType> void UE::Geometry::GenerateArcSegments ( int32 NumSteps, RealType Radius, RealType StartAngle, RealType EndAngle, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & Center, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisX, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisY, const [TTransformSRT3](API\Runtime\GeometryCore\TTransformSRT3)< RealType > & Transform, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(const [TVector](API\Runtime\Core\Math\TVector)< RealType > &A, const [TVector](API\Runtime\Core\Math\TVector)< RealType > &B)> EmitLineFunc ) } }


description: Call EmitLineFunc for the 12 line segments defined by the given box parameters

code: namespace UE { namespace Geometry { template<typename RealType> void UE::Geometry::GenerateBoxSegments ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & HalfDimensions, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & Center, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisX, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisY, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisZ, const [TTransformSRT3](API\Runtime\GeometryCore\TTransformSRT3)< RealType > & Transform, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(const [TVector](API\Runtime\Core\Math\TVector)< RealType > &A, const [TVector](API\Runtime\Core\Math\TVector)< RealType > &B)> EmitLineFunc ) } }


description: Call EmitLineFunc for the line segments that make up the Circle defined by the given parameters and sampled with NumSteps vertices

code: namespace UE { namespace Geometry { template<typename RealType> void UE::Geometry::GenerateCircleSegments ( int32 NumSteps, RealType Radius, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & Center, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisX, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & AxisY, const [TTransformSRT3](API\Runtime\GeometryCore\TTransformSRT3)< RealType > & Transform, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(const [TVector](API\Runtime\Core\Math\TVector)< RealType > &A, const [TVector](API\Runtime\Core\Math\TVector)< RealType > &B)> EmitLineFunc ) } }


code: namespace UE { namespace Geometry { [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) & UE::Geometry::operator&= ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) & Lhs, [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Rhs ) } }


code: namespace UE { namespace Geometry { [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) & UE::Geometry::operator^= ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) & Lhs, [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Rhs ) } }


code: namespace UE { namespace Geometry { constexpr [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) UE::Geometry::operator& ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Lhs, [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Rhs ) } }


code: namespace UE { namespace Geometry { constexpr [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) UE::Geometry::operator^ ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Lhs, [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) Rhs ) } }


code: namespace UE { namespace Geometry { constexpr bool UE::Geometry::operator! ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) E ) } }


code: namespace UE { namespace Geometry { constexpr [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) UE::Geometry::operator~ ( [ERoundedRectangleCorner](API\Runtime\GeometryCore\Generators\UE__Geometry__ERoundedRectangleC-) E ) } }


description:
Works on general 2D point sets i.e., does not assume Cartesian/pixel grids
The filter weight given a 2D distance vector

code: float GetWeight ( const FVector2d & Dist ) const


description: true if the given 2D distance vector is in the region where the filter is defined and false otherwise

code: bool IsInFilterRegion ( const FVector2d & Dist ) const


code: FBCSplineFilter ( const float RadiusIn )


className: FBCSplineFilter

description: TODO The Unreal naming convention uses the T prefix for template functions. This would require deprecation. TODO Consider removing the Abs from GetWeight since distances are non-negative. This would require deprecation. TODO Consider using constexpr polynomial coefficients to make this class smaller

code: template<[EBCSplineType](API\Runtime\GeometryCore\Image\UE__Geometry__EBCSplineType) SplineType, bool bIsRadial> class FBCSplineFilter


code: FBoxFilter ( const float RadiusIn )


className: FBSplineFilter

code: typedef [FBCSplineFilter](API\Runtime\GeometryCore\Image\FBCSplineFilter)< [EBCSplineType::BSpline](API\Runtime\GeometryCore\Image\UE__Geometry__EBCSplineType), false > FBSplineFilter


className: FCatmullRomFilter

code: typedef [FBCSplineFilter](API\Runtime\GeometryCore\Image\FBCSplineFilter)< [EBCSplineType::CatmullRom](API\Runtime\GeometryCore\Image\UE__Geometry__EBCSplineType), false > FCatmullRomFilter


className: EImageType

code: enum EImageType { Float1, Float3, Float4, }


code: FVector4f GetPixel ( int64 LinearIndex ) const


code: FVector4f GetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & PixelCoords ) const


code: void SetDimensions ( [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) Dimensions )


code: void SetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & PixelCoords, const FVector4f & FloatPixel )


code: void SetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & PixelCoords, const [FLinearColor](API\Runtime\Core\Math\FLinearColor) & FloatPixel )


code: FImageAdapter ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< float > * Image )


code: FImageAdapter ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< FVector3f > * Image )


code: FImageAdapter ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< FVector4f > * Image )


className: FImageAdapter

description: FImageAdapteris a wrapper around different types ofTImageBuilderthat provides a standard interface, which allows functions that don't need to know about the specific image type to operate on "any" image. For example to allow code that works on a 4-channel image to operate on a single-channel image (in which case the Adapter will expand/collapse the channels automatically).

code: class FImageAdapter

type: TImageBuilder< ...

ImageType

type: EImageType


description: Clamp input coordinates to valid range of image coordinates

code: void Clamp ( [FVector2i](API\Runtime\GeometryCore\FVector2i) & Coords ) const


code: void Clamp ( int32 & X, int32 & Y ) const


description: 2D image coordinates from linear index

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) GetCoords ( int64 LinearIndex ) const


description: height of image

code: int32 GetHeight() const


description: linear index into image from 2D coordinates

code: int64 GetIndex ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & Coords ) const


code: int64 GetIndex ( int32 X, int32 Y ) const


description: linear index into image from 2D coordinates, optionally flipped around X and Y axes

code: int64 GetIndexMirrored ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & Coords, bool bFlipX, bool bFlipY ) const


description: The distance, measured in texels, between points P and Q which should be given in the default UV-space [0..1]^2

code: FVector2d GetTexelDistance ( const FVector2d & P, const FVector2d Q ) const


description: Real-valued dimensions of a pixel/texel in the image, relative to default UV space [0..1]^2

code: FVector2d GetTexelSize() const


description: Real-valued position of given texel center in default UV-space [0..1]^2

code: FVector2d GetTexelUV ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & Coords ) const


code: FVector2d GetTexelUV ( int64 LinearIndex ) const


description: true if image is square

code: bool IsSquare() const


description: width of image

code: int32 GetWidth() const


description: true if coordinates are valid, ie in-bounds of image dimensions

code: bool IsValidCoords ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & Coords ) const


description: number of elements in image

code: int64 Num() const


code: bool operator== ( const [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) & Other ) const


code: bool operator!= ( const [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) & Other ) const


description: integer XY coordinates for real-valued XY coordinates (ie texel that contains value, if texel origin is in bottom-left

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) PixelToCoords ( const FVector2d & PixelPosition ) const


description: Set the dimensions of this image.

code: void SetDimensions ( int32 WidthIn, int32 HeightIn )


description: integer XY coordinates for UV coordinates, assuming default UV space [0..1]^2

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) UVToCoords ( const FVector2d & UVPosition ) const


code: FImageDimensions ( int32 WidthIn, int32 HeightIn )


className: FImageDimensions

description: FImageDimensionsprovides various functions for working with size/indices/coordinates of a 2D image, as well as standard UV spaces

code: class FImageDimensions


className: BorderTexel

code: static constexpr int8 BorderTexel = 2;


description: Set texel type at the given X/YTexelType[Dimensions.GetIndex(X, Y)] = Type;

code: template<typename MeshType, typename GetTriangleIDFuncType> bool ClassifySamplesFromUVSpaceMesh ( const MeshType & UVSpaceMesh, GetTriangleIDFuncType GetTriangleIDFunc, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > * UVSpaceMeshTriCharts )


description: Computes the image occupancy map from a UV space mesh. This function classifies all the samples in the image, and computes the GutterTexels mapping, if you dont want the mapping you can call ClassifySamplesFromUVSpaceMesh and compute it yourself (eg for texture baking we use filter kernel coverage to compute the GutterTexels mapping)

code: template<typename MeshType, typename GetTriangleIDFuncType> bool ComputeFromUVSpaceMesh ( const MeshType & UVSpaceMesh, GetTriangleIDFuncType GetTriangleIDFunc, const [TArray](API\Runtime\Core\Containers\TArray)< int32 > * UVSpaceMeshTriCharts )


className: EmptyTexel

description: Texel types

code: static constexpr int8 EmptyTexel = 0;


className: FGridSampler

code: typedef [TGridSampler](API\Runtime\GeometryCore\Sampling\TGridSampler)< double > FGridSampler


className: GutterTexel

code: static constexpr int8 GutterTexel = 3;


code: void Initialize ( [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) DimensionsIn, int32 SamplesPerPixel )


code: void Initialize ( [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) DimensionsIn, const [FImageTile](API\Runtime\GeometryCore\Image\FImageTile) & TileIn, int32 SamplesPerPixel )


description: Initialize the pixel sampler.

code: void InitializePixelSampler ( const int32 SamplesPerPixelIn )


className: InteriorTexel

code: static constexpr int8 InteriorTexel = 1;


description: true if texel sample at this sample linear index is an Interior texel

code: bool IsInterior ( int64 LinearIndex ) const


code: template<typename TexelValueType> void ParallelProcessingPass ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< TexelValueType(int64 LinearIdx)> BeginTexel, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(int64 LinearIdx, float Weight, TexelValueType &)> AccumulateTexel, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(int64 LinearIdx, float Weight, TexelValueType &)> CompleteTexel, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(int64 LinearIdx, TexelValueType &)> WriteTexel, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< float(const [FVector2i](API\Runtime\GeometryCore\FVector2i) &TexelOffset)> WeightFunction, int32 FilterWidth, [TArray](API\Runtime\Core\Containers\TArray)< TexelValueType > & PassBuffer ) const


description: number of interior samples for the texel at this image linear index.

code: int32 TexelNumSamples ( int64 LinearIndex ) const


className: FImageOccupancyMap

description: TODO Some of the names in this class are misleading because the name mentions "Texel" but should actually say "Sample" this is because the class initially supported only one sample per texel but later multi-sampling was added

code: class FImageOccupancyMap

BorderTexels

description: Set of Border Texels, Pair is, so Border can be filled by directly copying from source to target.

Dimensions

type: FImageDimension...

description: Image Dimensions

GutterSize

description: Width of the gutter.

GutterTexels

description: Set of Gutter Texels.

PixelSampler

type: FGridSampler

TexelInteriorSamples

type: TArray64< int32...

description: Count of interior samples for each texel in Tile. Size = Tile.GetWidth() x Tile.GetHeight().

TexelQueryTriangle

description: Integer/Triangle ID for each sample in Tile.

TexelQueryUV

type: TArray64< FVect...

description: UV for each sample in Tile. Size = Tile.GetWidth() x Tile.GetHeight() x SamplesPerPixel.

TexelQueryUVChart

description: UV Chart ID for each texel in Tile.

TexelType

type: TArray64< int8 ...

description: Classification of each sample in Tile. Size = Tile.GetWidth() x Tile.GetHeight() x SamplesPerPixel.

Tile

type: FImageTile


description: true if the given source coordinates are contained by this tile.

code: bool Contains ( const int32 X, const int32 Y ) const


description: the coordinates into this tile given the linear index into this tile.

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) GetCoords ( const int64 LinearIdx ) const


description: the linear index for the given local coordinates into this tile.

code: int64 GetIndex ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & LocalCoords ) const


description: the linear index for the given local XY coordinates into this tile.

code: int64 GetIndex ( const int32 X, const int32 Y ) const


description: the linear index for the given source coordinates.

code: int64 GetIndexFromSourceCoords ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & SourceCoords ) const


code: int64 GetIndexFromSourceCoords ( const int32 X, const int32 Y ) const


description: the source image's coordinates given linear index into this tile.

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) GetSourceCoords ( const int64 LinearIdx ) const


description: the source image's coordinates given local coordinates into this tile.

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) GetSourceCoords ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & LocalCoords ) const


description: the source image's coordinates given local XY coordinates into this tile.

code: [FVector2i](API\Runtime\GeometryCore\FVector2i) GetSourceCoords ( const int32 X, const int32 Y ) const


code: FImageTile ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & InStart, const [FVector2i](API\Runtime\GeometryCore\FVector2i) & InEnd )


description: the tile data corresponding to the linear index [0, NumTiles()-1] w/ optional padding.

code: [FImageTile](API\Runtime\GeometryCore\Image\FImageTile) GetTile ( const int32 LinearTileIndex, const int32 Padding ) const


code: void SetTiling ( const [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) DimensionsIn, const int32 TileWidthIn, const int32 TileHeightIn )


code: FImageTiling ( const [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) DimensionsIn, const int32 TileWidthIn, const int32 TileHeightIn )


className: FImageTiling

code: class FImageTiling


code: typedef [TSpatialPhoto](API\Runtime\GeometryCore\Image\TSpatialPhoto)< float > FSpatialPhoto1f


code: typedef [TSpatialPhoto](API\Runtime\GeometryCore\Image\TSpatialPhoto)< FVector3f > FSpatialPhoto3f


code: bool operator== ( const [FSpatialPhotoParams](API\Runtime\GeometryCore\Image\FSpatialPhotoParams) & Other ) const


className: FSpatialPhotoParams

code: struct FSpatialPhotoParams

Dimensions

description: Pixel dimensions of the photo image

Frame

description: Coordinate system of the view camera -X()is forward,Z()is up

HorzFOVDegrees

type: double

description: Horizontal Field-of-View of the camera in degrees (full FOV, so generally calculations will use half this value)

NearPlaneDist

description: Near-plane distance for the camera, image pixels lie on this plane


code: typedef [TSpatialPhotoSet](API\Runtime\GeometryCore\Image\TSpatialPhotoSet)< float, float > FSpatialPhotoSet1f


code: typedef [TSpatialPhotoSet](API\Runtime\GeometryCore\Image\TSpatialPhotoSet)< FVector3f, float > FSpatialPhotoSet3f


code: typedef [TSpatialPhotoSet](API\Runtime\GeometryCore\Image\TSpatialPhotoSet)< FVector4f, float > FSpatialPhotoSet4f


code: typedef [TSpatialPhoto](API\Runtime\GeometryCore\Image\TSpatialPhoto)< FVector4f > FSpatialPhoto4f


description: Sample the image value at floating-point pixel coords with Bilinear interpolation The pixel coords are expected to be in the [0,Width]x[0,Height] image pixel rectangle.

code: template<typename ScalarType, [EImageTilingMethod](API\Runtime\GeometryCore\Image\UE__Geometry__EImageTilingMethod) TilingMethod> PixelType BilinearSample ( const FVector2d & PixelCoords, const PixelType & InvalidValue ) const


description: Sample the image value at floating-point UV coords with Bilinear interpolation.

code: template<typename ScalarType, [EImageTilingMethod](API\Runtime\GeometryCore\Image\UE__Geometry__EImageTilingMethod) TilingMethod> PixelType BilinearSampleUV ( const FVector2d & UVCoords, const PixelType & InvalidValue ) const


description: Clear all Pixels in the current Mip to the clear/default color for the texture build type

code: void Clear ( const PixelType & ClearValue )


description: true if the given X/Y coordinates are inside the image pixel bounds, ie can be used to index a pixel

code: bool ContainsPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & ImageCoords ) const


code: bool ContainsPixel ( int32 X, int32 Y ) const


description: Convert to a different data type of same Dimensions using ConvertFunc

code: template<typename OtherType> void Convert ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< OtherType(const PixelType &)> ConvertFunc, [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< OtherType > & ConvertedImageOut ) const


description: Copy Pixel value from one linear index to another

code: void CopyPixel ( int64 FromLinearIndex, int64 ToLinearIndex )


description: Very basic downsampling technqiue that just averages NxN pixel blocks. Multi-threaded.

code: [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< PixelType > FastDownsample ( int32 SubSteps, const PixelType & ZeroValue, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< PixelType(PixelType, int)> AverageFunc ) const


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


code: TArrayView64< PixelType > GetImageBuffer()


code: TConstArrayView64< PixelType > GetImageBuffer() const


description: Get the Pixel at the given X/Y coordinates

code: PixelType & GetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & ImageCoords )


code: const PixelType & GetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & ImageCoords ) const


description: Get the Pixel at the given linear index

code: const PixelType & GetPixel ( int64 LinearIndex ) const


code: PixelType & GetPixel ( int32 X, int32 Y )


code: const PixelType & GetPixel ( int32 X, int32 Y ) const


code: template<[EImageTilingMethod](API\Runtime\GeometryCore\Image\UE__Geometry__EImageTilingMethod) TilingMethod> static FVector2d GetTiledUV ( const FVector2d & UVCoords )


description: true if all pixels have the same value

code: bool IsConstantValue() const


description: Sample the image value at floating-point UV coords with Nearest sampling.

code: template<[EImageTilingMethod](API\Runtime\GeometryCore\Image\UE__Geometry__EImageTilingMethod) TilingMethod> PixelType NearestSampleUV ( const FVector2d & UVCoords ) const


code: void SetDimensions ( [FImageDimensions](API\Runtime\GeometryCore\Image\FImageDimensions) DimensionsIn )


description: Set the Pixel at the given X/Y coordinates to the given PixelType

code: void SetPixel ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & ImageCoords, const PixelType & NewValue )


description: Get the Pixel at the given linear index

code: PixelType & GetPixel ( int64 LinearIndex )


description: Set the Pixel at the given linear index to the given PixelType

code: void SetPixel ( int64 LinearIndex, const PixelType & NewValue )


code: void SetPixel ( int32 X, int32 Y, const PixelType & NewValue )


className: TImageBuilder

description: TImageBuilderis used to create and populate a 2D image with a templated "pixel" type.

code: template<typename PixelType> class TImageBuilder

Image

type: TDenseGrid2< Pi...


description: Fill the missing values in Image by replaying the infill sequence computed byComputeInfill()

code: void ApplyInfill ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< PixelType > & Image, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< PixelType(PixelType SumOfNbrValues, int NbrCount)> NormalizeFunc ) const


description: Fill the values of MissingPixels in Image by propagating from known values.

code: void ComputeInfill ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< PixelType > & Image, const [TArray](API\Runtime\Core\Containers\TArray)< [FVector2i](API\Runtime\GeometryCore\FVector2i) > & MissingPixels, PixelType MissingValue, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< PixelType(PixelType SumOfNbrValues, int NbrCount)> NormalizeFunc )


code: template<typename OtherPixelType> void ApplyInfill ( [TImageBuilder](API\Runtime\GeometryCore\Image\TImageBuilder)< OtherPixelType > & Image, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< OtherPixelType(OtherPixelType SumOfNbrValues, int NbrCount)> NormalizeFunc ) const


className: TMarchingPixelInfill

description: The infill sequence is tracked, which allows it to be "replayed" on multiple images. This is useful in cases where we have separate images with the same holes, which arises when baking textures from world sampling.

code: template<typename PixelType> class TMarchingPixelInfill

InfillSequence

type: TArray< int32 >

description: Encoding of infill operations, so that they can be applied to multiple images Values are [ NumPixels, Pixel1Count, Pixel1X, Pixel1Y, Pixel1Nbr1X, Pixel1Nbr1Y, ...


description: Add a photo to the photo set via move operation

code: void Add ( [TSpatialPhoto](API\Runtime\GeometryCore\Image\TSpatialPhoto)< PixelType > && Photo )


code: PixelType ComputeSample ( const int & PhotoIndex, const FVector2d & PhotoCoords, const PixelType & DefaultValue ) const


description:
VisibilityFunction is used to determine if a 3D point is visible from the given photo point. Generally the caller would implement some kind of raycast to do this.
the best valid sample if found, or DefaultValue if no suitable sample is available

code: PixelType ComputeSample ( const FVector3d & Position, const FVector3d & Normal, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const FVector3d &, const FVector3d &)> VisibilityFunction, const PixelType & DefaultValue ) const


code: bool ComputeSampleLocation ( const FVector3d & Position, const FVector3d & Normal, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const FVector3d &, const FVector3d &)> VisibilityFunction, int & PhotoIndex, FVector2d & PhotoCoords ) const


className: TSpatialPhoto

description: TSpatialPhotorepresents a 2D image located in 3D space, ie the image plus camera parameters, which is essentially a "Photograph" of some 3D scene (hence the name)

code: template<typename PixelType> struct TSpatialPhoto

Dimensions

description: Pixel dimensions of the photo image

Frame

description: Coordinate system of the view camera -X()is forward,Z()is up

HorzFOVDegrees

description: Horizontal Field-of-View of the camera in degrees (full FOV, so generally calculations will use half this value)

Image

description: Pixels of the image

NearPlaneDist

description: Near-plane distance for the camera, image pixels lie on this plane


code: PixelType ComputeSampleNearest ( const int & PhotoIndex, const FVector2d & PhotoCoords, const PixelType & DefaultValue ) const


description: removes all photos from the photo set

code: void Empty()


description: the photo at the given index

code: const [TSpatialPhoto](API\Runtime\GeometryCore\Image\TSpatialPhoto)< PixelType > & Get ( int32 Index ) const


description: the number of photos in the photo set

code: int32 Num() const


className: TSpatialPhotoSet

description: TSpatialPhotoSetis a set of TSpatialPhotos. TheComputeSample()function can be used to determine the value "seen" by the photo set at a given 3D position/normal, if possible.

code: template<typename PixelType, typename RealType> class TSpatialPhotoSet

Photos

type: TArray<TShared...


description: Forward declarations

code: namespace UE { namespace Geometry { enum EBCSplineType { BSpline, CatmullRom, MitchellNetravali, } } }


description: Forward declarations

code: namespace UE { namespace Geometry { enum EImageTilingMethod { Clamp, Wrap, } } }


code: typedef [TImplicitLine3](API\Runtime\GeometryCore\Implicit\TImplicitLine3)< double > FImplicitLine3d


code: typedef [TImplicitLine3](API\Runtime\GeometryCore\Implicit\TImplicitLine3)< float > FImplicitLine3f


code: typedef [TImplicitPoint3](API\Runtime\GeometryCore\Implicit\TImplicitPoint3)< double > FImplicitPoint3d


code: typedef [TImplicitPoint3](API\Runtime\GeometryCore\Implicit\TImplicitPoint3)< float > FImplicitPoint3f


code: typedef [TSkeletalImplicitLine3](API\Runtime\GeometryCore\Implicit\TSkeletalImplicitLine3)< double > FSkeletalImplicitLine3d


code: typedef [TSkeletalImplicitLine3](API\Runtime\GeometryCore\Implicit\TSkeletalImplicitLine3)< float > FSkeletalImplicitLine3f


code: const [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


description: Set cell size to hit the target voxel count along the max dimension of the bounds

code: void SetCellSizeAndExtendBounds ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, double ExtendBoundsIn, int TargetOutputVoxelCount )


description: true if input parameters are valid

code: bool Validate()


code: FWindingNumberBasedSolidify ( [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< double(const FVector3d &)> WindingFunctionIn, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & BoundsIn, const [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & SeedPointsIn )


code: virtual ~FWindingNumberBasedSolidify()


className: FWindingNumberBasedSolidify

description: Use marching cubes to remesh an arbitrary function that provides a winding-number like scalar value to a solid surface

code: class FWindingNumberBasedSolidify

bSolidAtBoundaries

type: bool

description: What to do if the surface extends outside the marching cubes bounds  if true, puts a solid surface at the boundary

CancelF

type: TFunction< bool...

description: If this function returns true, we should abort calculation

ExtendBounds

description: How much to extend bounds considered by marching cubes outside the original surface bounds

FunctionBounds

type: FAxisAlignedBox...

description: Bounds within which we will mesh things

MarchingCubes

type: FMarchingCubes

MeshCellSize

description: Size of the cells used when meshing the output (marching cubes' cube size)

SeedPoints

type: TArray< FVector...

description: Seed points for meshing

SurfaceSearchSteps

type: int

description: How many binary search steps to do when placing surface at boundary

WindingFunction

type: TUniqueFunction...

description: InputsExternal Winding-Number Function

WindingThreshold

description: Inside/outside winding number threshold


code: [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< [TAxisAlignedBox3](API\Runtime\GeometryCore\TAxisAlignedBox3)< RealType > > Bounds()


code: [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< RealType([TVector](API\Runtime\Core\Math\TVector)< RealType >)> Value()


code: template<typename RealType> struct TBoundedImplicitFunction3


code: float At ( int I, int J, int K ) const


code: FVector3f CellCenter ( int I, int J, int K )


className: EInsideModes

description: What counts as "inside" the mesh. Crossing count does not use triangle Orientation, so inverted faces are fine, but overlapping shells or self intersections will be filled using even/odd rules (as seen along X axis...) Winding count is basically mesh winding number, handles overlap shells and self-intersections, but inverted shells are 'subtracted', and inverted faces are a disaster. Both modes handle internal cavities, neither handles open sheets.

code: enum EInsideModes { CrossingCount = 0, WindingCount = 1, }


code: const [FDenseGrid3i](API\Runtime\GeometryCore\Spatial\FDenseGrid3i) & GetClosestTriGrid() const


description: SDF Grid available after callingCompute()

code: const [FDenseGrid3f](API\Runtime\GeometryCore\Spatial\FDenseGrid3f) & GetGrid() const


code: const [FDenseGrid3i](API\Runtime\GeometryCore\Spatial\FDenseGrid3i) & GetIntersectionsGrid() const


description: Origin of the SDF Grid, in same coordinates as mesh

code: const FVector3f & GetGridOrigin() const


code: float GetValue ( [FVector3i](API\Runtime\GeometryCore\FVector3i) Idx )


code: constexpr const float operator[] ( [FVector3i](API\Runtime\GeometryCore\FVector3i) Idx ) const


description: Calculate twice signed area of triangle (0,0)-(X1,Y1)-(X2,Y2) return an SOS-determined sign (-1, +1, or 0 only if it's a truly degenerate triangle)

code: static int Orientation ( double X1, double Y1, double X2, double Y2, double & TwiceSignedArea )


description: Robust test of (X0,Y0) in the triangle (X1,Y1)-(X2,Y2)-(X3,Y3) if true is returned, the barycentric coordinates are set in A,B,C.

code: static bool PointInTriangle2d ( double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3, double & A, double & B, double & C )


code: TCachingMeshSDF ( float CellSizeIn )


code: TCachingMeshSDF ( const TriangleMeshType * MeshIn, float CellSizeIn, const [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3)< TriangleMeshType > * SpatialIn, bool bAutoBuild )


className: TCachingMeshSDF

description: This code is based on the implementation found athttps://github.com/christopherbatty/SDFGen

code: template<class TriangleMeshType> class TCachingMeshSDF

ApproxMaxCellsPerDimension

description: If the number of cells in any dimension may exceed this, CellSize will be automatically increased to keep cell count reasonable.

bComputeSigns

description: Should we try to compute signs? if not, Grid remains unsigned

bUseParallel

description: Most of this parallelizes very well, makes a huge speed difference.

bWantClosestTriGrid

description: Implementation computes the triangle closest to each Grid cell, can return this Grid if desired (only reason not to is avoid hanging onto memory)

bWantIntersectionsGrid

description: Grid of per-cell crossing or parity counts.

CellSize

type: float

ExpandBounds

description: Bounds of Grid will be expanded this much in positive and negative directions.

InsideMode

type: EInsideModes

MaxOffsetDistance

description: Max distance away from surface that we might need to evaluate

Mesh

type: const TriangleM...

Spatial

type: constTMeshAABB...


code: [TAxisAlignedBox3](API\Runtime\GeometryCore\TAxisAlignedBox3)< RealType > Bounds()


code: RealType Value ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > Pt )


className: ZeroIsocontour

code: static constexpr RealType ZeroIsocontour = (RealType)0.421875;


code: TDistanceFieldToSkeletalField ( InputBoundedImplicitType * DistanceField, RealType FalloffDistance )


className: TDistanceFieldToSkeletalField

description: This class converts the interval [-falloff,falloff] to [0,1], Then applies Wyvill falloff function (1-t^2)^3. The result is a skeletal-primitive-like shape with the distance=0 isocontour lying just before midway in the range (at the .ZeroIsocontour constant)

code: template<typename InputBoundedImplicitType, typename RealType> struct TDistanceFieldToSkeletalField

DistanceField

type: InputBoundedImp...

FalloffDistance

type: RealType


code: void ComputeLazySDFs ( bool bReuseComputed )


code: void ComputeSpatials ( bool bReuseComputed )


code: const [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate ( bool bReuseComputed )


code: void GenerateBlendAnalytic ( bool bReuseComputed )


description: Set cell sizes to hit the target voxel counts along the max dimension of the bounds.

code: void SetCellSizesAndFalloff ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds, double BlendFalloffIn, int TargetInputVoxelCount, int TargetOutputVoxelCount )


className: TImplicitBlend

code: template<typename TriangleMeshType> class TImplicitBlend

BlendFalloff

type: double

description: Blend distance

BlendPower

description: Exponent used in blend; controls shape (larger number == sharper blend)

bSubtract

description: If true, perform a smooth subtraction instead of a smooth union

CancelF

description: If this function returns true, we should abort calculation

CombinedBounds

description: Intermediate.

ComputedSDFs

type: TArray<TCachin...

ComputedSpatials

type: TArray<TMeshAA...

GridCellSize

description: Size of the cells used when sampling the distance field

MeshCellSize

description: Size of the cells used when meshing the output (marching cubes' cube size)

SDFMaxDistances

type: TArray< double ...

SourceBounds

type: TArray<FAxisAl...

Sources

type: TArray< const T...

description: Inputs


code: [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< RealType([TVector](API\Runtime\Core\Math\TVector)< RealType >)> Value()


code: template<typename RealType> struct TImplicitFunction3


code: [TAxisAlignedBox3](API\Runtime\GeometryCore\TAxisAlignedBox3)< RealType > Bounds() const


code: RealType Value ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & Point ) const


description: Implicit Distance-Field Line Object/Primitive, surface shape at isovalue=0 (defined by Distance-Radius) is a capsule

code: template<typename RealType> struct TImplicitLine3

Segment

type: TSegment3< Real...


code: void ComputeFirstPass ( double UnsignedOffset, double SignedOffset )


code: void ComputeSecondPass ( double UnsignedOffset, double SignedOffset )


className: EMorphologyOp

description: Morphology operation types

code: enum EMorphologyOp { Dilate = 0, Contract = 1, Close = 2, Open = 3, }


code: const [FMeshShapeGenerator](API\Runtime\GeometryCore\Generators\FMeshShapeGenerator) & Generate()


code: void SetCellSizesAndDistance ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds, double DistanceIn, int TargetInputVoxelCount, int TargetOutputVoxelCount )


description: Set input grid cell size to hit the target voxel counts along the max dimension of the bounds.

code: void SetGridCellSize ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds, double DistanceIn, int TargetInputVoxelCount )


description: Set output meshing cell size to hit the target voxel counts along the max dimension of the bounds.

code: void SetMeshCellSize ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds, double DistanceIn, int TargetInputVoxelCount )


className: TMeshSDF

code: typedef [TSparseNarrowBandMeshSDF](API\Runtime\GeometryCore\Implicit\TSparseNarrowBandMeshSDF)< MeshType > TMeshSDF


code: virtual ~TImplicitMorphology()


className: TImplicitMorphology

code: template<typename TriangleMeshType> class TImplicitMorphology

CancelF

type: TFunction< bool...

Distance

description: Distance of offset; should be positive.

MarchingCubes

type: FMarchingCubes

description: Stores result (returned as a constFMeshShapeGenerator)

MorphologyOp

type: EMorphologyOp

NarrowBandMaxDistance

description: Computed in first pass, re-used in second

Source

description: Inputs


description: Implicit Distance-Field Point Object/Primitive, surface shape at isovalue=0 (defined by Distance-Radius) is a sphere

code: template<typename RealType> struct TImplicitPoint3

Position

type: TVector< RealTy...


description: Set cell size to hit the target voxel count along the max dimension of the bounds

code: void SetCellSizeAndExtendBounds ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds, double ExtendBoundsIn, int TargetOutputVoxelCount )


description: true if input parameters are valid

code: bool Validate()


code: TImplicitSolidify ( const TriangleMeshType * Source, [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3)< TriangleMeshType > * SourceSpatial, [TFastWindingTree](API\Runtime\GeometryCore\CompGeom\TFastWindingTree)< TriangleMeshType > * SourceWinding )


code: virtual ~TImplicitSolidify()


className: TImplicitSolidify

description: Use marching cubes to remesh a triangle mesh to a solid surface Uses fast winding number to decide what is inside vs outside

code: template<typename TriangleMeshType> class TImplicitSolidify

bSolidAtBoundaries

type: bool

description: What to do if the surface extends outside the marching cubes bounds  if true, puts a solid surface at the boundary

ExtendBounds

description: How much to extend bounds considered by marching cubes outside the original surface bounds

Source

description: Inputs

SourceWinding

type: TFastWindingTre...

SurfaceSearchSteps

type: int

description: How many binary search steps to do when placing surface at boundary

WindingThreshold

description: Inside/outside winding number threshold


code: [TAxisAlignedBox3](API\Runtime\GeometryCore\TAxisAlignedBox3)< RealType > Bounds ( double DefaultIsoValue ) const


code: float GetRadius ( double DefaultIsoValue ) const


code: void SetScaleFromRadius ( double TargetRadius, double DefaultIsoValue )


code: RealType Value ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & Point ) const


description: Skeletal implicit line primitive. Field value is 1 along line and 0 at distance=1 from the line. Scale factor is applied to distance.

code: template<typename RealType> struct TSkeletalImplicitLine3


code: [TAxisAlignedBox3](API\Runtime\GeometryCore\TAxisAlignedBox3)< RealType > Bounds()


code: RealType Value ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > Pt )


description: Boolean Union of N implicit functions (F_1 or F_2 or ... or F_N) Or if bSubtract=true, Subtraction: (F_1 - (F_2 or F_3 or ... or F_N)) We expect this to be used with "Skeletal Field" inputs (e.g.TDistanceFieldToSkeletalField,TSkeletalImplicitLine3, etc) where values are in the range [0,1] and the isosurface is ~ in the middle of that range

code: template<typename InputBoundedImplicitType, typename RealType> struct TSkeletalRicciNaryBlend3

Children

type: TArray< InputBo...


description: the distance value at the specified grid cell.

code: float At ( int32 I, int32 J, int32 K ) const


description: the physical space location of specified grid point.

code: FVector3f CellCenter ( int32 I, int32 J, int32 K ) const


description:
Compute the SDF
false if cancelled or failed (e.g. due to invalid arguments); true otherwise

code: bool Compute ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds )


description: the number of cells in each direction


className: EComputeModes

description: The narrow band is always computed exactly, and the full Grid will be signed if bComputeSigns is true.

code: enum EComputeModes { NarrowBandOnly = 1, NarrowBand_SpatialFloodFill = 2, }


description: What counts as "inside" the mesh. Crossing count does not use triangle Orientation, so inverted faces are fine, but overlapping shells or self intersections will be filled using even/odd rules (as seen along X axis...) Winding count is basically mesh winding number, handles overlap shells and self-intersections, but inverted shells are 'subtracted', and inverted faces are a disaster. Both modes handle internal cavities, neither handles open sheets.

code: enum EInsideModes { CrossingCount = 0, WindingCount = 1, }


description: Increment the counter for the indicated block

code: void AtomicIncrement &40; const int32 BlockIndex &41;


className: MyLayout

code: typedef TBlockedGrid3Layout< FBlockedGrid3f::BlockSize > MyLayout


className: FScatterCounter

description: Grid that holds one atomicin each block.

code: struct FScatterCounter : public [UE::Geometry::TBlockedGrid3Layout< FBlockedGrid3f::BlockSize >](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)

NumObjectsPerBlock

type: TArray< std::at...


code: FScatterCounter &40; const FVector3i & Dims, bool bInitParallel &41;


description: Reduce this box by clamping with specified min/max

code: void Clamp &40; const FVector3i & OtherMin, const FVector3i & OtherMax &41;


className: FTriBBox

code: struct FTriBBox

BoxMax

description: 3D 32-bit integer Vector


code: void AddTriID &40; const int32 & BlockIndex, const int32 & TriId &41;


code: TArray< int32 > GetOccupiedBlockIDs&40;&41; const


className: FTriIDBlockGrid

description: Sparse grid that stores array of TriIDs each blocks.

code: struct FTriIDBlockGrid : public [UE::Geometry::TBlockedGrid3Layout< FBlockedGrid3f::BlockSize >](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)

TrisInBlock

type: TArray<TArray<...


code: FTriIDBlockGrid &40; const FScatterCounter & TriCounter, bool bInitParallel &41;


description: a grid that can be sampled within the narrow band to find cells that actually contain mesh triangles. Note: this is populated duringCompute()

code: const [FBlockedGrid3i](API\Runtime\GeometryCore\Spatial\FBlockedGrid3i) & GetIntersectionsGrid() const


description: a grid that can be sampled within the narrow band to find the ID of the closest triangle. Note: this is populated duringCompute()

code: const [FBlockedGrid3i](API\Runtime\GeometryCore\Spatial\FBlockedGrid3i) & GetClosestTriGrid() const


code: float GetValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & ijk ) const


code: float operator[] ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & ijk ) const


description: Encodes heuristic for deciding whether it will be faster to use

code: static bool ShouldUseSpatial ( int32 ExactCells, double CellSize, double AvgEdgeLen )


code: bool Validate ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds )


code: TSparseNarrowBandMeshSDF ( const TriangleMeshType * Mesh, float CellSize, [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3)< TriangleMeshType > * Spatial )


className: TSparseNarrowBandMeshSDF

description: This code is based on the implementation found athttps://github.com/christopherbatty/SDFGen

code: template<class TriangleMeshType> class TSparseNarrowBandMeshSDF

ApproxMaxCellsPerDimension

description: If the number of cells in any dimension may exceed this, CellSize will be automatically increased to keep cell count reasonable.

bComputeSigns

description: If true, sign of full grid will be computed using either IsInsideFunction (if provided) or crossing as controlled by the InsideMode.

bUseParallel

description: Most of this parallelizes very well, makes a huge speed difference.

bWantClosestTriGrid

description: Implementation computes the triangle closest to each Grid cell, can return this Grid if desired (only reason not to is avoid hanging onto memory)

bWantIntersectionsGrid

description: Grid of per-cell crossing or parity counts.

CancelF

description: If this function returns true, the calculation will abort

CellSize

type: float

description: Relates the grids index space, to mesh distance units.

ClosestTriGrid

description: Grid of closest triangle indices; only available if bWantClosestTriGrid is set to true. Access viaGetClosestTriGrid()

ComputeMode

type: EComputeModes

ExactBandWidth

description: Width of the band around triangles for which exact Distances are computed (In fact this is conservative, the band is often larger locally)

ExpandBounds

description: Bounds of Grid will be expanded this much in positive and negative directions.

InsideMode

type: EInsideModes

IntersectionsGrid

description: Grid of intersection counts; only available if bWantIntersectionsGrid is set to true. Access viaGetIntersectionsGrid()

IsInsideFunction

type: TUniqueFunction...

Mesh

type: const TriangleM...

NarrowBandMaxDistance

type: double

description: How wide of narrow band should we compute.


code: float At ( int I, int J, int K ) const


code: FVector3f CellCenter ( int I, int J, int K ) const


description:
Compute the SDF
false if cancelled or failed (e.g. due to invalid arguments); true otherwise

code: bool Compute ( [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) Bounds )


description: The narrow band is always computed exactly, and the full Grid is always signed. Can also fill in the rest of the full Grid with fast sweeping. This is quite computationally intensive, though, and not parallelizable (time only depends on Grid resolution)

code: enum EComputeModes { FullGrid = 0, NarrowBandOnly = 1, NarrowBand_SpatialFloodFill = 2, }


description: What counts as "inside" the mesh. Crossing count does not use triangle Orientation, so inverted faces are fine, but overlapping shells or self intersections will be filled using even/odd rules (as seen along X axis...) Winding count is basically mesh winding number, handles overlap shells and self-intersections, but inverted shells are 'subtracted', and inverted faces are a disaster. Both modes handle internal cavities, neither handles open sheets.

code: enum EInsideModes { CrossingCount = 0, WindingCount = 1, }


description: Empty out all computed result data (leaves input data alone)

code: void Empty()


code: const [FDenseGrid3i](API\Runtime\GeometryCore\Spatial\FDenseGrid3i) & GetIntersectionsGrid() const


code: const [FDenseGrid3i](API\Runtime\GeometryCore\Spatial\FDenseGrid3i) & GetClosestTriGrid() const


code: float GetValue ( [FVector3i](API\Runtime\GeometryCore\FVector3i) Idx ) const


code: float operator[] ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Idx ) const


description: Calculate twice signed area of triangle (0,0)-(X1,Y1)-(X2,Y2) return an SOS-determined sign (-1, +1, or 0 only if it's a truly degenerate triangle)

code: static int Orientation ( double X1, double Y1, double X2, double Y2, double & TwiceSignedArea )


description: Robust test of (X0,Y0) in the triangle (X1,Y1)-(X2,Y2)-(X3,Y3) if true is returned, the barycentric coordinates are set in A,B,C.

code: static bool PointInTriangle2d ( double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3, double & A, double & B, double & C )


description: Find distance x0 is from segment x1-x2

code: static float PointSegmentDistance ( const FVector3f & x0, const FVector3f & x1, const FVector3f & x2 )


description: Find distance x0 is from segment x1-x2

code: static double PointSegmentDistance ( const FVector3d & x0, const FVector3d & x1, const FVector3d & x2 )


description: Find distance x0 is from triangle x1-x2-x3

code: static float PointTriangleDistance ( const FVector3f & x0, const FVector3f & x1, const FVector3f & x2, const FVector3f & x3 )


code: static double PointTriangleDistance ( const FVector3d & x0, const FVector3d & x1, const FVector3d & x2, const FVector3d & x3 )


description: Encodes heuristic for deciding whether it will be faster to use

code: static bool ShouldUseSpatial ( int ExactCells, double CellSize, double AvgEdgeLen )


code: bool Validate ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds )


className: TSweepingMeshSDF

description: This code is based on the implementation found athttps://github.com/christopherbatty/SDFGen

code: template<class TriangleMeshType> class TSweepingMeshSDF

ApproxMaxCellsPerDimension

description: If the number of cells in any dimension may exceed this, CellSize will be automatically increased to keep cell count reasonable.

bComputeSigns

description: Should we try to compute signs? if not, Grid remains unsigned

bUseParallel

description: Most of this parallelizes very well, makes a huge speed difference.

bWantClosestTriGrid

description: Implementation computes the triangle closest to each Grid cell, can return this Grid if desired (only reason not to is avoid hanging onto memory)

CancelF

description: If this function returns true, we should abort calculation


code: [FVector3i](API\Runtime\GeometryCore\FVector3i) Cell ( const FVector3d & Pt ) const


code: void get_value_pair ( int I, int J, int K, double & A, double & B ) const


code: FVector3d Gradient ( const FVector3d & Pt ) const


code: double Value ( const FVector3d & Pt ) const


code: TTriLinearGridInterpolant ( GridType * Grid, FVector3d GridOrigin, double CellSize, [FVector3i](API\Runtime\GeometryCore\FVector3i) Dimensions )


className: TTriLinearGridInterpolant

description: GridType must have a GetValue() that returns a value to interpolate at a givenFVector3ilocation  (w/ locations ranging from [0,0,0] to Dimensions (exclusive))

code: template<class GridType> class TTriLinearGridInterpolant

Grid

type: GridType *

Outside

description: Value to return if query point is outside Grid (in an SDF outside is usually positive).


code: TSweepingMeshSDF ( const TriangleMeshType * Mesh, float CellSize, [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3)< TriangleMeshType > * Spatial )


code: namespace UE { namespace Geometry { template<typename RealType> int UE::Geometry::Orientation ( RealType X1, RealType Y1, RealType X2, RealType Y2, RealType & TwiceSignedArea ) } }


code: namespace UE { namespace Geometry { bool UE::Geometry::PointInTriangle2d ( double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3, double & A, double & B, double & C ) } }


description: Find distance x0 is from segment x1-x2

code: namespace UE { namespace Geometry { template<typename RealType> RealType UE::Geometry::PointSegmentDistance ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & x0, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & x1, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & x2 ) } }


description: These are utility functions shared by the various SDF calculation implementations (CachingMeshSDF, SweepignMeshSDF, SparseNarrowBandMeshSDF)

code: namespace UE { namespace Geometry { double UE::Geometry::PointTriangleDistance ( const FVector3d & x0, const FVector3d & x1, const FVector3d & x2, const FVector3d & x3 ) } }


code: namespace UE { namespace Geometry { float UE::Geometry::PointTriangleDistance ( const FVector3f & x0, const FVector3f & x1, const FVector3f & x2, const FVector3f & x3 ) } }


code: typedef [TExactIntrTriangle3Triangle3](API\Runtime\GeometryCore\Intersection\TExactIntrTriangle3Triangle3)< double > FExactIntrTriangle3Triangle3d


code: typedef [TExactIntrTriangle3Triangle3](API\Runtime\GeometryCore\Intersection\TExactIntrTriangle3Triangle3)< float > FExactIntrTriangle3Triangle3f


code: typedef [TIntersector1](API\Runtime\GeometryCore\Intersection\TIntersector1)< double > FIntersector1d


code: typedef [TIntersector1](API\Runtime\GeometryCore\Intersection\TIntersector1)< float > FIntersector1f


code: typedef [TIntrLine2Line2](API\Runtime\GeometryCore\Intersection\TIntrLine2Line2)< double > FIntrLine2Line2d


code: typedef [TIntrLine2Line2](API\Runtime\GeometryCore\Intersection\TIntrLine2Line2)< float > FIntrLine2Line2f


code: typedef [TIntrLine2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrLine2Triangle2)< double > FIntrLine2Triangle2d


code: typedef [TIntrLine2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrLine2Triangle2)< float > FIntrLine2Triangle2f


code: typedef [TIntrRay3AxisAlignedBox3](API\Runtime\GeometryCore\Intersection\TIntrRay3AxisAlignedBox3)< double > FIntrRay3AxisAlignedBox3d


code: typedef [TIntrRay3OrientedBox3](API\Runtime\GeometryCore\Intersection\TIntrRay3OrientedBox3)< double > FIntrRay3OrientedBox3d


code: typedef [TIntrRay3OrientedBox3](API\Runtime\GeometryCore\Intersection\TIntrRay3OrientedBox3)< float > FIntrRay3OrientedBox3f


code: typedef [TIntrRay3Triangle3](API\Runtime\GeometryCore\Intersection\TIntrRay3Triangle3)< double > FIntrRay3Triangle3d


code: typedef [TIntrRay3Triangle3](API\Runtime\GeometryCore\Intersection\TIntrRay3Triangle3)< float > FIntrRay3Triangle3f


code: typedef [TIntrSegment2Segment2](API\Runtime\GeometryCore\Intersection\TIntrSegment2Segment2)< double > FIntrSegment2Segment2d


code: typedef [TIntrSegment2Segment2](API\Runtime\GeometryCore\Intersection\TIntrSegment2Segment2)< float > FIntrSegment2Segment2f


code: typedef [TIntrSegment2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrSegment2Triangle2)< double > FIntrSegment2Triangle2d


code: typedef [TIntrSegment2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrSegment2Triangle2)< float > FIntrSegment2Triangle2f


code: typedef [TIntrTriangle2AxisAlignedBox2](API\Runtime\GeometryCore\Intersection\TIntrTriangle2AxisAlignedBox2)< double > FIntrTriangle2AxisAlignedBox2d


code: typedef [TIntrRay3AxisAlignedBox3](API\Runtime\GeometryCore\Intersection\TIntrRay3AxisAlignedBox3)< float > FIntrRay3AxisAlignedBox3f


code: typedef [TIntrTriangle2AxisAlignedBox2](API\Runtime\GeometryCore\Intersection\TIntrTriangle2AxisAlignedBox2)< float > FIntrTriangle2AxisAlignedBox2f


code: typedef [TIntrTriangle2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrTriangle2Triangle2)< double > FIntrTriangle2Triangle2d


code: typedef [TIntrTriangle3Triangle3](API\Runtime\GeometryCore\Intersection\TIntrTriangle3Triangle3)< double > FIntrTriangle3Triangle3d


code: typedef [TIntrTriangle2Triangle2](API\Runtime\GeometryCore\Intersection\TIntrTriangle2Triangle2)< float > FIntrTriangle2Triangle2f


code: typedef [TIntrTriangle3Triangle3](API\Runtime\GeometryCore\Intersection\TIntrTriangle3Triangle3)< float > FIntrTriangle3Triangle3f


className: FLinearIntersection

description: FLinearIntersectioncontains intersection information returned by linear/primitive intersection functions

code: struct FLinearIntersection


code: namespace IntersectionUtil { template<typename RealType> [FLinearIntersection](API\Runtime\GeometryCore\Intersection\FLinearIntersection) IntersectionUtil::LineSphereIntersection ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius ) }


description:
Intersect line with sphere and return intersection info (# hits, ray parameters)
true if line intersects sphere

code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::LineSphereIntersection ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius, [FLinearIntersection](API\Runtime\GeometryCore\Intersection\FLinearIntersection) & ResultOut ) }


description:
Test if line intersects sphere
true if line intersects sphere

code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::LineSphereTest ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & LineDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius ) }


description:
Intersect ray with circle and return intersection info (# hits, ray parameters)
true if ray intersects circle

code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::RayCircleIntersection ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & CircleCenter, RealType CircleRadius, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & CircleNormal, [FLinearIntersection](API\Runtime\GeometryCore\Intersection\FLinearIntersection) & Result ) }


code: namespace IntersectionUtil { template<typename RealType> [FLinearIntersection](API\Runtime\GeometryCore\Intersection\FLinearIntersection) IntersectionUtil::RaySphereIntersection ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius ) }


description: true if ray intersects sphere

code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::RaySphereTest ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius ) }


code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::RayTriangleTest ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & V0, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & V1, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & V2 ) }


code: static bool FindWithoutCoplanar ( const [TTriangle3](API\Runtime\GeometryCore\TTriangle3)< Real > & Triangle0, const [TTriangle3](API\Runtime\GeometryCore\TTriangle3)< Real > & Triangle1, [TVector](API\Runtime\Core\Math\TVector)< Real > & OutSegA, [TVector](API\Runtime\Core\Math\TVector)< Real > & OutSegB, bool & bWasCoplanar )


code: bool Test ( bool & bWasCoplanar )


description:
Intersect ray with sphere and return intersection info (# hits, ray parameters)
true if ray intersects sphere

code: namespace IntersectionUtil { template<typename RealType> bool IntersectionUtil::RaySphereIntersection ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayOrigin, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & RayDirection, const [TVector](API\Runtime\Core\Math\TVector)< RealType > & SphereCenter, RealType SphereRadius, [FLinearIntersection](API\Runtime\GeometryCore\Intersection\FLinearIntersection) & Result ) }


code: static bool TestWithoutCoplanar ( const [TTriangle3](API\Runtime\GeometryCore\TTriangle3)< Real > & Triangle0, const [TTriangle3](API\Runtime\GeometryCore\TTriangle3)< Real > & Triangle1, bool & bWasCoplanar )


description: TODO: Implement the option to support coplanar intersection bool bIgnoreCoplanar = true;