3D-модели STEP/STL (твердотельное моделирование)
Твердотельные 3D-модели и сборки на build123d (ядро OCC): деталь как Python-исходник, который живёт рядом со STEP и правится между ходами; проверка массы, габаритов, зазоров, пересечений и соосности; стандартные и покупные изделия (крепёж, подшипники, моторы) со спецификацией; технологичность под фрезеровку, литьё, печать и лист; интерактивный 3D-вид со ссылками на грани; экспорт STEP, GLB, STL, DXF-сечения. Бери, когда нужно нарисовать, поправить или проверить деталь.
3D-модели и сборки STEP/GLB (твердотельное моделирование)
S0. ЧЕТЫРЕ ПРАВИЛА
2. STEP пишет ядро. Файл появляется только из cad_export (или params_table). STEP, набранный текстом, проходит взгляд и не открывается ни в одном ядре.
3. После каждой правки cad_check, и только потом картинка. Числа стоят доли секунды, рендер секунды и токены. Сошлись масса, габариты и отношения: тогда cad_render и сверка формы.
S2. ГЕОМЕТРИЯ И МОДУЛЬ ДЕТАЛИ
Алгебраический режим build123d: Box(l, w, h), Cylinder(radius, height), Cone(...), Sphere(r), Torus(R, r); Pos(x, y, z) * shape, Rot(X, Y, Z) * shape; булевы +, -, &. Скругления и фаски берут рёбра запросом: fillet(part.edges().filter_by(Axis.Z), radius=3), chamfer(part.edges().group_by(Axis.Z)[-1], length=1.5). Запросы: .filter_by(...), .group_by(...)[-1], .sort_by(...).
Готовые тела solid_build: revolve_profile(points, angle=360, plane="XZ") (точки (радиус, высота), половина сечения с чертежа), extrude_profile(points, height, plane="XY", taper=0) (taper в градусах даёт литейный уклон), hole_pattern(part, positions, diameter, depth=None), bolt_circle(count, circle_diameter, start_angle=0), flange(...). Неверный профиль и болтовая окружность за наружным диаметром отвергаются с обоими числами.
S3. СБОРКА
assembly({"метка": тело, ...}) собирает компаунд без сплавления: каждое тело остаётся листом со своей меткой, и метка уходит в STEP именем изделия (кириллица и пробелы сохраняются). Метка: непустая строка без # и запятой; экземпляры одного изделия различай суффиксом :2. Метка, подходящая под грамматику ссылки (буква, потом буквы, цифры, _, :), называет лист в ссылках (#вал.f3); лист с меткой вроде ISO 4762 M6x20 называется путём (#o3.f2). Положение задаёт Pos/Rot при сборке. Кинематика (ход, вращение) не моделируется: проверяется одно положение.
S4. ЯДРО ЦИКЛА: cad_check
Ответ: JSON, первые ключи status и hint. hint читается первым: это готовая подсказка, что делать дальше. Код выхода 0 при ok.
Гейт: watertight ∧ volume > 0 ∧ manifold ∧ valid. Гейт красный: экспорта нет, cad_export печатает тот же отчёт и не пишет ничего.
- по файлу или листу:
mass_kg,volume_mm3,bbox_x/y/z,face_count,edge_count,solid_count,area_mm2; - отношения:
distance(#A,#B)(зазор, касание и вложенность дают 0),overlap_mm3(#A,#B)иoverlap_mm3(*)(пересечение;*берёт худшую пару),outside_mm3(#A,#B)(сколько A торчит из B),offset(#A,#B)(расстояние между базами: плоскость, ось, точка),angle(#A,#B)(0..90°, соосность и параллельность),diameter(#A).
Натяг, который задуман, заявляй утверждением с нижней границей больше нуля: overlap_mm3(#вал,#ступица)>=1. Такая пара выходит из перебора overlap_mm3(*), прочие пересечения остаются ошибкой.
Посадка. Модель строится в номинале: вал и отверстие 20, зазор 0. Посадка H7/g6 пишется на чертеже, а в модели проверяется diameter обеих граней в номинале, offset(#вал.f1,#втулка.f3)<=0.01 (оси совпали) и angle(...)<=0.05. Смоделированный зазор (distance>=0.1) это отдельное решение, а не посадка.
Неразрешённая ссылка или сбой ядра дают ok: false с note: непроверенное не проходит.
Материал именем (сталь, чугун, алюминий, латунь, бронза, медь, титан, нержавейка, abs, pla, petg) или плотностью в кг/м³; по умолчанию сталь 7850.
S5. ССЫЛКИ НА ГРАНИ
Ссылка: [файл@ревизия]#селектор. Примеры: Фланец.step@3f9a1c2e#f7, Узел.step@3f9a1c2e#o2.f3,f4, #вал.e5, #втулка. Ревизия это первые 8 знаков sha256 того STEP, с которого снят номер; её печатает 3D-вид, сам её не пиши: свои ссылки в --assert, --highlight и --ref пиши без файла (#f7 это текущая деталь). Лист называется меткой или путём o1.2 (с 1, по детям сборки), сущность: f грань, e ребро, v вершина; у детали из одного тела лист не пишется. Номер это порядок part.faces() у листа, и он действителен для одной сохранённой ревизии: следующая пересборка может перенумеровать.
Человек кликает грань в 3D-виде GLB и вставляет в сообщение ссылку вида Фланец.step@3f9a1c2e#f7. Первым делом разреши её на том STEP, который он видит:
S6. РЕНДЕР: cad_render
PNG с ракурсами одним листом в $WORK_ROOT/cad/<имя>_views.png: это картинка для тебя, для сверки формы с чертежом. Человеку деталь показывает GLB, который он крутит сам, а картинку <Имя>.png (изометрия) cad_export кладёт в артефакты сам: в мессенджере 3D не открыть, и деталь приходит картинкой. Отдельный PNG в артефакты не пиши; -o нужен, только когда картинка идёт в документ. --highlight красит грани по ссылкам. Ракурсы: iso, front, back, left, right, top, bottom.
S7. СТАНДАРТНЫЕ И ПОКУПНЫЕ ИЗДЕЛИЯ: cad_parts
Покупное по памяти не рисуется: заглушку вместо реального мотора человек заметит только на сборке.
Сведения для спецификации (раздел, наименование, примечание) едут на самом теле из cad_parts и уходят в STEP вместе с ним, поэтому метку в assembly выбирай свободно ("винт:2" так же годится, как обозначение). Тело, собранное самостоятельно, в спецификации стоит в «Деталях» под своей меткой, даже если метка похожа на обозначение: изделием его делают только сведения из cad_parts. Перемещение (Pos, Rot) сведения сохраняет, булева операция над самим изделием даёт новое тело без них. cad_export пишет рядом со сборкой спецификацию <Имя>.bom.csv по разделам ГОСТ 2.106, когда в сборке есть стандартные или покупные изделия.
S8. ТЕХНОЛОГИЧНОСТЬ: cad_dfm
«А это можно сделать?» это вызов, а не мнение:
Процессы: cnc (внутренние радиусы против фрезы и глубины, стенка, глубина отверстий), mold (уклон к направлению выемки, поднутрения), fdm, sla, sls (стенка, нависания), sheet (постоянная толщина, радиус гиба, отверстия у гиба; --thickness). --pull это направление выемки для литья, ось шпинделя для фрезеровки и направление печати. Процесс неизвестен: спроси, или прогони два-три и сравни.
S9. СЕРИЯ ИСПОЛНЕНИЙ: params_table
Таблица исполнений с чертежа это одна модель с параметрами. Колонки таблицы совпадают с аргументами build:
Каждая строка проходит гейт и те же --assert; файл получают только прошедшие, у остальных свой hint. Исходник модуля сохраняется в рабочей памяти ($WORK_ROOT/durable/cad/<модуль>.py), а не рядом с серией, и checkout("<модуль>") возвращает его. Без --out-dir серия пишется в $WORK_ROOT/cad/<модуль>_series.
S10. ЧУЖОЙ STEP: cad_inspect
Печатает листья с путями и метками, объёмы, габариты, заголовок файла и вердикт гейта: был ли донор сломан ещё до правок. --split раскладывает листья по отдельным STEP в $WORK_ROOT/cad. Правка донора живёт в модуле:
S11. ЭКСПОРТ: cad_export
<Имя>.png, изометрия детали: её видит человек в мессенджере, где 3D не открыть;<Имя>.step, STEP AP214 с деревом сборки и метками; схема и число тел читаются из записанного файла;<Имя>.glb, 3D-вид для человека: вращение, клик по грани или ребру даёт ссылку (S5);- по флагам
<Имя>.stl(печать,--tolerance) и<Имя>.dxf(плоское сечение,--dxf-plane XY|XZ|YZ); <Имя>.bom.csv, если в сборке есть изделия (S7).
S12. ГРАНИЦЫ
Деталь это исходник; cad_check решает, тело ли это и сходятся ли размеры и отношения; ссылка на грань разрешается запросом, а не номером; экспорт кладёт картинку, STEP и 3D-вид одной дверью, исходник в рабочую память, и дверь заперта, пока гейт красный.
Similar skills
Try this skill
Sign up and use the "3D-модели STEP/STL (твердотельное моделирование)" skill for free.