TellmeStpToGlb/README.md
root 5102bd57e8 feat: 服务化改造STP到GLB转换器
- 🚀 新增FastAPI Web服务支持
-  实现异步任务处理和并发转换
- 📊 添加实时进度追踪(0-100%)
- 🏗️ 重构为模块化架构:core/api/services/utils
- 🔧 完整的任务管理系统和状态追踪
- 📖 自动生成API文档(Swagger/ReDoc)
- 🔄 保持CLI模式100%向后兼容
- 🛡️ 增强错误处理和文件验证
- 📝 更新完整文档(README/CLAUDE.md)

技术栈: FastAPI + uvicorn + pydantic + asyncio
API端点: /health, /api/v1/convert, /api/v1/status, /api/v1/tasks

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 09:44:43 +08:00

228 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STP to GLB Converter Service
一个强大的STP到GLB转换服务提供CLI和Web API两种使用方式特别优化了在Blender中的显示效果。
## 功能特性
- **双模式支持**: CLI命令行工具 + Web API服务
- **异步处理**: 支持并发转换请求,实时进度追踪
- **格式转换**: STP → STL → GLB 完整转换流程
- **智能缩放**: 自动将过大模型缩放到适合3D软件的尺寸
- **自动居中**: 将模型质心移动到原点,便于查看
- **RESTful API**: 标准HTTP接口支持跨语言调用
- **任务管理**: 完整的任务生命周期管理和状态追踪
- **样式兼容**: 正确处理STP文件中的样式信息不影响几何转换
- **Blender优化**: 生成的GLB文件可直接在Blender中正常显示
## 系统要求
- Python 3.7+
- Windows/Linux/macOS
## 安装步骤
### 使用requirements.txt推荐
```bash
# 克隆或下载项目
git clone <项目地址>
cd TellmeStpToGlb
# 安装依赖
pip install -r requirements.txt
```
### 手动安装依赖
```bash
# 安装所有依赖
pip install pythonocc-core trimesh fastapi uvicorn pydantic
```
### 方法三使用conda可选
```bash
# 创建虚拟环境
conda create -n stp2glb python=3.9
conda activate stp2glb
# 安装pythonocc-core
conda install -c conda-forge pythonocc-core
# 安装trimesh
pip install trimesh
```
## 使用方法
### CLI模式命令行
```bash
python main.py input.stp output.glb
```
#### CLI示例
```bash
# 转换单个文件
python main.py model.stp model.glb
# 转换测试文件
python main.py test.stp result.glb
```
### API模式Web服务
#### 启动服务
```bash
# 开发模式
python app.py
# 或使用uvicorn
uvicorn app:app --host 0.0.0.0 --port 8000 --reload
# 生产模式
uvicorn app:app --host 0.0.0.0 --port 8000 --workers 4
```
#### API接口
**健康检查**
```bash
GET http://localhost:8000/health
```
**提交转换任务**
```bash
POST http://localhost:8000/api/v1/convert
Content-Type: application/json
{
"input_path": "/path/to/input.stp",
"output_path": "/path/to/output.glb",
"options": {
"auto_scale": true,
"auto_center": true
}
}
```
**查询任务状态**
```bash
GET http://localhost:8000/api/v1/status/{task_id}
```
**获取任务列表**
```bash
GET http://localhost:8000/api/v1/tasks
```
#### API文档
服务启动后可访问:
- Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`
## 在Blender中使用
1. 打开Blender
2. 删除默认立方体(可选)
3. 文件 → 导入 → glTF 2.0 (.glb/.gltf)
4. 选择转换生成的GLB文件
5. 模型应该在视口中心正常显示
## 技术细节
### 转换流程
1. **STP读取**: 使用pythonocc-core读取STP文件
2. **STL生成**: 转换为高质量STL网格线性偏差0.01
3. **智能处理**: 自动缩放和居中处理
4. **GLB导出**: 使用trimesh生成最终GLB文件
5. **清理**: 自动删除临时STL文件
### 服务化特性
- **异步处理**: 使用asyncio实现并发转换任务
- **进度追踪**: 实时更新转换进度(0-100%)
- **任务管理**: 内存存储任务状态,支持查询和管理
- **RESTful API**: 标准HTTP接口支持跨语言调用
- **错误处理**: 完整的异常捕获和错误信息反馈
### 智能优化
- **尺寸检测**: 自动检测模型最大尺寸
- **智能缩放**: 超过1000单位的模型自动缩放到50单位以内
- **质心居中**: 模型自动移动到坐标原点
## 故障排除
### 常见问题
**1. 导入错误**
```
ImportError: cannot import name 'xxx' from 'OCC.Core'
```
- 解决方案: 确保安装了正确版本的pythonocc-core
- 使用conda安装: `conda install -c conda-forge pythonocc-core`
**2. 样式警告**
```
OVER_RIDING_STYLED_ITEM warnings
```
- 这是正常现象,不影响几何转换
- 警告信息可以忽略
**3. Blender中看不见模型**
- 本工具已自动处理此问题
- 如仍有问题在Blender中按数字键盘 `.` 键聚焦到对象
**4. 模型太大或太小**
- 工具已内置智能缩放功能
- 大模型会自动缩放到合适尺寸
### 依赖问题
如果遇到依赖安装问题:
```bash
# 升级pip
pip install --upgrade pip
# 清理缓存重新安装
pip cache purge
pip install -r requirements.txt --no-cache-dir
```
## 支持的格式
- **输入**: STP/STEP文件
- **输出**: GLB文件glTF 2.0二进制格式)
## 性能说明
- 转换速度取决于模型复杂度
- 大模型(几万面片)通常需要几秒到几十秒
- 内存使用量与模型大小成正比
## 许可证
本项目使用MIT许可证详见LICENSE文件。
## 贡献
欢迎提交Issue和Pull Request来改进这个工具。
## 更新日志
### v2.0.0
- 🚀 服务化改造支持Web API
- ⚡ 异步处理和并发转换
- 📊 实时进度追踪
- 🔧 任务管理系统
- 📖 自动生成API文档
- 🔄 保持CLI模式向后兼容
### v1.0.0
- 初始版本发布
- 支持STP到GLB转换
- 智能缩放和居中功能
- Blender显示优化