63 lines
7.1 KiB
Markdown
63 lines
7.1 KiB
Markdown
# Гео-аудит модели под FDM — что проверяемо инструментами осмотра
|
||
|
||
Лёгкая самопроверка построенной модели **существующими** инструментами осмотра MCP. Запускать на
|
||
шаге 4 рабочего цикла (см. SKILL.md), перед чек-листом и экспортом.
|
||
|
||
## Что проверяемо
|
||
|
||
| Проверка | Как | Статус |
|
||
|---|---|---|
|
||
| Нависания (приближённо) | `list_faces(normal="0,0,-1", normalTolerance=90−θ_max, minZ=<Zmin+0.1>)` — весь улов кандидаты; подробности `list_faces(index=N)` | ✅ плоские; ⚠️ криволинейные грубо |
|
||
| Ориентация (геом. прокси) | `describe_model(sections="box")`: как ось слоёв соотносится с габаритом | ⚠️ длинная ось ≠ путь нагрузки |
|
||
| Горизонтальные круглые отверстия | `list_faces(index=N)`: цилиндр с горизонтальной осью → «нужен teardrop» | ✅ |
|
||
| Пролёт моста | `measure(kind1="face", index1=…, kind2="face", index2=…)` между внутренними гранями опор | ✅ |
|
||
| Устойчивость высокой печати | `describe_model(sections="mass")` — центр масс; `list_edges(minZ=<Zmin−0.1>, maxZ=<Zmin+0.1>)` — очертание опорного пятна по концам рёбер (площадь пятна из `list_faces` для этого не годится) | ✅ проекция ЦМ; ⚠️ порог по высоте — эвристика |
|
||
| Номиналы / зазоры / габариты | `measure` между гранями; `describe_model(sections="box")` | ✅ |
|
||
| Тело / манифолд перед выдачей | `describe_model(sections="bodies")` (одно тело?), итог проверки построения в ответе операции | ✅ |
|
||
|
||
**Почему допуск отбора нависаний равен `90−θ_max`.** `θ_max` меряют от вертикали, а отбор идёт по
|
||
НОРМАЛИ: у поверхности, наклонённой на `θ` от вертикали, нормаль отстоит от −Z на `90−θ`. Значит
|
||
нависание (`θ > θ_max`) — это в точности «нормаль ближе `90−θ_max` к −Z». При дефолтном `θ_max`=45°
|
||
допуск численно равен 45, и это совпадение сбивает: для PETG с `θ_max`=40° правильный допуск **50**,
|
||
а не 40.
|
||
|
||
**И почему у отбора нависаний обязано быть `minZ`.** Отбор по нормали ЗНАКОВЫЙ: грань проходит,
|
||
если её нормаль отклонилась от заданного направления не более чем на допуск. У грани, лежащей на
|
||
столе, внешняя нормаль равна ровно (0, 0, −1) — отклонение нулевое, значит она проходит при ЛЮБОМ
|
||
допуске и по описанному критерию («тем хуже, чем ближе к чистому −Z») выглядит худшим нависанием
|
||
детали. Замер: тот же отбор без `minZ` (допуск 45°) на кронштейне вернул девять граней, наибольшая —
|
||
515.44 мм² с центром ровно на `Zmin` (−50.50) — и это опорное пятно, а не нависание.
|
||
Нижняя граница окна (`minZ = Zmin + 0.1`, `Zmin` из `describe_model(sections="box")`) убирает
|
||
первый слой из улова.
|
||
|
||
**Пролёт и пятно — числа, а не впечатления.** Замеры на кронштейне камеры: пролёт между стойками
|
||
**49.0 мм** (потолок PLA по §2 `fdm-rules.md` — 15–25 мм, то есть редизайн); опорное пятно
|
||
«стоя» — `list_edges(minZ=−51, maxZ=−50)` дал четыре ребра, `X −50.50…50.50`, `Y 0.00…8.00`, то
|
||
есть **101 × 8 мм**, а ЦМ из `sections="mass"` — `(0.00, 4.93, 56.61)`: проекция внутри пятна, но
|
||
высота ЦМ над столом **107.1 мм** против полуширины **4 мм** — 27× при пороге 3×. Ни то, ни другое
|
||
не выводится из эскиза арифметикой — оба стоят одного вызова.
|
||
|
||
## Граница честности
|
||
|
||
- **Угол нависания** мерить в **той же конвенции, что fdm-rules.md** (от вертикали; нижняя грань с
|
||
поверхностью > `θ_max` от вертикали = нависание) — не путать с углом нормали от горизонтали.
|
||
- **Путь нагрузки агент НЕ выводит из габарита** — берёт из задачи, из опроса, а работая автономно
|
||
— из постановки, и тогда записывает допущением (правило 1). Длинная ось ≠ несущая.
|
||
- **«Нагрузка в XY» — требование с порогом, а не догма.** Обязательность ориентации решает запас
|
||
`σ_меж/σ` (SKILL.md, §«Ориентация: когда три требования не сходятся»); при запасе ≥10× выбор
|
||
делают нависания и устойчивость, а не слои.
|
||
- **Истинная мин. толщина стенки и полный детект криволинейных нависаний — не решаются** (нет
|
||
thickness/overhang-солвера).
|
||
- **Аудит эвристический и НЕ доказывает печатнопригодность** (не ловит анизотропию/путь нагрузки).
|
||
Вывод — список флагов для решения, не «приговор». Слайсер навык не зовёт намеренно.
|
||
|
||
## Как применять в цикле
|
||
|
||
1. После построения, убедившись что оно чистое, — пройти таблицу выше сверху вниз.
|
||
2. Каждый флаг — сверить с соответствующим правилом `fdm-rules.md` и решить: исправить геометрию
|
||
или принять осознанно.
|
||
3. Путь нагрузки и косметические грани взять из ответа пользователя или из постановки (правило 1),
|
||
не из габарита; ориентацию закрыть прикидкой `σ_меж/σ`.
|
||
4. Затем — чек-лист печатнопригодности (SKILL.md) → выдача; обменный файл (`export_model`) —
|
||
только если о нём просили.
|