14 template<
typename T_INDEX>
21 static_assert(
TIsSigned<T_INDEX>::Value,
"The default TConvexStructureIndexTraits implementation is only valid for signed T_INDEX");
36 template<
typename T_INDEX>
58 return Ar <<
Value.FirstHalfEdgeIndex <<
Value.NumHalfEdges;
75 return Ar <<
Value.PlaneIndex <<
Value.VertexIndex <<
Value.TwinHalfEdgeIndex;
87 return Ar <<
Value.FirstHalfEdgeIndex;
112 return StructureData;
118 int32 HalfEdgeCount = 0;
129 bool IsValid()
const {
return Planes.Num() > 0; }
264 template<
typename FVisitorType>
287 template<
typename FVisitorType>
339 int32 HalfEdgeCount = 0;
353 HalfEdges.SetNum(HalfEdgeCount);
364 for (
int32 VertexIndex = 0; VertexIndex < Vertices.Num(); ++VertexIndex)
398 if (Vertices[VertexIndex0].FirstHalfEdgeIndex ==
InvalidIndex)
407 VertexPlanes[VertexIndex0].PlaneIndices[VertexPlanes[VertexIndex0].NumPlaneIndices++] = (
FIndex)PlaneIndex;
426 HalfEdges[
HalfEdgeIndex].TwinHalfEdgeIndex = TwinHalfEdgeIndex;
431 if(VertexIndex0 < HalfEdges[HalfEdges[
HalfEdgeIndex].TwinHalfEdgeIndex].VertexIndex)
446 int32 HalfEdgeCount = 0;
460 HalfEdges.SetNum(HalfEdgeCount);
464 for (
int32 VertexIndex = 0; VertexIndex < Vertices.Num(); ++VertexIndex)
496 if (Vertices[VertexIndex0].FirstHalfEdgeIndex ==
InvalidIndex)
552 BuildUniqueEdgeList();
573 if (Ar.
IsLoading() && (Edges.
Num() == 0) && (HalfEdges.Num() > 0))
575 BuildUniqueEdgeList();
598 static constexpr int32 SizeOfPlanes() {
return sizeof(TConvexHalfEdgeStructureData::Planes); }
600 static constexpr int32 SizeOfHalfEdges() {
return sizeof(TConvexHalfEdgeStructureData::HalfEdges); }
602 static constexpr int32 SizeOfVertices() {
return sizeof(TConvexHalfEdgeStructureData::Vertices); }
604 static constexpr int32 SizeOfEdges() {
return sizeof(TConvexHalfEdgeStructureData::Edges); }
643 void BuildUniqueEdgeList()
665 void BuildVertexPlanes()
667 VertexPlanes.SetNum(Vertices.Num());
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
Definition ConvexHalfEdgeStructureData.h:38
int32 GetVertexPlanes3(int32 VertexIndex, int32 &PlaneIndex0, int32 &PlaneIndex1, int32 &PlaneIndex2) const
Definition ConvexHalfEdgeStructureData.h:326
friend class FVertexPlaneIterator
Definition ConvexHalfEdgeStructureData.h:47
FPlaneData & GetPlane(int32 PlaneIndex)
Definition ConvexHalfEdgeStructureData.h:137
void Serialize(FArchive &Ar)
Definition ConvexHalfEdgeStructureData.h:557
int32 GetPlaneVertex(int32 PlaneIndex, int32 PlaneVertexIndex) const
Definition ConvexHalfEdgeStructureData.h:173
int32 GetEdgePlane(int32 EdgeIndex, int32 EdgePlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:242
static const int32 MaxIndex
Definition ConvexHalfEdgeStructureData.h:45
FVertexData & GetVertex(int32 VertexIndex)
Definition ConvexHalfEdgeStructureData.h:142
int32 NumEdges() const
Definition ConvexHalfEdgeStructureData.h:135
int32 GetHalfEdgeIndex(int32 EdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:141
const FHalfEdgeData & GetHalfEdge(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:140
const FPlaneData & GetPlane(int32 PlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:138
FHalfEdgeData & GetHalfEdge(int32 HalfEdgeIndex)
Definition ConvexHalfEdgeStructureData.h:139
bool BuildRegularDatas(const TArray< TArray< int32 > > &InPlaneVertices, int32 InNumVertices)
Definition ConvexHalfEdgeStructureData.h:336
int32 GetPlaneHalfEdge(int32 PlaneIndex, int32 PlaneEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:155
int32 GetEdgeVertex(int32 EdgeIndex, int32 EdgeVertexIndex) const
Definition ConvexHalfEdgeStructureData.h:226
T_INDEX FIndex
Definition ConvexHalfEdgeStructureData.h:40
void VisitVertexHalfEdges(int32 VertexIndex, const FVisitorType &Visitor) const
Definition ConvexHalfEdgeStructureData.h:288
int32 NumPlaneHalfEdges(int32 PlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:146
int32 GetHalfEdgePlane(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:181
int32 GetHalfEdgeVertex(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:188
static bool CanMake(const TArray< TArray< int32 > > &InPlaneVertices, int32 InNumVertices)
Definition ConvexHalfEdgeStructureData.h:116
int32 NumHalfEdges() const
Definition ConvexHalfEdgeStructureData.h:131
void VisitPlaneEdges(int32 PlaneIndex, const FVisitorType &Visitor) const
Definition ConvexHalfEdgeStructureData.h:265
bool IsValid() const
Definition ConvexHalfEdgeStructureData.h:129
int32 GetTwinHalfEdge(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:195
int32 NumPlanes() const
Definition ConvexHalfEdgeStructureData.h:130
int32 GetVertexFirstHalfEdge(int32 VertexIndex) const
Definition ConvexHalfEdgeStructureData.h:256
bool SetPlaneVertices(const TArray< TArray< int32 > > &InPlaneVertices, int32 InNumVertices)
Definition ConvexHalfEdgeStructureData.h:443
int32 NumPlaneVertices(int32 PlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:164
int32 FindVertexPlanes(int32 VertexIndex, int32 *PlaneIndices, int32 MaxVertexPlanes) const
Definition ConvexHalfEdgeStructureData.h:309
int32 GetPrevHalfEdge(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:203
const FVertexData & GetVertex(int32 VertexIndex) const
Definition ConvexHalfEdgeStructureData.h:143
static const FIndex InvalidIndex
Definition ConvexHalfEdgeStructureData.h:44
friend FArchive & operator<<(FArchive &Ar, FConvexHalfEdgeStructureData &Value)
Definition ConvexHalfEdgeStructureData.h:585
static FConvexHalfEdgeStructureData MakePlaneVertices(const TArray< TArray< int32 > > &InPlaneVertices, int32 InNumVertices)
Definition ConvexHalfEdgeStructureData.h:108
int32 GetNextHalfEdge(int32 HalfEdgeIndex) const
Definition ConvexHalfEdgeStructureData.h:214
int32 NumVertices() const
Definition ConvexHalfEdgeStructureData.h:132
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
UE_REWRITE SizeType Num() const
Definition Array.h:1144
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 Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition SkeletalMeshComponent.h:307
const FName VertexIndex("VertexIndex")
Definition MeshAttributes.h:28
Definition ConvexHalfEdgeStructureData.h:68
FIndex TwinHalfEdgeIndex
Definition ConvexHalfEdgeStructureData.h:71
FIndex PlaneIndex
Definition ConvexHalfEdgeStructureData.h:69
friend FArchive & operator<<(FArchive &Ar, FHalfEdgeData &Value)
Definition ConvexHalfEdgeStructureData.h:73
FIndex VertexIndex
Definition ConvexHalfEdgeStructureData.h:70
Definition ConvexHalfEdgeStructureData.h:52
FIndex FirstHalfEdgeIndex
Definition ConvexHalfEdgeStructureData.h:53
friend FArchive & operator<<(FArchive &Ar, FPlaneData &Value)
Definition ConvexHalfEdgeStructureData.h:56
FIndex NumHalfEdges
Definition ConvexHalfEdgeStructureData.h:54
Definition ConvexHalfEdgeStructureData.h:82
friend FArchive & operator<<(FArchive &Ar, FVertexData &Value)
Definition ConvexHalfEdgeStructureData.h:85
FIndex FirstHalfEdgeIndex
Definition ConvexHalfEdgeStructureData.h:83
Definition ConvexHalfEdgeStructureData.h:101
FIndex HalfEdgeIndices[3]
Definition ConvexHalfEdgeStructureData.h:102
FIndex NumHalfEdgeIndices
Definition ConvexHalfEdgeStructureData.h:103
Definition ConvexHalfEdgeStructureData.h:94
FIndex PlaneIndices[3]
Definition ConvexHalfEdgeStructureData.h:95
FIndex NumPlaneIndices
Definition ConvexHalfEdgeStructureData.h:96
@ ChaosConvexHasUniqueEdgeSet
Definition PhysicsObjectVersion.h:52
CORE_API static const FGuid GUID
Definition PhysicsObjectVersion.h:78
Definition NumericLimits.h:41