6#include "Containers/Array.h"
8#include "Containers/Map.h"
25template<
class TriangleMeshType>
26class TFastWindingTree;
126 return AppliedScaleFactor;
132 RescaleSettings(ScaleFactor);
142 return ResultTransform;
162 return WorldSD * AppliedScaleFactor;
168 double AppliedScaleFactor = 1;
173 void RescaleSettings(
double ScaleFactor)
178 AppliedScaleFactor *= ScaleFactor;
189 return Position.Num();
194 return Position[Idx];
204 Radius[Idx] = UpdateRadius;
215 UE_DEPRECATED(5.4,
"Use the version of this function with a bHasFlippedTriangles parameter")
229 Position.Append(
Other.Position);
236 for (
int32 Idx = 0; Idx < Radius.
Num(); ++Idx)
238 if (Radius[Idx] < MinRadius)
255 Position[Idx +
OrigCount] = Spheres[Idx].Center;
256 Radius[Idx +
OrigCount] = Spheres[Idx].W;
270 TransformRange(0, Position.Num(),
Transform);
278 Position.Append(
Other.Position);
291 for (
int32 Idx = Start; Idx <
Max; ++Idx)
293 Position[Idx] =
Transform.TransformPosition(Position[Idx]);
295 double RadiusScale =
Transform.GetScale3D().GetAbsMin();
296 for (
int32 Idx = Start; Idx <
Max; ++Idx)
298 Radius[Idx] *= RadiusScale;
346 if (!
ensureMsgf(
Decomposition.Num() == 1 && !
Decomposition[0].IsCompact(),
TEXT(
"This method must be called after initializing with the input mesh, and before the decomposition has been computed.")))
509 GEOMETRYCORE_API int32 MergeBest(
int32 TargetNumParts,
double ErrorTolerance = 0,
double MinThicknessTolerance = 0,
bool bAllowCompact =
true,
bool bRequireHullTriangles =
false,
int32 MaxOutputHulls = -1,
528 if (!
ensure(ScaleFactor >= FMathd::Epsilon))
530 ScaleFactor = FMathd::Epsilon;
562 template<
typename RealType>
698 double MaxDist = -FMathd::MaxReal;
699 for (
int32 Idx = 0; Idx < NumPlanes; Idx++)
763 return FMathd::MaxReal;
820 return NegativeSpace;
826 void InitNegativeSpaceConvexPartMapping();
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
double HullVolumes[2]
Definition ConvexDecomposition3.cpp:818
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::Math::TVector< double > FVector3d
Definition MathFwd.h:60
const bool
Definition NetworkReplayStreaming.h:178
#define UE_DOUBLE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:140
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT void RemoveAtSwap(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2185
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Append(const TArray< OtherElementType, OtherAllocatorType > &Source)
Definition Array.h:2412
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition IndirectArray.h:20
Definition FunctionFwd.h:19
Definition ConvexDecomposition3.h:306
int32 RestrictMergeSearchToLocalAfterTestNumConnections
Definition ConvexDecomposition3.h:440
bool bSplitDisconnectedComponents
Definition ConvexDecomposition3.h:429
double ConnectedComponentTolerance
Definition ConvexDecomposition3.h:408
GEOMETRYCORE_API void InitializeProximityFromDecompositionBoundingBoxOverlaps(double BoundsExpandByMinDimFactor, double BoundsExpandByMaxDimFactor, double MinBoundsExpand)
Definition ConvexDecomposition3.cpp:2338
const int32 GetHullSourceID(int32 HullIdx) const
Definition ConvexDecomposition3.h:604
double ConvertDistanceToleranceToLocalSpace(double DistTolerance) const
Definition ConvexDecomposition3.h:525
double ConvexEdgeAngleMoreSamplesThreshold
Definition ConvexDecomposition3.h:416
const FDynamicMesh3 & GetInternalMesh(int32 HullIdx) const
Definition ConvexDecomposition3.h:599
GEOMETRYCORE_API void InitializeFromMesh(const FDynamicMesh3 &SourceMesh, bool bMergeEdges)
Definition ConvexDecomposition3.cpp:1584
const FSphereCovering & GetNegativeSpace() const
Definition ConvexDecomposition3.h:818
TArray< TVector< RealType > > GetVertices(int32 HullIdx, bool bTransformedToOutput=true) const
Definition ConvexDecomposition3.h:563
int32 MaxConvexEdgePlanes
Definition ConvexDecomposition3.h:426
const int32 CountMergedParts() const
Definition ConvexDecomposition3.h:609
TIndirectArray< FConvexPart > Decomposition
Definition ConvexDecomposition3.h:731
bool IsInputSolid()
Definition ConvexDecomposition3.h:344
FDynamicMesh3 GetHullMesh(int32 HullIdx) const
Definition ConvexDecomposition3.h:577
int32 NumHulls() const
Definition ConvexDecomposition3.h:551
GEOMETRYCORE_API void UpdateProximitiesAfterSplit(int32 SplitIdx, int32 NewIdxStart, FPlane3d CutPlane, int32 SecondSideIdxStart, double OrigHullVolume)
Definition ConvexDecomposition3.cpp:2177
double OnPlaneTolerance
Definition ConvexDecomposition3.h:410
FConvexDecomposition3(const FDynamicMesh3 &SourceMesh, const FPreprocessMeshOptions &Options)
Definition ConvexDecomposition3.h:335
double BiasToRemoveTooThinParts
Definition ConvexDecomposition3.h:422
double ConvexEdgeAngleThreshold
Definition ConvexDecomposition3.h:418
GEOMETRYCORE_API void DeleteProximity(TArray< int32 > &&ToRemove, bool bDeleteMapReferences)
Definition ConvexDecomposition3.cpp:2891
FConvexDecomposition3()
Definition ConvexDecomposition3.h:310
GEOMETRYCORE_API void InitializeFromHulls(int32 NumHulls, TFunctionRef< double(int32)> HullVolumes, TFunctionRef< int32(int32)> HullNumVertices, TFunctionRef< FVector3d(int32, int32)> HullVertices, TArrayView< const TPair< int32, int32 > > Proximity)
Definition ConvexDecomposition3.cpp:2299
static GEOMETRYCORE_API bool ConvexPartVsSphereOverlap(const FConvexPart &Part, FVector3d Center, double Radius, const FTransform *TransformIntoSphereSpace=nullptr, double *OutDistanceSq=nullptr)
Definition ConvexDecomposition3.cpp:102
TMultiMap< int32, int32 > DecompositionToProximity
Definition ConvexDecomposition3.h:786
FConvexDecomposition3(const FDynamicMesh3 &SourceMesh, bool bMergeEdges=true)
Definition ConvexDecomposition3.h:314
FTransformSRT3d ResultTransform
Transform taking the result hull vertices back to the original space of the inputs; automatically app...
Definition ConvexDecomposition3.h:734
double CutLargestAxisErrorScale
Definition ConvexDecomposition3.h:413
TArray< FIndex3i > const & GetTriangles(int32 HullIdx) const
Definition ConvexDecomposition3.h:557
GEOMETRYCORE_API int32 SplitWorst(bool bCanSkipUnreliableGeoVolumes=false, double ErrorTolerance=0.0, bool bOnlySplitIfNegativeSpaceCovered=false, double MinSplitSizeInWorldSpace=-1)
Definition ConvexDecomposition3.cpp:1874
GEOMETRYCORE_API bool InitializeNegativeSpace(const FNegativeSpaceSampleSettings &Settings, TArrayView< const FVector3d > RequestedSamples=TArrayView< const FVector3d >())
Definition ConvexDecomposition3.cpp:1713
double ProximityTolerance
Definition ConvexDecomposition3.h:406
TArray< FProximity > Proximities
Definition ConvexDecomposition3.h:783
GEOMETRYCORE_API void FixHullOverlapsInNegativeSpace(double NegativeSpaceTolerance=UE_DOUBLE_KINDA_SMALL_NUMBER, double NegativeSpaceMinRadius=UE_DOUBLE_KINDA_SMALL_NUMBER)
Definition ConvexDecomposition3.cpp:1747
GEOMETRYCORE_API void InitializeFromIndexMesh(TArrayView< const FVector3f > Vertices, TArrayView< const FIntVector > Faces, bool bMergeEdges, int32 FaceVertexOffset=0)
Definition ConvexDecomposition3.cpp:1692
GEOMETRYCORE_API int32 MergeBest(int32 TargetNumParts, double ErrorTolerance=0, double MinThicknessTolerance=0, bool bAllowCompact=true, bool bRequireHullTriangles=false, int32 MaxOutputHulls=-1, const FSphereCovering *OptionalNegativeSpace=nullptr, const FTransform *OptionalTransformIntoNegativeSpace=nullptr)
Definition ConvexDecomposition3.cpp:2380
double ThickenAfterHullFailure
Definition ConvexDecomposition3.h:436
double ConvertDistanceToleranceToLocalVolumeTolerance(double DistTolerance) const
Definition ConvexDecomposition3.h:517
bool bTreatAsSolid
Definition ConvexDecomposition3.h:432
void Compact()
Definition ConvexDecomposition3.h:539
Definition DynamicMesh3.h:108
GEOMETRYCORE_API int AppendVertex(const FVertexInfo &VertInfo)
Definition DynamicMesh3_Edits.cpp:9
GEOMETRYCORE_API void Clear()
Definition DynamicMesh3.cpp:446
Definition ConvexDecomposition3.h:184
void Reset()
Definition ConvexDecomposition3.h:221
FVector3d GetCenter(int32 Idx) const
Definition ConvexDecomposition3.h:192
void SetRadius(int32 Idx, double UpdateRadius)
Definition ConvexDecomposition3.h:202
double GetRadius(int32 Idx) const
Definition ConvexDecomposition3.h:197
void Append(const FSphereCovering &Other)
Definition ConvexDecomposition3.h:227
void RemoveSmaller(double MinRadius)
Definition ConvexDecomposition3.h:234
void AppendTransformed(const FSphereCovering &Other, const FTransform &Transform)
Definition ConvexDecomposition3.h:275
int32 Num() const
Definition ConvexDecomposition3.h:187
void AppendSpheres(TArrayView< const UE::Math::TSphere< double > > Spheres)
Definition ConvexDecomposition3.h:247
GEOMETRYCORE_API bool AddNegativeSpace(const TFastWindingTree< FDynamicMesh3 > &Spatial, const FNegativeSpaceSampleSettings &Settings, bool bHasFlippedTriangles)
Definition ConvexDecomposition3.cpp:249
void AddSphere(FVector3d InCenter, double InRadius)
Definition ConvexDecomposition3.h:260
void ApplyTransform(const FTransform &Transform)
Definition ConvexDecomposition3.h:268
Definition FastWinding.h:316
EConvexErrorMethod
Definition ConvexDecomposition3.h:30
Definition AdvancedWidgetsModule.cpp:13
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition ConvexDecomposition3.h:621
FAxisAlignedBox3d Bounds
Definition ConvexDecomposition3.h:677
TArray< FIndex3i > HullTriangles
Definition ConvexDecomposition3.h:665
double GeoVolume
Definition ConvexDecomposition3.h:674
bool bSplitFailed
Definition ConvexDecomposition3.h:679
TArray< int32 > OverlapsNegativeSpace
Definition ConvexDecomposition3.h:671
double SumHullsVolume
Definition ConvexDecomposition3.h:675
double GetHullDepth(FVector3d Pt)
Definition ConvexDecomposition3.h:690
FVector3d GeoCenter
Definition ConvexDecomposition3.h:676
void Compact()
Definition ConvexDecomposition3.cpp:1550
bool ComputeHull(bool bComputePlanes=true, double ThickenAfterHullFailureInLocalSpace=0.0)
Definition ConvexDecomposition3.cpp:1807
int32 HullSourceID
Definition ConvexDecomposition3.h:668
bool bFailed
Definition ConvexDecomposition3.h:722
double HullError
Definition ConvexDecomposition3.h:685
void ComputeStats()
Definition ConvexDecomposition3.cpp:1858
bool bGeometryVolumeUnreliable
Definition ConvexDecomposition3.h:678
TArray< FPlane3d > HullPlanes
Definition ConvexDecomposition3.h:666
void Reset()
Definition ConvexDecomposition3.h:632
bool bIsCompact
Definition ConvexDecomposition3.h:721
bool IsFailed() const
Definition ConvexDecomposition3.h:660
FConvexPart(bool bIsCompact)
Definition ConvexDecomposition3.h:629
FConvexPart()
Definition ConvexDecomposition3.h:622
bool bMustMerge
Definition ConvexDecomposition3.h:682
bool IsCompact() const
Definition ConvexDecomposition3.h:655
double HullVolume
Definition ConvexDecomposition3.h:674
void ComputeHullPlanes()
Definition ConvexDecomposition3.cpp:1838
FDynamicMesh3 InternalGeo
Definition ConvexDecomposition3.h:653
Definition ConvexDecomposition3.h:468
TFunction< void(int32, int32)> MergeCallback
Definition ConvexDecomposition3.h:491
TFunction< bool(const FConvexDecomposition3::FConvexPart &A, const FConvexDecomposition3::FConvexPart &B)> CustomAllowMergeParts
Definition ConvexDecomposition3.h:494
const FTransform * OptionalTransformIntoNegativeSpace
Definition ConvexDecomposition3.h:488
const FSphereCovering * OptionalNegativeSpace
Definition ConvexDecomposition3.h:486
bool bAllowCompact
Definition ConvexDecomposition3.h:481
bool bRequireHullTriangles
Definition ConvexDecomposition3.h:483
int32 TargetNumParts
Definition ConvexDecomposition3.h:470
double ErrorTolerance
Definition ConvexDecomposition3.h:472
int32 MaxOutputHulls
Definition ConvexDecomposition3.h:476
bool bErrorToleranceOverridesNumParts
Definition ConvexDecomposition3.h:474
double MinThicknessTolerance
Definition ConvexDecomposition3.h:479
Definition ConvexDecomposition3.h:320
double ThickenInputAfterHullFailure
Definition ConvexDecomposition3.h:327
TUniqueFunction< void(FDynamicMesh3 &Mesh, const FAxisAlignedBox3d &Bounds)> CustomPreprocess
Definition ConvexDecomposition3.h:332
bool bMergeEdges
Definition ConvexDecomposition3.h:322
Definition ConvexDecomposition3.h:739
constexpr double VolumeNotComputed() const
Definition ConvexDecomposition3.h:778
bool bPlaneSeparates
Definition ConvexDecomposition3.h:751
FProximity(const FIndex2i &Link, const FPlane3d &Plane, bool bPlaneSeparates)
Definition ConvexDecomposition3.h:741
bool HasMergedVolume() const
Definition ConvexDecomposition3.h:769
void ClearMergedVolume()
Definition ConvexDecomposition3.h:773
double GetMergeCost(const TIndirectArray< FConvexPart > &DecompositionIn) const
Definition ConvexDecomposition3.h:759
bool bIsValidLink
Definition ConvexDecomposition3.h:754
FPlane3d Plane
Definition ConvexDecomposition3.h:748
double MergedVolume
Definition ConvexDecomposition3.h:757
FIndex2i Link
Definition ConvexDecomposition3.h:744
Definition IndexTypes.h:27
int A
Definition IndexTypes.h:32
int B
Definition IndexTypes.h:32
Definition IndexTypes.h:158
Definition ConvexDecomposition3.h:38
void Sanitize()
Definition ConvexDecomposition3.h:146
void ApplyDefaults(EConfigDefaults Settings=EConfigDefaults::Latest)
Definition ConvexDecomposition3.h:62
double VoxelExpandBoundsFactor
Definition ConvexDecomposition3.h:108
bool bRequireSearchSampleCoverage
Definition ConvexDecomposition3.h:94
bool bAllowSamplesInsideMesh
Definition ConvexDecomposition3.h:105
int32 TargetNumSamples
Definition ConvexDecomposition3.h:76
double MinCustomMarginScale
Definition ConvexDecomposition3.h:121
bool bOnlyConnectedToHull
Definition ConvexDecomposition3.h:96
bool bDeterministic
Definition ConvexDecomposition3.h:100
double MinSpacing
Definition ConvexDecomposition3.h:79
double MarchingCubesGridScale
Definition ConvexDecomposition3.h:102
double MinRadius
Definition ConvexDecomposition3.h:88
ESampleMethod
Definition ConvexDecomposition3.h:45
FNegativeSpaceSampleSettings()=default
EConfigDefaults
Definition ConvexDecomposition3.h:56
int32 MaxVoxelsPerDim
Definition ConvexDecomposition3.h:98
double ObstacleDistance(const FVector3d &LocalPos) const
Definition ConvexDecomposition3.h:157
FNegativeSpaceSampleSettings(int32 TargetNumSamples, double MinSpacing, double ReduceRadiusMargin)
Definition ConvexDecomposition3.h:40
void Rescale(double ScaleFactor)
Definition ConvexDecomposition3.h:130
double ReduceRadiusMargin
Definition ConvexDecomposition3.h:85
void SetResultTransform(FTransform InResultTransform)
Definition ConvexDecomposition3.h:135
bool bAllowSamplesInsideSpheres
Definition ConvexDecomposition3.h:82
FTransform GetResultTransform() const
Definition ConvexDecomposition3.h:140
double GetAppliedScaleFactor() const
Definition ConvexDecomposition3.h:124
TFunction< double(const FDynamicMesh3 &Mesh, int32 NearTID, FVector3d QueryPos)> CustomRadiusMarginScale
Definition ConvexDecomposition3.h:117
ESampleMethod SampleMethod
Definition ConvexDecomposition3.h:73
TFunction< double(FVector Pos)> OptionalObstacleSDF
Definition ConvexDecomposition3.h:112
static TAxisAlignedBox3< double > Empty()
Definition BoxTypes.h:382
double DistanceTo(const UE::Math::TVector< RealType > &P) const
Definition PlaneTypes.h:88
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79
T GetMax() const
Definition Vector.h:1674
T X
Definition Vector.h:62