BIMHome v1.0.0
BIMHome接口文档说明
DxfVector.h
浏览该文件的文档.
1/************************************************************************
2* @file DxfEntity.h
3*
4* @brief DxfEntity类
5*
6* @details DxfEntity类
7*
8* @author zhaojuan
9*
10* @version 版本号 V0.1
11*
12* @date 2023-2-9
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef TECHDRAWAPP_DXF_DXFVECTOR_H
19#define TECHDRAWAPP_DXF_DXFVECTOR_H
20
21#include "BHGlobal.h"
22#include "Base/Vector3D.h"
23
24#define RS_MAXDOUBLE 1.0E+10
25#define RS_MINDOUBLE -1.0E+10
26#define RS_TOLERANCE1 1.0e-1
27#define RS_TOLERANCE 1.0e-10
28#define RS_TOLERANCE2 1.0e-20
29#define RS_TOLERANCE15 1.5e-15
30#define RS_COMPAREWITHZERO 0.000001
31#define RS_POINTTOLERANCE 1.0e-9
32#define RS_ANGLETOLERANCE 1.0e-9
33#ifndef RDEFAULT_TOLERANCE_1E_MIN4
34#define RDEFAULT_TOLERANCE_1E_MIN4 1.0e-4
35#endif
36#ifndef RNANDOUBLE
37#define RNANDOUBLE std::numeric_limits<double>::quiet_NaN()
38#endif
39#define RMAXDOUBLE 1e300
40#define RMINDOUBLE -1e300
41
42#ifndef RINFDOUBLE
43#define RINFDOUBLE std::numeric_limits<double>::infinity()
44#endif
45
46namespace TechDraw {
47 class DxfVector;
48 class TechDrawExport DxfParam {
49 public:
52 public:
53 double m_MinX;
54 double m_MinY;
55 double m_XScale;
56 double m_YScale;
59 };
60
61class TechDrawExport DxfVector {
62public:
63 DxfVector() = default;
64 DxfVector(double x, double y, double z = 0.0);
66 DxfVector(double angle);
69public:
70 DxfVector operator + (const DxfVector& v) const;
71 DxfVector operator - (const DxfVector& v) const;
72 DxfVector operator * (const DxfVector& v) const;
73 DxfVector operator / (const DxfVector& v) const;
74 DxfVector operator + (double d) const;
75 DxfVector operator - (double d) const;
76 DxfVector operator * (double d) const;
77 DxfVector operator / (double d) const;
78 DxfVector operator - () const;
79
80 DxfVector& operator += (const DxfVector& v);
81 DxfVector& operator -= (const DxfVector& v);
82 DxfVector& operator *= (const DxfVector& v);
83 DxfVector& operator /= (const DxfVector& v);
84 DxfVector& operator += (double d);
85 DxfVector& operator -= (double d);
86 DxfVector& operator *= (double d);
87 DxfVector& operator /= (double d);
88 DxfVector& operator = (const DxfVector& v);
89 DxfVector& operator = (double d);
90
91 bool operator == (const DxfVector& v) const;
92 bool operator != (const DxfVector& v) const;
93
94public:
95 void correctCoord(const DxfVector& basePoint,
96 const DxfVector& spaceFactor,
97 double rotaAngle);
98 DxfVector& move(const DxfVector& offset);
100 DxfVector& mirror(const DxfVector& axisPoint1, const DxfVector& axisPoint2);
101 DxfVector& rotate(double ang);
102 DxfVector& rotate(const DxfVector& angleVector);
103 DxfVector& rotate(const DxfVector& center, const double& angle);
104 DxfVector& rotate(const DxfVector& center, const DxfVector& angleVector);
105 DxfVector& scale(float ratio);
106 DxfVector& scale(const DxfVector& center, const DxfVector& factor);
107 DxfVector& scale(const DxfVector& center, const double& factor);
109 void set(double angle);
110 void set(double x, double y, double z = 0);
111 double magnitude() const;
112 double magnitude2D() const;
113 double squared() const;
114 double angle() const;
115 double distanceTo2D(const DxfVector& v) const;
116 double distanceTo(const DxfVector& v) const;
117 double angleTo(const DxfVector& v) const;
118 DxfVector getLerp(const DxfVector& v, double t) const;
122 void setPolar(double radius, double angle);
123 int getClosestIndex(const QList<DxfVector>& list, bool ignoreZ = false) const;
124 DxfVector getClosest(const QList<DxfVector>& list) const;
126 bool equalsFuzzy(const DxfVector& v, double tol = RS_POINTTOLERANCE) const;
128public:
129 static DxfVector minimum(const DxfVector& v1, const DxfVector& v2);
130
131 static DxfVector maximum(const DxfVector& v1, const DxfVector& v2);
132
133 static DxfVector polar(double rho, double theta);
134
135 static double dotP(const DxfVector& v1, const DxfVector& v2);
136 static double posInLine(const DxfVector& start,
137 const DxfVector& end,
138 const DxfVector& pos);
139
140 static DxfVector createPolar(double radius, double angle);
141
142 static double getDotProduct(const DxfVector& v1, const DxfVector& v2);
143
144 static bool lessThanX(const DxfVector& v1, const DxfVector& v2);
145
146 static bool greaterThanX(const DxfVector& v1, const DxfVector& v2);
147
148 static bool lessThanY(const DxfVector& v1, const DxfVector& v2);
149
150 static bool greaterThanY(const DxfVector& v1, const DxfVector& v2);
151
152 static bool lessThanEqualXY(const DxfVector& v1, const DxfVector& v2);
153
154 static bool greaterThanEqualXY(const DxfVector& v1, const DxfVector& v2);
155public:
156 double X() const;
157 double Y() const;
158 double Z() const;
159 void setX(double x);
160 void setY(double y);
161 void setZ(double z);
162private:
163 double m_X = 0.0;
164 double m_Y = 0.0;
165 double m_Z = 0.0;
166};
167}
168
169#endif // !TECHDRAWAPP_DXF_DXFVECTOR_H
#define RS_POINTTOLERANCE
Definition DxfVector.h:31
double m_MinX
Definition DxfVector.h:53
double m_MinY
Definition DxfVector.h:54
double m_PageHeight
Definition DxfVector.h:58
double m_XScale
Definition DxfVector.h:55
double m_PageWidth
Definition DxfVector.h:57
double m_YScale
Definition DxfVector.h:56
Definition DxfVector.h:48
DxfVector & rotate(const DxfVector &center, const DxfVector &angleVector)
DxfVector(double x, double y, double z=0.0)
double angle() const
void set(double angle)
DxfVector & scale(const DxfVector &)
static double getDotProduct(const DxfVector &v1, const DxfVector &v2)
double distanceTo(const DxfVector &v) const
DxfVector & rotate(const DxfVector &center, const double &angle)
static DxfVector maximum(const DxfVector &v1, const DxfVector &v2)
void setZ(double z)
DxfVector & scale(const DxfVector &center, const DxfVector &factor)
void set(double x, double y, double z=0)
static bool greaterThanEqualXY(const DxfVector &v1, const DxfVector &v2)
static DxfVector createPolar(double radius, double angle)
DxfVector(Base::Vector3d pt)
double angleTo(const DxfVector &v) const
DxfVector & rotate(double ang)
DxfVector getClosest(const QList< DxfVector > &list) const
DxfVector & move(const DxfVector &offset)
static bool greaterThanX(const DxfVector &v1, const DxfVector &v2)
static double dotP(const DxfVector &v1, const DxfVector &v2)
void setY(double y)
DxfVector & mirror(const DxfVector &axisPoint1, const DxfVector &axisPoint2)
DxfVector & rotate(const DxfVector &angleVector)
double distanceTo2D(const DxfVector &v) const
bool equalsFuzzy(const DxfVector &v, double tol=RS_POINTTOLERANCE) const
DxfVector(const TechDraw::DxfVector &vec)
static double posInLine(const DxfVector &start, const DxfVector &end, const DxfVector &pos)
static DxfVector polar(double rho, double theta)
void setX(double x)
DxfVector getLerp(const DxfVector &v, double t) const
static bool lessThanX(const DxfVector &v1, const DxfVector &v2)
DxfVector(double angle)
DxfVector & scale(const DxfVector &center, const double &factor)
static bool greaterThanY(const DxfVector &v1, const DxfVector &v2)
static bool lessThanEqualXY(const DxfVector &v1, const DxfVector &v2)
void correctCoord(const DxfVector &basePoint, const DxfVector &spaceFactor, double rotaAngle)
DxfVector & transform(const DxfParam &param)
double squared() const
static bool lessThanY(const DxfVector &v1, const DxfVector &v2)
void setPolar(double radius, double angle)
Sets a new position for the vector in polar coordinates.
double Z() const
DxfVector get2D() const
DxfVector & scale(float ratio)
int getClosestIndex(const QList< DxfVector > &list, bool ignoreZ=false) const
double magnitude2D() const
double X() const
double magnitude() const
double Y() const
static DxfVector minimum(const DxfVector &v1, const DxfVector &v2)
DxfVector getNormalized() const
Definition DxfVector.h:61
Definition ArrowPropEnum.h:26