description: Precompute constant coefficients of triangle winding number approximation (evaluated in parallel for large sets of triangles) P: 'Center' of expansion for Triangles (area-weighted centroid avg) R: max distance from P to Triangles Order1: first-order vector coeff Order2: second-order matrix coeff TriCache: precomputed triangle centroid/normal/area

code: namespace FastTriWinding { template<class TriangleMeshType> void FastTriWinding::ComputeCoeffs ( const TriangleMeshType & Mesh, const [TSet](API\Runtime\Core\Containers\TSet)< int > & TriangleSet, const [FMeshTriInfoCache](API\Runtime\GeometryCore\Util\FMeshTriInfoCache) & TriCache, FVector3d & P, double & R, FVector3d & Order1, [FMatrix3d](API\Runtime\GeometryCore\FMatrix3d) & Order2, int NumTasks ) }


description: Precompute constant coefficients of triangle winding number approximation (serial implementation) P: 'Center' of expansion for Triangles (area-weighted centroid avg) R: max distance from P to Triangles Order1: first-order vector coeff Order2: second-order matrix coeff TriCache: precomputed triangle centroid/normal/area

module: GeometryCore

code: namespace FastTriWinding { template<class TriangleMeshType, class IterableTriangleIndices> void FastTriWinding::ComputeCoeffsSerial ( const TriangleMeshType & Mesh, const IterableTriangleIndices & Triangles, const [FMeshTriInfoCache](API\Runtime\GeometryCore\Util\FMeshTriInfoCache) & TriCache, FVector3d & P, double & R, FVector3d & Order1, [FMatrix3d](API\Runtime\GeometryCore\FMatrix3d) & Order2 ) }


description: Triangle-winding-number first-order approximation. T is triangle, P is 'Center' of cluster of dipoles, Q is evaluation point (This is really just for testing)

code: namespace FastTriWinding { double FastTriWinding::Order1Approx ( const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & T, const FVector3d & P, const FVector3d & XN, double XA, const FVector3d & Q ) }


description: Evaluate first-order FWN approximation at point Q, relative to Center c

code: namespace FastTriWinding { double FastTriWinding::EvaluateOrder1Approx ( const FVector3d & Center, const FVector3d & Order1Coeff, const FVector3d & Q ) }


description: Evaluate second-order FWN approximation at point Q, relative to Center c

code: namespace FastTriWinding { double FastTriWinding::EvaluateOrder2Approx ( const FVector3d & Center, const FVector3d & Order1Coeff, const [FMatrix3d](API\Runtime\GeometryCore\FMatrix3d) & Order2Coeff, const FVector3d & Q ) }


description: Triangle-winding-number second-order approximation T is triangle, P is 'Center' of cluster of dipoles, Q is evaluation point (This is really just for testing)

code: namespace FastTriWinding { double FastTriWinding::Order2Approx ( const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & T, const FVector3d & P, const FVector3d & XN, double XA, const FVector3d & Q ) }


code: typedef [TBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBlockedDenseGrid3)< double > FBlockedDenseGrid3d


code: typedef [TBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBlockedDenseGrid3)< float > FBlockedDenseGrid3f


code: typedef [TBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBlockedDenseGrid3)< int > FBlockedDenseGrid3i


description: Note the bool grid uses a bitfield specialization

code: typedef [TBlockedGrid3](API\Runtime\GeometryCore\Spatial\TBlockedGrid3)< bool, 8 > FBlockedGrid3b


description: Note on the block size: 8 seems to be the sweet spot with vastly better performance in SDF generation perhaps because a float block can fit in the L1 cache with room to spare.

code: typedef [TBlockedGrid3](API\Runtime\GeometryCore\Spatial\TBlockedGrid3)< float, 8 > FBlockedGrid3f


code: typedef [TBlockedGrid3](API\Runtime\GeometryCore\Spatial\TBlockedGrid3)< double, 8 > FBlockedGrid3d


code: typedef [TBlockedGrid3](API\Runtime\GeometryCore\Spatial\TBlockedGrid3)< int, 8 > FBlockedGrid3i


description: Compute an ordering for the input points that attempts to order points so adjacent points are close together spatially, while still keeping the order sufficiently randomized to expect to avoid worst-case orderings for Delaunay triangulation Supports both 2D and 3D points.

code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector2d > Points, const [FAxisAlignedBox2d](API\Runtime\GeometryCore\FAxisAlignedBox2d) & Bounds, const [FRandomStream](API\Runtime\Core\Math\FRandomStream) & Random )


description: Very bad quality in the lower bits. Don't use the modulus (%) operator.

code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector2f > Points, const [FAxisAlignedBox2f](API\Runtime\GeometryCore\FAxisAlignedBox2f) & Bounds, const [FRandomStream](API\Runtime\Core\Math\FRandomStream) & Random )


code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Points, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, const [FRandomStream](API\Runtime\Core\Math\FRandomStream) & Random )


code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3f > Points, const [FAxisAlignedBox3f](API\Runtime\GeometryCore\FAxisAlignedBox3f) & Bounds, const [FRandomStream](API\Runtime\Core\Math\FRandomStream) & Random )


code: FBRIOPoints ( int32 MaxTreeDepth )


className: FBRIOPoints

description: Generate a "Biased Randomized Insertion Order" (BRIO) ordering for a point set by randomly bucketing the points, then applying Z-Order-Curve sorting (above) to each bucket This gives an ordering with point locality but enough randomization to typically avoid worst case behavior if using the ordering for Delaunay meshing

code: struct FBRIOPoints

MaxTreeDepth

description: Inputs.

Order

type: TArray< int32 >

description: Outputs.


code: typedef [TDenseGrid2](API\Runtime\GeometryCore\Spatial\TDenseGrid2)< double > FDenseGrid2d


code: typedef [TDenseGrid2](API\Runtime\GeometryCore\Spatial\TDenseGrid2)< float > FDenseGrid2f


code: typedef [TDenseGrid2](API\Runtime\GeometryCore\Spatial\TDenseGrid2)< int32 > FDenseGrid2i


code: typedef [TDenseGrid3](API\Runtime\GeometryCore\Spatial\TDenseGrid3)< double > FDenseGrid3d


code: typedef [TDenseGrid3](API\Runtime\GeometryCore\Spatial\TDenseGrid3)< int > FDenseGrid3i


code: typedef [TDenseGrid3](API\Runtime\GeometryCore\Spatial\TDenseGrid3)< float > FDenseGrid3f


code: bool Get ( uint32 BitIndex ) const


className: GrowChunkSize

code: static constexpr int32 GrowChunkSize = 0xFFF;


code: void Set ( uint32 BitIndex, bool bValue )


description: Add a polycurve with given CurveID and the give Polyline

code: void AddCurve ( int CurveID, const [FPolyline3d](API\Runtime\GeometryCore\FPolyline3d) & Polyline )


className: FDynamicFlagArray

description: Utility class that allows for get/set of a flag for each integer ID, where the flag set automatically grows to contain whatever integer ID is passed

code: class FDynamicFlagArray

BitArray

type: TBitArray


description: Add a point with given PointID at the given Position

code: void AddPoint ( int PointID, const FVector3d & Position )


description:
PointWithinToleranceTest is called in parallel and hence must be thread-safe/re-entrant!
true if at least one result was added (ie, passed PointWithinToleranceTest).

code: bool CollectCurvesNearRay ( const FRay3d & Ray, [TArray](API\Runtime\Core\Containers\TArray)< [FNearest](API\Runtime\GeometryCore\Spatial\FGeometrySet3\FNearest) > & ResultsOut, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool(const FVector3d &, const FVector3d &)> PointWithinToleranceTest ) const


code: bool CollectPointsNearRay ( const FRay3d & Ray, [TArray](API\Runtime\Core\Containers\TArray)< [FNearest](API\Runtime\GeometryCore\Spatial\FGeometrySet3\FNearest) > & ResultsOut, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool(const FVector3d &, const FVector3d &)> PointWithinToleranceTest ) const


className: FCurve

code: struct FCurve

Bounds

type: FAxisAlignedBox...

ID

type: int


description: Fills CurveIDsOut with IDs of curves that satisfy the given predicate.

code: template<typename PredicateType, typename IntContainerType> bool FindAllCurvesSatisfying ( PredicateType Predicate, IntContainerType & CurveIDsOut ) const


description:
PointWithinToleranceTest is called in parallel and hence must be thread-safe/re-entrant!
true if the nearest point on Ray to some curve in the set passed the PointWithinToleranceTest.

code: bool FindNearestCurveToRay ( const FRay3d & Ray, [FNearest](API\Runtime\GeometryCore\Spatial\FGeometrySet3\FNearest) & ResultOut, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool(const FVector3d &, const FVector3d &)> PointWithinToleranceTest ) const


description: Fills PointIDsOut with point IDs of points that satisfy the given predicate.

code: template<typename PredicateType, typename IntContainerType> bool FindAllPointsSatisfying ( PredicateType Predicate, IntContainerType & PointIDsOut ) const


description:
PointWithinToleranceTest is called in parallel and hence must be thread-safe/re-entrant!
true if the nearest point on Ray to some point in the set passed the PointWithinToleranceTest.

code: bool FindNearestPointToRay ( const FRay3d & Ray, [FNearest](API\Runtime\GeometryCore\Spatial\FGeometrySet3\FNearest) & ResultOut, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool(const FVector3d &, const FVector3d &)> PointWithinToleranceTest ) const


className: FNearest

description: FNearestis returned by nearest-point queries

code: struct FNearest

bIsPoint

type: bool

description: True for point, false for polyline curve

description: ID of point or curve

NearestGeoPoint

description: Nearest point on geometry (ie the point, or point on curve)

NearestRayPoint

description: Nearest point on ray

PolySegmentIdx

description: If bIsPoint=false, index of nearest segment on polyline curve

PolySegmentParam

type: double

