da-truely/cc-ransac-reconstruction-step
GitHub: da-truely/cc-ransac-reconstruction-step
一套将CloudCompare的RANSAC形状基元自动转换为对齐STEP几何体的Python工具,用于点云逆向工程。
Stars: 0 | Forks: 0
# cc-ransac-reconstruction-step
用于从 CloudCompare 提取 RANSAC 基元并将其重建为对齐的 STEP 几何体以进行逆向工程的 Python 工具。
# CloudCompare RANSAC 到 STEP 重建

本项目将 CloudCompare 的 RANSAC 基元转换为可编辑的 STEP 几何体。
它旨在作为一个紧凑的点云逆向工程 pipeline:在 CloudCompare 中重建检测到的形状,将其导出为 JSON,然后将其重建为独立的 STEP 实体或面,同时保留位置和方向。
## 功能说明
工作流程分为两个脚本:
- `cc_ransac_to_json.py`
在 CloudCompare 的 Python 插件中运行。它递归遍历选定的实体树,查找受支持的重建形状,读取其参数和变换历史,并生成一个 JSON 导出文件。
- `json_to_step.py`
从命令行运行。它读取导出的 JSON 并将每个形状重建为独立的 STEP 实体,以便随后可以在下游的 CAD 软件中单独隐藏或检查各个部件。
当前的 pipeline 保留了来自 CloudCompare 的对象方向和位置。对于平面基元,脚本会构建一个矩形面而不是数学上的无限平面,因为 STEP 导出必须是有限的。
## 快速开始
1. 在 CloudCompare 中打开您的点云。
2. 选择重建的根对象或包含 RANSAC 结果的父节点。
3. 通过 CloudCompare 的 Python 脚本接口运行 `cc_ransac_to_json.py`。
4. 在 CMD 中使用 `json_to_step.py` 将 JSON 转换为 STEP。
5. 在您的 CAD 工具中打开生成的 STEP 文件。
如果您只记住一条规则:**选择顶层节点,而不是手动选择每个子节点**。导出器会递归遍历所有后代。
## 环境要求
- 启用了 Python 插件的 CloudCompare
- 用于 STEP 转换器的 Python
- 在用于 STEP 脚本的同一 Python 环境中安装 `cadquery-ocp`
推荐的 Python 版本范围:
- Python 3.10 到 3.12
- Python 3.11 是一个稳妥的默认选择,并在工作环境中被使用过
推荐的 STEP 后端:
- `cadquery`
- `cadquery-ocp`
如果您希望获得可复现的安装环境,请**不要**依赖全局 Python 安装。请使用虚拟环境。
## 建议的环境设置
### 1. 创建虚拟环境
```
py -3.11 -m venv C:\Users\Main\ocp_clean
```
### 2. 激活环境
```
C:\Users\Main\ocp_clean\Scripts\activate
```
### 3. 更新 pip
```
python -m pip install --upgrade pip
```
### 4. 安装 CAD 后端
```
pip install cadquery cadquery-ocp
```
如果您想要不带 VTK 的轻量安装:
```
pip install cadquery-ocp-novtk
```
### 5. 验证后端
```
python -c "import cadquery; import OCP; print('OK')"
```
## CloudCompare 脚本安装
将脚本复制到 CloudCompare 插件使用的 Python 脚本位置,或者如果您的构建版本提供了脚本选择器,则从插件 UI 中加载它们。
文件:
- `cc_ransac_to_json.py`
- `json_to_step.py`
## 1) 从 CloudCompare 导出:`cc_ransac_to_json.py`
### 输入
- 带有 RANSAC 检测到的基元的 CloudCompare 场景
- 选定的根对象或选定的重建分支
### 行为
- 递归遍历选定的实体
- 同时处理后代节点
- 仅导出受支持的基元:
- Cone(圆锥)
- Cylinder(圆柱)
- Plane(平面)
- Sphere(球体)
- Torus(圆环)
- 写入一个 JSON 文件
### 输出
- 仅生成一个 JSON 文件
- 输出路径由脚本头部控制
- 如果配置的目录缺失或无效,脚本将回退到桌面
### 注意事项
- 导出器通过使用 CloudCompare 的变换历史 / OpenGL 变换数据来保留位置和方向。
- 如果不想,不必手动展开每个分支。选择重建的根节点即可。
## 2) 从 JSON 重建 STEP:`json_to_step.py`
从 CMD 运行此脚本:
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json
```
### 输入
- 一个由 `cc_ransac_to_json.py` 导出的 JSON 文件
- 或一个包含 JSON 文件的文件夹
### 输出规则
未提供输出参数时的默认行为:
- `json_to_step_reconstruction.step`
示例:
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json
```
在当前工作目录旁创建默认的 STEP 文件。
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json output
```
创建:
```
.\output\json_to_step_reconstruction.step
```
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json output.step
```
创建:
```
.\output.step
```
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json "E:\Projekte\CAD - Projekte\output\test.step"
```
创建指定的文件。
```
C:\Users\Main\ocp_clean\Scripts\python.exe json_to_step.py cc_ransac_export.json "E:\Projekte\CAD - Projekte\output"
```
创建:
```
E:\Projekte\CAD - Projekte\output\cc_ransac_from_json.step
```
### 路径处理
- 绝对路径保持为绝对路径
- 纯名称将成为当前 CMD 目录中的文件
- 带有反斜杠但没有驱动器号的路径被视为相对于当前 CMD 目录的相对路径
- 支持带空格的引号路径
### 结果
每个导出的基元都被写入为一个独立的 STEP 实体,以便 CAD 软件可以独立地隐藏或检查元素。
## 几何体重建方式
### 支持的基元
- `Cone`
- `Cylinder`
- `Plane`
- `Sphere`
- `Torus`
### 参数使用
- **Cone**
高度、底部半径、顶部半径、顶点 / 位置,如果需要还包括半角
- **Cylinder**
高度、半径、位置 / 轴线
- **Sphere**
半径和中心
- **Torus**
从导出的名称或存储的参数中解析出的内半径和外半径
- **Plane**
使用局部包围盒尺寸来构建一个矩形面,而不是一个无限平面
### 变换
来自 CloudCompare 的对象矩阵用于:
- 位置
- 旋转
- 局部方向
这是整个 pipeline 的关键点:重建的 STEP 几何体与原始的 CloudCompare 结果保持对齐。
## 典型工作流程
1. 在 CloudCompare 中加载点云。
2. 对选定的数据运行 RANSAC。
3. 选择重建的结果节点。
4. 使用 `cc_ransac_to_json.py` 导出 JSON。
5. 使用 `json_to_step.py` 将 JSON 转换为 STEP。
6. 在您的 CAD 应用程序中打开 STEP 文件。
7. 将几何体与源点云进行比较,并根据需要进行调整。
## 故障排除
### `cloudComPy` 导入失败
请使用 CloudCompare 的 Python 运行时,而不是随意的外部 Python 会话。导出器旨在 CloudCompare 内部运行。
### `json_to_step.py` 中 `OCP` / `OCC` 导入失败
请在运行脚本的同一虚拟环境中安装 CAD 后端:
```
C:\Users\Main\ocp_clean\Scripts\activate
pip install cadquery cadquery-ocp
```
### 无法安装 `pythonocc-core`
在某些安装环境中这是正常的。请改用 `cadquery-ocp`。
### 未创建 STEP 文件
请检查:
- 当前工作目录
- 写入权限
- 输出路径拼写
- JSON 文件是否包含可导出的基元
### CAD 查看器中缺少名称
某些 STEP 查看器能比其他的更好地保留对象名称。脚本会将名称写入 STEP 结构中,但显示行为仍然取决于目标应用程序。
## 仓库布局
```
.
├── cc_ransac_to_json.py
├── json_to_step.py
├── screenshot.jpg
└── README.md
```
## 实用说明
- 保持两个脚本与 JSON 模式同步。
- 除非必要,否则不要更改变换 pipeline。
- 为获得最佳效果,请在 CloudCompare 中选择最高层级的重建父节点,并让导出器递归进入所有子节点。
## 许可证
在此处添加您首选的许可证。
标签:3D重建, CAD, cadquery-ocp, CAD模型转换, CloudCompare, Python, RANSAC, STEP格式, 三维几何, 云资产清单, 形状检测, 数字取证, 数据导出, 无后门, 点云分割, 点云处理, 自动化脚本, 逆向工具, 逆向工程