23#include "UI/DefineForDebug.h"
29class FCADKernelArchive;
35class FTopologicalVertex;
36struct FSurfacicSampling;
53struct FBBoxWithNormal;
107 void ComputeBoundary()
const;
113 FTopologicalFace::Empty();
118 FTopologicalShapeEntity::Serialize(Ar);
119 SerializeIdent(Ar, CarrierSurface);
128 ResetMarkersRecursivelyOnEntities(Loops);
129 CarrierSurface->ResetMarkersRecursively();
138 return EEntity::TopologicalFace;
143 return CarrierSurface->GetIsoTolerances();
148 return CarrierSurface->GetIsoTolerance(
Iso);
176 CompleteMetaDataWithHostMetaData();
190 Loop->SetSurface(
this);
209 void ApplyNaturalLoops();
257 EdgeCount +=
Loop->GetEdges().Num();
278 EdgeNum +=
Loop->EdgeCount();
318#ifndef DONT_DELETE_FACE_FOR_DEBUG
319 CarrierSurface.
Reset();
324 Edge.Entity->Delete();
333 MeshCuttingCoordinates.
Empty();
334 CrossingCoordinates.
Empty();
335 CrossingPointDeltaMins.
Empty();
336 CrossingPointDeltaMaxs.
Empty();
338 SurfaceCorners.Empty();
339 StartSideIndices.Empty();
340 SideProperties.Empty();
342 FTopologicalShapeEntity::Empty();
346 bool IsANonManifoldFace()
const;
349 bool IsABorderFace()
const;
352 bool IsAFullyNonManifoldFace()
const;
355 bool IsADuplicatedFace()
const;
372 void DeleteNonmanifoldLink();
385 return Mesh.IsValid();
401 return MeshCuttingCoordinates[
Iso];
406 return MeshCuttingCoordinates[
Iso];
411 return MeshCuttingCoordinates;
416 return MeshCuttingCoordinates;
421 return CrossingCoordinates;
426 return CrossingCoordinates[
Iso];
431 return CrossingCoordinates[
Iso];
439 bool ComputeCriteriaGridSampling();
448 return CrossingPointDeltaMins[
Iso];
453 return CrossingPointDeltaMaxs[
Iso];
538 int32 NumOfMeshedSide = 0;
539 double LoopLength = -1.;
540 double LengthOfMeshedSide = 0;
541 double QuadCriteria = 0;
546 void ComputeQuadCriteria();
547 double GetQuadCriteria();
561 return Curvatures[
Iso];
564 void ComputeSurfaceSideProperties();
569 void DefineSurfaceType();
573 return SideProperties;
578 return SideProperties[
Index];
583 return SideProperties[
Index];
588 return NumOfMeshedSide;
593 return NumOfMeshedSide;
598 LengthOfMeshedSide +=
Length;
603 return LengthOfMeshedSide / LoopLength;
608 return StartSideIndices[
Index];
613 return StartSideIndices;
618 int32 EdgeIndex = Loops[0]->GetEdgeIndex(
Edge);
623 return GetSideIndex(EdgeIndex);
628 if (StartSideIndices.
Num() == 0)
633 if (StartSideIndices[0] > EdgeIndex)
635 return (
int32)StartSideIndices.
Num() - 1;
641 if (StartSideIndices[
SideIndex] <= EdgeIndex && EdgeIndex < StartSideIndices[
SideIndex + 1])
646 return (
int32)StartSideIndices.
Num() - 1;
652 if(
Value < EstimatedMinimalElementLength)
654 EstimatedMinimalElementLength =
Value;
663 return EstimatedMinimalElementLength;
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
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 CADEntity.h:56
Definition ModelMesh.h:21
Definition TopologicalLoop.h:21
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
FTopologicalFace()=default
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
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