description: If bIsPoint=false, parameter of NearestGeoPoint along segment defined by PolySegmentIdx

RayParam

description: Parameter of nearest point on ray (equivalent to NearestRayPoint)


description: Like FindAllCurvesSatisfying, but parallel, so predicate must be safe to call in parallel.

code: template<typename PredicateType, typename IntContainerType> bool ParallelFindAllCurvesSatisfying ( PredicateType Predicate, IntContainerType & CurveIDsOut ) const


description: Like FindAllPointsSatisfying, but parallel, so predicate must be safe to call in parallel.

code: template<typename PredicateType, typename IntContainerType> bool ParallelFindAllPointsSatisfying ( PredicateType Predicate, IntContainerType & PointIDsOut ) const


description: Remove a curve with given CurveID.

code: void RemoveCurve ( int CurveID )


description: Remove a point with given PointID.

code: void RemovePoint ( int PointID )


description: Update the Polyline of previously-added CurveID

code: void UpdateCurve ( int CurveID, const [FPolyline3d](API\Runtime\GeometryCore\FPolyline3d) & Polyline )


description: Update the Position of previously-added PointID

code: void UpdatePoint ( int PointID, const FVector3d & Position )


description: Since Points and Curves have no area to hit, hit-tests are done via nearest-point-on-ray.

code: class FGeometrySet3

CurveIDToIndex

type: TMap< int, int ...

Curves

type: TArray<FCurve...

Points

type: TArray<FPoint...


code: void Reset ( bool bPoints, bool bCurves )


className: FHitIntersectionResult

code: struct FHitIntersectionResult


className: FIntersectionsQueryResult

code: struct FIntersectionsQueryResult

type: TArray<FPointI...

Polygons

type: TArray<FPolygo...

Segments

type: TArray<FSegmen...


className: EDomain

description: An enum representing a voxel's classification.

code: enum EDomain { Exterior, Boundary, Interior, }


description: Given an index into the occupancy grid, returns the bbox that represents the cell in the winding number grid, from which the occupancy got computed.

code: FBox3f GetCellBoxFromIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


description: Given an index into the occupancy grid, returns the midpoint of the bbox that represents the matching cell in the winding number grid, from which the occupancy got computed.

code: FVector3f GetCellCenterFromIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


description: Given a point in space, return a computed index into the occupancy grid. If the point is outside of the mesh's bounding box, the given index will be outside the range of the occupancy grid. To check for validity, test against the occupancy grid's extents as returned by GetOccupancy.

code: [FVector3i](API\Runtime\GeometryCore\FVector3i) GetCellIndexFromPoint ( const FVector & InPoint ) const


description: Returns the size of the cell. The cell size is uniform on each axis.

code: float GetCellSize() const


description: Returns a reference to the occupancy grid.

code: const [TDenseGrid3](API\Runtime\GeometryCore\Spatial\TDenseGrid3)< [EDomain](API\Runtime\GeometryCore\Spatial\FOccupancyGrid3\EDomain) > & GetOccupancyStateGrid() const


code: template<typename MeshType> FOccupancyGrid3 ( const MeshType & InMesh, const int32 InVoxelResolution )


description: Sample mesh occupancy in a voxel grid by using the mesh's winding number, on voxel corners, to determine whether the voxel is fully contained within the interior of the mesh, touches the mesh's boundary, or is fully contained on the exterior of the mesh.

code: struct FOccupancyGrid3


className: FPointIntersection

description: Intersection query result types for triangle mesh intersections

code: struct FPointIntersection


description: Construct the spatial data structure for the current point set

code: void Build ( double CellSize, const FVector3d & Origin )


className: PointList

code: typedef [TArray](API\Runtime\Core\Containers\TArray)< int > PointList


code: FPointSetHashtable ( [FPointSetAdapterd](API\Runtime\GeometryCore\FPointSetAdapterd) * PointSetIn )


description:
Find all points within given query distance from query point. Note that in current implementation the distance must be less than the CellSize used in construction, ie at most the directly adjacent neighbours next to the cell containing QueryPt can be searched
true on success

code: bool FindPointsInBall ( const FVector3d & QueryPt, double QueryRadius, [TArray](API\Runtime\Core\Containers\TArray)< int > & ResultOut )


className: FPointSetHashtable

description: FPointSetHashTable builds a spatial data structure that supports efficient range queries on a point set (in FPointSetAdapterd form). The spatial data structure is currently a uniform sparse 3D grid.

code: class FPointSetHashtable

CellSize

description: Cell size of grid

Grid

description: Sparse grid, each voxel contains lists of contained points

GridIndexer

type: FShiftGridIndex...

description: Index mapping object

Origin

description: World origin of sparse grid

Points

type: FPointSetAdapte...

description: Input point set


className: FPolygonIntersection

code: struct FPolygonIntersection


description: Compute an ordering that only sorts by descending ImportanceWeights, and does not attempt to spatially distribute the points

code: void ComputeDescendingImportance ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > ImportanceWeights )


description: Compute an ordering for the input points that attempts to keep points 'well spaced' / un-clumped

code: void ComputeUniformSpaced ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3f > Points, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > ImportanceWeights, int32 EarlyStop, int32 OffsetResFactor )


code: void ComputeUniformSpaced ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Points, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > ImportanceWeights, int32 EarlyStop, int32 OffsetResFactor )


code: void ComputeUniformSpaced ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3f > Points, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > ImportanceWeights, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > SecondImportanceWeights, int32 EarlyStop, int32 OffsetResFactor )


code: void ComputeUniformSpaced ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Points, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > ImportanceWeights, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const float > SecondImportanceWeights, int32 EarlyStop, int32 OffsetResFactor )


code: FPriorityOrderPoints ( int32 SpatialLevels )


className: FPriorityOrderPoints

description: Either order by descending ImportanceWeight, or try to additionally un-clump the points  such that if we only look at the first N points, they will cover the overall space as well as possible while still favoring higher ImportanceWeight points in each local region.

code: struct FPriorityOrderPoints

Order

description: Outputs.

SpatialLevels

description: Inputs.


code: typedef [TSampledScalarField2](API\Runtime\GeometryCore\Spatial\TSampledScalarField2)< float, float > FSampledScalarField2f


code: typedef [TSampledScalarField2](API\Runtime\GeometryCore\Spatial\TSampledScalarField2)< double, double > FSampledScalarField2d


className: FSegmentIntersection

code: struct FSegmentIntersection


code: void BuildTopDown ( [TArray](API\Runtime\Core\Containers\TArray)< int > & SegmentIndices, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & SegmentCenters, int32 NumSegments )


description: Build the segment tree based on the given Enumerable (ie something that supports a range-based for loop over a set of integer IDs) and a function GetSegmentForID that returns the 3D line segment for a given ID. Gaps/etc are allowed but all enumerated IDs must be valid.

code: template<typename SegmentIDEnumerable, typename GetSegmentFunc> void Build ( SegmentIDEnumerable Enumerable, GetSegmentFunc GetSegmentForID, int32 NumSegmentsHint )


description: Find the nearest segment to query point P, and return it in NearestSegmentOut

code: bool FindNearestSegment ( const FVector3d & P, [FSegment](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FSegment) & NearestSegmentOut, const [IMeshSpatial::FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


className: FBoxesSet

description: This is a temporary data structure used in tree building

code: struct FBoxesSet

Boxes

type: TDynamicVector<...


description: This function tries to find the segment "hit" by the ray, where the definition of "hit" tries to balance distance from the ray origin (ie "close to eye") and distance from the hit segment (ie "on the line"). There is no correct way to do this, currently the code uses a metric based on the opening angle between ray and segment points.

code: void FindNearestVisibleSegmentHitByRayInternal ( int BoxIndex, const FRay3d & Ray, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int32, const FVector3d &, const FVector3d &)> WithinToleranceCheck, int & NearSegmentIdx, [FRayNearestSegmentInfo](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FRayNearestSegmentInfo) & NearestInfo, const [IMeshSpatial::FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: void FindNearestSegmentInternal ( int BoxIndex, const FVector3d & P, double & NearestDistSqr, int & NearSegmentIdx, const [IMeshSpatial::FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: The function compares potential hits (ie that pass the tolerance) with a sort of "distance" metric that tries to balance distance from the ray origin (ie "close to eye") and distance from the hit segment (ie "on the line"). There is no correct way to do this, currently the code uses a metric based on the opening angle between ray and segment points.

code: bool FindNearestVisibleSegmentHitByRay ( const FRay3d & Ray, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int32, const FVector3d &, const FVector3d &)> WithinToleranceCheck, [FSegment](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FSegment) & NearestHitSegmentOut, [FRayNearestSegmentInfo](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FRayNearestSegmentInfo) & NearestInfo, const [IMeshSpatial::FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


className: FSegment

description: FSegmentis a 3D line segment with an external identifier

code: struct FSegment


className: FRayNearestSegmentInfo

description: Information on a nearest-segment returned by query functions

code: struct FRayNearestSegmentInfo

Metric

description: Distance metric at nearest points

RayParam

description: Parameter at point on ray closest to identified nearest segment

SegmentDist

description: Distance between ray point at RayParam and segment point at SegmentParam

SegmentParam

description: Parameter at point on nearest segment closest to the ray


className: FTreeBox

description: Storage for Box Nodes.

code: struct FTreeBox


code: double GetRayBoxIntersectionParam ( int BoxIndex, const FRay3d & Ray, double Radius ) const


code: double GetBoxDistanceSqr ( int BoxIndex, const FVector3d & V ) const


className: GetSplitAxisFunc

code: typedef [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< int(int Depth, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) &[Box](API\Plugins\DynamicMesh\ShapeApproximation\UE__Geometry__EDetectedSimpleSha-))> GetSplitAxisFunc


description: Sets the box intersection tolerance TODO: move into theIMeshSpatial::FQueryOptionsand delete this function

code: void SetTolerance ( double Tolerance )


code: int SplitSegmentSetMidpoints ( [TArray](API\Runtime\Core\Containers\TArray)< int > & SegmentIndices, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & SegmentCenters, int StartIdx, int Count, int Depth, int MinSegmentCount, [FBoxesSet](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FBoxesSet) & SegmentBoxes, [FBoxesSet](API\Runtime\GeometryCore\Spatial\FSegmentTree3\FBoxesSet) & Nodes, [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Box )


description: Available queries:

code: class FSegmentTree3

BoxEps

description: TODO: move BoxEps toIMeshSpatial::FQueryOptions.

GetSplitAxis

type: GetSplitAxisFun...

IndexList

type: TArray< int >

description: List of indices for a given Box.

RootBoxIndex

description: RootBoxIndex is the index of the root box of the tree, index into TreeBoxes.

SegmentList

description: List of segments

SegmentsEnd

description: IndexList[i] for i < SegmentsEnd is a segment-index list, ie a leaf-box list.

TreeBoxes

type: TArray<FTreeBo...


code: void BranchRangeQuery ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) * ParentCell, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TArray](API\Runtime\Core\Containers\TArray)< int > & ObjectIDs ) const


code: bool CanFit ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & Cell, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds ) const


description:
Check if the object needs to be reinserted, if it has NewBounds.
false if ObjectID is already in the tree, and NewBounds fits within the cell that currently contains ObjectID

code: bool CheckIfObjectNeedsReinsert ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & NewBounds, uint32 & CellIDOut ) const


description: Populate givenFStatisticswith info about the octree

code: void ComputeStatistics ( [FStatistics](API\Runtime\GeometryCore\Spatial\FSparseDynamicOctree3\FStatistics) & StatsOut ) const


description: Check that the octree is internally valid

code: void CheckValidity ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int)> IsValidObjectIDFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d)(int)> GetObjectBoundsFunc, [EValidityCheckFailMode](API\Runtime\GeometryCore\UE__Geometry__EValidityCheckFail-) FailMode, bool bVerbose, bool bFailOnMissingObjects ) const


