Shugar86/additive-light
GitHub: Shugar86/additive-light
Additive Light 是一个结合 AI 与几何分析的研发平台,支持从文本提示生成 3D 模型以及从 3D 扫描数据逆向重建参数化 CAD 模型。
Stars: 0 | Forks: 0
# 加色光 · GDI
[](./LICENSE)
[](https://www.python.org/)
[](https://github.com/psf/black)
[](https://docs.pytest.org/)
[](https://openscad.org/)
[](https://openrouter.ai/)
**Additive Light** 是一个用于生成式 3D 建模和扫描数据逆向工程的研发平台。它结合了两条主线:
- **ADDITIVE_LAB** — 客户端 Web 应用:文本 prompt → AI → SolidPython2 → OpenSCAD WASM → 直接在浏览器中生成 STL。
- **GDI (Generative Design Intelligence)** — Python pipeline:STL 扫描 → 传感器 → RANSAC 拟合 → LLM → Judge → 参数化 CAD 模型 → G-code。
本项目处于研究阶段:代码可运行,但部分方案仍为 MVP。如需深入了解,请参阅 [`ARCHITECTURE.md`](./ARCHITECTURE.md)、[`DEPLOY.md`](./DEPLOY.md) 和 [`ROADMAP.md`](./ROADMAP.md)。
## ✨ 功能
### ADDITIVE_LAB Web 应用
- 🧠 通过 **OpenRouter**(Gemini、Claude、Grok 及其他 coder 模型),根据文本 prompt 生成 **SolidPython2** 代码。
- 🔒 **三级验证** AI 代码:括号检查、Pyodide 中的 `compile()`、OpenSCAD 完整渲染。
- 🖥️ 在 Web Worker 中进行 **OpenSCAD WASM 渲染** — 面对复杂几何体时界面也不会卡顿。
- 🎨 基于 Three.js 的 **3D 查看器**,具备轨道相机、自动居中和 bounding box 功能。
- 💾 一键 **下载** `.scad` 和 `.stl`。
- 🏠 **Local-first**:重型文件在本地处理,仅在 AI 生成时需要网络。
### 桌面端及 GDI pipeline
- 📐 通过 Trimesh + Shapely 实现 STL 的 **多轴切片**。
- 📊 **RANSAC 区域拟合**,提供可靠的 confidence 评估。
- 🤖 用于几何决策的 **LLM 编排器**。
- ⚖️ **两阶段 Judge**:语法校验 → IoU。
- 🛠️ CAD 代码的 **参数化与格式美化**。
- 📁 传感器与 LLM 之间的 **YAML 契约 v1.0**。
- 🖨️ 通过 FreeCAD Path **导出 G-code**。
## 🚀 快速开始
### 1. 克隆仓库
```
git clone git@github.com:Shugar86/additive-light.git
cd additive-light
```
### 2. Web 版本(推荐初学者使用)
```
# Python 3.11+
python server.py
```
在浏览器中打开:**http://localhost:8001**
### 3. OpenSCAD AI 桌面版
```
pip install -r requirements.txt
python launch_gui.py
# 或者
python -m gdi_app.gui.main_window
```
### 4. GDI pipeline (CLI)
```
pip install -r requirements.txt
python -m gdi_app.cli.main process benchmark_kit/ideal/ideal_cylinder.stl \
--output output/ \
--axis Z \
--step 0.1 \
--confidence 0.7
```
可用命令:
```
python -m gdi_app.cli.main --help
python -m gdi_app.cli.main info
python -m gdi_app.cli.main validate output/ideal_cylinder_telemetry.yaml
python -m gdi_app.cli.main batch benchmark_kit/ideal/ --output output/
```
## 🏗️ 架构 / 技术栈
| 领域 | 技术 | 用途 |
|---------|------------|------------|
| Web 前端 | Vanilla JS, HTML5/CSS3, CodeMirror, Three.js | UI、代码编辑器、3D 查看器 |
| 浏览器 Python | Pyodide (WebAssembly), SolidPython2 (`solid2`) | 在浏览器中执行 AI 代码 |
| CAD 内核 (Web) | OpenSCAD WASM | CSG 渲染与 STL 导出 |
| AI 网关 | OpenRouter API | 接入 coder 模型 |
| 桌面端 / pipeline | Python 3.11+, Trimesh, Shapely, Pydantic, LangGraph, Typer, PyQt6 | 扫描 → CAD pipeline |
| Web 后端 | FastAPI, Celery, Redis, S3 (Phase 2) | 可扩展的 API |
| 测试 | pytest, black, mypy | 质量与一致性保证 |
详细的架构、数据流及核心决策请见 [`ARCHITECTURE.md`](./ARCHITECTURE.md)。
## 📁 项目结构
```
additive-light/
├── index.html # Главная страница веб-приложения
├── script.js # UI, Pyodide, AI, Three.js, OpenSCADManager
├── worker.js # Web Worker для OpenSCAD WASM
├── style.css / style_new.css # Стили
├── server.py # Локальный dev-сервер с заголовками COOP/COEP
├── openscad.min.js # JS-обёртка OpenSCAD WASM
├── requirements.txt # Python-зависимости
│
├── OpenSCAD_AI/ # Десктопный GUI-ассистент
├── gdi_core/ # Ядро пайплайна GDI
│ ├── api.py # Публичный API
│ ├── sensors/ # Слайсинг и выравнивание
│ ├── approximator/ # Детекция зон и confidence
│ ├── synthesis/ # Генерация кода через LLM
│ ├── judge/ # Валидация и IoU
│ ├── optimizer/ # Оптимизация CAD-кода
│ ├── sandbox/ # Песочница исполнения
│ └── models/ # YAML-контракт и Pydantic-модели
├── gdi_app/ # CLI и GUI для GDI
│ ├── cli/main.py # Typer CLI
│ └── gui/ # PyQt6 GUI
├── web/ # Web backend/frontend (Phase 2)
│ ├── backend/ # FastAPI + Celery
│ ├── frontend/ # Frontend-артефакты
│ └── sandbox/ # Песочница для backend
├── benchmark_kit/ # Тестовые STL: ideal / noise / corrupt / real_scans
├── tests/ # Юнит- и интеграционные тесты
│
├── ARCHITECTURE.md # Архитектура и data flow
├── DEPLOY.md # Инструкция по деплою
├── ROADMAP.md # Планы и UX-долги
├── CHANGELOG.md # История изменений
├── CONTRIBUTING.md # Как участвовать
├── AGENTS.md # Контракт для агента-разработчика
└── LICENSE # MIT
```
## 📝 示例
### Web:从文本生成花瓶
1. 打开 **http://localhost:8001**。
2. 在输入框中填写:`具有螺旋几何形状的花瓶,高度 100 mm`。
3. 点击 **生成**,然后点击 **编译**。
4. 当模型在 3D 查看器中显示后,即可下载 `.scad` 或 `.stl`。
### GDI:在 Python 中分析扫描数据
```
from gdi_core import GDIAPI
api = GDIAPI(slice_step=0.1, confidence_threshold=0.7)
manifest = api.run_pipeline(
stl_file="benchmark_kit/real_scans/кольцо.stl",
base_axis="Z"
)
print(manifest.status)
print(manifest.approximation_result.global_confidence)
```
### CLI:批处理
```
python -m gdi_app.cli.main batch benchmark_kit/ideal/ \
--output output/ \
--pattern "*.stl" \
--confidence 0.7
```
## 🛠️ 开发
```
# 安装依赖
pip install -r requirements.txt
# 运行测试
pytest tests/ -v
# 格式化
black gdi_core/ gdi_app/ web/
# 类型检查
mypy gdi_core/
# 本地 web 服务器
python server.py
```
## 🗺️ 路线图与历史
- 后续计划详见 [`ROADMAP.md`](./ROADMAP.md)。
- 更新日志详见 [`CHANGELOG.md`](./CHANGELOG.md)。
## 🎭 项目基调
**基调:** `precise & honest` — 研发平台的工程严谨与诚实。
1. **对成熟度保持诚实。** 凡是 MVP 方案均如实标注;confidence 评估绝不夸大。
2. **验证优先于结果。** AI 生成的代码必须通过三级检查和 Judge 测试 — 绝不交付无法渲染的内容。
3. **Local-first。** 重型文件保留在本地机器上;仅在 AI 生成时需要联网。
## 📄 许可证
[MIT](./LICENSE) © 2026 Shugar86.
标签:3D建模, CAD, OpenSCAD, Python, 云资产清单, 安全规则引擎, 搜索引擎查询, 数据可视化, 无后门, 生成式AI, 索引, 逆向工具, 逆向工程