kompas 0.4.0 (из f1ecc6ff5a923d524a7aa8dc7b97c538d9cf1bb3)

This commit is contained in:
2026-10-15 03:15:33 +00:00
parent 94e044bd03
commit 0720fd7397
22 changed files with 208 additions and 106 deletions
+34 -20
View File
@@ -2,7 +2,7 @@
name: kompas-fdm-design
description: >
Методика проектирования деталей под FDM/FFF 3D-печать в КОМПАС-3D через MCP-сервер плагина:
правила DFM (нависания и угол θ_max, толщины стенок n·w, отверстия и teardrop,
правила DFM (нависания и угол θ_max, толщины стенок n·w, горизонтальные отверстия,
посадки/зазоры, ориентация под прочность, elephant foot, бобышки/инсёрты/защёлки) ПЛЮС
лёгкая самопроверка геометрии инструментами осмотра. Используй, когда задача — спроектировать
или ДОВЕСТИ деталь, чтобы она хорошо ПЕЧАТАЛАСЬ на FDM. Триггеры: «сделай деталь
@@ -42,7 +42,9 @@ description: >
- **`θ_max` = предельный угол самонесущей поверхности ОТ ВЕРТИКАЛИ.** `θ_max ≈ arctan(w/2h)`
(≈45° при `w`=0.4, `h`=0.2). **Дефолт 45°** (PLA, хороший обдув); **40°** для PETG/ABS
(эмпирическая поправка на провис, не вывод формулы) или для толстого слоя (`h≥0.3` → формула
даёт ~34°). Нависания, teardrop, фаски, зенковки берут угол из `θ_max`.
даёт ~34°). Нависания, фаски, зенковки берут угол из `θ_max`. **Угол, заданный постановкой,
главнее дефолта материала:** ТЗ назвало 45° для PETG — работай с 45° и назови расхождение с
дефолтом 40° в допущениях, а не выбирай молча.
- **Материал** (PLA / PETG / ABS) — модификатор зазоров/мостов/коробления/`θ_max`. См.
`references/fdm-rules.md`.
@@ -59,7 +61,7 @@ description: >
«спросить некого» — не повод пропустить решение об ориентации: без него все дальнейшие правила
повисают.
- Реши постановку на стол (ось Z = рост слоёв). От неё зависит: где нависания; куда смотрят
отверстия (вертикальные → компенсация Ø; горизонтальные → teardrop); путь нагрузки (**держи в
отверстия (вертикальные → компенсация Ø; горизонтальные → по возможности развернуть вертикально); путь нагрузки (**держи в
XY**; Z-сжатие можно, Z-растяжение/срез — нет); плоскости сопряжения (на XY-гранях); «лесенка» на
наклонных функциональных поверхностях; если поддержки неизбежны — чтобы опорные грани были
некритичными/скрытыми.
@@ -86,6 +88,12 @@ description: >
4. Порог — межслойная прочность: доля от XY-прочности по §6 `fdm-rules.md`, для **PLA ~20–30 МПа**
(PETG ~15–25, ABS ~8–15).
**Сечение на пути нагрузки не одно.** Момент проходит через КАЖДОЕ сечение от точки приложения до
опоры: корень стойки, место, где она выходит из основания, тонкие ноги основания, перемычку у
крепежа. Считай прикидку для всех и бери худшее — замер на кронштейне: корень стойки дал запас 32×,
а ноги основания толщиной 4 мм под тот же момент — 3.6×. Самое тонкое место по пути, а не самое
очевидное, и решает ориентацию.
**Точность прикидки — ПОРЯДОК, и в узкой полосе этого мало.** `W = b·h²/6` — это сплошное сечение,
а печатная деталь сплошной не бывает: тот же навык требует стенки `n·w` и оставляет заполнение
по умолчанию, так что настоящий момент сопротивления корневого сечения заметно ниже габаритного
@@ -93,6 +101,9 @@ description: >
не мешает; в полосе **<3×**, где число и решает, погрешность метода равна ширине полосы. Поэтому:
при запасе <3× пересчитайте `W` по фактическому сечению (оболочка `n·w` + заполнение) либо просто
возьмите `W` вдвое меньше габаритного и посмотрите, в какой строке таблицы окажетесь.
`W` и `I` СПЛОШНОГО фактического сечения (с отверстиями, скруглениями, карманами) не считайте по
эскизу — их отдаёт `measure_section(plane, offset)` прямо с построенной детали
(`help(topic="section-properties")`); поправка на оболочку и заполнение остаётся вашей.
| Запас `σ_меж/σ` | Что делать |
|---|---|
@@ -100,9 +111,10 @@ description: >
| **3–10×** | Держать XY, если это не стоит поддержек на функциональных гранях; несущее сечение поднять (§6: ×2 при неизбежной Z-нагрузке) |
| **≥ 10×** | Требование СНИМАЕТСЯ — «слои на отрыв» здесь не размерный случай. Ориентацию выбирай по печати: сначала нависания, затем опорная площадка и устойчивость |
**Замер (кронштейн камеры):** 150 г на плече 53 мм → `M = 0.150·9.81·53 ≈ 78 Н·мм`; корневое сечение
34×24 → `W = 34·24²/6 ≈ 3.3·10³ мм³`; `σ ≈ 24 кПа` против ~30 МПа межслойной PLA — запас **три
порядка**. Слои здесь не решают ничего, и постановка выбрана по нависаниям, а не по прочности.
**Пример расчёта** (числа условные — у своей детали бери свои, из постановки и замеров): 150 г на
плече 50 мм → `M = 0.150·9.81·50 ≈ 74 Н·мм`; сечение 30×20 → `W = 30·20²/6 = 2·10³ мм³`;
`σ ≈ 37 кПа` против ~30 МПа межслойной PLA — запас **три порядка**. Слои тогда не решают ничего, и
постановку выбирают по нависаниям, а не по прочности.
Без этой прикидки правило «нагрузка в XY» читается как запрет и уводит в худшую по печати ориентацию.
**Постановки перебирают по граням габарита**, их немного: у плоско-изогнутой детали — две «плашмя»
@@ -117,14 +129,13 @@ description: >
2. **Ориентация** (правило 1 + §«когда три требования не сходятся»): нагрузка/косметика — опросом
или допущением → перебор постановок с числами → ось слоёв, сопряжения, «лесенка», поддержки.
3. **Правила эскиза/операции** (строй через `kompas-3d`): стенки `n·w`; нависания → скос под
`θ_max`; горизонтальные отверстия → teardrop (полная капля; усечённая касательная, если клюв
мешает виду; мягкий колпачок, если по отверстию идёт посадка — выбор и формулы в
`references/fdm-rules.md` §3), причём у МЕЛКОГО отверстия форму выбирают по ПРОЛЁТУ крыши,
а не по углу боковин; вертикальные → компенсация Ø; фаска у основания;
`θ_max`; горизонтальные отверстия → развернуть ось вертикально, мелкое оставить круглым
(короткий мост), крупное — D-отверстие с плоским верхом (`references/fdm-rules.md` §3);
вертикальные → компенсация Ø; фаска у основания;
зазоры посадок (со знаком); заходные фаски; мин. элементы/текст; бобышки/инсёрты/защёлки.
Числа — в `references/fdm-rules.md`.
4. **Гео-аудит** (`references/geometry-audit.md`) — инструментами осмотра.
5. **Предусловия выдачи**: единое тело/манифолд (`boolean_union` при необходимости) →
5. **Предусловия выдачи**: единое тело/манифолд (`boolean` при необходимости) →
построение чистое.
6. **Чек-лист** → выдача. Обменный файл кладите **только если о нём попросили**: модель самоценна,
а нарезает её человек сам. Попросили — `export_model` (`.stl` — двоичная сетка для слайсера,
@@ -143,10 +154,9 @@ description: >
попадает опорное пятно, без `minArea` — микрогрань, которая нависанием быть не может);
пролёт каждого моста **замерен** `measure`, а не прикинут, и
укладывается в `references/fdm-rules.md` §2 по короткой стороне; внутренним поддержкам — доступ.
- [ ] Горизонтальные отверстия — teardrop/D (геометрия из `θ_max`), усечённая касательная там, где
клюв мешает виду, либо мягкий колпачок там, где отверстие несёт посадку, и тогда компромисс
назван вслух; у формы положе `θ_max` пролёт крыши посчитан и укладывается в норму моста;
вертикальные — компенсация Ø; глухие — дно ≥2–3 мм.
- [ ] Горизонтальные отверстия — ось развёрнута вертикально, либо мелкое оставлено круглым, либо
D-отверстие; пролёт потолка посчитан и укладывается в норму моста; посадочные — под
рассверловку; вертикальные — компенсация Ø; глухие — дно ≥2–3 мм.
- [ ] Фаска у основания (elephant foot); внутренние углы ≥R0.5; опорная площадка есть, и для
высокой детали проверена устойчивость по §«Гео-аудит»: очертание пятна —
`list_edges(minZ=<Zmin−0.1>, maxZ=<Zmin+0.1>)`, проекция ЦМ
@@ -166,6 +176,10 @@ description: >
Лёгкая самопроверка построенной модели **существующими** инструментами осмотра MCP — вызовами,
а не пожеланиями:
- **Цилиндры, конусы и торы этот отбор не видит:** нормаль кривой грани берётся в её центре, и у
горизонтального цилиндра она горизонтальна. Их проверяй отдельно: `list_faces(type=cylinder|cone)`
→ ось (`axis`) горизонтальна — у цилиндра нижняя половина потолка нависает (отверстие — §3
`references/fdm-rules.md`), у конуса угол нижней образующей к столу считай из угла конуса.
- **Нависания одним отбором:** `list_faces(normal="0,0,-1", normalTolerance=90−θ_max,
minZ=<Zmin+0.1>)` — всё вернувшееся кандидаты в нависания, и тем хуже, чем ближе нормаль
к чистому −Z (горизонтальный потолок). При дефолтном `θ_max`=45° допуск равен 45 — это совпадение
@@ -183,7 +197,7 @@ description: >
который печатается заведомо. Ставьте `minArea` порядка 5–10 мм², а всё мелкое, что всё же
хотите проверить, судите пролётом (`measure`), а не углом: иначе аудит гонит на редизайн там,
где всё в порядке.
Дальше `list_faces(index=N)` по подозрительным; цилиндр с горизонтальной осью → нужен teardrop.
Дальше `list_faces(index=N)` по подозрительным; цилиндр с горизонтальной осью → проверить пролёт потолка (§3 правил).
- **Пролёт моста меряют, а не считают по эскизу:** `measure(kind1="face", index1=…, kind2="face",
index2=…)` между ВНУТРЕННИМИ гранями опор (замер: 49.0 мм между стойками). Сравнивать с §2
`fdm-rules.md`: 49 мм при потолке PLA 15–25 мм — это редизайн, а не «как-нибудь напечатается».
@@ -203,10 +217,10 @@ description: >
Проверок две: проекция ЦМ `(x, y)` обязана лежать **внутри** этого прямоугольника (у консольной
детали «стоя» она легко уходит за него — деталь падает недопечатанной), и высота ЦМ **над столом**
(`z_ЦМ − Zmin`) ≲3× полуширины (эвристика; выше — интегральный фланец §5 или разбиение §13).
**Замер (кронштейн «стоя»):** габарит `Z −50.50…180.00`, ЦМ `(0.00, 4.93, 56.61)`;
`list_edges(minZ=−51, maxZ=−50)` вернул четыре ребра — `X −50.50…50.50`, `Y 0.00…8.00`, то есть
пятно 101 × 8 мм. Проекция ЦМ (0.00, 4.93) внутри прямоугольника — первая проверка пройдена;
высота ЦМ над столом 56.61 − (−50.50) = **107.1 мм** при полуширине узкого направления **4 мм**,
**Пример** (условные числа): габарит `Z −50…180`, ЦМ `(0, 5, 57)`;
`list_edges(minZ=−51, maxZ=−49)` вернул четыре ребра — `X −50…50`, `Y 0…8`, то есть
пятно 100 × 8 мм. Проекция ЦМ (0, 5) внутри прямоугольника — первая проверка пройдена;
высота ЦМ над столом 57 − (−50) = **107 мм** при полуширине узкого направления **4 мм**,
это **27×** при пороге 3× — вторая провалена. Сработало именно второе число, и без очертания
пятна взять его было неоткуда.
- **Тело, габарит, номиналы:** `describe_model(sections="bodies")` + чистое построение (единое
@@ -36,48 +36,17 @@
- **Вертикальные (ось ∥ Z)** печатаются уже номинала → **увеличить диаметр модели** (радиус на
половину): **+0.2 мм (Ø<4)**, **+0.2–0.3 мм (Ø 4–10)**, **+0.1–0.2 мм (Ø>10)**; калибровать,
критичные — рассверливать.
- **Горизонтальные (ось в XY)** → **teardrop** или **D-отверстие** (плоский верх). Мин. Ø **2 мм**.
Круглая часть тоже печатается уже → **+0.1–0.2 мм** к её Ø.
- **Геометрия teardrop (полная капля):** боковины касательны окружности под углом `θ_max` к вертикали
(с двух сторон), сходятся в вершине на вертикальной оси. Высота вершины над центром =
**`r / sin θ_max`**; включённый угол при вершине = **`2·θ_max`**. При `θ_max`=45° →
`r/sin45° = √2·r ≈ 1.414·r` над центром (= **0.414·r над верхом окружности**), угол 90°.
Низ — оставшаяся дуга окружности. Это единственная форма, у которой ВСЯ крыша самонесущая по
критерию `θ_max`; платой идёт максимальное искажение круга (при `θ_max`=45° некруглыми становятся
90° дуги из 360°).
- **Усечённая касательная капля — когда клюв мешает глазу.** Полная капля при `θ_max`=45° выступает
на 0.414·r, и на мелком отверстии это заметно. Та же конструкция, но с точкой касания на `±φ` от
макушки при `φ < θ_max`: боковины остаются КАСАТЕЛЬНЫМИ (контур гладкий, излома на стыке с дугой
нет, круг не срезается вовсе), а
- вершина над центром = **`r / cos φ`**, то есть выступ над окружностью = **`r·(1/cos φ − 1)`**;
- боковины наклонены к вертикали на **`90° − φ`** — тем положе, чем короче клюв;
- перекрываемый пролёт = **`2r·sin φ`**.
**Судить эту форму по углу боковин бесполезно — судите по пролёту.** У маленького отверстия
`2r·sin φ` укладывается в единицы миллиметров, а мост такой длины FDM печатает не задумываясь:
`θ_max` — критерий для ПРОТЯЖЁННЫХ нависаний, а не для перемычки в пару миллиметров.
Замер (Ø6, `φ`=22.5°): выступ **0.247 мм** против 1.243 у полной капли, пролёт **2.30 мм**,
боковины 67.5° от вертикали — печатается без поддержек, крыша отверстия чистая.
- **Мягкий колпачок — когда круглость важнее, чем полная самонесущесть.** Посадка вала, подшипник,
штифт: полная капля съедает верхнюю четверть окружности, и сопряжение по ней уже не работает.
Тогда заменяют не сектор `±(90−θ_max)`, а УЗКИЙ сектор `±φ` у самой макушки, подняв вершину на
`k` слоёв (`k·h`) над окружностью:
- точки стыка — на `±φ` от макушки, вершина — на оси, на `r + k·h` над центром;
- включённый угол при вершине = **`2·arctan( r·sin φ / (r + k·h − r·cos φ) )`**;
- **угол остаётся ТУПЫМ, пока `r·(sin φ + cos φ − 1) > k·h`** — это и есть связь между шириной
сектора и подъёмом: ужимая `φ`, синхронно снижайте `k`, иначе колпачок вырождается в шпиль.
- Замер (Ø8, `φ`=12°, `k`=2 при `h`=0.2, т.е. подъём 0.4 мм): круглыми остаются **336° из 360°**,
стык отходит от оси на **±0.83 мм**, угол при вершине **119°**, боковины — 59.6° от вертикали.
- **Честная граница приёма:** у чистой окружности зона нависания — сектор `±(90−θ_max)` от макушки
(при 45° это ±45°, ширина `2r·sin45°`≈1.41·r). Колпачок `±12°` снимает только самую макушку —
участок от 12° до 45° остаётся нависанием. То есть это НЕ решение по `θ_max`, а замена плоского
потолка на микро-мост шириной ~`2r·sin φ` за `k` слоёв. Берите его осознанно: круглость в обмен
на частичное улучшение печати, а не на полное.
- **Точки касания задавайте с ПОЛНОЙ точностью — округление рвёт контур.** Дуга плюс две касательные
замыкаются у КОМПАС по допуску жёстче обычного округления: те же координаты, срезанные до 6 знаков
(−16.668356 вместо −16.6683532), дали «код 19: контур должен быть замкнут», и вырез развалился.
Коварство в том, что `sketch_update` отчитался габаритом как об успехе — невалидность вылезла
только предупреждением «2 операц. в ошибке». Считайте `r·sin φ`/`r·cos φ` и подставляйте все знаки.
- **Горизонтальные (ось в XY)** — потолок отверстия печатается нависанием. По порядку предпочтения:
1. **Развернуть деталь** так, чтобы ось отверстия стала вертикальной (∥ Z), — если это не спорит
с прочностью по слоям (§«Ориентация»).
2. **Мелкое отверстие (Ø ≤ ~6 мм) — оставить круглым.** Потолок — короткий мост в пару
миллиметров, FDM печатает его без поддержек; круглая часть печатается уже → **+0.1–0.2 мм** к Ø.
3. **D-отверстие** — плоский верх: хорда на высоте `r·cos φ` над центром превращает потолок в мост
шириной `2r·sin φ`, материал над хордой остаётся. Контур выреза — ЗАМКНУТЫЙ: дуга окружности
снизу от одного конца хорды до другого (`arc3points` по точкам хорды и низу) плюс сама хорда
отрезком. Дополнительный вырез поверх круглого отверстия D-формы не даёт — он только
расширяет отверстие. Мост держи **≤ 5–10 мм**.
Мин. Ø **2 мм**. Посадочные отверстия (вал, подшипник, штифт) после печати рассверливать.
- **Глухое отверстие:** дно = внутренний мост → **толщина дна ≥2–3 мм** или купольное/
вентилируемое. Сквозные предпочтительнее.
- **Отступ от края** — через остаточную перемычку: стенка между отверстием и краем **≥2–3·w**
@@ -9,7 +9,7 @@
|---|---|---|
| Нависания (приближённо) | `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» | ✅ |
| Горизонтальные круглые отверстия | `list_faces(index=N)`: цилиндр с горизонтальной осью → пролёт потолка по `fdm-rules.md` §3 | ✅ |
| Пролёт моста | `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")` | ✅ |