description:
Process ObjectIDs from all the cells with bounding boxes that contain query point
true if query finished, false if it exited

code: bool ContainmentQueryCancellable ( const FVector3d & Point, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int)> ObjectIDFunc ) const


description: Process ObjectIDs from all the cells with bounding boxes that contain query point

code: void ContainmentQuery ( const FVector3d & Point, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(int)> ObjectIDFunc ) const


description:
Test if an object is stored in the tree
true if ObjectID is stored in this octree

code: bool ContainsObject ( int32 ObjectID ) const


code: [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) FindCurrentContainingCell ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds ) const


code: double FindNearestRayCellIntersection ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & Cell, const FRay3d & Ray ) const


description:
Find nearest ray-hit point with objects in tree
ObjectID of hit object, or -1 on miss

code: int32 FindNearestHitObject ( const FRay3d & Ray, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d)(int)> GetObjectBoundsFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< double(int, const FRay3d &)> HitObjectDistFunc, double MaxDistance ) const


code: FString ToString&40;&41; const


className: FStatistics

description: Statistics about internal structure of the octree

code: struct FStatistics

LevelBoxCounts

type: TArray< int32 >


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetBox ( uint32 Level, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index, double ExpandFactor ) const


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetCellBox ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & Cell, double ExpandFactor ) const


code: FVector3d GetCellCenter ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & Cell ) const


description: Calculate the base width of a cell at a given level

code: double GetCellWidth ( uint32 Level ) const


code: uint32 GetCellForObject ( int32 ObjectID ) const


description: Insert ObjectID into the Octree

code: void InsertObject ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds )


code: void Insert_NewChildCell ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, int ParentCellID, [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) NewChildCell, int ChildIdx )


code: void Insert_NewRoot ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) NewRootCell )


code: void Insert_Spill ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds )


code: void Insert_ToCell ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & ExistingCell )


className: MaxSupportedTreeDepth

code: static constexpr uint32 MaxSupportedTreeDepth = 0x1F;


className: InvalidCellID

description: This identifier is used for unknown cells

code: static constexpr uint32 InvalidCellID = FSparseOctreeCell::InvalidID;


description: Collect ObjectIDs from all the cells with bounding boxes that intersect Bounds. Current implementation creates a separateTArrayfor each thread.

code: void ParallelRangeQuery ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TArray](API\Runtime\Core\Containers\TArray)< int > & ObjectIDsOut ) const


description: Warning: result here appears to be unstable (due to optimization?) if any of the position values are on the border of a cell (in testing, pragma-optimization-disabled code produced off-by-one result from calling this function)

code: [FVector3i](API\Runtime\GeometryCore\FVector3i) PointToIndex ( uint32 Level, const FVector3d & Position ) const


description: Process ObjectIDs from all the cells with bounding boxes that intersect Bounds

code: void RangeQuery ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< void(int)> ObjectIDFunc ) const


description: Collect ObjectIDs from all the cells with bounding boxes that intersect Bounds

code: void RangeQuery ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TArray](API\Runtime\Core\Containers\TArray)< int > & ObjectIDsOut ) const


description:
Update the position of an object in the octree. This is more efficient than doing a remove+insert
true if object was reinserted, false if the object was fine in it's existing cell

code: bool ReinsertObject ( int32 ObjectID, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & NewBounds, uint32 CellIDHint )


description:
Remove an object from the octree
true if the object was in the tree and removed

code: bool RemoveObject ( int32 ObjectID )


description: Sets max tree depth w/ protection against setting beyond supported max

code: void SetMaxTreeDepth ( int MaxTreeDepthIn )


code: int ToChildCellIndex ( const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & Cell, const FVector3d & Position ) const


description: The octree is dynamic. Objects can be removed and re-inserted.

code: class FSparseDynamicOctree3

CellObjectLists

type: FSmallListSet

CellRefCounts

type: FRefCountVector

description: Reference counts for Cells list.

Cells

description: List of cells. Note that some cells may be unused, depending on CellRefCounts

MaxExpandFactor

description: Fraction we expand the dimension of any cell, to allow extra space to fit objects.

MaxTreeDepth

description: Objects will not be inserted more than this many levels deep from a Root cell

RootCells

type: TSparseGrid3< u...

description: RootCells are the top-level cells of the octree, of size RootDimension.

RootDimension

description: Potential optimizations/improvements

SpillObjectSet

type: TSet< int32 >

ValidObjectIDs

type: FDynamicFlagArr...


className: SpillCellID

description: If an object is in the spill cell, that means it didn't fit in the tree

code: static constexpr uint32 SpillCellID = InvalidCellID - 1;


code: bool CellContains ( const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & Cell, const FVector3d & Position ) const


description: Check that the octree is internally valid

code: void CheckValidity ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int)> IsValidPointIDFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< FVector3d(int)> GetPointFunc, [EValidityCheckFailMode](API\Runtime\GeometryCore\UE__Geometry__EValidityCheckFail-) FailMode, bool bVerbose, bool bFailOnMissingPoints ) const


description: Populate givenFStatisticswith info about the octree

code: void ComputeStatistics ( [FStatistics](API\Runtime\GeometryCore\Spatial\FSparseDynamicPointOctree3\FStatistics) & StatsOut ) const


description:
Test if an Point is stored in the tree
true if PointID is stored in this octree

code: bool ContainsPoint ( int32 PointID ) const


description: Do a rough ballpark configuration of the RootDimension, MaxTreeDepth, and MaxPointsPerCell tree config values, given a bounding-box dimension and estimate of the total number of points that will be inserted. This is primarily intended to be used withParallelInsertDensePointSet()

code: void ConfigureFromPointCountEstimate ( double MaxBoundsDimension, int CountEstimate )


code: [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) FindCurrentContainingCell ( const FVector3d & Position ) const


code: uint32 CreateNewRootCell ( [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) NewRootCell, bool bInitializeCellPointList )


description:
Find nearest ray-hit point with Points in tree
PointID of hit Point, or -1 on miss

code: int32 FindNearestHitPoint ( const FRay3d & Ray, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< double(int, const FRay3d &)> HitPointDistFunc, double MaxDistance ) const


code: double FindNearestRayCellIntersection ( const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & Cell, const FRay3d & Ray ) const


code: FString ToString&40;&41; const


description: Statistics about internal structure of the octree

code: struct FStatistics

LevelCellSizes

type: TArray< float >


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetCellBox ( const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & Cell ) const


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetCellBox ( uint32 Level, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


code: FVector3d GetCellCenter ( uint32 Level, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


code: FVector3d GetCellCenter ( const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & Cell ) const


code: uint32 GetCellForPoint ( int32 PointID ) const


description: Insert PointID into the Octree at maximum depth. Currently only expands at most one depth-level per insertion. This is sub-optimal.

code: void InsertPoint ( int32 PointID, const FVector3d & Position )


description: Calculate the base width of a cell at a given level

code: double GetCellWidth ( uint32 Level ) const


description: Insert PointID into the Octree. Dynamically expands cells that have more than MaxPointsPerCell

code: void InsertPoint_DynamicExpand ( int32 PointID, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< FVector3d(int)> GetPositionFunc )


code: void Insert_NewChildCell ( int32 PointID, const FVector3d & Position, int ParentCellID, [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) NewChildCell, int ChildIdx )


code: void Insert_NewRoot ( int32 PointID, const FVector3d & Position, [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) NewRootCell )


code: void Insert_ToCell ( int32 PointID, const FVector3d & Position, const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & ExistingCell )


description: This identifier is used for unknown cells

code: static constexpr uint32 InvalidCellID = FSparsePointOctreeCell::InvalidID;


description: Insert a set of dense points with IDs in range [0, MaxPointID-1], in parallel. The points are only inserted in leaf nodes, at MaxTreeDepth level, so that value should be set conservatively. Parallel insertion is across root cells, so if the RootDimension is larger than the point set bounds, this will be slower than incremental construction.ConfigureFromPointCountEstimate()provides reasonable values for large point sets.

code: void ParallelInsertDensePointSet ( int32 MaxPointID, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< FVector3d(int)> GetPositionFunc )


description: Collect PointIDs from all the cells with bounding boxes that intersect Bounds, where PredicateFunc passes Query is parallelized across Root cells. So if there is only one Root cell, it's actually slower thanRangeQuery()due to internal temp buffers.

code: void ParallelRangeQuery ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int)> PredicateFunc, [TArray](API\Runtime\Core\Containers\TArray)< int > & PointIDsOut, [TArray](API\Runtime\Core\Containers\TArray)< const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) * > * TempBuffer ) const


