BIMHome v1.0.0
BIMHome接口文档说明
DrawPageParameterDefine.h
浏览该文件的文档.
1/************************************************************************
2* @file DrawPageParameterDefine.h
3*
4* @brief 图纸相关参数结构
5*
6* @details
7*
8* @author
9*
10* @version 1.0
11*
12* @date 2025-6-23
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef TECHDRAW_APP_DRAWPAGEPARAMETERDEFINE_H
19#define TECHDRAW_APP_DRAWPAGEPARAMETERDEFINE_H
20
21#include "BHGlobal.h"
22#include <vector>
23#include <map>
24#include "Base/Vector3D.h"
25
26namespace TechDraw
27{
28 // 图纸可设置比例
29 const int StandarScale[] = { 1,2,5,10,20,25,50,100,200,500 };
30
31 // 对应的比例属性下拉列表
32 static const char* ViewScaleTypeEnums[] = { "1", "2", "5","10","20", "25", "50", "100","200","500", nullptr };
33
34 // 纸张幅面规格尺寸
35 const int DrawingStandar[9][2] = { 841, 1189, 594, 841, 420, 594, 297, 420, 210, 297, 148, 210, 105, 148, 74, 105, 52, 74 };
36
37 // 半径/直径标注的圆数据结构
38 struct TechDrawExport CircleInfo
39 {
41 r = 0.0;
42 }
43 float r;
45
46 bool isEquality(const CircleInfo data) {
47 if (abs(r - data.r) < FLT_EPSILON &&
48 abs(centerPt.x - data.centerPt.x) < FLT_EPSILON &&
49 abs(centerPt.y - data.centerPt.y) < FLT_EPSILON &&
50 abs(centerPt.z - data.centerPt.z) < FLT_EPSILON)
51 return true;
52 return false;
53 }
54 };
55 struct Point {
56 float x;
57 float y;
58
59 Point(float x = 0, float y = 0) : x(x), y(y) {}
60
61 Point operator+(const Point& other) const {
62 return Point(x + other.x, y + other.y);
63 }
64 Point operator*(const float& d) const {
65 return Point(x * d, y * d);
66 }
67 Point operator/(const float& d) const {
68 return Point(x / d, y / d);
69 }
70 Point operator-(const Point& pot) const {
71 return Point(x - pot.x, y - pot.y);
72 }
73 void set(float xx, float yy) {
74 x = xx;
75 y = yy;
76 }
77
78 bool isEquality(const Point pot) {
79 if (abs(pot.x - x) < 1.0e-10 &&
80 abs(pot.y - y) < 1.0e-10)
81 return true;
82 return false;
83 }
84
85 // 单位化
87 double length = std::sqrt(x * x + y * y);
88 if (length > 0) {
89 return Point(x / length, y / length);
90 }
91 else {
92 return Point(0, 0);
93 }
94 }
95 // 沿着p1到p2点形成的线段,计算线上点(x,y)为d的点坐标
97 double dx = p2.x - p1.x;
98 double dy = p2.y - p1.y;
99 double L = std::sqrt(std::pow(p2.x - p1.x, 2) + std::pow(p2.y - p1.y, 2));
100 double unit_dx = dx / L;
101 double unit_dy = dy / L;
102 double xNew = x + unit_dx * d;
103 double yNew = y + unit_dy * d;
104
105 return Point(xNew, yNew);
106 }
107
108 // (x, y)沿着法线方向移动距离d后的点
110 return TechDraw::Point(x, y) + dir * d;
111 }
112
113 // 计算pot0, pot1线上一点(x,y)沿着线的法线方向移动距离d的点(d的正负符合右手法则)
115 TechDraw::Point dir = pot1 - pot0;
116 TechDraw::Point normal = Point(dir.y, -dir.x);
119 return P.movePointAlongNormal(unitNormal, d);
120 }
121
122 // 点P到AB的投影
124 Point P(x, y);
125 Point AB = B - A;
126 Point AP = P - A;
127
128 // 计算向量AB的单位向量
130
131 // 计算点P到线段AB的垂足向量(即投影向量)
132 double dotProduct = AP.x * AB_unit.x + AP.y * AB_unit.y;
134
135 // 计算投影点P'的坐标
136 newP.set(A.x + projection_vector.x, A.y + projection_vector.y);
137 }
138 };
139
140
141 struct Interval {
142 double start;
143 double end;
144
145 Interval(double p, double s) : start(p), end(s) {}
146 void set(double p, double s) {
147 start = p;
148 end = s;
149 }
150 void setStart(double p) {
151 start = p;
152 }
153
154 void setEnd(double p) {
155 end = p;
156 }
157 };
158 static bool compareSection(const TechDraw::Interval& a, const TechDraw::Interval& b);
159 // 计算多个区间的交集
160 bool TechDrawExport findIntervalsIntersection(std::vector<TechDraw::Interval> intervals, TechDraw::Interval& interval);
161
163 {
166 double sD;
169 sDimStartPotOffset.Set(0, 0, 0);
170 sDimEntityOffset.Set(0, 0, 0);
171 sD = 0;
172 sDimStartPos = 0;
173 }
174 };
175
177 {
182 };
183
185 {
191
193 sWellLevel = 1;
194 sEmbedmentLevel = -1;
195 sPitLevel = -1;
196 sTubeHoleLevel = -1;
197 sCoverLevel = -1;
198 }
199 bool isOver() const {
200 return (sWellLevel != -1 && sEmbedmentLevel != -1 && sPitLevel != -1 && sTubeHoleLevel != -1) || sCoverLevel != -1;
201 }
202 bool isOver1() const {
203 return sWellLevel != -1 && sEmbedmentLevel != -1 && sPitLevel != -1 && sTubeHoleLevel != -1 && sCoverLevel != -1;
204 }
205 };
206
207 struct Boundary
208 {
209 double sLeft;
210 double sTop;
211 double sRight;
212 double sBottom;
213
215 sLeft = 0.0;
216 sTop = 0.0;
217 sRight = 0.0;
218 sBottom = 0.0;
219 }
220 };
221 typedef std::map<PlateIndex, DimensionLevel> DimLevel;
222
223 enum TechDrawExport OffsetType
224 {
225 LEFT_BOTTOM, // 左下为原点
226 LEFT_TOP, // 左上
227 RIGHT_TOP, // 右上
228 RIGHT_BOTTOM, // 右下
229 CENTERPT, // 中心
230 };
231
232}
233
234#endif // TECHDRAW_APP_DRAWPAGEPARAMETERDEFINE_H
LEFT_BOTTOM
Definition DrawPageParameterDefine.h:225
CENTERPT
Definition DrawPageParameterDefine.h:229
LEFT_TOP
Definition DrawPageParameterDefine.h:226
RIGHT_TOP
Definition DrawPageParameterDefine.h:227
RIGHT_BOTTOM
Definition DrawPageParameterDefine.h:228
A
Definition ISnapProcessedBase.h:49
P
Definition ISnapProcessedBase.h:49
L
Definition ISnapProcessedBase.h:49
B
Definition ISnapProcessedBase.h:49
void Set(_Precision fX, _Precision fY, _Precision fZ)
设置向量的 x, y, 和 z 分量为给定的值 fX, fY, 和 fZ
_Precision x
x-coordinate
Definition Vector3D.h:714
_Precision z
z-coordinate
Definition Vector3D.h:716
_Precision y
y-coordinate
Definition Vector3D.h:715
PlateIndex
Definition DrawPageParameterDefine.h:177
@ LeftPlate
Definition DrawPageParameterDefine.h:178
@ RightPlate
Definition DrawPageParameterDefine.h:179
@ BottomPlate
Definition DrawPageParameterDefine.h:181
@ TopPlate
Definition DrawPageParameterDefine.h:180
bool TechDrawExport findIntervalsIntersection(std::vector< TechDraw::Interval > intervals, TechDraw::Interval &interval)
static const char * ViewScaleTypeEnums[]
Definition DrawPageParameterDefine.h:32
const int StandarScale[]
Definition DrawPageParameterDefine.h:29
std::map< PlateIndex, DimensionLevel > DimLevel
Definition DrawPageParameterDefine.h:221
const int DrawingStandar[9][2]
Definition DrawPageParameterDefine.h:35
static bool compareSection(const TechDraw::Interval &a, const TechDraw::Interval &b)
Definition ArrowPropEnum.h:26
double sTop
Definition DrawPageParameterDefine.h:210
double sRight
Definition DrawPageParameterDefine.h:211
Boundary()
Definition DrawPageParameterDefine.h:214
double sLeft
Definition DrawPageParameterDefine.h:209
double sBottom
Definition DrawPageParameterDefine.h:212
Definition DrawPageParameterDefine.h:208
float r
Definition DrawPageParameterDefine.h:43
bool isEquality(const CircleInfo data)
Definition DrawPageParameterDefine.h:46
CircleInfo()
Definition DrawPageParameterDefine.h:40
Base::Vector3d centerPt
Definition DrawPageParameterDefine.h:44
Definition DrawPageParameterDefine.h:39
Base::Vector3d sDimStartPotOffset
Definition DrawPageParameterDefine.h:164
double sD
Definition DrawPageParameterDefine.h:166
Base::Vector3d sDimEntityOffset
Definition DrawPageParameterDefine.h:165
double sDimStartPos
Definition DrawPageParameterDefine.h:167
DimensionData()
Definition DrawPageParameterDefine.h:168
Definition DrawPageParameterDefine.h:163
DimensionLevel()
Definition DrawPageParameterDefine.h:192
bool isOver() const
Definition DrawPageParameterDefine.h:199
int sWellLevel
Definition DrawPageParameterDefine.h:186
int sCoverLevel
Definition DrawPageParameterDefine.h:190
int sTubeHoleLevel
Definition DrawPageParameterDefine.h:189
bool isOver1() const
Definition DrawPageParameterDefine.h:202
int sPitLevel
Definition DrawPageParameterDefine.h:188
int sEmbedmentLevel
Definition DrawPageParameterDefine.h:187
Definition DrawPageParameterDefine.h:185
double end
Definition DrawPageParameterDefine.h:143
double start
Definition DrawPageParameterDefine.h:142
void setStart(double p)
Definition DrawPageParameterDefine.h:150
void set(double p, double s)
Definition DrawPageParameterDefine.h:146
void setEnd(double p)
Definition DrawPageParameterDefine.h:154
Interval(double p, double s)
Definition DrawPageParameterDefine.h:145
Definition DrawPageParameterDefine.h:141
bool isEquality(const Point pot)
Definition DrawPageParameterDefine.h:78
TechDraw::Point alongLineNormalMoveDistance(const TechDraw::Point pot0, const TechDraw::Point pot1, float d)
Definition DrawPageParameterDefine.h:114
Point operator*(const float &d) const
Definition DrawPageParameterDefine.h:64
Point operator/(const float &d) const
Definition DrawPageParameterDefine.h:67
Point operator+(const Point &other) const
Definition DrawPageParameterDefine.h:61
TechDraw::Point movePointAlongNormal(const TechDraw::Point &dir, const float d)
Definition DrawPageParameterDefine.h:109
Point(float x=0, float y=0)
Definition DrawPageParameterDefine.h:59
float y
Definition DrawPageParameterDefine.h:57
void set(float xx, float yy)
Definition DrawPageParameterDefine.h:73
Point moveAlongLine(Point p1, Point p2, float d)
Definition DrawPageParameterDefine.h:96
Point operator-(const Point &pot) const
Definition DrawPageParameterDefine.h:70
void perpendicularPointOnLine(Point &newP, const Point A, const Point B)
Definition DrawPageParameterDefine.h:123
float x
Definition DrawPageParameterDefine.h:56
Point normalizeVector()
Definition DrawPageParameterDefine.h:86
Definition DrawPageParameterDefine.h:55