UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RestrictionCurve.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Core/Types.h"
7#include "Geo/GeoEnum.h"
8#include "Geo/GeoPoint.h"
11#include "Math/Boundary.h"
12#include "Math/MatrixH.h"
13#include "Math/Point.h"
14
15namespace UE::CADKernel
16{
17class FCurve;
18class FEntityGeom;
19
33{
34 friend class FEntity;
35 friend class FTopologicalEdge;
36
37protected:
38
41
48
49 FRestrictionCurve() = default;
50
51public:
52
53 virtual void Serialize(FCADKernelArchive& Ar) override
54 {
55 FSurfacicCurve::Serialize(Ar);
56 Polyline.Serialize(Ar);
57 if (Ar.IsLoading())
58 {
59 MinLinearTolerance = Boundary.ComputeMinimalTolerance();
60 }
61 }
62
63#ifdef CADKERNEL_DEV
64 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
65#endif
66
67 virtual ECurve GetCurveType() const override
68 {
69 return ECurve::Restriction;
70 }
71
73 {
74 return Polyline;
75 }
76
78 {
79 return Curve2D.ToSharedRef();
80 }
81
82 double GetMinLinearTolerance() const
83 {
84 return MinLinearTolerance;
85 }
86
88 {
89 ensureCADKernel(false);
91 }
92
98 {
99 return Polyline.Approximate2DPoint(InCoordinate);
100 }
101
107 {
108 return Polyline.Approximate3DPoint(InCoordinate);
109 }
110
112 {
113 return Polyline.GetTangentAt(InCoordinate);
114 }
115
117 {
118 return Polyline.GetTangent2DAt(InCoordinate);
119 }
120
126 {
127 return Polyline.Approximate2DPoints(InCoordinates, OutPoints);
128 }
129
135 {
136 return Polyline.Approximate3DPoints(InCoordinates, OutPoints);
137 }
138
143 {
144 Polyline.ApproximatePolyline(OutPolyline);
145 }
146
147 template<class PointType>
148 double GetCoordinateOfProjectedPoint(const FLinearBoundary& InBoundary, const PointType& PointOnEdge, PointType& ProjectedPoint) const
149 {
150 return Polyline.GetCoordinateOfProjectedPoint(InBoundary, PointOnEdge, ProjectedPoint);
151 }
152
153 template<class PointType>
158
167
172
180 void CheckIfDegenerated(const FLinearBoundary& InBoundary, bool& bDegeneration2D, bool& bDegeneration3D, double& Length3D) const
181 {
182 if (Polyline.Coordinates.Num() < 2)
183 {
184 bDegeneration2D = true;
185 bDegeneration3D = true;
186 Length3D = 0.;
187 return;
188 }
189 double Tolerance = GetCarrierSurface()->Get3DTolerance();
190 const FSurfacicTolerance& Tolerances2D = GetCarrierSurface()->GetIsoTolerances();
191 Polyline.CheckIfDegenerated(Tolerance, Tolerances2D, InBoundary, bDegeneration2D, bDegeneration3D, Length3D);
192 }
193
194 void GetExtremities(const FLinearBoundary& InBoundary, FSurfacicCurveExtremities& Extremities) const
195 {
196 double Tolerance = GetCarrierSurface()->Get3DTolerance();
197 const FSurfacicTolerance& Tolerances2D = GetCarrierSurface()->GetIsoTolerances();
198 Polyline.GetExtremities(InBoundary, Tolerance, Tolerances2D, Extremities);
199 }
200
201 double GetToleranceAt(const double InCoordinate)
202 {
203 FDichotomyFinder Finder(Polyline.GetCoordinates());
204 const int32 Index = Finder.Find(InCoordinate);
205 const double Tolerance = GetCarrierSurface()->Get3DTolerance();
206
207 return Polyline.ComputeLinearToleranceAt(Tolerance, MinLinearTolerance, Index);
208 }
209
211 {
212 FDichotomyFinder Finder(Polyline.GetCoordinates());
213 const int32 StartIndex = Finder.Find(InBoundary.Min);
214 const int32 EndIndex = Finder.Find(InBoundary.Max);
215
216 const double Tolerance = GetCarrierSurface()->Get3DTolerance();
217
219 ExtremityTolerance[0] = Polyline.ComputeLinearToleranceAt(Tolerance, MinLinearTolerance, StartIndex);
220 ExtremityTolerance[1] = Polyline.ComputeLinearToleranceAt(Tolerance, MinLinearTolerance, EndIndex);
221 return ExtremityTolerance;
222 }
223
228 {
229 return Polyline.Size();
230 }
231
235 template<class PointType>
240
244 template<class PointType>
249
257
259 {
260 return Polyline.GetLength(InBoundary);
261 }
262
263 void ExtendTo(const FVector2d& Point) override;
264
265 bool IsIso(EIso Iso, double ErrorTolerance = DOUBLE_SMALL_NUMBER) const
266 {
267 return Polyline.IsIso(Iso, ErrorTolerance);
268 }
269
270 void Offset2D(const FVector2d& OffsetDirection);
271
275 virtual void Offset(const FVector& OffsetDirection) override
276 {
277 ensureCADKernel(false);
278 }
279
280};
281
282} // namespace UE::CADKernel
283
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 ensureCADKernel(InExpression)
Definition Types.h:115
#define DOUBLE_SMALL_NUMBER
Definition UnrealMathUtility.h:72
Definition Array.h:670
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition CADKernelArchive.h:19
bool IsLoading() const
Definition CADKernelArchive.h:108
Definition IndexOfCoordinateFinder.h:85
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition RestrictionCurve.h:33
void ProjectPoints(const FLinearBoundary &InBoundary, const TArray< PointType > &InPointsToProject, TArray< double > &ProjectedPointCoordinates, TArray< PointType > &ProjectedPoints) const
Definition RestrictionCurve.h:154
void Approximate3DPoints(const TArray< double > &InCoordinates, TArray< FVector > &OutPoints) const
Definition RestrictionCurve.h:134
FSurfacicPolyline Polyline
Definition RestrictionCurve.h:39
void ComputeIntersectionsWithIsos(const FLinearBoundary &InBoundary, const TArray< double > &InIsoCoordinates, const EIso InTypeIso, const FSurfacicTolerance &ToleranceIso, TArray< double > &OutIntersection) const
Definition RestrictionCurve.h:168
int32 GetPolylineSize()
Definition RestrictionCurve.h:227
const FSurfacicPolyline & GetPolyline() const
Definition RestrictionCurve.h:72
FVector Approximate3DPoint(double InCoordinate) const
Definition RestrictionCurve.h:106
void ProjectTwinCurvePoints(const FLinearBoundary &InBoundary, const TArray< FVector > &InPointsToProject, bool bSameOrientation, TArray< double > &OutProjectedPointCoords, double ToleranceOfProjection) const
Definition RestrictionCurve.h:163
double GetMinLinearTolerance() const
Definition RestrictionCurve.h:82
FVector2d GetTangent2DAt(double InCoordinate) const
Definition RestrictionCurve.h:116
FRestrictionCurve(TSharedRef< FSurface > InCarrierSurface, TSharedRef< FCurve > InCurve2D)
Definition RestrictionCurve.h:42
void Approximate2DPoints(const TArray< double > &InCoordinates, TArray< FVector2d > &OutPoints) const
Definition RestrictionCurve.h:125
FVector GetTangentAt(double InCoordinate) const
Definition RestrictionCurve.h:111
const TSharedRef< FCurve > Get2DCurve() const
Definition RestrictionCurve.h:77
void GetDiscretizationPoints(const FLinearBoundary &InBoundary, EOrientation Orientation, TArray< PointType > &OutPoints) const
Definition RestrictionCurve.h:236
void Sample(const FLinearBoundary &InBoundary, const double DesiredSegmentLength, TArray< double > &OutCoordinates) const
Definition RestrictionCurve.h:253
void ApproximatePolyline(FSurfacicPolyline &OutPolyline) const
Definition RestrictionCurve.h:142
TSharedPtr< FEntityGeom > ApplyMatrix(const FMatrixH &InMatrix) const override
Definition RestrictionCurve.h:87
virtual ECurve GetCurveType() const override
Definition RestrictionCurve.h:67
double GetToleranceAt(const double InCoordinate)
Definition RestrictionCurve.h:201
double GetCoordinateOfProjectedPoint(const FLinearBoundary &InBoundary, const PointType &PointOnEdge, PointType &ProjectedPoint) const
Definition RestrictionCurve.h:148
FVector2d Approximate2DPoint(double InCoordinate) const
Definition RestrictionCurve.h:97
double MinLinearTolerance
Definition RestrictionCurve.h:40
virtual void Offset(const FVector &OffsetDirection) override
Definition RestrictionCurve.h:275
double ApproximateLength(const FLinearBoundary &InBoundary) const
Definition RestrictionCurve.h:258
FVector2d GetExtremityTolerances(const FLinearBoundary &InBoundary)
Definition RestrictionCurve.h:210
void GetDiscretizationPoints(const FLinearBoundary &InBoundary, TArray< double > &OutCoordinates, TArray< PointType > &OutPoints) const
Definition RestrictionCurve.h:245
virtual void Serialize(FCADKernelArchive &Ar) override
Definition RestrictionCurve.h:53
void GetExtremities(const FLinearBoundary &InBoundary, FSurfacicCurveExtremities &Extremities) const
Definition RestrictionCurve.h:194
void CheckIfDegenerated(const FLinearBoundary &InBoundary, bool &bDegeneration2D, bool &bDegeneration3D, double &Length3D) const
Definition RestrictionCurve.h:180
bool IsIso(EIso Iso, double ErrorTolerance=DOUBLE_SMALL_NUMBER) const
Definition RestrictionCurve.h:265
Definition SurfacicCurve.h:22
Definition SurfacicPolyline.h:30
Definition TopologicalEdge.h:63
Definition CADEntity.cpp:23
EOrientation
Definition GeoEnum.h:82
EIso
Definition GeoEnum.h:66
@ Iso
Definition Visu.h:20
ECurve
Definition GeoEnum.h:10
U16 Index
Definition radfft.cpp:71
Definition Boundary.h:18