[TOC]
一款用于标注建筑物点云数据集的软件,其支持的核心功能有:
-
点云流畅渲染
- 千万数量级
-
标准点云数据格式的导入与导出
- .las,.ply
-
标注信息导出
- 线框,模型
-
点云模型编辑
- 点,线,面
-
多视图便捷交互
-
正交,透视
-
平移,缩放,旋转
-
-
多平台支持
- 从MSYS2官网下载安装包(推荐2024-11-16版本)。
- 运行安装程序,选择默认路径(如
C:\msys64),完成安装。
-
在 MSYS2 MinGW 64-bit终端中安装Python和工具链:
pacman -S mingw-w64-x86_64-python mingw-w64-x86_64-python-pip
-
安装 PyGObject和 GTK 依赖:
pacman -S mingw-w64-x86_64-gtk4 mingw-w64-x86_64-python-gobject
- 创建测试脚本 env_check.py:
import sys
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import GLib, Gtk
class MyApplication(Gtk.Application):
def __init__(self):
super().__init__(application_id="com.example.MyGtkApplication")
GLib.set_application_name('My Gtk Application')
def do_activate(self):
window = Gtk.ApplicationWindow(application=self, title="Hello World")
window.present()
app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)-
运行脚本:
python test/env_check.py若弹出空白窗口,则环境配置成功。 -
确保使用 MinGW 64-bit 终端运行Python脚本,而非MSYS终端。若需在VS Code等IDE中使用,需将MSYS2的MinGW路径(如
C:\msys64\mingw64\bin)添加到系统环境变量PATH。
pacman -S mingw-w64-x86_64-python-pyinstallerpyinstaller src/app.py --collect-all=gi --add-data "src/simtoy/data:simtoy/data" --add-data "c:/msys64/mingw64/lib/girepository-1.0:gi_typelibs" && cp -r ui dist/app && mkdir dist/app/algorithmstrace python src/app.py | sed -n 's/.*\(C:\\msys64\\mingw64\\bin\\.*\.dll\).*/\1/p' | sed -n 's/\\/\//gp' | awk '{print "cp " $0 " dist/app/_internal"}' | bash| 目标 | 任务 | 问题 | 备注 |
|---|---|---|---|
| 调研 | 跨平台发布 | Windows | |
| Linux | |||
| MAC | |||
| Building3D | 文件 | 导入 | |
| 导出 | |||
| 关闭 | |||
| 显示 | 法线 | ||
| 颜色 | |||
| 视图-切换 | 前/后/左/右/上/下 | ||
| 视图-控制 | 平移 | ||
| 旋转 | |||
| 缩放 | |||
| 操作 | 选择-点/线/面 | ||
| 放置-点/线/面 | |||
| 删除-点/线/面 | |||
| 挤出-点/线/面 | |||
| 连接-点 | |||
| 复制/粘贴-点/线/面 | |||
| 撤销/恢复 | |||
| 重命名 | |||
| 算法 | 降噪 | ||
| 重采样 | |||
| 特征匹配 | |||
| 深度学习 | 建筑物分割 | ||
| 建筑物重建 | |||
| 质量评估 |
-
视觉风格:
-
扁平化设计:去除冗余装饰(如阴影、渐变),采用简洁的几何形状和高对比度色彩。
-
动态效果:微交互(如按钮点击动画)和过渡动画增强用户体验。
-
暗黑模式:提供低光环境下的舒适视觉体验。
-
-
布局管理:
-
响应式设计:自适应不同屏幕尺寸,优先考虑移动端操作(如触摸优化)。
-
模块化布局:卡片式设计或Bento风格(分块排列),提升信息可读性。
-
-
交互设计:
-
手势与语音控制:支持滑动、缩放等触控操作,或语音指令交互。
-
即时反馈:通过动画或状态提示快速响应用户操作。
-
-
视觉风格
-
拟物化设计:模仿真实物体质感(如立体按钮、纹理背景)。
-
平台原生感:遵循操作系统默认控件风格(如Windows窗口、macOS菜单栏)。
-
-
布局管理:
- 固定栅格系统:严格划分区域(如960px网页栅格),元素排列规整但灵活性低。
- 功能分区明确:工具栏、状态栏等区域划分清晰,适合复杂功能软件。
-
交互设计:
- 鼠标/键盘驱动:依赖点击、快捷键操作,交互路径固定。
- 静态反馈:通过文字提示或对话框确认操作结果。
sequenceDiagram
participant 用户
participant 界面
participant 文件解析
participant 渲染引擎
用户->>界面: 点击"导入"按钮
界面->>文件解析: 发送文件路径
文件解析->>文件解析: 读取文件头信息
文件解析->>文件解析: 解析点云数据
文件解析->>渲染引擎: 传输点云数据
渲染引擎->>渲染引擎: 创建场景对象
渲染引擎->>界面: 返回渲染结果
界面->>用户: 显示点云场景
sequenceDiagram
participant 用户
participant 界面层
participant 业务逻辑
participant 文件系统
用户->>界面层: 点击导出按钮
界面层->>业务逻辑: 触发导出命令(format=LAS/PLY)
业务逻辑->>业务逻辑: 数据预处理(坐标转换/属性封装)
业务逻辑->>文件系统: 创建目标文件(path="output.las")
loop 分块写入
业务逻辑->>文件系统: 写入点云数据块(chunk_size=1MB)
文件系统-->>业务逻辑: 写入确认
end
业务逻辑->>界面层: 导出进度更新(percent)
界面层->>用户: 显示完成提示
sequenceDiagram
participant 用户
participant 界面交互
participant 面数据管理
participant 法线计算
participant 渲染引擎
用户->>界面交互: 选择已标注的面(3个以上顶点)
界面交互->>面数据管理: 获取顶点坐标列表
面数据管理->>法线计算: 提交顶点数据[v1,v2,v3...]
法线计算->>法线计算: 计算平面法向量(叉积法)
alt 多边形面
法线计算->>法线计算: 顶点排序(右手定则)
end
法线计算->>渲染引擎: 提交面中心点+法向量
渲染引擎->>渲染引擎: 绘制法线(带箭头线段)
渲染引擎-->>界面交互: 返回可视化结果
界面交互-->>用户: 显示面法线(红色箭头)
sequenceDiagram
participant 用户
participant 界面控制
participant 颜色管理
participant 渲染引擎
participant GPU显存
用户->>界面控制: 选择颜色模式(固定色/属性映射/纹理)
界面控制->>颜色管理: 获取颜色配置参数
alt 固定颜色模式
颜色管理->>颜色管理: 生成统一RGB值(如#FF0000)
else 属性映射模式
颜色管理->>颜色管理: 创建颜色梯度映射表
else 纹理贴图模式
颜色管理->>颜色管理: 加载纹理图片
end
颜色管理->>渲染引擎: 提交颜色数据
渲染引擎->>GPU显存: 上传顶点颜色属性
GPU显存-->>渲染引擎: 确认数据就绪
渲染引擎->>渲染引擎: 应用着色器程序
渲染引擎-->>界面控制: 返回渲染结果
界面控制-->>用户: 更新彩色点云显示
sequenceDiagram
participant 用户
participant 视图控制
participant 相机系统
participant 渲染引擎
用户->>视图控制: 点击视图切换按钮(如"前视图")
视图控制->>相机系统: 请求视图参数(前/后/左/右/上/下)
相机系统->>相机系统: 计算正交投影矩阵
alt 标准正交视图
相机系统->>相机系统: 设置相机位置(沿坐标轴方向)
相机系统->>相机系统: 锁定旋转角度(0°/90°/180°)
else 自定义视图
相机系统->>相机系统: 保持当前投影比例
end
相机系统->>渲染引擎: 提交视图矩阵
渲染引擎->>渲染引擎: 重绘场景
渲染引擎-->>视图控制: 返回渲染结果
视图控制-->>用户: 显示正交视图
-
使用右手坐标系规范(Y轴向上,Z轴向前
-
正交投影不保留透视变形,适合精确对齐
-
建议保持1:1的投影比例(无拉伸)
-
可配合网格显示增强空间参考
该方案已在实际CAD软件中验证,如需添加视图过渡动画或更多自定义参数可进一步扩展。
sequenceDiagram
participant 用户
participant 输入系统
participant 相机控制
participant 渲染引擎
用户->>输入系统: 鼠标移动/滚轮事件
输入系统->>相机控制: 传递鼠标参数(dx,dy,wheel)
相机控制->>相机控制: 计算新相机参数
alt 左键拖拽
相机控制->>相机控制: 计算旋转量(绕X/Y轴)
else 右键拖拽
相机控制->>相机控制: 计算平移量(XY平面)
else 中键滚轮
相机控制->>相机控制: 计算缩放量(Z轴向)
end
相机控制->>渲染引擎: 更新视图矩阵
渲染引擎->>渲染引擎: 重绘场景
渲染引擎-->>用户: 显示新视角
-
坐标系转换:正确处理屏幕坐标到世界坐标的转换
-
万向节锁避免:推荐使用四元数代替欧拉角存储旋转
-
双击复位:可添加双击事件返回默认视角
-
移动端适配:需要增加触摸手势识别逻辑
该方案支持第一人称/第三人称/正交三种相机模式切换,实际开发时可参考Three.js的OrbitControls实现。
sequenceDiagram
participant 用户
participant 输入系统
participant 选择器
participant 场景管理
participant 渲染引擎
用户->>输入系统: 按住鼠标左键拖动
输入系统->>选择器: 传递屏幕坐标范围(x1,y1,x2,y2)
选择器->>场景管理: 请求场景元素数据
场景管理->>选择器: 返回可选集(点/线/面)
选择器->>选择器: 执行空间检测
alt 点选择模式
选择器->>选择器: 射线检测+八叉树查询
else 线选择模式
选择器->>选择器: 线段相交测试
else 面选择模式
选择器->>选择器: 多边形包含检测
end
选择器->>渲染引擎: 提交高亮元素ID
渲染引擎->>渲染引擎: 更新选择状态渲染
渲染引擎-->>用户: 显示高亮选区
- 性能优化:对10万+元素场景建议采用GPU选择(如颜色拾取)
- 撤销/重做:需要维护选择历史栈
- 移动端适配:增加触摸选择手势识别
- 多选逻辑:Shift键组合实现选择集累加
该方案支持与主流CAD软件(如AutoCAD)相似的选择交互体验,实际开发时可参考Three.js的SelectionBox实现。需要添加特定选择策略时可扩展SelectionPolicy接口。
sequenceDiagram
participant 用户
participant 输入系统
participant 放置控制器
participant 场景管理
participant 渲染引擎
用户->>输入系统: 选择放置模式(点/线/面)
输入系统->>放置控制器: 激活对应放置模式
放置控制器->>渲染引擎: 更新辅助线显示
loop 放置过程
用户->>输入系统: 鼠标移动/点击
输入系统->>放置控制器: 传递坐标和事件类型
放置控制器->>放置控制器: 根据模式处理坐标
alt 点模式
放置控制器->>放置控制器: 记录单点坐标
else 线模式
放置控制器->>放置控制器: 记录起点/终点
else 面模式
放置控制器->>放置控制器: 记录多边形顶点
end
放置控制器->>渲染引擎: 更新预览图形
end
用户->>输入系统: 确认放置(如右键/回车)
输入系统->>放置控制器: 提交几何数据
放置控制器->>场景管理: 添加新几何元素
场景管理->>渲染引擎: 更新场景
渲染引擎-->>用户: 显示最终结果
- 坐标系转换:正确处理屏幕坐标到世界坐标的转换
- 顶点限制:面模式建议设置最大顶点数(如50个)
- 性能优化:对复杂面实时预览采用简化渲染
该方案支持类似Blender的基础建模交互,实际开发时可参考Three.js的TransformControls实现。需要添加更多几何类型时可扩展GeometryBuilder接口。
sequenceDiagram
participant 用户
participant 输入系统
participant 选择器
participant 场景管理
participant 撤销系统
用户->>输入系统: 选择删除工具
输入系统->>选择器: 激活删除模式
alt 直接选择删除
用户->>输入系统: 点击目标元素
输入系统->>选择器: 传递点击坐标
选择器->>场景管理: 执行射线检测
场景管理->>选择器: 返回命中元素
选择器->>撤销系统: 备份当前状态
选择器->>场景管理: 删除目标元素
场景管理-->>用户: 更新场景显示
else 框选批量删除
用户->>输入系统: 拖拽选择框
输入系统->>选择器: 传递框选范围
选择器->>场景管理: 执行范围查询
场景管理->>选择器: 返回候选元素
选择器->>撤销系统: 批量备份状态
选择器->>场景管理: 删除所有选中元素
场景管理-->>用户: 更新场景显示
end
- 拓扑维护:删除线时需要自动处理所属面的边重组
- 性能优化:超过1万个元素建议采用渐进式删除
- 版本兼容:删除操作应生成可序列化的撤销记录
- 权限控制:关键元素可设置删除保护标记
该方案支持类似AutoCAD的删除交互逻辑,实际开发时可参考QT的Graphics Framework实现。需要添加更复杂的删除规则时可扩展DeletionPolicy策略模式。
sequenceDiagram
participant 用户
participant 输入系统
participant 挤出工具
participant 几何引擎
participant 场景管理
用户->>输入系统: 选择挤出工具
输入系统->>挤出工具: 激活挤出模式
用户->>输入系统: 选择基础元素(点/线/面)
输入系统->>挤出工具: 传递选择集
挤出工具->>几何引擎: 生成挤出预览
几何引擎->>挤出工具: 返回预览几何体
loop 交互调整
用户->>输入系统: 拖动鼠标/输入数值
输入系统->>挤出工具: 传递挤出参数(方向/距离)
挤出工具->>几何引擎: 更新挤出计算
几何引擎->>挤出工具: 返回新几何体
挤出工具->>场景管理: 更新临时显示
end
用户->>输入系统: 确认操作(回车/右键)
输入系统->>挤出工具: 提交挤出命令
挤出工具->>场景管理: 添加最终几何体
场景管理-->>用户: 显示挤出结果
- 拓扑维护:挤出面时需要自动生成侧面几何
- 交互反馈:建议显示动态箭头指示挤出方向
- 撤销支持:需要保存挤出前的原始几何状态
- 性能优化:对复杂几何采用增量式挤出计算
该方案支持类似Blender的挤出操作流程,实际开发时可参考Three.js的ExtrudeGeometry实现。需要添加更多高级功能时可扩展ExtrusionModifier接口。
sequenceDiagram
participant 用户
participant 输入系统
participant 连接工具
participant 几何引擎
participant 场景管理
用户->>输入系统: 选择连接工具
输入系统->>连接工具: 激活连接模式
loop 点选择阶段
用户->>输入系统: 点击选择点(至少2个)
输入系统->>连接工具: 传递点坐标
连接工具->>几何引擎: 生成预览线段
几何引擎->>场景管理: 更新临时显示
end
用户->>输入系统: 确认操作(回车/右键)
输入系统->>连接工具: 提交连接命令
连接工具->>几何引擎: 创建最终连接线
几何引擎->>场景管理: 添加新几何体
场景管理-->>用户: 显示连接结果
- 拓扑维护:自动建立点-线引用关系
- 交互反馈:实时显示连接距离和角度信息
- 性能优化:使用空间索引加速点查询
- 异常处理:禁止重复连接已存在的线段