code: [FVector3i](API\Runtime\GeometryCore\FVector3i) PointToIndex ( uint32 Level, const FVector3d & Position ) const


description: Update the position of an Point in the octree. This is more efficient than doing a remove+insert

code: void ReinsertPoint ( int32 PointID, const FVector3d & NewPosition )


description:
Remove a Point from the octree
true if the Point was in the tree and removed

code: bool RemovePoint ( int32 PointID )


code: int ToChildCellIndex ( const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & Cell, const FVector3d & Position ) const


description: Collect PointIDs from all the cells with bounding boxes that intersect Bounds, where PredicateFunc passes

code: void RangeQuery ( const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(int)> PredicateFunc, [TArray](API\Runtime\Core\Containers\TArray)< int > & PointIDsOut, [TArray](API\Runtime\Core\Containers\TArray)< const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) * > * TempBuffer ) const


description: Remove a Point from the octree. This function must only be called with PointIDs that are certain to be in the tree.

code: void RemovePointUnsafe ( int32 PointID )


code: int ToChildCellIndex ( uint32 Level, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index, const FVector3d & Position ) const


description: The octree is dynamic. Points can be removed and re-inserted.

code: class FSparseDynamicPointOctree3

CellPointLists

type: TSparseListSet<...

CellRefCounts

description: Reference counts for Cells list.

Cells

description: List of cells. Note that some cells may be unused, depending on CellRefCounts

MaxPointsPerCell

type: int

description: If using theInsertPoint_DynamicExpand()insertion path, then when a cell gets to this many points, and has depth < MaxTreeDepth, it will be expanded and its points moved down

MaxTreeDepth

description: Points will not be inserted more than this many levels deep from a Root cell

RootCells

description: RootCells are the top-level cells of the octree, of size RootDimension.

RootDimension

type: double

description: Potential optimizations/improvements


code: uint32 GetChildCellID ( int ChildIndex ) const


code: bool HasChild ( int ChildIndex ) const


className: InvalidID

code: static constexpr uint32 InvalidID = TNumericLimits<uint32>::Max();


className: InvalidLevel

code: static constexpr uint8 InvalidLevel = TNumericLimits<uint8>::Max();


code: [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) MakeChildCell ( int ChildIndex )


code: void SetChild ( uint32 ChildIndex, const [FSparseOctreeCell](API\Runtime\GeometryCore\Spatial\FSparseOctreeCell) & ChildCell )


code: FSparseOctreeCell ( uint8 LevelIn, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IndexIn )


className: FSparseOctreeCell

description: FSparseOctreeCellis a Node in a SparseDynamicOctree3.

code: struct FSparseOctreeCell

CellID

description: ID of cell (index into cell list)

Children

type: TStaticArray< u...

description: CellID of each child, or InvalidID if that child does not exist

Index

description: I,j,k index of cell in level, relative to origin

Level

description: Level of cell in octree


code: [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) MakeChildCell ( int ChildIndex ) const


code: void SetChild ( uint32 ChildIndex, const [FSparsePointOctreeCell](API\Runtime\GeometryCore\Spatial\FSparsePointOctreeCell) & ChildCell )


code: FSparsePointOctreeCell ( uint8 LevelIn, const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IndexIn )


className: FSparsePointOctreeCell

description: FSparsePointOctreeCellis a Node in a SparseDynamicOctree3.

code: struct FSparsePointOctreeCell

CellID

description: ID of cell (index into cell list)

description: Level of cell in octree


description: Compute an ordering for the input points that attempts to order points so adjacent points are close together spatially Supports both 2D and 3D points.

code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector2f > Points, const [FAxisAlignedBox2f](API\Runtime\GeometryCore\FAxisAlignedBox2f) & Bounds )


code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector2d > Points, const [FAxisAlignedBox2d](API\Runtime\GeometryCore\FAxisAlignedBox2d) & Bounds )


code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3d > Points, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Bounds )


code: void Compute ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const FVector3f > Points, const [FAxisAlignedBox3f](API\Runtime\GeometryCore\FAxisAlignedBox3f) & Bounds )


code: FZOrderCurvePoints ( int32 MaxTreeDepth )


className: FZOrderCurvePoints

description: Generate a "z-order curve" ordering for a point set by distributing the points to a quad- or octree and then reading the points indices back in tree traversal order This is useful for giving the points spatial locality  so points that are close together in the ordering tend to be close together spatially, also

code: struct FZOrderCurvePoints

MaxTreeDepth

description: Inputs.

Order

description: Outputs.


description: true if RayIntersect will return a normal

code: bool HasNormal()


description: true if ray hit the object

code: bool RayIntersect ( const FRay3d & Ray, FVector3d & HitOut, FVector3d & HitNormalOut )


code: virtual ~IIntersectionTarget()


className: IIntersectionTarget

description: IIntersectionTargetis an object that can be intersected with a ray

code: class IIntersectionTarget


description:
Find all triangles intersected by the given ray sorted by distance
true if hit, false if no hit found

