基于 DeepNestPort 项目的 DXF/SVG 格式模型展开图提取工具,支持将几何数据存储到 PostgreSQL 数据库(配置 PostGIS 和 pgvector 扩展)。
本项目能够:
- 将 STEP 文件转换为 DXF 格式
- 处理 DXF 和 SVG 文件,提取几何特征
- 存储零部件信息到 PostgreSQL 数据库
- 支持相似性搜索和空间查询
- 生成形状特征向量用于机器学习
- .NET 8.0 SDK
- SolidWorks
- Docker 和 Docker Compose
- PostgreSQL 15 with PostGIS 和 pgvector 扩展
# 下载并安装 .NET 8.0 SDK
# https://dotnet.microsoft.com/download/dotnet/8.0dotnet --version# 启动 Docker 数据库服务
docker-compose up -d
# 查看运行状态
docker ps- 主机: localhost
- 端口: 5433 (如果有端口冲突,可能是 5432)
- 数据库: postgres
- 用户名: postgres
- 密码: postgres
# 还原 NuGet 包
dotnet restore
# 编译项目
dotnet build
# 运行项目(查看帮助)
dotnet rundotnet run stats显示数据库中零部件的统计信息,包括总数量、材料种类、平均面积等。
# 将 STEP 文件转换为 DXF 格式
dotnet run convert initData/PCSWP2.step output/PCSWP2.dxf
# 创建输出目录(如果不存在)
mkdir output# 处理整个目录中的文件,指定材料和和厚度
dotnet run process output --material=Q235 --thickness=2.0
# 可处理单个文件,也可以不指定材料和厚度
dotnet run process output/PCSWP2_polygon.dxf# 基本搜索
dotnet run search
# 按材料搜索
dotnet run search --material=Q235
# 复合条件搜索
dotnet run search --material=Q235 --min-thickness=1.0 --max-thickness=5.0 --min-area=100# 查找相似零部件(需要先有数据)
dotnet run similar <零部件ID> [数量限制]
# 示例
dotnet run similar 6f5fefe9-30f6-410e-8d73-42ac9cf4ad26 5# 通过 Docker 容器连接
docker exec -it pgvector-db psql -U postgres
# 在 psql 中的常用命令
\l # 列出所有数据库
\c postgres # 连接到 postgres 数据库
\dt # 列出所有表
\d part_library # 查看表结构-- 查看所有零部件
SELECT * FROM part_library;
-- 查看特定字段
SELECT part_id, filename, material_code, thickness_mm, flat_area, created_at
FROM part_library;
-- 按材料筛选
SELECT * FROM part_library WHERE material_code = 'Q235';- 主机名/地址: localhost
- 端口: 5433
- 维护数据库: postgres
- 用户名: postgres
- 密码: postgres
如果连接失败,在 psql 中设置密码:
ALTER USER postgres PASSWORD 'postgres';database/
├── Program.cs # 主程序入口
├── appsettings.json # 配置文件
├── docker-compose.yml # Docker 配置
├── Dockerfile # 数据库镜像配置
├── Models/
│ └── PartLibrary.cs # 数据模型
├── Data/
│ └── PartLibraryContext.cs # EF Core 数据库上下文
├── Services/
│ ├── GeometryProcessor.cs # 几何处理服务
│ ├── FileProcessor.cs # 文件处理服务
│ └── StepProcessor.cs # STEP 文件处理服务
├── initData/
│ └── PCSWP2.step # 示例 STEP 文件
├── output/ # 转换后的 DXF 文件
└── README.md # 项目说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| part_id | UUID | 零部件唯一标识 |
| filename | TEXT | 文件名 |
| material_code | TEXT | 材料代码 |
| thickness_mm | DECIMAL | 厚度(毫米) |
| bbox_l | DOUBLE | 边界框长度 |
| bbox_w | DOUBLE | 边界框宽度 |
| flat_area | DOUBLE | 展开面积 |
| contour_wkt | GEOMETRY | PostGIS 几何数据 |
| nfp_hash | TEXT | NFP 哈希值 |
| shape_vec | VECTOR(512) | pgvector 形状特征向量 |
| upload_batch | TEXT | 上传批次 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
- 基于 DeepNestPort 的几何算法
- 支持 DXF 文件解析(多段线、圆形、线段)
- 简化的 SVG 解析(路径、矩形、多边形)
- 轮廓提取和面积计算
- PostGIS 空间数据存储
- pgvector 向量相似性搜索
- 支持复杂的空间查询
- 512 维形状特征向量
- STEP 文件转换(SolidWorks API):
- 原生 STEP 文件解析
- 自动材料和厚度提取
- 钣金零件识别和展开
- 专业级 DXF 导出
- DXF 文件处理:
- 支持多个版本的 DXF 格式
- 处理多段线、圆形、线段等实体
- SVG 文件处理
- 批量文件处理
-
数据库连接失败
# 检查 Docker 容器状态 docker ps # 重启数据库容器 docker-compose restart
-
端口冲突
# 查看端口占用 netstat -an | findstr :5432 netstat -an | findstr :5433
-
NuGet 包问题
# 清理并重新还原 dotnet clean dotnet restore -
DXF 文件无法加载
- 检查 DXF 文件格式是否标准
- 使用 netDxf 库生成的文件通常没问题
- 手动编写的 DXF 可能格式不完整
程序运行时会显示详细的日志信息,包括:
- 数据库连接状态
- 文件处理进度
- 错误信息和堆栈跟踪
- .NET SDK 环境配置 - 安装并配置 .NET 8.0 SDK
- STEP 文件解析 - 集成 SolidWorks API 实现专业级转换
- 钣金展开 - 利用 SolidWorks 原生钣金展开功能
- 材料和厚度提取 - 从 STEP 文件自动提取工程属性
- NuGet 包依赖 - 解决 NetTopologySuite 版本冲突,配置 pgvector 支持
- 数据库连接 - 配置 PostgreSQL、PostGIS 和 pgvector 扩展
- DXF 文件格式 - 处理不同版本的 DXF 文件格式兼容性
- .NET 8.0 - 主要开发框架
- SolidWorks API - STEP 文件转换和钣金展开
- Entity Framework Core - ORM 框架
- Npgsql - PostgreSQL 数据库驱动
- NetTopologySuite - 空间几何处理
- netDxf - DXF 文件处理
- Pgvector - 向量相似性搜索
- Docker - 数据库容器化部署