UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NURBSSurface.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
6#include "Math/BSpline.h"
7
8namespace UE::CADKernel
9{
10class FNURBSSurface : public FSurface
11{
12 friend FEntity;
13
14protected:
17
20
23
25
27
29
34
53
74
95
106
107 FNURBSSurface() = default;
108
109public:
110
111
113 {
114 const double ToleranceU = GetIsoTolerance(EIso::IsoU);
115 const double ToleranceV = GetIsoTolerance(EIso::IsoV);
116
117 auto ValidateValue = [](double& Value, const double& Reference, const double& Tolerance)
118 {
119 if (FMath::IsNearlyEqual(Value, Reference, Tolerance))
120 {
121 Value = Reference;
122 return true;
123 }
124
125 return false;
126 };
127
128 for (FVector2d& UVPoint : UVPoints)
129 {
130 for (const double& NodalValue : UNodalVector)
131 {
133 {
134 break;
135 }
136 }
137
138 for (const double& NodalValue : VNodalVector)
139 {
141 {
142 break;
143 }
144 }
145 }
146 }
147
148 virtual void Serialize(FCADKernelArchive& Ar) override
149 {
151 Ar << PoleUCount;
152 Ar << PoleVCount;
153 Ar << UDegree;
154 Ar << VDegree;
157 Ar.Serialize(Weights);
158 Ar.Serialize(Poles);
159 Ar << bIsRational;
160
161 if (Ar.IsLoading())
162 {
163 Finalize();
164 }
165 }
166
168 {
169 return ESurface::Nurbs;
170 }
171
172#ifdef CADKERNEL_DEV
173 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
174#endif
175
176 constexpr const int32 GetDegree(EIso Iso) const
177 {
178 switch (Iso)
179 {
180 case EIso::IsoU:
181 return UDegree;
182 case EIso::IsoV:
183 default:
184 return VDegree;
185 }
186 }
187
188 constexpr const int32 GetPoleCount(EIso Iso) const
189 {
190 switch (Iso)
191 {
192 case EIso::IsoU:
193 return PoleUCount;
194 case EIso::IsoV:
195 default:
196 return PoleVCount;
197 }
198 }
199
201 {
202 return Poles;
203 }
204
206 {
207 return Weights;
208 }
209
211 {
212 return HomogeneousPoles;
213 }
214
215 constexpr const TArray<double>& GetNodalVector(EIso Iso) const
216 {
217 switch (Iso)
218 {
219 case EIso::IsoU:
220 return UNodalVector;
221 case EIso::IsoV:
222 default:
223 return VNodalVector;
224 }
225 }
226
227 bool IsRational() const
228 {
229 return bIsRational;
230 }
231
232
233 virtual TSharedPtr<FEntityGeom> ApplyMatrix(const FMatrixH& InMatrix) const override;
234
239
244
249
251
252private:
253 void Finalize();
255};
256
257} // namespace UE::CADKernel
258
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
return true
Definition ExternalRpcRegistry.cpp:601
Definition Array.h:670
Definition SharedPointer.h:692
Definition CADKernelArchive.h:19
bool IsLoading() const
Definition CADKernelArchive.h:108
void Serialize(void *Value, int64 Length)
Definition CADKernelArchive.h:118
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition NURBSSurface.h:11
virtual TSharedPtr< FEntityGeom > ApplyMatrix(const FMatrixH &InMatrix) const override
Definition NURBSSurface.cpp:11
int32 VDegree
Definition NURBSSurface.h:19
void EvaluatePointGrid(const FCoordinateGrid &InSurfacicCoordinates, FSurfacicSampling &OutPoints, bool bComputeNormals) const override
Definition NURBSSurface.h:240
int32 PoleVCount
Definition NURBSSurface.h:16
constexpr const TArray< double > & GetNodalVector(EIso Iso) const
Definition NURBSSurface.h:215
bool bIsRational
Definition NURBSSurface.h:28
virtual void Serialize(FCADKernelArchive &Ar) override
Definition NURBSSurface.h:148
const TArray< FVector > & GetPoles() const
Definition NURBSSurface.h:200
TArray< double > UNodalVector
Definition NURBSSurface.h:21
bool IsRational() const
Definition NURBSSurface.h:227
FNURBSSurface(const double InToleranceGeometric, int32 InPoleUCount, int32 InPoleVCount, int32 InDegreU, int32 InDegreV, const TArray< double > &InNodalVectorU, const TArray< double > &InNodalVectorV, const TArray< FVector > &InPoles)
Definition NURBSSurface.h:40
virtual void ValidateUVPoints(TArray< FVector2d > &UVPoints) const
Definition NURBSSurface.h:112
void ComputeMinToleranceIso()
Definition NURBSSurface.cpp:141
const TArray< double > & GetWeights() const
Definition NURBSSurface.h:205
FNURBSSurface(const double InToleranceGeometric, int32 InPoleUCount, int32 InPoleVCount, int32 InDegreU, int32 InDegreV, const TArray< double > &InNodalVectorU, const TArray< double > &InNodalVectorV, const TArray< FVector > &InPoles, const TArray< double > &InWeights)
Definition NURBSSurface.h:59
TArray< double > VNodalVector
Definition NURBSSurface.h:22
ESurface GetSurfaceType() const
Definition NURBSSurface.h:167
FNURBSSurface(const double InToleranceGeometric, FNurbsSurfaceHomogeneousData NurbsData)
Definition NURBSSurface.h:101
int32 UDegree
Definition NURBSSurface.h:18
TArray< double > HomogeneousPoles
Definition NURBSSurface.h:33
TArray< FVector > Poles
Definition NURBSSurface.h:26
virtual void EvaluatePoint(const FVector2d &InSurfacicCoordinate, FSurfacicPoint &OutPoint3D, int32 InDerivativeOrder=0) const override
Definition NURBSSurface.h:235
TArray< double > Weights
Definition NURBSSurface.h:24
int32 PoleUCount
Definition NURBSSurface.h:15
constexpr const int32 GetPoleCount(EIso Iso) const
Definition NURBSSurface.h:188
FNURBSSurface(const double InToleranceGeometric, FNurbsSurfaceData NurbsData)
Definition NURBSSurface.h:80
virtual void LinesNotDerivables(const FSurfacicBoundary &InBoundary, int32 InDerivativeOrder, FCoordinateGrid &OutNotDerivableCoordinates) const override
Definition NURBSSurface.h:245
constexpr const int32 GetDegree(EIso Iso) const
Definition NURBSSurface.h:176
const TArray< double > & GetHPoles() const
Definition NURBSSurface.h:210
Definition Surface.h:27
double GetIsoTolerance(EIso Iso) const
Definition Surface.h:164
virtual void Serialize(FCADKernelArchive &Ar) override
Definition Surface.h:95
Definition Boundary.h:248
void EvaluatePointGrid(const FNURBSSurface &Nurbs, const FCoordinateGrid &Coords, FSurfacicSampling &OutPoints, bool bComputeNormals)
Definition BSpline.cpp:773
void FindNotDerivableParameters(int32 Degree, int32 PoleCount, const TArray< double > &NodalVector, int32 DerivativeOrder, const FLinearBoundary &Boundary, TArray< double > &OutNotDerivableParameters)
Definition BSpline.cpp:1267
void EvaluatePoint(const FNURBSCurve &Nurbs, double Coordinate, FCurvePoint &OutPoint, int32 DerivativeOrder)
Definition BSpline.cpp:577
Definition CADEntity.cpp:23
ESurface
Definition GeoEnum.h:34
EIso
Definition GeoEnum.h:66
@ IsoV
Definition GeoEnum.h:68
@ IsoU
Definition GeoEnum.h:67
@ Iso
Definition Visu.h:20
@ false
Definition radaudio_common.h:23
static UE_FORCEINLINE_HINT bool IsNearlyEqual(float A, float B, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:388
Definition GeoPoint.h:103
Definition NurbsSurfaceData.h:27
Definition NurbsSurfaceData.h:11
Definition GeoPoint.h:19
Definition SurfacicSampling.h:14