code: bool FindAllHitTriangles ( const FRay3d & Ray, [TArray](API\Runtime\Core\Containers\TArray)< [MeshIntersection::FHitIntersectionResult](API\Runtime\GeometryCore\Spatial\FHitIntersectionResult) > & OutHits, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: ID of triangle intersected by ray within MaxDistance, or InvalidID if not found

code: virtual int FindNearestHitTriangle ( const FRay3d & Ray, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description:
Find nearest triangle from the given ray
true if hit, false if no hit found

code: virtual bool FindNearestHitTriangle ( const FRay3d & Ray, double & NearestT, int & TID, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: ID of triangle nearest to Point within MaxDistance, or InvalidID if not found

code: int FindNearestTriangle ( const FVector3d & Point, double & NearestDistSqrOut, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: bool FindNearestHitTriangle ( const FRay3d & Ray, double & NearestT, int & TID, FVector3d & BaryCoords, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: FQueryOptions &40; TFunction< bool(int)> TriangleFilterF &41;


code: FQueryOptions &40; double MaxDistance, TFunction< bool(int)> TriangleFilterF &41;


className: FQueryOptions

description: Standard shared options for all mesh spatial queries

code: struct FQueryOptions

bAllowUnsafeModifiedMeshQueries

type: bool

description: If true, then theIMeshSpatialmay allow queries even when the underlying mesh has been modified without updating the queried structure.

MaxDistance

description: Maximum search distance / hit distance, where applicable

TriangleFilterF

type: TFunction< bool...

description: If non-null, only triangle IDs that pass this filter (i.e. filter is true) are considered


description: true if this object supports nearest-triangle queries

code: bool SupportsNearestTriangle() const


description: true if this object supports ray-triangle intersection queries


className: IMeshSpatial

description: IMeshSpatialis an extension ofISpatialspecifically for meshes

code: class IMeshSpatial : public [UE::Geometry::ISpatial](API\Runtime\GeometryCore\Spatial\ISpatial)


description: position of Point projected onto the target

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


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


code: virtual ~IOrientedProjectionTarget()


className: IOrientedProjectionTarget

description: IOrientedProjectionTargetis a projection target that can return a normal in addition to the projected point

code: class IOrientedProjectionTarget : public [UE::Geometry::IProjectionTarget](API\Runtime\GeometryCore\Spatial\IProjectionTarget)


code: virtual ~IProjectionTarget()


className: IProjectionTarget

description: IProjectionTargetis an object that supports projecting a 3D point onto it

code: class IProjectionTarget


description: true if the query point is inside the object

code: bool IsInside ( const FVector3d & Point ) const


description: true if this object supports point-containment inside/outside queries

code: bool SupportsPointContainment() const


code: template<typename OtherGridType> bool AllocateTopologyUnionImpl ( const OtherGridType & OtherGrid )


className: ISpatial

description: ISpatialis a base interface for spatial queries

code: class ISpatial


code: typedef [TBlockedGrid3Layout](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)< BlockSize_ > BlockedGrid3LayoutType


className: BlockElemCount

code: static constexpr int32 BlockElemCount = BlockSize * BlockSize * BlockSize;


code: typedef [TBlockData3](API\Runtime\GeometryCore\Spatial\TBlockData3)< ElemType, BlockSize_ > BlockData3Type


className: BlockSize

code: static constexpr int32 BlockSize = BlockSize_;


description: the default value if the block has not been allocated, otherwise the indexed value in the block

code: ElemType GetValue &40; const int32 & LocalIndex &41; const


code: const [FBlock3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\FBlock3) & GetBlock ( int32 Index ) const


description: A default value and a pointer to a block that will be allocated on first write.

code: struct FBlock3

BlockDataPtr

type: TUniquePtr<Blo...

DefaultValue

type: ElemType


description: Release any allocated block data and reset the default value.

code: void Reset &40; const ElemType & DefaultIn &41;


description: Skip range checks in non-debug builds

code: [FBlock3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\FBlock3) & GetBlock ( int32 Index )


description: the total number of block units form the spatial decomposition of the grid. Note these block may not all be allocated

code: int32 GetNumBlocks() const


description: the grid value at CellIJK. Note this is safe to call from multiple read threads (but not if simultaneously writing!)

code: ElemType GetValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK ) const


description: the grid value at (I,J,K)

code: ElemType GetValue ( int32 I, int32 J, int32 K ) const


description: true if Block has an allocated block data buffer

code: bool IsBlockAllocated ( const [FBlock3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\FBlock3) & Block ) const


description: true if the specified Block has an allocated block data buffer

code: bool IsBlockAllocated ( const int32 BlockIndex ) const


description: Note: if doing pure reads prefer theGetValue()methods because the ProcessValue method will allocate the underlying data block.

code: template<typename ProcessFunc> void ProcessValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ProcessFunc Func )


description:
Pre-allocate the grid blocks that also exist in SourceGrid of the same dimensions. This is useful in grid-processing algorithms where parallel grid operations can be done without locking if the blocks are already allocated.
false on failure (e.g. different sized grids), otherwise true.

code: template<typename OtherElemType> bool PreAllocateFromSourceGrid ( const [TBasicBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)< OtherElemType, BlockSize > & SourceGrid )


code: template<typename ProcessFunc> void ProcessValue ( int32 I, int32 J, int32 K, ProcessFunc Func )


code: ElemType ReadValue ( const int32 & BlockIndex, const int32 & LocalIndex ) const


code: ElemType ReadValueWithLock ( const int32 & BlockIndex, const int32 & LocalIndex, FCriticalSection * CriticalSection )


code: ElemType ReadValue ( int32 I, int32 J, int32 K ) const


description: Discard all allocated blocks but retain grid dimensions. This also resets the block-level default values.

code: void Reset()


description: Reconfigure the grid to have the target dimensions and default value. This clears all the existing grid memory, and resets default values to the specified InitialValue.

code: void Reset ( int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue )


description: Reconfigure the grid to have the target dimensions. This clears all the existing grid memory and resets the block-level default value.

code: void Resize ( int32 DimI, int32 DimJ, int32 DimK )


description: Set the grid value at CellIJK

code: void SetValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ElemType NewValue )


description: Return a reference to the block data buffer associated with the specified block, allocating if needed

code: [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) & TouchBlockData ( const int32 BlockIndex )


code: template<typename FuncType> void WriteValue ( int32 I, int32 J, int32 K, FuncType Func )


description: Set the grid value at (I,J,K)

code: void SetValue ( int32 I, int32 J, int32 K, ElemType NewValue )


description: Write methods

code: template<typename FuncType> void WriteValue ( const int32 & BlockIndex, const int32 & LocalIndex, FuncType Func )


code: template<typename FuncType> void WriteValueWithLock ( const int32 & BlockIndex, const int32 & LocalIndex, FuncType Func, FCriticalSection * CriticalSection )


description: Create grid with specified domain.

code: TBasicBlockedDenseGrid3 ( int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue )


description: Create empty grid


description: For multi-threaded applications consider using the derived classesTBlockedDenseGrid3which manages internal locks, orTBlockedGrid3with your own lock provider.

code: template<typename ElemType, int32 BlockSize_> class TBasicBlockedDenseGrid3 : public [UE::Geometry::TBlockedGrid3Layout< BlockSize_ >](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)

description: The value to use to initialize new blocks


description: Access the data by index into the underlying linear array

code: [ElemType](API\Runtime\GeometryCore\Spatial\TBlockData3\ElemType) At ( const int32 Index ) const


code: [ElemType](API\Runtime\GeometryCore\Spatial\TBlockData3\ElemType) & At ( const int32 Index )


className: LinearDataStorageType

code: typedef [TStaticArray](API\Runtime\Core\Containers\TStaticArray)< [ElemType](API\Runtime\GeometryCore\Spatial\TBlockData3\ElemType), DataLayout::ElemCount > LinearDataStorageType


className: ElemType

code: typedef ElemType_ ElemType


code: template<typename FuncType> void ModifyValue ( const int32 Index, FuncType Func )


className: DataLayout

code: typedef [TBlockData3Layout](API\Runtime\GeometryCore\Spatial\TBlockData3Layout)< BlockSize_ > DataLayout


code: TBlockData3 ( const [ElemType](API\Runtime\GeometryCore\Spatial\TBlockData3\ElemType) & Value, const int32 ID )


description: Initialize all the data elements to the specified value

code: void Reset ( const [ElemType](API\Runtime\GeometryCore\Spatial\TBlockData3\ElemType) & Value )


description: TBlockData3< bool, BlockSize_ >

code: template<typename ElemType_, int32 BlockSize_> class TBlockData3 : public [UE::Geometry::TBlockData3Layout< BlockSize_ >](API\Runtime\GeometryCore\Spatial\TBlockData3Layout)

Data

type: LinearDataStora...


description: linear index associated with the specified 3d cell.

code: static int32 ToLinear ( const int32 & LocalI, const int32 & LocalJ, const int32 & LocalK )


description: These are 3d grid space layout behaviors shared by the various blocked grids ( c.f. BlockedDenseGrid3.h and other usages in SparseNarrowBandSDFMesh.h )

code: template<int32 BlockSize_> struct TBlockData3Layout


code: static constexpr int32 BlockSize = BlockSize_;


className: ElemCount

code: static constexpr int32 ElemCount = BlockSize_ * BlockSize_ * BlockSize_;


className: AllocatorType

code: typedef TInlineAllocator< DataLayout::ElemCount > AllocatorType


className: TBlockData3< bool, BlockSize_ >::At

code: FBitReference At &40; int32 LocalIndex &41;


description: the 3d cell associated with the specified linear index.

code: static [FVector3i](API\Runtime\GeometryCore\FVector3i) ToLocalIJK ( int32 LocalLinear )


code: bool At &40; int32 LocalIndex &41; const


className: BlockDataBitMask

code: typedef TBitArray< AllocatorType > BlockDataBitMask


className: BitArrayConstIterator

code: typedef TConstSetBitIterator< AllocatorType > BitArrayConstIterator


code: typedef TBlockData3Layout< BlockSize_ > DataLayout


code: typedef bool ElemType


className: TBlockData3< bool, BlockSize_ >::ModifyValue

code: template<typename FuncType> void ModifyValue &40; const int32 Index, FuncType Func &41;


className: TBlockData3< bool, BlockSize_ >::Reset

code: void Reset &40; const ElemType & Value &41;


className: TBlockData3< bool, BlockSize_ >::TBlockData3

code: TBlockData3 &40; const ElemType & Value, const int32 ID &41;


className: TBlockData3< bool, BlockSize_ >

description: Specialize the Block Data Buffer for bools by using a bitarray.

code: template<int32 BlockSize_> class TBlockData3< bool, BlockSize_ > : public [UE::Geometry::TBlockData3Layout< BlockSize_ >](API\Runtime\GeometryCore\Spatial\TBlockData3Layout)

BitArray

type: BlockDataBitMas...


className: TBlockData3< bool, BlockSize_ >::TopologyUnion

description: Bit field operations can correspond to topological operations

code: void TopologyUnion &40; const TBlockData3< bool, BlockSize_ > & OtherBlockData &41;


code: typedef [TBlockData3](API\Runtime\GeometryCore\Spatial\TBlockData3)< ElemType, BlockSize > BlockData3Type


className: BlockedDenseGridType

code: typedef [TBasicBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)< ElemType, BlockSize > BlockedDenseGridType


code: typedef [TBlockedGrid3Layout](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)< BlockSize > BlockedGrid3LayoutType


description: Skip range checks in non-debug builds

code: FCriticalSection * GetBlockLock ( int32 Index )


code: static constexpr int32 BlockSize = 32;


description: the grid value at (I,J,K), with internal locking, so it is safe to call this from multiple read & write threads

code: ElemType GetValueThreadSafe ( int32 I, int32 J, int32 K )


description: the grid value at CellIJK, with internal locking, so it is safe to call this from multiple read & write threads

code: ElemType GetValueThreadSafe ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK )


description: Call an external lambda with a reference to the grid value at CellIJK. Called as Func(ElemType&), so the caller can both read and write the grid cell

code: template<typename ProcessFunc> void ProcessValueThreadSafe ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ProcessFunc Func )


description: true if the specified cell IJK is contained within the grid bounds.

code: bool IsValidIndex ( [FVector3i](API\Runtime\GeometryCore\FVector3i) CellIJK ) const


code: static constexpr int32 BlockElemCount = BlockSize * BlockSize * BlockSize;


description: note: if doing pure reads prefer theGetValue()methods because the ProcessValueThreadSafe method will allocate the underlying data block.

code: template<typename ProcessFunc> void ProcessValueThreadSafe ( int32 I, int32 J, int32 K, ProcessFunc Func )


code: ElemType ReadValueThreadSafe ( int32 I, int32 J, int32 K )


description: Reconfigure the grid to have the target dimensions and default value. This clears all the existing grid memory.

code: void Reset ( int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue )


description: Discard all allocated blocks but retain grid dimensions

code: void Reset()


description: Reconfigure the grid to have the target dimensions. This clears all the existing grid memory and resets the block-level default value.

code: void Resize ( int32 DimI, int32 DimJ, int32 DimK )


description: Set the grid value at (I,J,K), with internal locking, so it is safe to call this from multiple read & write threads

code: void SetValueThreadSafe ( int32 I, int32 J, int32 K, ElemType NewValue )


description: Set the grid value at CellIJK, with internal locking, so it is safe to call this from multiple read & write threads

code: void SetValueThreadSafe ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ElemType NewValue )


description: Convert grid CellIJK coordinates to a linear ID, note this id is independent of the actual internal data storage.

code: int64 ToLinear ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK ) const


code: int64 ToLinear ( int32 X, int32 Y, int32 Z ) const


description: Convert a grid cell id to CellIJK coordinates

code: [FVector3i](API\Runtime\GeometryCore\FVector3i) ToIndex ( int64 LinearIndex ) const


code: template<typename FuncType> void WriteValueThreadSafe ( int32 I, int32 J, int32 K, FuncType Func )


description: Create empty grid


description: Create grid with specified domain.

code: TBlockedDenseGrid3 ( int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue )


