UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TorusSurface.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5
6namespace UE::CADKernel
7{
9{
10 friend FEntity;
11
12protected:
16
29
47 , MajorRadius(InMajorRadius)
48 , MinorRadius(InMinorRadius)
49 {
50 ComputeMinToleranceIso();
51 }
52
53 FTorusSurface() = default;
54
56 {
57 double Tolerance2DU = Tolerance3D / MajorRadius;
58 double Tolerance2DV = Tolerance3D / MinorRadius;
59
60 FVector Origin = Matrix.Multiply(FVector::ZeroVector);
61
62 FVector Point2DU{ 1 , 0, 0 };
63 FVector Point2DV{ 0, 1, 0 };
64
65 Tolerance2DU /= ComputeScaleAlongAxis(Point2DU, Matrix, Origin);
66 Tolerance2DV /= ComputeScaleAlongAxis(Point2DV, Matrix, Origin);
67
68 MinToleranceIso.Set(FMath::Abs(Tolerance2DU), FMath::Abs(Tolerance2DV));
69 }
70
71public:
72
73 virtual void Serialize(FCADKernelArchive& Ar) override
74 {
75 FSurface::Serialize(Ar);
76 Ar << Matrix;
77 Ar << MajorRadius;
78 Ar << MinorRadius;
79 }
80
82 {
83 return ESurface::Torus;
84 }
85
86#ifdef CADKERNEL_DEV
87 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
88#endif
89
90 virtual TSharedPtr<FEntityGeom> ApplyMatrix(const FMatrixH& InMatrix) const override;
91
93 {
94 const double CosU = cos(InSurfacicCoordinate.X);
95 const double CosV = cos(InSurfacicCoordinate.Y);
96
97 const double SinU = sin(InSurfacicCoordinate.X);
98 const double SinV = sin(InSurfacicCoordinate.Y);
99 double Rho = (MajorRadius + MinorRadius * CosV);
100
101 OutPoint3D.DerivativeOrder = InDerivativeOrder;
102 OutPoint3D.Point.Set(Rho * CosU, Rho * SinU, MinorRadius * SinV);
103
104 OutPoint3D.Point = Matrix.Multiply(OutPoint3D.Point);
105
106 if (InDerivativeOrder > 0)
107 {
108 OutPoint3D.GradientU = FVector((MajorRadius + MinorRadius * CosV) * -SinU, (MajorRadius + MinorRadius * CosV) * CosU, 0.0);
109 OutPoint3D.GradientV = FVector((MinorRadius * -SinV) * CosU, (MinorRadius * -SinV) * SinU, MinorRadius * CosV);
110
111 OutPoint3D.GradientU = Matrix.MultiplyVector(OutPoint3D.GradientU);
112 OutPoint3D.GradientV = Matrix.MultiplyVector(OutPoint3D.GradientV);
113
114 if (InDerivativeOrder > 1)
115 {
116 OutPoint3D.LaplacianU = FVector((MajorRadius + MinorRadius * CosV) * -CosU, (MajorRadius + MinorRadius * CosV) * -SinU, 0.0);
117 OutPoint3D.LaplacianV = FVector((MinorRadius * -CosV) * CosU, (MinorRadius * -CosV) * SinU, MinorRadius * -SinV);
118 OutPoint3D.LaplacianUV = FVector((MinorRadius * -SinV) * -SinU, (MinorRadius * -SinV) * CosU, 0.0);
119
120 OutPoint3D.LaplacianU = Matrix.MultiplyVector(OutPoint3D.LaplacianU);
121 OutPoint3D.LaplacianV = Matrix.MultiplyVector(OutPoint3D.LaplacianV);
122 OutPoint3D.LaplacianUV = Matrix.MultiplyVector(OutPoint3D.LaplacianUV);
123 }
124 }
125 }
126
127 virtual void EvaluatePointGrid(const FCoordinateGrid& Coordinates, FSurfacicSampling& OutPoints, bool bComputeNormals = false) const override;
128
129 virtual void EvaluatePointGridInCylindricalSpace(const FCoordinateGrid& Coordinates, TArray<FVector2d>&) const override;
130
132 {
133 const double CosU = cos(InSurfacicCoordinate.X);
134 const double CosV = cos(InSurfacicCoordinate.Y);
135
136 const double SinU = sin(InSurfacicCoordinate.X);
137
138 double Rho = (MajorRadius + MinorRadius * CosV);
139
140 double SwapOrientation = (InSurfacicCoordinate.Y < DOUBLE_PI&& InSurfacicCoordinate.Y >= 0) ? 1.0 : -1.0;
141
142 return FVector2d(Rho * CosU * SwapOrientation, Rho * SinU);
143 }
144
146 {
147 PresampleIsoCircle(InBoundaries, OutCoordinates, EIso::IsoU);
148 PresampleIsoCircle(InBoundaries, OutCoordinates, EIso::IsoV);
149 }
150
151};
152}
153
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 FVector
Definition IOSSystemIncludes.h:8
UE::Math::TVector2< double > FVector2d
Definition MathFwd.h:61
#define DOUBLE_PI
Definition UnrealMathUtility.h:71
#define DOUBLE_TWO_PI
Definition UnrealMathUtility.h:85
Definition Array.h:670
Definition SharedPointer.h:692
Definition CADKernelArchive.h:19
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition Surface.h:27
Definition Boundary.h:248
Definition TorusSurface.h:9
void ComputeMinToleranceIso()
Definition TorusSurface.h:55
virtual void EvaluatePoint(const FVector2d &InSurfacicCoordinate, FSurfacicPoint &OutPoint3D, int32 InDerivativeOrder=0) const override
Definition TorusSurface.h:92
virtual void Presample(const FSurfacicBoundary &InBoundaries, FCoordinateGrid &OutCoordinates) override
Definition TorusSurface.h:145
virtual void Serialize(FCADKernelArchive &Ar) override
Definition TorusSurface.h:73
double MajorRadius
Definition TorusSurface.h:14
FTorusSurface(const double InToleranceGeometric, const FMatrixH &InMatrix, double InMajorRadius, double InMinorRadius, double InMajorStartAngle=0.0, double InMajorEndAngle=DOUBLE_TWO_PI, double InMinorStartAngle=0.0, double InMinorEndAngle=DOUBLE_TWO_PI)
Definition TorusSurface.h:25
FMatrixH Matrix
Definition TorusSurface.h:13
ESurface GetSurfaceType() const
Definition TorusSurface.h:81
virtual FVector2d EvaluatePointInCylindricalSpace(const FVector2d &InSurfacicCoordinate) const override
Definition TorusSurface.h:131
FTorusSurface(const double InToleranceGeometric, const FMatrixH &InMatrix, double InMajorRadius, double InMinorRadius, const FSurfacicBoundary &InBoundary)
Definition TorusSurface.h:44
double MinorRadius
Definition TorusSurface.h:15
Definition CADEntity.cpp:23
void SwapOrientation(EOrientation &Orientation)
Definition GeoEnum.h:128
ESurface
Definition GeoEnum.h:34
Definition GeoPoint.h:103
Definition GeoPoint.h:19
Definition SurfacicSampling.h:14
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79