三维重建项目文档
三维重建二维转三维担架部分项目文档
担架部分的二维转三维
1. 整体输入输出效果
1.1 输入
每个担架的三视图的杆件及对应的二维坐标
杆件ID: [左端点(x,y),右端点(x,y)]
- 正视图:
coordinatesFront_data - 底视图:
coordinatesBottom_data - 顶视图:
coordinatesOverhead_data
1 | |
1.2 输出
输出分两部分:
- 节点的三维信息:
(节点编号:X坐标,Y坐标,Z坐标,对称性) - 杆件的三维信息:
(杆件编号:起点节点,终点节点,对称性)
1.2.1 对称性
节点和杆件的对称性
- 0:代表没有对称性,就这一个单独的节点/杆件
- 1:左右对称(对称性1)
- 2:前后对称(对称性2)
- 3:关于Z轴对称(对称性3)
- 4:以及四角对称(对称性4)
1.2.2 XYZ坐标的表示
- 一类节点(一类杆件的两个端点):真实的
(x,y,z)三维坐标表示 - 二类节点(非一类节点):
x坐标用真实值;(y,z)分别用一类杆件的两个端点节点编号表示(引用表示法)
1.2.3 XYZ坐标轴的方向
X轴:从左往右Y轴:从前往后Z轴:从上到下


2. get_first_ganjian_id.py
获取每个视图的两个一类杆件的ID:(杆件长度+杆件ID编号)判断
- 选长度最长的
top_k根作为候选; - 再检查候选是否包含编号最小的那根或正好是最小两根;
- 不满足则回退为编号最小的两根,最后按编号升序返回。
3. xintrans.py的代码逻辑
3.1 输入和输出
输入
| 字段名 | 含义说明 |
|---|---|
| file_path | 文件的路径 |
| drawing_id | 担架图纸的序号 |
| data1 | 担架和塔身连接点的真实三维坐标 |
| drawing_type | 图纸类型 |
输出
| 字段名 | 含义说明 |
|---|---|
| jiedian | 节点的三维信息 |
| ganjian | 杆件的三维信息 |
3.2 预处理
3.2.1 读取二维坐标数据
coordinatesFront_data和coordinatesBottom_data和coordinatesOverhead_data分别代表前视图、底视图、顶视图传来的二维数据
1 | |
3.2.2 转换data1连接点的数据存入pj[]中

pj 是一个 四维数组(嵌套列表),结构如下:
1 | |
| 表达式 | 含义 |
|---|---|
pj[drawing_id][0][0] |
第 drawing_id 号担架上连接点的节点编号 |
pj[drawing_id][1][0] |
第 drawing_id 号担架下连接点的节点编号 |
pj[drawing_id][0][1] |
第 drawing_id 号担架上连接点的三维坐标(x,y,z) |
pj[drawing_id][1][1] |
第 drawing_id 号担架下连接点的三维坐标(x,y,z) |
pj[drawing_id][0][1][0] |
第 drawing_id 号担架上连接点的 x 坐标 |
pj[drawing_id][0][1][1] |
第 drawing_id 号担架上连接点的 y 坐标 |
pj[drawing_id][0][1][2] |
第 drawing_id 号担架上连接点的 z 坐标 |
pj[drawing_id][1][1][0] |
第 drawing_id 号担架下连接点的 x 坐标 |
pj[drawing_id][1][1][1] |
第 drawing_id 号担架下连接点的 y 坐标 |
pj[drawing_id][1][1][2] |
第 drawing_id 号担架下连接点的 z 坐标 |
3.3 if-else逻辑
if(drawing_id * 100 + 1 in coordinatesBottom_data): 处理下面(非最上层)的担架(3,4,5,6,7,8)else: 处理最上层的担架(1,2)
4. 每一个担架的处理逻辑
- 尖点的生成:完成一类节点的生成
4.1 尖点的生成(一类节点的生成)
基于calc_jiandian_xyz()函数生成尖点的三维坐标信息
尖点(一类节点):一类杆件的一端节点(非担架塔身连接点),是一类节点,用真实的三维坐标表示(x,y,z)
| 担架ID | 尖点ID |
|---|---|
| 1 | 10120 |
| 2 | 20120 |
| 3 | 30120 |
| 4 | 40120 |
| 5 | 50120 |
| 6 | 60120 |
| 7 | 70120 |
| 8 | 80120 |
4.2 正视图/底视图/顶视图
输出:生成正视图/底视图/顶视图中的二类节点及其二类杆件的三维信息
4.2.1 找到一类杆件上的交点及其对应的三维x值
- 获得两个一类杆件上的交点坐标(二维):(x,y)
- 得到交点坐标的三维坐标的真实x值: {(x,y)->三维x}
1 | |
4.2.2 标记交点中是否包含一类节点
- 获取一类杆件左端点的节点编号
left_3d_id和右端点的节点编号right_3d_id - 标记交点中是否包含一类节点
1 | |
4.2.3 生成二类节点的三维信息
- 二类节点的节点编号:
{drawing_id}191{new_node_cnt}0或者{drawing_id}291{new_node_cnt}0或者{drawing_id}391{new_node_cnt}0 - 二类节点的对称性:
2 - 二类节点的X:
真实的三维X坐标 - 二类节点的YZ:
1{pj[drawing_id - 1][1][0]}和1{jiandian_id + 20}
1 | |
4.2.4 生成二类杆件
- 根据节点信息中包含的二维坐标->找到该节点对应哪些杆件编号:{key:(x,y)->value:{101,102}}
- 反过来找到杆件编号对应的节点编号
1 | |
4.3 添加一类杆件
- 删除已有的一类杆件信息
- 手动添加一类杆件信息
1 | |