description: For multi-threaded applications where memory is a premium, consider usingTBlockedGrid3(above) as it gives better control over the individual blocks and allows the caller to manage the lifetime of any locks used.

code: template<typename ElemType> class TBlockedDenseGrid3 : public [UE::Geometry::TBasicBlockedDenseGrid3< ElemType, 32 >](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)

BlockLocks

type: TArray< FCritic...


code: typedef [TBlockData3](API\Runtime\GeometryCore\Spatial\TBlockData3)< ElemType, BlockSize_ > BlockData3Type


code: typedef [TBasicBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)< ElemType, BlockSize_ > BlockedDenseGridType


code: typedef [TBlockedGrid3Layout](API\Runtime\GeometryCore\Spatial\TBlockedGrid3Layout)< BlockSize_ > BlockedGrid3LayoutType


description: array of pointers to the allocated blocks. Note: the grid owns the blocks, so the calling code should not delete them.

code: [TArray](API\Runtime\Core\Containers\TArray)< [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) * > GetAllocatedBlocks()


code: static constexpr int32 BlockSize = BlockSize_;


code: typedef [TBasicBlockedDenseGrid3](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)< ElemType, BlockSize_ >::[FBlock3](API\Runtime\GeometryCore\Spatial\TBlockedGrid3\FBlock3) FBlock3


code: [TArray](API\Runtime\Core\Containers\TArray)< const [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) * > GetAllocatedConstBlocks() const


description: reference to a unique pointer that points to a block that may or may not be allocated

code: [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) > & GetBlockData ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK )


code: const [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) > & GetBlockData ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK ) const


code: [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) > & GetBlockData ( int32 BlockIndex )


code: const [TUniquePtr](API\Runtime\Core\Templates\TUniquePtr)< [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) > & GetBlockData ( int32 BlockIndex ) const


code: [TArray](API\Runtime\Core\Containers\TArray)< const [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) * > GetAllocatedBlocks() const


description: true if the specified block has been allocated.

code: bool IsBlockAllocated ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK ) const


description: the total number of block units that covers the spatial dimensions of the grid.

code: int32 GetNumBlocks() const


description:
Methods on the block's default values.  The block 'default value' is returned when querying a cell in an unallocated block, and is used to initialize the block on allocation.
the default value for the specified block.

code: ElemType GetBlockDefaultValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK ) const


description: Update the default value for the specified block using a functor

code: template<typename ProcessFunc> void ProcessBlockDefaultValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK, ProcessFunc Func, bool bPruneBlock )


description: note: if doing pure reads prefer theGetValue()methods because the ProcessValue method will allocate the underlying data block.

code: template<typename ProcessFunc, typename CriticalSectionProviderType> void ProcessValueWithLock ( int32 I, int32 J, int32 K, ProcessFunc Func, CriticalSectionProviderType CriticalSectionProvider )


code: template<typename ProcessFunc, typename CriticalSectionProviderType> void ProcessValueWithLock ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ProcessFunc Func, CriticalSectionProviderType CriticalSectionProvider )


code: ElemType ReadBlockDefaultValue ( const int32 & BlockIndex ) const


code: ElemType ReadBlockDefaultValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK ) const


description: Update the default value for the specified block.

code: void SetBlockDefaultValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK, const ElemType & Value, bool bPruneBlock )


description: that provides a critical section for each block id.

code: template<typename CriticalSectionProviderType> void SetValueWithLock ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellIJK, ElemType NewValue, CriticalSectionProviderType CriticalSectionProvider )


code: template<typename CriticalSectionProviderType> void SetValueWithLock ( int32 I, int32 J, int32 K, ElemType NewValue, CriticalSectionProviderType & CriticalSectionProvider )


description: a references to the specified block, this will allocate the block if it doesn't already exists.

code: [BlockData3Type](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3\BlockData3Type) & TouchBlockData ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK )


code: template<typename FuncType> void WriteBlockDefaultValue ( const int32 BlockIndex, FuncType Func, bool bDeallocateBock )


description: Create empty grid


code: template<typename FuncType> void WriteBlockDefaultValueWithLock ( const int32 BlockIndex, FuncType Func, FCriticalSection * CriticalSection, bool bDeallocateBock )


code: template<typename FuncType> void WriteBlockDefaultValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK, FuncType Func, bool bDeallocateBock )


description: Create grid with specified domain.

code: TBlockedGrid3 ( int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue )


description: Block-level access is provided to facilitate parallel algorithms. Additionally, 'Set' methods are provided that utilize critical sections provided by the caller.

code: template<typename ElemType, int32 BlockSize_> class TBlockedGrid3 : public [UE::Geometry::TBasicBlockedDenseGrid3< ElemType, BlockSize_ >](API\Runtime\GeometryCore\Spatial\TBasicBlockedDenseGrid3)


description: the block index for the specified block (BlockIJK) in a linearization of the 3d block space.

code: int32 BlockIJKToBlockIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK ) const


description: an axis aligned box that defines the bounds of this region in terms of cells. This bounds is [inclusive, exclusive)


description: the 3-d coordinates of the block specified by an index in a linearization of the blocks. BlockIJK is the lattice address of the block in terms of block units ( e.g. the location in a grid of blocks).

code: [FVector3i](API\Runtime\GeometryCore\FVector3i) BlockIndexToBlockIJK ( const int32 BlockIndex ) const


code: static constexpr int32 BlockSize = BlockSize_;


code: static constexpr int32 BlockElemCount = BlockSize * BlockSize * BlockSize;


code: typedef [TBlockData3Layout](API\Runtime\GeometryCore\Spatial\TBlockData3Layout)< BlockSize_ > FBlockData3Layout


description: an axis aligned box that defines the bounds of this region in terms of cells. This bounds is [inclusive, inclusive]


description: Return the block index and local index of the cell at (I,J,K).

code: void GetBlockAndLocalIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK, int32 & BlockIndexOut, int32 & LocalIndexOut ) const


code: void GetBlockAndLocalIndex ( int32 I, int32 J, int32 K, int32 & BlockIndexOut, int32 & LocalIndexOut ) const


description: the dimensions of this layout in terms of blocks.

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


description: the index of the block that holds the cell indicated by IJK.

code: int32 IJKtoBlockIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK ) const


description: the dimensions of this layout in terms of cell ijks.

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


description: true if the specified block IJK is within the bounds of the block dimensions.

code: bool IsValidBlockIJK ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & BlockIJK )


description: true if the specified cell IJK is within the bounds of the dimensions.

code: bool IsValidIJK ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK ) const


description: Recompute the block dimensions required to cover the requested cell dimensions.

code: void Resize ( int32 DimI, int32 DimJ, int32 DimK )


description: the number of ijk cells in contained within this grid layout. note: because blocks are 3d pages of fixed size so the number of Blocks X Cells in Block might actually be a larger.

code: int64 Size() const


code: TBlockedGrid3Layout ( int32 DimI, int32 DimJ, int32 DimK )


code: TBlockedGrid3Layout ( [FVector3i](API\Runtime\GeometryCore\FVector3i) Dims )


code: void Apply ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< ElemType(ElemType)> ApplyFunc )


description: Spatial decomposition of a region of 3d ijk space into 3d cubes of size BlockSize (per side). This class gives a consistent translation between locations in 3d lattice space and blocks of a spatial decomposition; it is independent of any sort of data that you might want to associate with those locations. See BlockedDenseGrid3.h for usage.

code: template<int32 BlockSize_> class TBlockedGrid3Layout


code: void AssignAll ( ElemType Value )


code: constexpr ElemType & At ( int64 X, int64 Y )


code: constexpr ElemType & At ( int32 X, int32 Y )


code: constexpr const ElemType & At ( int32 X, int32 Y ) const


code: constexpr const ElemType & At ( int64 X, int64 Y ) const


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


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


code: void GetXPair ( int32 X0, int32 Y, ElemType & AOut, ElemType & BOut ) const


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


code: TArray64< ElemType > & GridValues()


code: const TArray64< ElemType > & GridValues() const


code: constexpr const ElemType & operator[] ( int64 Idx ) const


code: constexpr ElemType & operator[] ( int64 Idx )


code: constexpr ElemType & operator[] ( [FVector2i](API\Runtime\GeometryCore\FVector2i) Idx )


code: constexpr const ElemType & operator[] ( [FVector2i](API\Runtime\GeometryCore\FVector2i) Idx ) const


code: void Resize ( int32 DimX, int32 DimY, bool bAllowShrinking )


code: void SetMax ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & IJK, ElemType NewValue )


code: TDenseGrid2 ( int32 DimX, int32 DimY, ElemType InitialValue )


description: Create empty grid


code: void SetMin ( const [FVector2i](API\Runtime\GeometryCore\FVector2i) & IJK, ElemType NewValue )


description: 2D dense grid of scalar values.

code: template<typename ElemType> class TDenseGrid2

Buffer

type: TArray64< ElemT...

description: Grid of allocated elements

DimensionX

description: Dimensions per axis


code: void Apply ( [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< ElemType(ElemType)> F )


code: constexpr ElemType & At ( int I, int J, int K )


code: void Assign ( ElemType Value )


code: constexpr const ElemType & At ( int I, int J, int K ) const


description: the grid value at (X,Y,Z)

code: ElemType GetValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellCoords ) const


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


description: the grid value at (X,Y,Z)

code: ElemType GetValue ( int32 X, int32 Y, int32 Z ) const


code: void GetXPair ( int X0, int Y, int Z, ElemType & AOut, ElemType & BOut ) const


code: constexpr ElemType & operator[] ( int Idx )


code: bool IsValidIndex ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & Index ) const


code: constexpr const ElemType & operator[] ( int Idx ) const


code: constexpr ElemType & operator[] ( [FVector3i](API\Runtime\GeometryCore\FVector3i) Idx )


description: Call an external lambda with a reference to the grid value at (X,Y,Z). Called as Func(ElemType&), so the caller can both read and write the grid cell

