BIMHome v1.0.0
BIMHome接口文档说明
ArcofCircle.h
浏览该文件的文档.
1/************************************************************************
2* @file ArcofCircle.h
3*
4* @brief 三维圆弧
5*
6* @details 三维圆弧
7*
8* @author lirf
9*
10* @version 1.0
11*
12* @date 2025-6-7
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_ARCOFCIRCLE_H
19#define BIMHOMEBASE_ARCOFCIRCLE_H
20
21#include "Base/Math/Geometry/Curve.h"
22#include "Base/Vector2D.h"
23
24#define ArcFromCenterRadiusAngle "ArcFromCenterRadiusAngle"
25#define ArcFromCircleAngle "ArcFromCircleAngle"
26#define ArcFromThreePoints "ArcFromThreePoints"
27#define ArcFromCirclePoints "ArcFromCirclePoints"
28
29namespace Base
30{
31 class Circle;
32 //圆弧
33 class BaseExport ArcofCircle :public Curve
34 {
36 public:
37 //基础参数构造方法
48 Base::Vector3d center,
49 Base::Vector3d normal,
50 Base::Vector3d refvec,
51 double radius,
52 double startangle,
53 double endangle);
54
62 const Base::Circle& circle,
63 const double angle1,
64 const double angle2);
65
66 //三点定弧的构造方法
74
82 const Base::Vector3d& pt1,
83 const Base::Vector3d& pt2);
84
85
86 virtual Geometry* copy(void) const;
87
93
100
106
112 void setNormal(const Base::Vector3d& vec);
113
119
125 void setRefVec(const Base::Vector3d& vec);
126
132 double getRadius();
133
139 void setRadius(double pt);
140
147
153 void setStartAngle(double angle);
154
160 double getEndAngle();
161
167 void setEndAngle(double angle);
168
174 double getEndAngle() const;
175
182
187 void setDirection(bool bClockWire);
188
192 Base::Vector3d getMidPoint()const;//注意:返回的是圆弧中点,不是三点定弧中的第二个点
193
194 //对于非三点定弧的构造方法,需要计算起始点和终止点的坐标;
196
197 //对于三点定弧的构造方法,需要计算圆心半径等参数
199
200 bool isClockWise();//计算圆弧方向是否为逆时针
201
202 bool isClosed();
203 virtual double getLength()const override;
204
205 //反向
206 void Reverse();
207
208 //返回圆弧的类型
209 std::string getArcType() const;
210
211 //设置基准轴
213
214 public:
215 // 判断该角度是否在扫略范围内
216 bool isInArc(double angle);
217 // 计算圆弧极小值和极大值
218 std::pair<Base::Vector2d, Base::Vector2d> getExtrema();
219
220 private:
222 Base::Vector3d mNormal;//弧所在平面法向量
223 Base::Vector3d mRefVec;//角度的基准向量(即所在平面的X轴方向,基于该向量确定起始角度和终止角度)
224 double mRadius;//半径
225 double mStartAngle;//起始角度 弧度制
226 double mEndAngle;//终止角度 弧度制
227 bool mClockWise;//注意:false 顺时针,true 逆时针(默认以基本坐标系1、2、3、4象限方向为准)
228
229 Base::Vector3d mStartPoint;//起始点坐标
230 Base::Vector3d mSecondPoint;//三点定弧存储除了起点和终点以外的那个点的坐标
231 Base::Vector3d mEndPoint;//终止点坐标
233 std::string mArcType;//圆弧的类型(由圆心半径起始角度终止角度构造的圆弧、三点构造的圆弧)
234 };
235
236}
237
238#endif
@ Circle
Definition CurveTypeDefine.h:37
#define GEOMETRY_HEADER(_name_)
Definition Geometry.h:27
void setStartAngle(double angle)
设置起始角度
Base::Vector3d getEndPoint() const
ArcofCircle(Base::Vector3d pt1, Base::Vector3d pt2, Base::Vector3d pt3)
构造一个圆弧,基于三点
Base::Vector3d getStartPoint() const
bool isInArc(double angle)
virtual double getLength() const override
Base::Vector3d getCenterPoint()
获取圆心
Base::Vector3d getMidPoint() const
Base::Vector3d mSecondPoint
Definition ArcofCircle.h:230
ArcofCircle(Base::Vector3d center, Base::Vector3d normal, Base::Vector3d refvec, double radius, double startangle, double endangle)
构造一个圆弧,基于圆心,法向量,基准向量,半径,起始角度,终止角度
Base::Vector3d mEndPoint
Definition ArcofCircle.h:231
std::string mArcType
Definition ArcofCircle.h:233
Base::Vector3d mMidpoint
Definition ArcofCircle.h:232
void calculateStartandEndPoint()
double mStartAngle
Definition ArcofCircle.h:225
void setRefVec(const Base::Vector3d &vec)
设置角度的基准向量
virtual Geometry * copy(void) const
double getStartAngle()
获取起始角度
std::pair< Base::Vector2d, Base::Vector2d > getExtrema()
bool getDirection()
获取方向
Base::Vector3d getNormal()
获取所在平面的法向量
Base::Vector3d mStartPoint
Definition ArcofCircle.h:229
double getEndAngle()
获取终止角度
double getRadius()
获取半径
void setEndAngle(double angle)
设置终止角度
void setNormal(const Base::Vector3d &vec)
设置所在平面的法向量
Base::Vector3d mCenterPoint
Definition ArcofCircle.h:221
void setRadius(double pt)
设置半径
bool mClockWise
Definition ArcofCircle.h:227
ArcofCircle(const Base::Circle &circle, const Base::Vector3d &pt1, const Base::Vector3d &pt2)
构造一个圆弧,基于一个已有的圆对象和圆上的两个点(起点、终点)
double mEndAngle
Definition ArcofCircle.h:226
double getEndAngle() const
获取终止角度
Base::Vector3d getSecondPoint() const
void calculateCircleCenter()
void setCenterPoint(const Base::Vector3d &pt)
设置圆心
Base::Vector3d mRefVec
Definition ArcofCircle.h:223
std::string getArcType() const
Base::Vector3d mNormal
Definition ArcofCircle.h:222
void setDirection(bool bClockWire)
设置圆弧方向
Base::Vector3d getRefVec()
获取角度的基准向量
ArcofCircle(const Base::Circle &circle, const double angle1, const double angle2)
构造一个圆弧,基于一个已有的圆对象和圆上的两个角度(起始角度、终止角度)
double mRadius
Definition ArcofCircle.h:224
Definition ArcofCircle.h:34
Definition Circle.h:27
Definition Curve.h:27
Definition Geometry.h:81
Definition BaseFigureFactory.h:24