计算抽屉最优瓦片分割方案并生成 STL 文件用于 3D 打印。根据抽屉尺寸计算最优 openGrid 瓦片布局,支持库存管理和批量计算。当用户需要为抽屉创建 3D 打印瓦片铺满方案时使用此技能。
Install
npx skillscat add crhan/opengrid-drawer-filler Install via the SkillsCat registry.
openGrid 抽屉铺满
根据抽屉尺寸计算最优瓦片分割方案,并可自动生成 STL 文件用于 3D 打印。
核心原则
Agent 负责用户交互,脚本负责计算和生成。
- Agent 询问用户需求,调用脚本获取结果,展示给用户
Agent 工作流
Step 1: 检查配置、加载库存、展示状态
检查配置级别(全局/项目)
- 项目级:当前目录存在
opengrid_config.yaml - 全局:技能目录的
config/config.yaml
- 项目级:当前目录存在
加载对应级别的配置
从配置的
inventory_path读取库存位置检查
config.yaml的initialized状态如未初始化,引导用户配置:
- 复制配置文件:
cp config/config.example.yaml config/config.yaml - 编辑设置
initialized: true和打印机型号
- 复制配置文件:
加载配置(使用 Python 直接读取或调用 config 模块)
加载库存文件(从配置的
inventory_path读取)向用户输出当前状态(库存信息突出展示):
openGrid 抽屉铺满
🖨️ 打印机: [型号] ([bed_x]×[bed_y]×[max_z]mm)
📁 输出目录:
[stl_dir]🔧 瓦片类型: [tile_type] | 堆叠: [stacking_method]
使用
format_inventory_for_display()函数展示库存(带框线表格):╔════════════════════════════════════════╗ ║ 📦 库存状态 ║ ╚════════════════════════════════════════╝ ┌──────────┬──────────┐ │ 瓦片尺寸 │ 数量 │ ├──────────┼──────────┤ │ 8×8 │ 9 │ │ 6×7 │ 5 │ │ 5×5 │ 3 │ └──────────┴──────────┘ 共 **3 种尺寸**, **17 stack** (可用)确认库存数量是否正确,如不正确引导用户更新库存:
库存管理
严格禁止直接编辑 inventory/inventory.json 文件。
所有库存修改必须通过脚本进行,并记录修改原因:
# 变量定义
SKILL_DIR=/Users/ruohanc/.claude/skills/opengrid-drawer-filler
# 查看当前库存(使用项目级配置)
cd /path/to/your/project && $SKILL_DIR/.venv/bin/python $SKILL_DIR/scripts/inventory.py -l project list
# 添加库存 (格式: 宽x高:数量)
cd /path/to/your/project && $SKILL_DIR/.venv/bin/python $SKILL_DIR/scripts/inventory.py -l project add 8x8:5 6x7:3 "入库原因:购买新材料"
# 扣减库存
cd /path/to/your/project && $SKILL_DIR/.venv/bin/python $SKILL_DIR/scripts/inventory.py -l project deduct 8x8:2 "扣减原因:打印使用"
# 撤销上次操作
cd /path/to/your/project && $SKILL_DIR/.venv/bin/python $SKILL_DIR/scripts/inventory.py -l project undo重要:执行 inventory 命令时必须:
- 切换到项目目录(有
opengrid_config.yaml的目录) - 使用
-l project参数(或确保当前目录有opengrid_config.yaml) - 使用绝对路径调用
.venv和scripts/inventory.py
如果不在项目目录下,会使用全局配置,无法找到项目库存。
关键约束:
- 禁止直接编辑 inventory.json
- 必须提供原因说明
- 每次操作自动记录到日志
Step 2: 询问需求
- 询问抽屉尺寸和份数
- 解析尺寸格式:
"265x360:2"= 265×360mm,2份"265x360"= 265×360mm,1份"265 360 2"= 空格分隔格式
Step 3: 计算方案
自动双方案:当检测到有库存时,自动计算两种方案:
- 方案 A:不考虑库存(追求最优切割,平衡度高)
- 方案 B:使用库存(追求最少打印,节省耗材)
无库存时:只计算方案 A。
调用 scripts/opengrid.py:
# 方案 A:不使用库存 (获取 JSON)
python3 scripts/opengrid.py split 325x460 -j > no_inv.json
# 方案 B:使用库存 (获取 JSON)
python3 scripts/opengrid.py split 325x460 -i inventory.json -j > with_inv.jsonStep 4: 方案对比与决策
使用 present 命令生成可视化的网格填充蓝图进行对比决策:
python3 scripts/opengrid.py present no_inv.json with_inv.json -o comparison.html对比报告 (comparison.html) 特点:
- 网格铺满蓝图:基于抽屉真实坐标(如 11×16)的拼图视图。
- 色彩语义:青色代表库存,橙色代表需打印。
- 节省统计:直观显示节省的打印时间和克数。
Step 5: 生成施工项目
用户选定方案后,生成正式的施工文件夹。
# 快速预览 (不生成 STL)
python3 scripts/opengrid.py split 325x460 -i inventory.json -H preview.html
# 正式施工 (创建项目,生成 STL 并建立施工单)
python3 scripts/opengrid.py split 325x460 -i inventory.json -P ./projects/my_drawer施工单 (print_plan.html) 逻辑规范:
重要: 施工单必须严格区分任务类型,防止误打印:
- 🖨️ 打印任务:仅列出需要 3D 打印的瓦片尺寸和数量(背景为橙色)。
- 📦 现有库存提取:仅列出直接从库存取用的瓦片(背景为青色)。
- 安装蓝图:显示完整的网格位置索引,指导用户将库存件与打印件拼接。
- STL 获取:提供直接指向项目内 STL 文件的链接。
Step 6: 打印与同步
- 根据施工单的“打印任务”进行切片和打印。
- 施工完成后,手动通过 CLI 更新库存:
python3 scripts/opengrid.py inventory deduct 8x8:2 "完成 325x460 项目施工"快速命令
# 批量计算
python3 scripts/split_calc.py 265x365:2 325x365:2
# 单尺寸计算
python3 scripts/split_calc.py 485 425
# 使用预设
python3 scripts/split_calc.py -p klean
# 使用项目级配置
python3 scripts/split_calc.py 265x365:2 -l project
# 使用全局配置
python3 scripts/split_calc.py 265x365:2 -l global
# 生成 STL
python3 scripts/slicer.py -g 7x5x3 10x5x3详细命令、配置说明、算法规则等请参考 references/ 目录。
配置文件
openGrid 支持两级配置文件:全局配置和项目配置。项目配置会覆盖全局配置的同名字段。
全局配置
位置:{skill_dir}/config/config.yaml
项目配置
位置:{当前目录}/opengrid_config.yaml
项目配置示例:
printer:
model: h2d # 覆盖全局
inventory_path: ./my_project/inventory.json # 项目库存
output:
stl_dir: ./stl_output/ # 项目输出目录配置级别检测顺序:
- 检查当前目录是否存在
opengrid_config.yaml(项目级) - 如不存在,使用技能目录的
config/config.yaml(全局级)
初始化
首次使用前完成配置,运行一次安装脚本即可完成所有设置:
cd /Users/ruohanc/.claude/skills/opengrid-drawer-filler
./scripts/setup.sh脚本自动完成:
- 创建 Python venv (
.venv) - 安装 Python 依赖 (pyyaml, pytest, Pillow)
- 安装 OpenSCAD
- 克隆 QuackWorks
- 安装 BOSL2
之后运行脚本:
.venv/bin/python scripts/split_calc.py 485 425