code: template<typename ProcessFunc> void ProcessValue ( int32 X, int32 Y, int32 Z, ProcessFunc Func )


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


code: template<typename ProcessFunc> void ProcessValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellCoords, ProcessFunc Func )


code: void SetMax ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK, ElemType F )


code: void SetMin ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK, ElemType F )


code: void Resize ( int DimX, int DimY, int DimZ, bool bAllowShrinking )


description: Set the grid value at (X,Y,Z)

code: void SetValue ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & CellCoords, ElemType NewValue )


description: Set the grid value at (X,Y,Z)

code: void SetValue ( int32 X, int32 Y, int32 Z, ElemType NewValue )


code: [FVector3i](API\Runtime\GeometryCore\FVector3i) ToIndex ( int Idx ) const


code: int ToLinear ( const [FVector3i](API\Runtime\GeometryCore\FVector3i) & IJK ) const


code: int ToLinear ( int X, int Y, int Z ) const


description: Create empty grid


code: TDenseGrid3 ( int DimX, int DimY, int DimZ, ElemType InitialValue )


description: Helper to add a triangle-triangle intersection result from to a intersection result struct

code: static void AddTriTriIntersectionResult ( const [FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) & Intr, int TID_A, int TID_B, [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) & Result )


code: double BoxDistanceSqr ( int IBox, const FVector3d & V ) const


code: double box_box_distsqr ( int iBox, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & testBox ) const


description: 3D dense grid of floating-point scalar values.

code: template<typename ElemType> class TDenseGrid3

Buffer

type: TArray< ElemTyp...

description: Grid of allocated elements

Dimensions

description: Dimensions per axis


code: bool box_box_intersect ( int IBox, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & TestBox ) const


code: bool box_contains ( int IBox, const FVector3d & P ) const


code: double box_ray_intersect_t ( int IBox, const FRay3d & Ray ) const


code: void Build ( const [TArray](API\Runtime\Core\Containers\TArray)< int32 > & TriangleList )


code: void BuildTopDown ( bool bSorted )


code: template<typename TriIndexEnumerable> void BuildTopDown ( bool bSorted, TriIndexEnumerable TriangleList, int32 NumTriangles )


code: void BuildTopDown ( [TArray](API\Runtime\Core\Containers\TArray)< int > & Triangles, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & Centers, int32 NumTriangles )


code: static constexpr double DOUBLE_MAX = TNumericLimits<double>::Max();


description: Hierarchically descend through the tree Nodes, calling theFTreeTraversalfunctions at each level

