14 template <
typename TPayloadType,
typename T>
class THierarchicalSpatialHash;
16 template<
typename T>
struct TTriangleCollisionPoint;
20 class FPBDFlatWeightMap;
81 MNumIndices = EndIdx - StartIdx + 1;
129 for (
int32 i = 1; i < N; ++i)
164 template <
typename T>
166 template <
typename T>
181 template <
typename T>
266 template <
typename T>
272 Particles.
X(Idx + 0) =
FVec3((T)0., (T)0.8083, (T)0.);
273 Particles.
X(Idx + 1) =
FVec3((T)0.7, (T)-0.4041, (T)0.);
274 Particles.
X(Idx + 2) =
FVec3((T)-0.7, (T)-0.4041, (T)0.);
282 template <
typename T>
288 Particles.
SetX(Idx + 0,
FVec3((T)0., (T)0., (T)0.8083));
289 Particles.
SetX(Idx + 1,
FVec3((T)0., (T)0.7, (T)-0.4041));
290 Particles.
SetX(Idx + 2,
FVec3((T)0., (T)-0.7, (T)-0.4041));
364 mutable FSegmentMesh MSegmentMesh;
372 template <
typename T>
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition SegmentMesh.h:18
Definition TriangleMesh.h:24
CHAOS_API void ResetAuxiliaryStructures()
Definition TriangleMesh.cpp:226
CHAOS_API TArray< FReal > GetCurvatureOnEdges(const TArray< FVec3 > &faceNormals)
Definition TriangleMesh.cpp:1061
CHAOS_API const TArray< TVec2< int32 > > & GetEdgeToFaces() const
Note that this data is lazily calculated with the SegmentMesh (this method is not threadsafe unless i...
Definition TriangleMesh.cpp:917
CHAOS_API bool PointProximityQuery(const TSpatialHashType< FRealSingle > &SpatialHash, const TConstArrayView< TVec3< FRealSingle > > &Points, const int32 PointIndex, const TVec3< FRealSingle > &PointPosition, const FRealSingle PointThickness, const Softs::FPBDFlatWeightMap &ThisThicknesses, const FRealSingle ThisThicknessExtraMultiplier, int32 ThicknessMapIndexOffset, TFunctionRef< bool(const int32 PointIndex, const int32 TriangleIndex)> BroadphaseTest, TArray< TTriangleCollisionPoint< FRealSingle > > &Result) const
FORCEINLINE TSet< int32 > GetNRing(const int32 Element, const int32 N) const
Definition TriangleMesh.h:119
int32 GetNumIndices() const
Definition TriangleMesh.h:56
CHAOS_API void GetPointNormals(TArrayView< TVec3< T > > PointNormals, const TConstArrayView< TVec3< T > > &FaceNormals, const bool bUseGlobalArray) const
Get per-point normals. This const version of this function requires GetPointToTriangleMap() to be cal...
CHAOS_API TArray< FReal > GetCurvatureOnPoints(const TArray< FReal > &edgeCurvatures)
Definition TriangleMesh.cpp:1090
FORCEINLINE const TArray< TVec3< int32 > > & GetSurfaceElements() const &
Definition TriangleMesh.h:98
bool EdgeIntersectionQuery(const TBVHType< T > &BVH, const TConstArrayView< TVec3< T > > &Points, const int32 EdgeIndex, const TVec3< T > &EdgePosition1, const TVec3< T > &EdgePosition2, TFunctionRef< bool(const int32 EdgeIndex, const int32 TriangleIndex)> BroadphaseTest, TArray< TTriangleCollisionPoint< T > > &Result) const
Definition TriangleMesh.cpp:1675
static FORCEINLINE void InitEquilateralTriangleYZ(FTriangleMesh &TriMesh, TParticles< T, 3 > &Particles)
Definition TriangleMesh.h:283
CHAOS_API TSet< int32 > GetVertices() const
Definition TriangleMesh.cpp:252
CHAOS_API void RemapVertices(const TArray< int32 > &Order)
Reorder vertices according to.
Definition TriangleMesh.cpp:1514
FTriangleMesh(const FTriangleMesh &Other)=delete
CHAOS_API TArray< Chaos::TVec2< int32 > > GetUniqueAdjacentPoints() const
Definition TriangleMesh.cpp:332
CHAOS_API FTriangleMesh()
Definition TriangleMesh.cpp:152
FORCEINLINE int32 GetNumElements() const
Definition TriangleMesh.h:111
CHAOS_API TConstArrayView< TArray< int32 > > GetPointToTriangleMap() const
Definition TriangleMesh.cpp:316
CHAOS_API TMap< int32, int32 > FindCoincidentVertexRemappings(const TArray< int32 > &TestIndices, const TConstArrayView< FVec3 > &Points)
Definition TriangleMesh.cpp:943
CHAOS_API TArray< FVec3 > GetPointNormals(const TConstArrayView< FVec3 > &points, const bool ReturnEmptyOnError=true, const bool bUseGlobalArray=false)
Definition TriangleMesh.cpp:464
CHAOS_API void RemoveDegenerateElements()
Definition TriangleMesh.cpp:1591
static CHAOS_API FTriangleMesh GetConvexHullFromParticles(const TConstArrayView< FVec3 > &points)
Definition TriangleMesh.cpp:650
CHAOS_API ~FTriangleMesh()
Definition TriangleMesh.cpp:169
FORCEINLINE TArray< TVec3< int32 > > GetElements() &&
Definition TriangleMesh.h:96
CHAOS_API TArray< Chaos::TVec4< int32 > > GetUniqueAdjacentElements() const
Definition TriangleMesh.cpp:344
CHAOS_API void Init(TArray< TVec3< int32 > > &&Elements, const int32 StartIdx=0, const int32 EndIdx=-1, const bool CullDegenerateElements=true)
Definition TriangleMesh.cpp:172
FORCEINLINE TArray< TVec3< int32 > > GetSurfaceElements() &&
Definition TriangleMesh.h:109
FORCEINLINE const TArray< int32 > & GetCoincidentTriangles(const int32 Element) const
Definition TriangleMesh.h:117
FORCEINLINE const TSet< int32 > & GetNeighbors(const int32 Element) const
Definition TriangleMesh.h:114
CHAOS_API void BuildSpatialHash(const TConstArrayView< TVec3< T > > &Points, TSpatialHashType< T > &SpatialHash, const T MinSpatialLodSize=(T) 0.) const
static FORCEINLINE void InitEquilateralTriangleXY(FTriangleMesh &TriMesh, TParticles< T, 3 > &Particles)
Definition TriangleMesh.h:267
CHAOS_API const TMap< int32, TSet< int32 > > & GetPointToNeighborsMap() const
Definition TriangleMesh.cpp:289
CHAOS_API bool PointProximityQuery(const TSpatialHashType< T > &SpatialHash, const TConstArrayView< TVec3< T > > &Points, const int32 PointIndex, const TVec3< T > &PointPosition, const T PointThickness, const T ThisThickness, TFunctionRef< bool(const int32 PointIndex, const int32 TriangleIndex)> BroadphaseTest, TArray< TTriangleCollisionPoint< T > > &Result) const
static FORCEINLINE FTriangleMesh GetConvexHullFromParticles(const FParticles &InParticles)
Definition TriangleMesh.h:188
CHAOS_API const TArray< TVec3< int32 > > & GetFaceToEdges() const
Note that this data is lazily calculated with the SegmentMesh (this method is not threadsafe unless i...
Definition TriangleMesh.cpp:911
FORCEINLINE TArray< FVec3 > GetFaceNormals(const FParticles &InParticles, const bool ReturnEmptyOnError=true) const
Definition TriangleMesh.h:168
CHAOS_API void GetVertexSetAsArray(TArray< int32 > &VertexSet) const
Definition TriangleMesh.cpp:269
void BuildBVH(const TConstArrayView< TVec3< T > > &Points, TBVHType< T > &BVH) const
Definition TriangleMesh.cpp:1609
FORCEINLINE const TArray< TVec3< int32 > > & GetElements() const &
Definition TriangleMesh.h:85
CHAOS_API void BuildSpatialHash(const TConstArrayView< TVec3< FRealSingle > > &Points, TSpatialHashType< FRealSingle > &SpatialHash, const Softs::FPBDFlatWeightMap &PointThicknesses, int32 ThicknessMapIndexOffset, const FRealSingle MinSpatialLodSize=0.f) const
FORCEINLINE TArray< FVec3 > GetPointNormals(const FParticles &InParticles, const bool ReturnEmptyOnError=true)
Definition TriangleMesh.h:172
FORCEINLINE void ExpandVertexRange(const int32 StartIdx, const int32 EndIdx)
Definition TriangleMesh.h:75
CHAOS_API bool PointClosestTriangleQuery(const TSpatialHashType< T > &SpatialHash, const TConstArrayView< TVec3< T > > &Points, const int32 PointIndex, const TVec3< T > &PointPosition, const T PointThickness, const T ThisThickness, TFunctionRef< bool(const int32 PointIndex, const int32 TriangleIndex)> BroadphaseTest, TArray< TTriangleCollisionPoint< T > > &Result) const
CHAOS_API TArray< TVec3< T > > GetFaceNormals(const TConstArrayView< TVec3< T > > &Points, const bool ReturnEmptyOnError=true) const
CHAOS_API void GetFaceNormals(TArray< TVec3< T > > &Normals, const TConstArrayView< TVec3< T > > &Points, const bool ReturnEmptyOnError=true) const
CHAOS_API TSet< int32 > GetBoundaryPoints()
Definition TriangleMesh.cpp:924
CHAOS_API const FSegmentMesh & GetSegmentMesh() const
Note that the SegmentMesh is lazily calculated (this method is not threadsafe unless it is known that...
Definition TriangleMesh.cpp:836
bool SmoothProject(const TBVHType< T > &BVH, const TConstArrayView< FVec3 > &Points, const TArray< FVec3 > &PointNormals, const FVec3 &Point, int32 &TriangleIndex, FVec3 &Weights, const int32 MaxIters=10) const
Returns false if Point is outside of the smooth normal cone, where a smooth projection doesn't exist.
Definition TriangleMesh.cpp:1723
bool PointProximityQuery(const TBVHType< T > &BVH, const TConstArrayView< TVec3< T > > &Points, const int32 PointIndex, const TVec3< T > &PointPosition, const T PointThickness, const T ThisThickness, TFunctionRef< bool(const int32 PointIndex, const int32 TriangleIndex)> BroadphaseTest, TArray< TTriangleCollisionPoint< T > > &Result) const
Definition TriangleMesh.cpp:1624
CHAOS_API void RemoveDuplicateElements()
Definition TriangleMesh.cpp:1570
CHAOS_API TArray< int32 > GetVertexImportanceOrdering(const TConstArrayView< FVec3 > &Points, const TArray< FReal > &PointCurvatures, TArray< int32 > *CoincidentVertices=nullptr, const bool RestrictToLocalIndexRange=false)
Definition TriangleMesh.cpp:1180
CHAOS_API void GetVertexSet(TSet< int32 > &VertexSet) const
Definition TriangleMesh.cpp:259
CHAOS_API TVec2< int32 > GetVertexRange() const
Definition TriangleMesh.cpp:247
int32 GetStartIndex() const
Definition TriangleMesh.h:52
Definition PBDFlatWeightMap.h:98
Definition AABBTree.h:786
uint32 Size() const
Definition ArrayCollection.h:66
Definition HierarchicalSpatialHash.h:214
Definition Particles.h:32
void AddParticles(const int32 Num)
Definition Particles.h:70
const TArrayCollectionArray< TVector< T, d > > & X() const
Definition Particles.h:117
void SetX(const int32 Index, const TVector< T, d > &InX)
Definition Particles.h:161
Definition Archive.h:1208
Definition ArrayView.h:139
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition SkeletalMeshComponent.h:307
void Order(int32 &A, int32 &B)
Definition TriangleMesh.cpp:792
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
Definition AABBTree.h:260
Data returned by TriangleMesh point-triangle and edge-edge queries.
Definition TriangleCollisionPoint.h:17