UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Curve.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Core/CADEntity.h"
6#include "Core/EntityGeom.h"
7#include "Core/Types.h"
8#include "Geo/GeoEnum.h"
9#include "Geo/GeoPoint.h"
10#include "Math/Boundary.h"
11#include "UI/Message.h"
12#include "Utils/Cache.h"
13
14namespace UE::CADKernel
15{
16struct FCurvePoint2D;
17struct FCurvePoint;
18struct FNurbsCurveData;
19
21{
22 friend class FEntity;
23
24protected:
25
28
30
32 : FEntityGeom()
33 , Boundary()
35 {
36 }
37
39 : FEntityGeom()
40 , Boundary(InBounds)
42 {
43 }
44
45public:
46
47 static TSharedPtr<FCurve> MakeNurbsCurve(FNurbsCurveData& InNurbsData);
48 static TSharedPtr<FCurve> MakeBezierCurve(const TArray<FVector>& InPoles);
49 static TSharedPtr<FCurve> MakeSplineCurve(const TArray<FVector>& InPoles);
50 static TSharedPtr<FCurve> MakeSplineCurve(const TArray<FVector>& InPoles, const TArray<FVector>& Tangents);
52
53 // TODO
54 //static TSharedPtr<FCurve> MakeConeCurve(const double InToleranceGeometric, const FMatrixH& InMatrix, double InStartRadius, double InConeAngle, const FSurfacicBoundary& InBoundary);
55 //static TSharedPtr<FCurve> MakeCylinderCurve(const double InToleranceGeometric, const FMatrixH& InMatrix, const double InRadius, const FSurfacicBoundary& InBoundary);
56 //static TSharedPtr<FCurve> MakePlaneCurve(const double InToleranceGeometric, const FMatrixH& InMatrix, const FSurfacicBoundary& InBoundary);
57 //static TSharedPtr<FCurve> MakeSphericalCurve(const double InToleranceGeometric, const FMatrixH& InMatrix, double InRadius, const FSurfacicBoundary& InBoundary);
58 //static TSharedPtr<FCurve> MakeTorusCurve(const double InToleranceGeometric, const FMatrixH& InMatrix, double InMajorRadius, double InMinorRadius, const FSurfacicBoundary& InBoundary);
59
60 virtual void Serialize(FCADKernelArchive& Ar) override
61 {
62 // Curve's type is serialize because it is used to instantiate the correct entity on deserialization (@see Deserialize(FCADKernelArchive& Archive))
63 if (Ar.IsSaving())
64 {
65 ECurve CurveType = GetCurveType();
66 Ar << CurveType;
67 }
68 FEntityGeom::Serialize(Ar);
69 Ar << Dimension;
70 Ar << Boundary;
71 }
72
76 static TSharedPtr<FEntity> Deserialize(FCADKernelArchive& Archive);
77
78#ifdef CADKERNEL_DEV
79 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
80#endif
81
83 {
84 return Dimension;
85 }
86
87 virtual EEntity GetEntityType() const override
88 {
89 return EEntity::Curve;
90 }
91
92 virtual ECurve GetCurveType() const = 0;
93
94 double GetUMin() const
95 {
96 return Boundary.Min;
97 };
98
99 double GetUMax() const
100 {
101 return Boundary.Max;
102 };
103
105 {
106 return Boundary;
107 }
108
109 virtual TSharedPtr<FEntityGeom> ApplyMatrix(const FMatrixH& InMatrix) const override = 0;
110 virtual void Offset(const FVector& OffsetDirection) = 0;
111
112 virtual double GetLength(double Tolerance) const;
113
118 virtual void EvaluatePoint(double Coordinate, FCurvePoint& OutPoint, int32 DerivativeOrder = 0) const
119 {
120 ensureCADKernel(false);
121 }
122
127 virtual FVector EvaluatePoint(double Coordinate) const
128 {
130 EvaluatePoint(Coordinate, OutPoint);
131 return OutPoint.Point;
132 }
133
138 virtual void Evaluate2DPoint(double Coordinate, FCurvePoint2D& OutPoint, int32 DerivativeOrder = 0) const
139 {
140 ensureCADKernel(false);
141 }
142
147 virtual FVector2d Evaluate2DPoint(double Coordinate) const
148 {
150 Evaluate2DPoint(Coordinate, OutPoint);
151 return OutPoint.Point;
152 }
153
158 virtual void Evaluate2DPoint(double Coordinate, FVector2d& OutPoint) const
159 {
162 Evaluate2DPoint(Coordinate, CurvePoint);
163 OutPoint = CurvePoint.Point;
164 }
165
170 virtual void EvaluatePoints(const TArray<double>& Coordinates, TArray<FCurvePoint>& OutPoints, int32 DerivativeOrder = 0) const;
171
176 virtual void EvaluatePoints(const TArray<double>& Coordinates, TArray<FVector>& OutPoints) const;
177
182 virtual void Evaluate2DPoints(const TArray<double>& Coordinates, TArray<FVector2d>& OutPoints) const;
183
188 virtual void Evaluate2DPoints(const TArray<double>& Coordinates, TArray<FCurvePoint2D>& OutPoints, int32 DerivativeOrder = 0) const;
189
191 {
192 return FindNotDerivableCoordinates(Boundary, DerivativeOrder, OutNotDerivableCoordinates);
193 }
194 virtual void FindNotDerivableCoordinates(const FLinearBoundary& InBoundary, int32 DerivativeOrder, TArray<double>& OutNotDerivableCoordinates) const;
195
196
201 void Presample(TArray<double>& OutSampling, double Tolerance) const
202 {
203 Presample(Boundary, Tolerance, OutSampling);
204 }
205
206 virtual void Presample(const FLinearBoundary& InBoundary, double Tolerance, TArray<double>& OutSampling) const;
207
212 virtual TSharedPtr<FCurve> MakeBoundedCurve(const FLinearBoundary& InBoundary);
213
217 virtual TSharedPtr<FCurve> Rebound(const FLinearBoundary& InBoundary);
218
222 virtual void ExtendTo(const FVector& DesiredPosition)
223 {
225
227 ensureCADKernel(false);
228 }
229
233 virtual void ExtendTo(const FVector2d& DesiredPosition)
234 {
237 ExtendTo(Point);
238 }
239
240protected:
241
242 virtual double ComputeLength(const FLinearBoundary& InBoundary, double Tolerance) const;
243 virtual double ComputeLength2D(const FLinearBoundary& InBoundary, double Tolerance) const;
244};
245} // namespace UE::CADKernel
246
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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 NOT_IMPLEMENTED
Definition Message.h:107
Definition Array.h:670
Definition SharedPointer.h:692
Definition CADKernelArchive.h:19
bool IsSaving() const
Definition CADKernelArchive.h:113
Definition Curve.h:21
FCurve(const FLinearBoundary &InBounds, int8 InDimension=3)
Definition Curve.h:38
virtual void EvaluatePoint(double Coordinate, FCurvePoint &OutPoint, int32 DerivativeOrder=0) const
Definition Curve.h:118
virtual FVector2d Evaluate2DPoint(double Coordinate) const
Definition Curve.h:147
void FindNotDerivableCoordinates(int32 DerivativeOrder, TArray< double > &OutNotDerivableCoordinates) const
Definition Curve.h:190
int32 GetDimension() const
Definition Curve.h:82
virtual ECurve GetCurveType() const =0
TCache< double > GlobalLength
Definition Curve.h:26
FCurve(int8 InDimension=3)
Definition Curve.h:31
virtual EEntity GetEntityType() const override
Definition Curve.h:87
virtual void ExtendTo(const FVector2d &DesiredPosition)
Definition Curve.h:233
double GetUMin() const
Definition Curve.h:94
virtual FVector EvaluatePoint(double Coordinate) const
Definition Curve.h:127
FLinearBoundary Boundary
Definition Curve.h:27
int8 Dimension
Definition Curve.h:29
void Presample(TArray< double > &OutSampling, double Tolerance) const
Definition Curve.h:201
virtual void Serialize(FCADKernelArchive &Ar) override
Definition Curve.h:60
virtual void Evaluate2DPoint(double Coordinate, FCurvePoint2D &OutPoint, int32 DerivativeOrder=0) const
Definition Curve.h:138
virtual void Evaluate2DPoint(double Coordinate, FVector2d &OutPoint) const
Definition Curve.h:158
virtual void ExtendTo(const FVector &DesiredPosition)
Definition Curve.h:222
const FLinearBoundary & GetBoundary() const
Definition Curve.h:104
virtual void Offset(const FVector &OffsetDirection)=0
virtual TSharedPtr< FEntityGeom > ApplyMatrix(const FMatrixH &InMatrix) const override=0
double GetUMax() const
Definition Curve.h:99
Definition EntityGeom.h:15
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition Cache.h:12
Definition CADEntity.cpp:23
EEntity
Definition CADEntity.h:18
ECurve
Definition GeoEnum.h:10
Definition GeoPoint.h:11
Definition GeoPoint.h:50
Definition Boundary.h:18
double Max
Definition Boundary.h:24
double Min
Definition Boundary.h:23
Definition NURBSCurve.h:10