code: virtual void DoTraversal ( [FTreeTraversal](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3\FTreeTraversal) & Traversal, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


className: FBoxesSet

code: struct FBoxesSet

BoxCenters

type: TDynamicVector<...


description:
Find all triangles intersected by the given ray sorted by distance
true if hit, false if no hit found

code: virtual bool FindAllHitTriangles ( const FRay3d & Ray, [TArray](API\Runtime\Core\Containers\TArray)< [MeshIntersection::FHitIntersectionResult](API\Runtime\GeometryCore\Spatial\FHitIntersectionResult) > & OutHits, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Compute self intersections on our mesh. Returns pairs of intersecting triangles, which could intersect in either point or segment Currentlydoes notreturn coplanar intersections.

code: virtual [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) FindAllSelfIntersections ( bool bIgnoreTopoConnected, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectionFn ) const


code: void FindHitTriangles ( int IBox, const FRay3d & Ray, [TArray](API\Runtime\Core\Containers\TArray)< [MeshIntersection::FHitIntersectionResult](API\Runtime\GeometryCore\Spatial\FHitIntersectionResult) > & Intersections, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Compute all intersections between two meshes. TransformF argument transforms vertices of OtherTree to our tree (can be null if in same coord space) Returns pairs of intersecting triangles, which could intersect in either point or segment Currentlydoes notreturn coplanar intersections.

code: virtual [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) FindAllIntersections ( const [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions, [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectionFn ) const


code: void FindHitTriangle ( int IBox, const FRay3d & Ray, double & NearestT, int & TID, FVector3d & BaryCoords, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: ID of triangle intersected by ray within MaxDistance, or InvalidID if not found

code: virtual int FindNearestHitTriangle ( const FRay3d & Ray, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description:
Find nearest triangle from the given ray
true if hit, false if no hit found

code: virtual bool FindNearestHitTriangle ( const FRay3d & Ray, double & NearestT, int & TID, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: virtual bool FindNearestHitTriangle ( const FRay3d & Ray, double & NearestT, int & TID, FVector3d & BaryCoords, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description:
Convenience function that calls FindNearestTriangle and then finds nearest point
nearest point to Point, or Point itself if a nearest point was not found

code: virtual FVector3d FindNearestPoint ( const FVector3d & Point, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Find nearest pair of triangles on this tree with OtherTree, within Options.MaxDistance. TransformF transforms vertices of OtherTree into our coordinates. can be null. returns triangle-id pair (my_tri,other_tri), orFIndex2i::Invalidif not found within max_dist Use MeshQueries.TrianglesDistance() to get more information Note: Only uses MaxDistance from Options; OtherTreeOptions.MaxDistance is not used

code: virtual [FIndex2i](API\Runtime\GeometryCore\FIndex2i) FindNearestTriangles ( [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, double & Distance, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions )


description: Find the Vertex closest to P, and distance to it, within distance MaxDist, or return InvalidID

code: virtual int FindNearestVertex ( const FVector3d & P, double & NearestDistSqr, double MaxDist, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options )


description: Find the triangle closest to P, and distance to it, within distance MaxDist, or return InvalidID Use MeshQueries.TriangleDistance() to get more information

code: virtual int FindNearestTriangle ( const FVector3d & P, double & NearestDistSqr, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: bool find_any_intersection ( int iBox, const [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, int oBox, int depth, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) &A, const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) &B)> TriangleIntersectionTest, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions ) const


code: void find_intersections ( int iBox, const [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, int oBox, int depth, [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) & result, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectFn, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions ) const


code: int find_any_intersection ( int iBox, const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & Triangle, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & triBounds, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) &A, const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) &B)> TriangleIntersectionTest, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description:
BEarlyStop causes the traversal to stop as soon as any triangle closer than NearestDistSqr is found
true if an early stop triangle was found

code: template<bool bEarlyStop> bool find_nearest_tri ( int IBox, const FVector3d & P, double & NearestDistSqr, int & TID, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: void find_nearest_triangles ( int iBox, [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, int oBox, int depth, double & nearest_sqr, [FIndex2i](API\Runtime\GeometryCore\FIndex2i) & nearest_pair, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions ) const


code: void find_nearest_vertex ( int IBox, const FVector3d & P, double & NearestDistSqr, int & NearestVertexID, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options )


description: Helper for find_self_intersections that checks intersections between triangles from separate boxes

code: bool find_self_intersections_acrossboxes ( int Box1, int Box2, [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) * Result, bool bIgnoreTopoConnected, int depth, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectFn, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: bool find_self_intersections ( [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) * Result, bool bIgnoreTopoConnected, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectFn, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Helper for find_self_intersections that intersects a single triangle vs a range of triangles

code: bool find_tri_tri_intersections ( int TID_A, int IdxRangeStart, int IdxRangeEnd, [MeshIntersection::FIntersectionsQueryResult](API\Runtime\GeometryCore\Spatial\FIntersectionsQueryResult) * Result, bool bIgnoreTopoConnected, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool([FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) &)> IntersectFn, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetBox ( int iBox, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF ) const


description: Get the overall bounding box of the whole tree


description: Internals - data structures, construction, etc

code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetBox ( int IBox ) const


className: FTreeTraversal

code: class FTreeTraversal

BeginBoxTrianglesF

type: TFunction< void...

description: These functions are called in sequence if NextBoxF returned true and the current node is a leaf.

NextBoxF

description: The traversal is terminated at the current node if this function returns false.


code: [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) GetBoxEps ( int IBox, double Epsilon ) const


code: const TriangleMeshType * GetMesh() const


description: true if tree is built and mesh is unchanged (identified based on change stamp)

code: bool IsValid ( bool bAllowUnsafeModifiedMeshQueries ) const


className: GetSplitAxisFunc

code: typedef [TUniqueFunction](API\Runtime\Core\Templates\TUniqueFunction)< int(int Depth, const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) &[Box](API\Plugins\DynamicMesh\ShapeApproximation\UE__Geometry__EDetectedSimpleSha-))> GetSplitAxisFunc


description: true if the query point is inside the object

code: virtual bool IsInside ( const FVector3d & Point ) const


description: Test whether there is any triangle closer than sqrt(ThresholdDistanceSqr) to Point Note thatFQueryOptions::MaxDistanceis ignored by this query, as ThresholdDistanceSqr controls the query distance instead

code: virtual bool IsWithinDistanceSquared ( const FVector3d & Point, double ThresholdDistanceSqr, int & OutTriangleID, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


className: MeshType

code: typedef TriangleMeshType MeshType


code: void SetBuildOptions ( int32 MaxBoxTriCount, [GetSplitAxisFunc](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3\GetSplitAxisFunc) && GetSplitAxisIn )


code: void SetMesh ( const TriangleMeshType * SourceMesh, bool bAutoBuild )


description: Sets the box intersection tolerance TODO: move into theIMeshSpatial::FQueryOptionsand delete this function

code: void SetTolerance ( double Tolerance )


code: int SplitTriSetMidpoint ( [TArray](API\Runtime\Core\Containers\TArray)< int > & Triangles, [TArray](API\Runtime\Core\Containers\TArray)< FVector3d > & Centers, int IStart, int ICount, int Depth, int MinTriCount, [FBoxesSet](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3\FBoxesSet) & Tris, [FBoxesSet](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3\FBoxesSet) & Nodes, [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) & Box )


description: true if this object supports nearest-triangle queries

code: virtual bool SupportsNearestTriangle() const


description: true if this object supports point-containment inside/outside queries

code: virtual bool SupportsPointContainment() const


description: true if this object supports ray-triangle intersection queries

code: virtual bool SupportsTriangleRayIntersection() const


code: bool TestAnyHitTriangle ( int IBox, const FRay3d & Ray, int32 & HitTIDOut, double MaxDistance, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: true if ray hits the mesh at some point (doesn't necessarily find the nearest hit).

code: virtual bool TestAnyHitTriangle ( const FRay3d & Ray, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: 1) make sure we can reach every Tri in Mesh through tree (also demo of how to traverse tree...) 2) make sure that Triangles are contained in parent boxes

code: void TestCoverage()


description: Returns true if triangle intersects any triangle of our mesh

code: virtual bool TestIntersection ( const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & Triangle, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Return true ifanytriangle of TestMesh intersects with our tree. If TestMeshBounds is not empty, only test collision if the provided bounding box intersects the root AABB box Use TransformF to transform vertices of TestMesh into space of this tree.

code: virtual bool TestIntersection ( const TriangleMeshType * TestMesh, [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) TestMeshBounds, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Returns true if there isanyintersection between our mesh and 'other' mesh. TransformF takes vertices of OtherTree into our tree - can be null if in same coord space

code: virtual bool TestIntersection ( const [TMeshAABBTree3](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3) & OtherTree, const [TFunction](API\Runtime\Core\GenericPlatform\TFunction)< FVector3d(const FVector3d &)> & TransformF, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & OtherTreeOptions ) const


description: Total sum of volumes of all boxes in the tree. Mainly useful to evaluate tree quality.

code: double TotalVolume()


code: virtual bool TestSelfIntersection ( bool bIgnoreTopoConnected, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description: Traversal implementation. you can override to customize this if necessary.

code: virtual void TreeTraversalImpl ( int IBox, int Depth, [FTreeTraversal](API\Runtime\GeometryCore\Spatial\TMeshAABBTree3\FTreeTraversal) & Traversal, const [FQueryOptions](API\Runtime\GeometryCore\Spatial\IMeshSpatial\FQueryOptions) & Options ) const


description:
Standard tri tri intersection test (with computing intersection geometry)
true if triangles were intersecting

code: static bool TriangleIntersection ( [FIntrTriangle3Triangle3d](API\Runtime\GeometryCore\Intersection\FIntrTriangle3Triangle3d) & Intr )


description: Standard tri tri intersection test (without computing intersection geometry)

code: static bool TriangleIntersectionFilter ( const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & A, const [FTriangle3d](API\Runtime\GeometryCore\FTriangle3d) & B )


code: TMeshAABBTree3 ( const TriangleMeshType * SourceMesh, bool bAutoBuild )


code: template<class TriangleMeshType> class TMeshAABBTree3 : public [UE::Geometry::IMeshSpatial](API\Runtime\GeometryCore\Spatial\IMeshSpatial)

BoxEps

description: TODO: move BoxEps toIMeshSpatial::FQueryOptions.

BoxToIndex

description: Storage for Box Nodes.

GetSplitAxis

type: GetSplitAxisFun...

IndexList

description: List of indices for a given Box.

Mesh

type: const TriangleM...

RootIndex

description: BoxToIndex[RootIndex] is the root node of the tree.

TrianglesEnd

description: IndexList[i] for i < TrianglesEnd is a triangle-index list, otherwise Box-index pair/single.


className: ENestingMethod

code: enum ENestingMethod { InLargestParent, InSmallestParent, }


code: TMeshSpatialSort ( [TArrayView](API\Runtime\Core\Containers\TArrayView)< const TriangleMeshType > InputMeshes, [TArrayView](API\Runtime\Core\Containers\TArrayView)< const [FAxisAlignedBox3d](API\Runtime\GeometryCore\FAxisAlignedBox3d) > MeshBoundsIn )


className: FMeshNesting

description: Outputs.

code: struct FMeshNesting

InnerIndices

type: TArray< int >


className: TMeshSpatialSort

description: For similar functionality in 2D, see theTPlanarComplexclass

code: template<class TriangleMeshType> class TMeshSpatialSort

bOnlyCheckSingleVertexForNesting

description: If true, we assume meshes don't intersect, so we can check if a whole mesh is inside another by testing a single vertex If false, we only consider a mesh inside another ifeveryvertex of the smaller is inside the larger

bOnlyNestNegativeVolumes

description: If true, only negative-volume meshes can be nested (i.e., can be included in anFMeshNestingInnerIndices array)

bOnlyParentPostiveVolumes

description: If true, only positive-volume meshes can be assigned the "OuterIndex" of anFMeshNestingLeads to more logical nesting, but note: if true, a negative volume that isn't inside any positive volume mesh will not show up in any nests at all

InputMeshes

type: TArrayView< con...

description: Meshes to be spatially sorted

MeshBounds

type: TArray<FAxisAl...

description: Optional array of bounding boxes for each mesh

NestingMethod

type: ENestingMethod

description: Which algorithm is used to determine nesting

Nests

type: TArray<FMeshNe...

description: Computed nests

SkippedMeshIndices

description: Indices of meshes that are not included in the "Nests" output, e.g. negative-volume meshes that are not inside any positive-volume mesh if bOnlyParentPostiveVolumes


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


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


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


className: EComputeModes

description: Should we compute MWN at all grid cells (expensive!!) or only in narrow band. In narrow-band mode, we guess rest of MWN values by propagating along x-rows

code: enum EComputeModes { FullGrid = 0, NarrowBand = 1, }


code: TMeshWindingNumberGrid ( const TriangleMeshType * Mesh, [TFastWindingTree](API\Runtime\GeometryCore\CompGeom\TFastWindingTree)< TriangleMeshType > * FastWinding, double CellSize )


className: TMeshWindingNumberGrid

description: TODO:

code: template<class TriangleMeshType> class TMeshWindingNumberGrid

BufferCells

type: int

description: How many cells around border should we keep

bWantMeshSDFGrid

type: bool

description: In NarrowBand mode, we compute mesh SDF grid; if true then it can be accessed via SDFGrid function afterCompute()

CancelF

type: TFunction< bool...

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

CellSize

type: double

description: Size of cubes in the grid

ComputeMode

type: EComputeModes

FastWinding

type: TFastWindingTre...

GridOrigin

description: Computed results

MeshSDF

type: TSweepingMeshSD...

description: SDF grid we compute in narrow-band mode.

WindingIsoValue

type: float

description: In narrow-band mode, if mesh is not closed, we will explore space around this MWN iso-value


description:
Find nearest point in grid, within a given sphere, without locking / thread-safety.
the found pair (Value,DistanceFunc(Value)), or (InvalidValue,MaxDouble) if not found

code: TPair< PointDataType, RealType > FindNearestInRadius ( const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & QueryPoint, RealType Radius, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< RealType(const PointDataType &)> DistanceSqFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const PointDataType &)> IgnoreFunc ) const


description: Invalid grid value

code: PointDataType GetInvalidValue() const


description: Insert at given position, without locking / thread-safety

code: void InsertPointUnsafe ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & Position )


description: Insert at given position. This function is thread-safe.

code: void InsertPoint ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & Position )


description:
Remove at given position, without locking / thread-safety
true if the value existed at this position

code: bool RemovePointUnsafe ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & Position )


description:
Remove at given position. This function is thread-safe.
true if the value existed at this position

code: bool RemovePoint ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & Position )


description: Move value from old to new position. This function is thread-safe.

code: void UpdatePoint ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & OldPosition, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & NewPosition )


description: Move value from old to new position, without locking / thread-safety

code: void UpdatePointUnsafe ( const PointDataType & Value, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & OldPosition, const [TVector2](API\Runtime\Core\Math\TVector2)< RealType > & NewPosition )


description: Construct 2D hash grid

code: TPointHashGrid2 ( RealType cellSize, PointDataType InvalidValue )


description: We don't store copies of the 2D points. You provide a point_data type. This could just be the integer index into your list for example, a pointer to something more complex, etc. Insert and Remove functions require you to pass in the 2D point for the point_data. To Update a point you need to know its old and new 2D coordinates.

code: template<typename PointDataType, typename RealType> class TPointHashGrid2


code: typedef [TPointHashGrid2](API\Runtime\GeometryCore\Spatial\TPointHashGrid2)< PointDataType, double > TPointHashGrid2d


code: typedef [TPointHashGrid2](API\Runtime\GeometryCore\Spatial\TPointHashGrid2)< PointDataType, float > TPointHashGrid2f


code: TPair< PointDataType, RealType > FindAnyInRadius ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & QueryPoint, RealType Radius, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< RealType(const PointDataType &)> DistanceSqFunc ) const


description:
Find any point within radius. Note: Not thread-safe to update, remove or insert points during this query.
the found pair (Value,DistanceSqFunc(Value)), or (InvalidValue,MaxDouble) if not found

code: TPair< PointDataType, RealType > FindAnyInRadius ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & QueryPoint, RealType Radius, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< RealType(const PointDataType &)> DistanceSqFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const PointDataType &)> IgnoreFunc ) const


code: TPair< PointDataType, RealType > FindNearestInRadius ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & QueryPoint, RealType Radius, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< RealType(const PointDataType &)> DistanceSqFunc ) const


description:
Find nearest point within radius. Note: Not thread-safe to update, remove or insert points during this query.
the found pair (Value,DistanceSqFunc(Value)), or (InvalidValue,MaxDouble) if not found

code: TPair< PointDataType, RealType > FindNearestInRadius ( const [TVector](API\Runtime\Core\Math\TVector)< RealType > & QueryPoint, RealType Radius, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< RealType(const PointDataType &)> DistanceSqFunc, [TFunctionRef](API\Runtime\Core\GenericPlatform\TFunctionRef)< bool(const PointDataType &)> IgnoreFunc ) const