UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EllipseCurve.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"
5#include "Geo/GeoPoint.h"
6#include "Math/MathConst.h"
7
8namespace UE::CADKernel
9{
10
12{
13 friend class FEntity;
14
15protected:
17 double RadiusU;
18 double RadiusV;
19
23 , RadiusU(InRadiusU)
24 , RadiusV(InRadiusV)
25 {
26 }
27
31 , RadiusU(InRadiusU)
32 , RadiusV(InRadiusV)
33 {
34 }
35
36 FEllipseCurve() = default;
37
38public:
39
40 virtual void Serialize(FCADKernelArchive& Ar) override
41 {
42 FCurve::Serialize(Ar);
43 Ar << Matrix;
44 Ar << RadiusU;
45 Ar << RadiusV;
46 }
47
48#ifdef CADKERNEL_DEV
49 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
50#endif
51
52 virtual ECurve GetCurveType() const override
53 {
54 return ECurve::Ellipse;
55 }
56
57 const FMatrixH& GetMatrix() const
58 {
59 return Matrix;
60 }
61
62 bool IsCircular() const
63 {
64 return FMath::IsNearlyZero(RadiusU - RadiusV);
65 }
66
67 virtual TSharedPtr<FEntityGeom> ApplyMatrix(const FMatrixH& InMatrix) const override;
68 virtual void Offset(const FVector& OffsetDirection) override;
69
70 virtual void EvaluatePoint(double Coordinate, FCurvePoint& OutPoint, int32 DerivativeOrder = 0) const override
71 {
73
74 OutPoint.DerivativeOrder = DerivativeOrder;
75
76 const double CosU = cos(Coordinate);
77 const double SinU = sin(Coordinate);
78
79 OutPoint.Point = Matrix.Multiply(FVector(RadiusU * CosU, RadiusV * SinU, 0.));
80
81 if (DerivativeOrder > 0)
82 {
83 OutPoint.Gradient = Matrix.MultiplyVector(FVector(RadiusU * (-SinU), RadiusV * CosU, 0.));
84
85 if (DerivativeOrder > 1)
86 {
87 OutPoint.Laplacian = Matrix.MultiplyVector(FVector(RadiusU * (-CosU), RadiusV * (-SinU), 0.));
88 }
89 }
90 }
91
92 virtual void Evaluate2DPoint(double Coordinate, FCurvePoint2D& OutPoint, int32 DerivativeOrder = 0) const override
93 {
95
96 OutPoint.DerivativeOrder = DerivativeOrder;
97
98 const double CosU = cos(Coordinate);
99 const double SinU = sin(Coordinate);
100
101 OutPoint.Point = Matrix.Multiply2D(FVector2d(RadiusU * CosU, RadiusV * SinU));
102
103 if (DerivativeOrder > 0)
104 {
105 OutPoint.Gradient = Matrix.MultiplyVector2D(FVector2d(RadiusU * (-SinU), RadiusV * CosU));
106
107 if (DerivativeOrder > 1)
108 {
109 OutPoint.Laplacian = Matrix.MultiplyVector2D(FVector2d(RadiusU * (-CosU), RadiusV * (-SinU)));
110 }
111 }
112 }
113};
114
115} // namespace UE::CADKernel
116
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 FVector
Definition IOSSystemIncludes.h:8
UE::Math::TVector2< double > FVector2d
Definition MathFwd.h:61
#define PI
Definition UnrealMathUtility.h:65
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition SharedPointer.h:692
Definition CADKernelArchive.h:19
Definition Curve.h:21
Definition EllipseCurve.h:12
virtual ECurve GetCurveType() const override
Definition EllipseCurve.h:52
virtual void Serialize(FCADKernelArchive &Ar) override
Definition EllipseCurve.h:40
double RadiusU
Definition EllipseCurve.h:17
double RadiusV
Definition EllipseCurve.h:18
virtual void Evaluate2DPoint(double Coordinate, FCurvePoint2D &OutPoint, int32 DerivativeOrder=0) const override
Definition EllipseCurve.h:92
virtual void EvaluatePoint(double Coordinate, FCurvePoint &OutPoint, int32 DerivativeOrder=0) const override
Definition EllipseCurve.h:70
bool IsCircular() const
Definition EllipseCurve.h:62
const FMatrixH & GetMatrix() const
Definition EllipseCurve.h:57
FMatrixH Matrix
Definition EllipseCurve.h:16
FEllipseCurve(const FMatrixH &InMatrix, double InRadiusU, double InRadiusV, int8 InDimension=3)
Definition EllipseCurve.h:20
FEllipseCurve(const FMatrixH &InMatrix, double InRadiusU, double InRadiusV, const FLinearBoundary &InBounds, int8 InDimension=3)
Definition EllipseCurve.h:28
Definition CADEntity.h:56
Definition MatrixH.h:14
Definition CADEntity.cpp:23
ECurve
Definition GeoEnum.h:10
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
Definition GeoPoint.h:11
Definition GeoPoint.h:50
Definition Boundary.h:18