UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TopologicalFace.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Core/CADEntity.h"
5#include "Core/HaveStates.h"
6#include "Core/Types.h"
7#include "Geo/GeoEnum.h"
8#include "Geo/GeoPoint.h"
11#include "Math/Boundary.h"
12#include "Math/Curvature.h"
13#include "Math/Point.h"
18
21
22#ifdef CADKERNEL_DEV
23#include "UI/DefineForDebug.h"
24#endif
25
26namespace UE::CADKernel
27{
28
29class FCADKernelArchive;
30class FCriteriaGrid;
31class FCriterion;
32class FCurve;
33class FDatabase;
34class FModelMesh;
35class FTopologicalVertex;
36struct FSurfacicSampling;
37
38enum class EStatut : uint8
39{
40 Interior = 0,
42 Border
43};
44
45enum class EQuadType : uint8
46{
47 Unset = 0,
50 Other
51};
52
53struct FBBoxWithNormal;
54
56{
57 friend class FEntity;
58
59protected:
60
63
65
67
72
77
82
87
88 double EstimatedMinimalElementLength = DOUBLE_BIG_NUMBER;
89
96 , CarrierSurface(InCarrierSurface)
98 {
99 ResetElementStatus();
100 }
101
102 FTopologicalFace() = default;
103
107 void ComputeBoundary() const;
108
109public:
110
111 virtual ~FTopologicalFace() override
112 {
113 FTopologicalFace::Empty();
114 }
115
116 virtual void Serialize(FCADKernelArchive& Ar) override
117 {
118 FTopologicalShapeEntity::Serialize(Ar);
119 SerializeIdent(Ar, CarrierSurface);
120 SerializeIdents(Ar, (TArray<TSharedPtr<FEntity>>&) Loops);
121 }
122
123 virtual void SpawnIdent(FDatabase& Database) override;
124
125 virtual void ResetMarkersRecursively() const override
126 {
127 ResetMarkers();
128 ResetMarkersRecursivelyOnEntities(Loops);
129 CarrierSurface->ResetMarkersRecursively();
130 }
131
132#ifdef CADKERNEL_DEV
133 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
134#endif
135
136 virtual EEntity GetEntityType() const override
137 {
138 return EEntity::TopologicalFace;
139 }
140
142 {
143 return CarrierSurface->GetIsoTolerances();
144 }
145
146 double GetIsoTolerance(EIso Iso) const
147 {
148 return CarrierSurface->GetIsoTolerance(Iso);
149 }
150
152 {
153 if (!Boundary.IsValid())
154 {
155 ComputeBoundary();
156 }
157 return Boundary;
158 };
159
160 virtual int32 FaceCount() const override
161 {
162 return 1;
163 }
164
166 {
167 if (!HasMarker1())
168 {
169 OutFaces.Emplace(this);
170 SetMarker1();
171 }
172 }
173
174 virtual void CompleteMetaData() override
175 {
176 CompleteMetaDataWithHostMetaData();
177 }
178
179 virtual void PropagateBodyOrientation() override
180 {
181 }
182
183 // ====== Loop Functions ======
184
185 void RemoveLoop(const TSharedPtr<FTopologicalLoop>& Loop);
187 {
188 if (Loop.IsValid())
189 {
190 Loop->SetSurface(this);
191 Loops.Add(Loop);
192 }
193 }
194
199
204
209 void ApplyNaturalLoops();
210
215 void ApplyNaturalLoops(const FSurfacicBoundary& Boundaries);
216
218 {
219 return Loops.Num();
220 }
221
223 {
224 return Loops;
225 }
226
227 const TSharedPtr<FTopologicalLoop> GetExternalLoop() const;
228
233 const void Get2DLoopSampling(TArray<TArray<FVector2d>>& OutLoopSamplings) const;
234
235 // ====== Loop edge Functions ======
236
240 const FTopologicalEdge* GetLinkedEdge(const FTopologicalEdge& LinkedEdge) const;
241
248 void GetEdgeIndex(const FTopologicalEdge& Edge, int32& OutBoundaryIndex, int32& OutEdgeIndex) const;
249
253 void EdgeCount(int32& EdgeCount) const
254 {
255 for (const TSharedPtr<FTopologicalLoop>& Loop : Loops)
256 {
257 EdgeCount += Loop->GetEdges().Num();
258 }
259 }
260
266 {
267 for (const TSharedPtr<FTopologicalLoop>& Loop : Loops)
268 {
269 Loop->GetActiveEdges(OutEdges);
270 }
271 }
272
274 {
275 int32 EdgeNum = 0;
276 for (const TSharedPtr<FTopologicalLoop>& Loop : Loops)
277 {
278 EdgeNum += Loop->EdgeCount();
279 }
280 return EdgeNum;
281 }
282
283 // ====== Carrier Surface Functions ======
284
286 {
287 return CarrierSurface.ToSharedRef();
288 }
289
290 // ====== Point evaluation Functions ======
291
292 void EvaluatePointGrid(const FCoordinateGrid& Coordinates, FSurfacicSampling& OutPoints, bool bComputeNormals = false) const
293 {
294 CarrierSurface->EvaluatePointGrid(Coordinates, OutPoints, bComputeNormals);
295 }
296
297 void EvaluateGrid(FGrid& Grid) const;
298
303 void UpdateBBox(int32 IsoCount, const double ApproximationFactor, FBBoxWithNormal& BBox);
304
305 // ====== Topo Functions ======
306
311 {
312 Disjoin(NewBorderEdges);
313 Delete();
314 }
315
316 virtual void Empty() override
317 {
318#ifndef DONT_DELETE_FACE_FOR_DEBUG
319 CarrierSurface.Reset();
321 {
322 for (FOrientedEdge& Edge : Loop->GetEdges())
323 {
324 Edge.Entity->Delete();
325 }
326
327 Loop->Empty();
328 }
329 Loops.Empty();
330#endif
331
332 Mesh.Reset();
333 MeshCuttingCoordinates.Empty();
334 CrossingCoordinates.Empty();
335 CrossingPointDeltaMins.Empty();
336 CrossingPointDeltaMaxs.Empty();
337
338 SurfaceCorners.Empty();
339 StartSideIndices.Empty();
340 SideProperties.Empty();
341
342 FTopologicalShapeEntity::Empty();
343 }
344
346 bool IsANonManifoldFace() const;
347
349 bool IsABorderFace() const;
350
352 bool IsAFullyNonManifoldFace() const;
353
355 bool IsADuplicatedFace() const;
356
360 bool HasSameBoundariesAs(const FTopologicalFace* OtherFace) const;
361
366 void Disjoin(TArray<FTopologicalEdge*>* NewBorderEdges = nullptr);
367
372 void DeleteNonmanifoldLink();
373
374
375#ifdef CADKERNEL_DEV
376 virtual void FillTopologyReport(FTopologyReport& Report) const override;
377#endif
378
379 // ====== Meshing Function ======
380
381 FFaceMesh& GetOrCreateMesh(FModelMesh& ModelMesh);
382
383 const bool HasTesselation() const
384 {
385 return Mesh.IsValid();
386 }
387
389 {
390 if (Mesh.IsValid())
391 {
392 return Mesh.Get();
393 }
394 return nullptr;
395 }
396
397 void InitDeltaUs();
398
400 {
401 return MeshCuttingCoordinates[Iso];
402 }
403
405 {
406 return MeshCuttingCoordinates[Iso];
407 }
408
410 {
411 return MeshCuttingCoordinates;
412 }
413
415 {
416 return MeshCuttingCoordinates;
417 }
418
420 {
421 return CrossingCoordinates;
422 }
423
425 {
426 return CrossingCoordinates[Iso];
427 }
428
430 {
431 return CrossingCoordinates[Iso];
432 }
433
439 bool ComputeCriteriaGridSampling();
440
444 void ApplyCriteria(const TArray<TSharedPtr<FCriterion>>& Criteria, const FCriteriaGrid& Grid);
445
447 {
448 return CrossingPointDeltaMins[Iso];
449 }
450
452 {
453 return CrossingPointDeltaMaxs[Iso];
454 }
455
456 // ====== State, Type Functions ======
457
458 const EQuadType GetQuadType() const
459 {
460 return QuadType;
461 }
462
463 const bool HasThinZone() const
464 {
465 return ((States & EHaveStates::ThinZone) == EHaveStates::ThinZone);
466 }
467
469 {
470 States |= EHaveStates::ThinZone;
471 }
472
474 {
475 States &= ~EHaveStates::ThinZone;
476 }
477
478 bool IsBackOriented() const
479 {
481 }
482
483 void SwapOrientation() const
484 {
485 if (IsBackOriented())
486 {
487 ResetBackOriented();
488 }
489 else
490 {
491 SetBackOriented();
492 }
493 }
494
495 void SetBackOriented() const
496 {
498 }
499
500 void ResetBackOriented() const
501 {
503 }
504
505 virtual void Remove(const FTopologicalShapeEntity*) override
506 {
507 }
508
509 // ======================================================================================================================================================================================================================
510 // Thin zone properties ===============================================================================================================================================================================
511 // ======================================================================================================================================================================================================================
512private:
513 TArray<FThinZone2D> ThinZones;
514
515public:
520
522 {
523 return ThinZones;
524 }
525
527 {
528 return ThinZones;
529 }
530
531 // ======================================================================================================================================================================================================================
532 // Quad properties for meshing scheduling ===============================================================================================================================================================================
533 // ======================================================================================================================================================================================================================
534private:
536 TArray<int32> StartSideIndices;
537 TArray<FEdge2DProperties> SideProperties;
538 int32 NumOfMeshedSide = 0;
539 double LoopLength = -1.;
540 double LengthOfMeshedSide = 0;
541 double QuadCriteria = 0;
542 FSurfaceCurvature Curvatures;
543 EQuadType QuadType = EQuadType::Unset;
544
545public:
546 void ComputeQuadCriteria();
547 double GetQuadCriteria();
548
550 {
551 return Curvatures;
552 }
553
555 {
556 return Curvatures;
557 }
558
560 {
561 return Curvatures[Iso];
562 }
563
564 void ComputeSurfaceSideProperties();
565
569 void DefineSurfaceType();
570
572 {
573 return SideProperties;
574 }
575
577 {
578 return SideProperties[Index];
579 }
580
582 {
583 return SideProperties[Index];
584 }
585
587 {
588 return NumOfMeshedSide;
589 }
590
591 const int32& MeshedSideNum() const
592 {
593 return NumOfMeshedSide;
594 }
595
597 {
598 LengthOfMeshedSide += Length;
599 }
600
601 double MeshedSideRatio() const
602 {
603 return LengthOfMeshedSide / LoopLength;
604 }
605
607 {
608 return StartSideIndices[Index];
609 }
610
612 {
613 return StartSideIndices;
614 }
615
617 {
618 int32 EdgeIndex = Loops[0]->GetEdgeIndex(Edge);
619 if (EdgeIndex < 0)
620 {
621 return -1;
622 }
623 return GetSideIndex(EdgeIndex);
624 }
625
626 int32 GetSideIndex(int32 EdgeIndex) const
627 {
628 if (StartSideIndices.Num() == 0)
629 {
630 return -1;
631 }
632
633 if (StartSideIndices[0] > EdgeIndex)
634 {
635 return (int32)StartSideIndices.Num() - 1;
636 }
637 else
638 {
639 for (int32 SideIndex = 0; SideIndex < StartSideIndices.Num() - 1; ++SideIndex)
640 {
641 if (StartSideIndices[SideIndex] <= EdgeIndex && EdgeIndex < StartSideIndices[SideIndex + 1])
642 {
643 return SideIndex;
644 }
645 }
646 return (int32)StartSideIndices.Num() - 1;
647 }
648 }
649
651 {
652 if(Value < EstimatedMinimalElementLength)
653 {
654 EstimatedMinimalElementLength = Value;
655 }
656 }
657
662 {
663 return EstimatedMinimalElementLength;
664 }
665
666};
667
685
687{
696 bool MaxNormalNeedUpdate[3] = {true, true, true};
697 bool MinNormalNeedUpdate[3] = {true, true, true};
698
704
708 double Length()
709 {
710 double XLength = Max.X - Min.X;
711 double YLength = Max.Y - Min.Y;
712 double ZLength = Max.Z - Min.Z;
713 return XLength + YLength + ZLength;
714 }
715
720 {
723
724 const FVector BBoxNormals[] = { FVector(1., 0., 0.) , FVector(0., 1., 0.) , FVector(0., 0., 1.) };
725
726 for (int32 Index = 0; Index < 3; ++Index)
727 {
728 double DotProduct = MaxPointNormals[Index] | BBoxNormals[Index];
729 if (DotProduct > DOUBLE_KINDA_SMALL_NUMBER)
730 {
732 }
733 else if(DotProduct < DOUBLE_KINDA_SMALL_NUMBER)
734 {
736 }
737
738 DotProduct = MinPointNormals[Index] | BBoxNormals[Index];
739 if (DotProduct < DOUBLE_KINDA_SMALL_NUMBER)
740 {
742 }
743 else if (DotProduct > DOUBLE_KINDA_SMALL_NUMBER)
744 {
746 }
747 }
748
750 return ((GoodOrientation >= 3) || (WrongOrientation >= 3)) && (GoodOrientation != WrongOrientation);
751 }
752
753 void Update(const FPolylineBBox& PolylineBBox, const EIso IsoType, double IsoCoordinate)
754 {
755 for (int32 Index = 0; Index < 3; ++Index)
756 {
757 if (PolylineBBox.Max[Index] > Max[Index])
758 {
760 MaxPoints[Index] = PolylineBBox.MaxPoints[Index];
761 MaxCoordinates[Index] = (IsoType == IsoU) ? FVector2d(IsoCoordinate, PolylineBBox.CoordinateOfMaxPoint[Index]) : FVector2d(PolylineBBox.CoordinateOfMaxPoint[Index], IsoCoordinate);
763 }
764
765 if (PolylineBBox.Min[Index] < Min[Index])
766 {
768 MinPoints[Index] = PolylineBBox.MinPoints[Index];
769 MinCoordinates[Index] = (IsoType == IsoU) ? FVector2d(IsoCoordinate, PolylineBBox.CoordinateOfMinPoint[Index]) : FVector2d(PolylineBBox.CoordinateOfMinPoint[Index], IsoCoordinate);
771 }
772 }
773 }
774
776 {
777 for (int32 Index = 0; Index < 3; ++Index)
778 {
779 if (Point[Index] > Max[Index])
780 {
781 Max[Index] = Point[Index];
785 }
786
787 if (Point[Index] < Min[Index])
788 {
789 Min[Index] = Point[Index];
793 }
794 }
795 }
796
798 {
799 const FSurface& Surface = *Face.GetCarrierSurface();
800 bool bSwapOrientation = Face.IsBackOriented();
801
802 for (int32 Index = 0; Index < 3; ++Index)
803 {
805 {
808 {
809 MaxPointNormals[Index] *= -1.;
810 }
811 MaxNormalNeedUpdate[Index] = false;
812 }
813
815 {
818 {
819 MinPointNormals[Index] *= -1.;
820 }
821 MinNormalNeedUpdate[Index] = false;
822 }
823 }
824 }
825};
826
827
828} // namespace UE::CADKernel
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define HUGE_VALUE
Definition Types.h:16
#define FVector
Definition IOSSystemIncludes.h:8
UE::Math::TVector2< double > FVector2d
Definition MathFwd.h:61
#define DOUBLE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:73
#define DOUBLE_BIG_NUMBER
Definition UnrealMathUtility.h:74
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
TSharedRef< ObjectType, Mode > ToSharedRef() const &
Definition SharedPointer.h:1028
UE_FORCEINLINE_HINT void Reset()
Definition SharedPointer.h:1120
Definition SharedPointer.h:153
Definition CADKernelArchive.h:19
Definition CriteriaGrid.h:15
Definition Database.h:17
Definition CADEntity.h:56
Definition FaceMesh.h:16
Definition Grid.h:46
Definition ModelMesh.h:21
Definition TopologicalLoop.h:21
Definition Surface.h:27
Definition Boundary.h:248
Definition TopologicalEdge.h:63
Definition TopologicalFace.h:56
const FEdge2DProperties & GetSideProperty(int32 Index) const
Definition TopologicalFace.h:581
FCoordinateGrid MeshCuttingCoordinates
Definition TopologicalFace.h:71
void ResetBackOriented() const
Definition TopologicalFace.h:500
TArray< double > & GetCuttingCoordinatesAlongIso(EIso Iso)
Definition TopologicalFace.h:404
const bool HasThinZone() const
Definition TopologicalFace.h:463
FCoordinateGrid CrossingCoordinates
Definition TopologicalFace.h:76
const TArray< TSharedPtr< FTopologicalLoop > > & GetLoops() const
Definition TopologicalFace.h:222
bool IsBackOriented() const
Definition TopologicalFace.h:478
TSharedPtr< FSurface > CarrierSurface
Definition TopologicalFace.h:61
double GetIsoTolerance(EIso Iso) const
Definition TopologicalFace.h:146
void SetHasThinZoneMarker()
Definition TopologicalFace.h:468
const TArray< double > & GetCrossingPointCoordinates(EIso Iso) const
Definition TopologicalFace.h:424
virtual EEntity GetEntityType() const override
Definition TopologicalFace.h:136
virtual int32 FaceCount() const override
Definition TopologicalFace.h:160
const TArray< double > & GetCrossingPointDeltaMaxs(EIso Iso) const
Definition TopologicalFace.h:451
FCoordinateGrid CrossingPointDeltaMins
Definition TopologicalFace.h:81
int32 GetStartEdgeIndexOfSide(int32 Index) const
Definition TopologicalFace.h:606
void SwapOrientation() const
Definition TopologicalFace.h:483
void Remove(TArray< FTopologicalEdge * > *NewBorderEdges=nullptr)
Definition TopologicalFace.h:310
TCache< FSurfacicBoundary > Boundary
Definition TopologicalFace.h:64
FCoordinateGrid CrossingPointDeltaMaxs
Definition TopologicalFace.h:86
virtual void Serialize(FCADKernelArchive &Ar) override
Definition TopologicalFace.h:116
const FCoordinateGrid & GetCrossingPointCoordinates() const
Definition TopologicalFace.h:419
TArray< FThinZone2D > & GetThinZones()
Definition TopologicalFace.h:526
virtual void GetFaces(TArray< FTopologicalFace * > &OutFaces) override
Definition TopologicalFace.h:165
void SetEstimatedMinimalElementLength(double Value)
Definition TopologicalFace.h:650
void ResetHasThinSurface()
Definition TopologicalFace.h:473
virtual void Empty() override
Definition TopologicalFace.h:316
FFaceMesh * GetMesh() const
Definition TopologicalFace.h:388
FEdge2DProperties & GetSideProperty(int32 Index)
Definition TopologicalFace.h:576
void GetActiveEdges(TArray< TSharedPtr< FTopologicalEdge > > &OutEdges) const
Definition TopologicalFace.h:265
void EvaluateGrid(FGrid &Grid) const
TArray< double > & GetCrossingPointCoordinates(EIso Iso)
Definition TopologicalFace.h:429
TArray< TSharedPtr< FTopologicalLoop > > Loops
Definition TopologicalFace.h:62
const TArray< FEdge2DProperties > & GetSideProperties() const
Definition TopologicalFace.h:571
TSharedRef< FSurface > GetCarrierSurface() const
Definition TopologicalFace.h:285
double GetEstimatedMinimalElementLength() const
Definition TopologicalFace.h:661
const FSurfaceCurvature & GetCurvatures() const
Definition TopologicalFace.h:549
const TArray< double > & GetCrossingPointDeltaMins(EIso Iso) const
Definition TopologicalFace.h:446
void AddLoops(const TArray< TSharedPtr< FCurve > > &Restrictions)
const bool HasTesselation() const
Definition TopologicalFace.h:383
const int32 & MeshedSideNum() const
Definition TopologicalFace.h:591
FTopologicalFace(const TSharedPtr< FSurface > &InCarrierSurface)
Definition TopologicalFace.h:94
const FCoordinateGrid & GetCuttingPointCoordinates() const
Definition TopologicalFace.h:409
const EQuadType GetQuadType() const
Definition TopologicalFace.h:458
const TArray< FThinZone2D > & GetThinZones() const
Definition TopologicalFace.h:521
int32 & MeshedSideNum()
Definition TopologicalFace.h:586
TSharedPtr< FFaceMesh > Mesh
Definition TopologicalFace.h:66
virtual void Remove(const FTopologicalShapeEntity *) override
Definition TopologicalFace.h:505
virtual void PropagateBodyOrientation() override
Definition TopologicalFace.h:179
const FSurfacicBoundary & GetBoundary() const
Definition TopologicalFace.h:151
const TArray< int32 > & GetStartSideIndices() const
Definition TopologicalFace.h:611
void SetBackOriented() const
Definition TopologicalFace.h:495
virtual ~FTopologicalFace() override
Definition TopologicalFace.h:111
FSurfaceCurvature & GetCurvatures()
Definition TopologicalFace.h:554
void AddLoop(const TSharedPtr< FTopologicalLoop > &Loop)
Definition TopologicalFace.h:186
int32 LoopCount() const
Definition TopologicalFace.h:217
const FSurfacicTolerance & GetIsoTolerances() const
Definition TopologicalFace.h:141
virtual void ResetMarkersRecursively() const override
Definition TopologicalFace.h:125
void AddMeshedLength(double Length)
Definition TopologicalFace.h:596
FCoordinateGrid & GetCuttingPointCoordinates()
Definition TopologicalFace.h:414
const FIsoCurvature & GetCurvature(EIso Iso) const
Definition TopologicalFace.h:559
const TArray< double > & GetCuttingCoordinatesAlongIso(EIso Iso) const
Definition TopologicalFace.h:399
int32 GetSideIndex(int32 EdgeIndex) const
Definition TopologicalFace.h:626
virtual void CompleteMetaData() override
Definition TopologicalFace.h:174
double MeshedSideRatio() const
Definition TopologicalFace.h:601
void MoveThinZones(TArray< FThinZone2D > &InThinZones)
Definition TopologicalFace.h:516
void EdgeCount(int32 &EdgeCount) const
Definition TopologicalFace.h:253
void EvaluatePointGrid(const FCoordinateGrid &Coordinates, FSurfacicSampling &OutPoints, bool bComputeNormals=false) const
Definition TopologicalFace.h:292
int32 GetSideIndex(FTopologicalEdge &Edge) const
Definition TopologicalFace.h:616
int32 EdgeCount() const
Definition TopologicalFace.h:273
Definition TopologicalShapeEntity.h:14
Definition Cache.h:12
bool IsValid() const
Definition Cache.h:83
Definition CADEntity.cpp:23
EQuadType
Definition TopologicalFace.h:46
EStatut
Definition TopologicalFace.h:39
EIso
Definition GeoEnum.h:66
@ IsoU
Definition GeoEnum.h:67
@ Iso
Definition Visu.h:20
@ Point
Definition Visu.h:17
EEntity
Definition CADEntity.h:18
U16 Index
Definition radfft.cpp:71
Definition TopologicalFace.h:687
FVector2d MinCoordinates[3]
Definition TopologicalFace.h:693
void UpdateNormal(const FTopologicalFace &Face)
Definition TopologicalFace.h:797
bool CheckOrientation(bool bHasWrongOrientation)
Definition TopologicalFace.h:719
FBBoxWithNormal()
Definition TopologicalFace.h:699
FVector Min
Definition TopologicalFace.h:689
FVector MinPointNormals[3]
Definition TopologicalFace.h:695
double Length()
Definition TopologicalFace.h:708
bool MinNormalNeedUpdate[3]
Definition TopologicalFace.h:697
FVector MaxPoints[3]
Definition TopologicalFace.h:690
FVector2d MaxCoordinates[3]
Definition TopologicalFace.h:692
void Update(const FVector &Point, const FVector2d InPoint2D)
Definition TopologicalFace.h:775
FVector Max
Definition TopologicalFace.h:688
void Update(const FPolylineBBox &PolylineBBox, const EIso IsoType, double IsoCoordinate)
Definition TopologicalFace.h:753
FVector MinPoints[3]
Definition TopologicalFace.h:691
bool MaxNormalNeedUpdate[3]
Definition TopologicalFace.h:696
FVector MaxPointNormals[3]
Definition TopologicalFace.h:694
Definition GeoPoint.h:103
void Empty(int32 UNumber=0, int32 VNumber=0)
Definition GeoPoint.h:138
Definition TopologicalEdge.h:889
Definition TopologicalFace.h:669
FString MainName
Definition TopologicalFace.h:675
void SetMainMaterial(TMap< uint32, int32 > &MaterialToFaceCount)
Definition TopologicalFace.cpp:838
void SetMainName(TMap< FString, int32 > &NameToFaceCount)
Definition TopologicalFace.cpp:807
uint32 MainColor
Definition TopologicalFace.h:676
int32 BorderEdgeCount
Definition TopologicalFace.h:671
FTopologicalShapeEntity * MainShell
Definition TopologicalFace.h:673
void SetMainShell(TMap< FTopologicalShapeEntity *, int32 > &ShellToFaceCount)
Definition TopologicalFace.cpp:757
void SetMainColor(TMap< uint32, int32 > &ColorToFaceCount)
Definition TopologicalFace.cpp:825
FTopologicalShapeEntity * MainBody
Definition TopologicalFace.h:674
TArray< FTopologicalFace * > Faces
Definition TopologicalFace.h:670
uint32 MainMaterial
Definition TopologicalFace.h:677
void SetMainBody(TMap< FTopologicalShapeEntity *, int32 > &BodyToFaceCount)
Definition TopologicalFace.cpp:782
int32 NonManifoldEdgeCount
Definition TopologicalFace.h:672
Definition Curvature.h:10
Definition PolylineTools.h:20
Definition Curvature.h:16
Definition SurfacicSampling.h:14
T Z
Definition Vector.h:68
T Y
Definition Vector.h:65
static TVector< T > Max(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:2506
static TVector< T > Min(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:2496
T X
Definition Vector.h:62