UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PolylineCurve.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Geo/Curves/Curve.h"
7
8namespace UE::CADKernel
9{
10class FInfoEntity;
11class FSurface;
12
13template<class PointType, class PointCurveType>
14class CADKERNEL_API TPolylineCurve : public FCurve, public TPolyline<PointType>
15{
16 friend class FEntity;
17 friend class FPolylineTools;
18
19protected:
20
22
25 , Approximator(this->Coordinates, this->Points)
26 {
27 this->Coordinates = InCoordinates;
28 this->Points = InPoints;
29 ensureCADKernel(this->Coordinates[0] < this->Coordinates.Last());
30 Boundary.Set(this->Coordinates.HeapTop(), this->Coordinates.Last());
31 }
32
35 , TPolyline<PointType>(InPoints)
36 , Approximator(this->Coordinates, this->Points)
37 {
38 this->Coordinates.Reserve(InPoints.Num());
39 this->Coordinates.Add(0.);
40
41 double CurvilineLength = 0;
42 for (int32 iPoint = 1; iPoint < this->Points.Num(); iPoint++)
43 {
44 CurvilineLength += PointType::Distance(this->Points[iPoint], this->Points[iPoint - 1]);
45 this->Coordinates.Add(CurvilineLength);
46 }
47
48 Boundary.Set(0, CurvilineLength);
49 }
50
52 : Approximator(this->Coordinates, this->Points)
53 {
54 }
55
56public:
57
58 virtual void Serialize(FCADKernelArchive& Ar) override
59 {
60 FCurve::Serialize(Ar);
62 }
63
68
69 PointType EvaluatePointAt(double InCoordinate) const
70 {
71 return Approximator.ApproximatePoint(InCoordinate);
72 }
73
78
79 virtual double ComputeSubLength(const FLinearBoundary& InBoundary) const
80 {
81 return Approximator.ComputeLengthOfSubPolyline(InBoundary);
82 }
83
85 {
86 return this->Points;
87 }
88
90 {
91 return this->Coordinates;
92 }
93
95 {
96 const int32 CoordinateCount = this->Coordinates.Num();
97 if (CoordinateCount > 2)
98 {
100 int32 Index = 1;
101 for (; Index < CoordinateCount - 1 && this->Coordinates[Index] <= InBoundary.GetMin(); ++Index);
102
103 for (; Index < CoordinateCount - 1 && this->Coordinates[Index] <= InBoundary.GetMax(); ++Index)
104 {
105 OutNotDerivableCoordinates.Emplace(this->Coordinates[Index]);
106 }
107 }
108 }
109
111 {
112 this->Points = InPoints;
113 GlobalLength.Empty();
114 }
115
116 template<class PolylineType>
118 {
120 NewPoints.Reserve(this->Points.Num());
121
122 for (PointType Point : this->Points)
123 {
124 NewPoints.Emplace(InMatrix.Multiply(Point));
125 }
126
127 return FEntity::MakeShared<PolylineType>(NewPoints, this->Coordinates);
128 }
129
130 virtual void Offset(const FVector& OffsetDirection) override
131 {
132 for (PointType& Pole : this->Points)
133 {
134 Pole += PointType(OffsetDirection);
135 }
136 }
137
138 virtual void ExtendTo(const FVector& DesiredPoint) override
139 {
140 PolylineTools::ExtendTo(this->Points, (PointType)DesiredPoint);
141 }
142};
143
144class CADKERNEL_API FPolylineCurve : public TPolylineCurve<FVector, FCurvePoint>
145{
146 friend class FEntity;
147
148protected:
153
158
159 FPolylineCurve() = default;
160
161public:
162
163 virtual ECurve GetCurveType() const override
164 {
165 return ECurve::Polyline3D;
166 }
167
169 {
171 }
172
173 virtual FVector EvaluatePoint(double InCoordinate) const override
174 {
175 return EvaluatePointAt(InCoordinate);
176 }
177
178#ifdef CADKERNEL_DEV
179 virtual FInfoEntity& GetInfo(FInfoEntity& Info) const override;
180#endif
181
182};
183
184class CADKERNEL_API FPolyline2DCurve : public TPolylineCurve<FVector2d, FCurvePoint2D>
185{
186 friend class FEntity;
187
188protected:
193
198
199 FPolyline2DCurve() = default;
200
201public:
202
203 virtual ECurve GetCurveType() const override
204 {
205 return ECurve::Polyline2D;
206 }
207
212
214 {
215 EvaluateCurvesPoint(InCoordinate, OutPoint, InDerivativeOrder);
216 }
217
218 virtual FVector2d Evaluate2DPoint(double InCoordinate) const override
219 {
220 return EvaluatePointAt(InCoordinate);
221 }
222
224 {
225 EvaluateCurvesPoints(InCoordinates, OutPoints, InDerivativeOrder);
226 }
227
228#ifdef CADKERNEL_DEV
229 virtual FInfoEntity& GetInfo(FInfoEntity& Info) const override;
230#endif
231
232};
233
234} // namespace UE::CADKernel
235
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
Definition Array.h:670
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition SharedPointer.h:692
Definition CADKernelArchive.h:19
Definition Curve.h:21
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition PolylineCurve.h:185
virtual ECurve GetCurveType() const override
Definition PolylineCurve.h:203
virtual TSharedPtr< FEntityGeom > ApplyMatrix(const FMatrixH &InMatrix) const override
Definition PolylineCurve.h:208
virtual FVector2d Evaluate2DPoint(double InCoordinate) const override
Definition PolylineCurve.h:218
virtual void Evaluate2DPoints(const TArray< double > &InCoordinates, TArray< FCurvePoint2D > &OutPoints, int32 InDerivativeOrder=0) const override
Definition PolylineCurve.h:223
FPolyline2DCurve(const TArray< FVector2d > &InPoints, const TArray< double > &InCoordinates)
Definition PolylineCurve.h:189
virtual void Evaluate2DPoint(double InCoordinate, FCurvePoint2D &OutPoint, int32 InDerivativeOrder=0) const override
Definition PolylineCurve.h:213
FPolyline2DCurve(const TArray< FVector2d > &InPoints)
Definition PolylineCurve.h:194
Definition PolylineCurve.h:145
FPolylineCurve(const TArray< FVector > &InPoints, const TArray< double > &InCoordinates)
Definition PolylineCurve.h:149
virtual TSharedPtr< FEntityGeom > ApplyMatrix(const FMatrixH &InMatrix) const override
Definition PolylineCurve.h:168
virtual ECurve GetCurveType() const override
Definition PolylineCurve.h:163
virtual FVector EvaluatePoint(double InCoordinate) const override
Definition PolylineCurve.h:173
FPolylineCurve(const TArray< FVector > &InPoints)
Definition PolylineCurve.h:154
Definition PolylineTools.h:194
void ApproximatePoints(const TArray< double > &InCoordinates, TArray< CurvePointType > &OutPoints, int32 InDerivativeOrder=0) const
Definition PolylineTools.h:360
PointType ApproximatePoint(const double InCoordinate) const
Definition PolylineTools.h:319
double ComputeLengthOfSubPolyline(const int BoundaryIndex[2], const FLinearBoundary &InBoundary) const
Definition PolylineTools.h:779
Definition PolylineCurve.h:15
virtual void FindNotDerivableCoordinates(const FLinearBoundary &InBoundary, int32 DerivativeOrder, TArray< double > &OutNotDerivableCoordinates) const override
Definition PolylineCurve.h:94
virtual void EvaluateCurvesPoint(double InCoordinate, PointCurveType &OutPoint, int32 InDerivativeOrder=0) const
Definition PolylineCurve.h:64
TPolylineCurve(const TArray< PointType > &InPoints, const TArray< double > &InCoordinates, int8 InDimension)
Definition PolylineCurve.h:23
TPolylineCurve()
Definition PolylineCurve.h:51
const TArray< PointType > & GetPolylinePoints() const
Definition PolylineCurve.h:84
TPolylineCurve(const TArray< PointType > &InPoints, int8 InDimension)
Definition PolylineCurve.h:33
virtual void ExtendTo(const FVector &DesiredPoint) override
Definition PolylineCurve.h:138
virtual double ComputeSubLength(const FLinearBoundary &InBoundary) const
Definition PolylineCurve.h:79
virtual void Serialize(FCADKernelArchive &Ar) override
Definition PolylineCurve.h:58
TPolylineApproximator< PointType > Approximator
Definition PolylineCurve.h:21
PointType EvaluatePointAt(double InCoordinate) const
Definition PolylineCurve.h:69
virtual void EvaluateCurvesPoints(const TArray< double > &InCoordinates, TArray< PointCurveType > &OutPoints, int32 InDerivativeOrder=0) const
Definition PolylineCurve.h:74
void SetPoints(const TArray< PointType > &InPoints)
Definition PolylineCurve.h:110
virtual void Offset(const FVector &OffsetDirection) override
Definition PolylineCurve.h:130
const TArray< double > & GetPolylineParameters() const
Definition PolylineCurve.h:89
TSharedPtr< FEntityGeom > ApplyMatrixImpl(const FMatrixH &InMatrix) const
Definition PolylineCurve.h:117
Definition Polyline.h:17
Definition CADEntity.cpp:23
ECurve
Definition GeoEnum.h:10
U16 Index
Definition radfft.cpp:71
Definition GeoPoint.h:11
Definition GeoPoint.h:50
Definition Boundary.h:18