первый коммит: инструмент, документ, правила, шаблоны

This commit is contained in:
2026-09-13 00:15:15 +02:00
commit 1971daf8c7
38 changed files with 7752 additions and 0 deletions
+467
View File
@@ -0,0 +1,467 @@
# -*- coding: utf-8 -*-
# RECADA — ПАРАМЕТРИЧЕСКАЯ модель детали LRDE-2BR1-00-2B (оригами-кинематика).
#
# Модель: жёсткие пластины оболочки + шарниры на линиях гиба.
# Меняете DELTA у любого гиба — поддерево поворачивается, форма перестраивается.
# Проверено: при нулевых DELTA совпадение с оригиналом 0.00000 мм (100 % точек).
#
# Обмер: толщина 3.0 мм · гибов 7 · отверстий 6
# объём эталона 78031.59 мм3
import FreeCAD as App, Part, zlib, base64, math
from FreeCAD import Vector, Placement, Rotation
# ================= ПАРАМЕТРЫ ГИБОВ =================
# angle — измеренный поворот; DELTA — ваша добавка в градусах
JOINTS = [
dict(name="bend_94", angle=90.000, axis=(0.16314, -0.98660, -0.00000), point=(17.150, 6.509, 35.200), R=3.00, subtree=[13, 16, 17]),
dict(name="bend_91", angle=90.000, axis=(-0.16314, 0.98660, -0.00000), point=(17.150, 6.509, -35.200), R=3.00, subtree=[10, 14]),
dict(name="bend_25", angle=45.000, axis=(0.00000, 0.00000, 1.00000), point=(-40.276, 86.000, 37.700), R=3.00, subtree=[0, 1, 2, 3, 4, 5]),
dict(name="bend_11", angle=45.000, axis=(-0.00000, 0.00000, 1.00000), point=(-57.404, 90.400, 0.000), R=3.00, subtree=[0, 1]),
dict(name="bend_54", angle=80.611, axis=(0.00000, 0.00000, 1.00000), point=(5.494, 77.000, 0.000), R=3.00, subtree=[8]),
dict(name="bend_93", angle=90.000, axis=(0.00000, -0.00000, 1.00000), point=(30.438, -73.848, 0.000), R=3.00, subtree=[12]),
dict(name="bend_176", angle=80.611, axis=(0.00000, -0.00000, -1.00000), point=(20.648, -84.589, 0.000), R=3.00, subtree=[19]),
]
DELTA = { # <<< МЕНЯЙТЕ ЗДЕСЬ
"bend_94": 0.0,
"bend_91": 0.0,
"bend_25": 0.0,
"bend_11": 0.0,
"bend_54": 0.0,
"bend_93": 0.0,
"bend_176": 0.0,
}
THICKNESS = 3.0 # толщина листа
# ================= СКЕЛЕТ (пластины оболочки) =================
SHELL = (
"eNrsvUvPLElyprc/vyKXumXC75fliBxpI2AEkRgthRJZ4hAgugn2UML8e72PuXtkZGbEdzLrVGmarSqSzer4PCP8Ym53e+2v/8f/7ed//j/++l9++n9++j//"
"6ee/+U8//fPP37791b/7m7/6d3/97y9/+8d//uM//fEf/svlP8b/4fLf/N1/e/kP//zzHy5/9dOf/u6nv//52//yx7/76T//4x//8KeL+/ZX//ov//fP4e//"
"dPHeffOXems59uZLTKn60Fq/xMvVX9xFfyy30KLXAFd97bnWdIk3t/vHh9oZfY234lstKcWaawn615+vPvEOd6vrC6Ek70sL+mjKemUuekWKJYSs0e5yDTf9"
"Xf+9JFe6ry5VPS8Xz3uu6ab5RU2wuah/69nzg777p/kcL4+TSbHpQ9tk/C1XVztTqT21Xppmf8sXW2/Vf7iLlh/yJcSLZq6fhpxD19hcSqxFI/PDJ3OpY6Dz"
"NQUNyq0VvbtffFk7VbXOFlywgaVp03yNPbueii9pDfQx9BZb8n28saSqPXAh9BR9qTGugTXElHMqY4bF51B8zC2zpTrFOUy7V5x2QOfJsNx0kjFoP3xyWYua"
"w6JrvDDXFvwYmF3SE+2lj67nWOfA1FLVJuQa54qzKKJpGVVf776UteLqNKdefBXJ2MDUctbeNReyz5pHmQO7HreWmiu1jIFZk9Ono9c6eg1zjj6krv1PyYU0"
"3xhcjdmFqP/vNc85LmuFer1eU7ONE7Gw5F6q/uLWDL0+3Lv3Ojw/ziTqQcgh6mnz+rf5wqClanW+OC1nDNROibarCC2EGtNcSmi+FT3T5tax3UHvj02knF3W"
"vBc5aBatJhd91nGPgbnVnGPkkF1Mbh5fbLH2oCV7/X4MDNrDnryDKnIU8dtADSlB2w19jUX7rl/5qHPqolud7RjIF4t32skex6e9qE+HmLUx2nS9eg4supWi"
"hpi0xDFQR6KJiLaa7p+ba9F/zSK+pu0NY9Happ5FEyIezbP4EMbIyu3osWn4vAQibvGIrCVqUZrAPGmOSZdTdNXbGKcNd5CmPpN0pd0cyM5qr2yH5xvZGF27"
"IGrTxLX/Y2TXdUq6SkHchnfOp6LmJNrTqlO/fBOf85p60mlBRlFHeUk8rGKJvmsaWk+AfuxhFwVErUH/1BjGw6ZrE0T6moEYZhkPuwuueW28fsNFt2eiTtGu"
"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"
"nurU2yTHrHMyVdxxbNp3ufDDLiH92uMuGUZhepRR1ZLvRxHA7kCA5JRZVW90zs2AKVbWXUeN2OHY6+Fb94w4kVrXlwsBiHeg8msA03nWQ4h/ebL1KCREXyt9"
"1Un4twjrYx78cBfDALV8uI4LXfXxNprLqzwJJImqKNXRkv4lRGQ7BGKh9J+aaa+S0ZSHFPrR9gHZbGmvZsd22vYUok3z8XP+9Hz70TTE4MmeBhQeLHkaKU8O"
"kN9nU498+M0ffcUe32TlB5z8o1N8W9I8suFH8VvHtdtL4Flk/3T0pQ4/98PRU7ICUjs1LJ3+W55F4mxf5R6vYw9fCv+h6xfOV6pokl05XKt+mMn0CTdX+cau"
"Ik4wOnRkvDRpWflDBL+nu3woOgP9g5MpvZMqgBgCo33BpH6HV70v5dPNL3V+3MX04VRllZJWI+qw5s8VhQWvuO8zYPXFVD+Z6cFEPyTivZlZDs3MH7Ayrw/L"
"JKt6WTZv2vKnXswHA5ucjR6ezZJIXOLiLodPD39udvfm48hupAmUQx/Hj7g4Tj0c3/UkHZqrYhw43Wi27TeAp3yzrHu4dy7uzI0kkZ3qkx/Jjw7ZBP1oGBcA"
"fyF+mQ78SGPs0Stl19Pr2xAvca63vtxIb7sBz13Y+w9KE6Ts4XFi2VrojNN/fXr4+1ff56rU3/s+82ke1S9xfb56dM/XPNovWQo6ELZp57S9nvxl4Dc9+60f"
"3dYTH/IDrzW4eqyQbJRZWP6+1/50fSQ2FpIUvHVUGh+buIDX0z8fRCX8Q1QiX36FeMRbEZcvXPG7gEKle5cfYaat4sfaioXqJyjV6/OjF8yl34NP2U/Zsg8+"
"ldNNsCBTsvWS3bEINpj06xI7VvS3AxB7O6h36H91hqBYMehGFxALySWKqvLgW6uRwRVoWW+QDdLGNzK4j6d6lYSMzV979IPtg1ShuG79ZUa8bhcB7eE0AvrD"
"gdaHC3/ggcyXM9+j5AzFq8PBfu57nExk73tMX542+Mp4pUqp6yIv6TzO2YUj92k8cALPcrIzH7BxDe1n/9oHPNFg9j7gPJXzY+eprcGlkbV276HwxToeNmzo"
"UfsNm0GM5D/x1e6UmonFd+h1njB99jlADOsXIIbl+Fi/+pmV/OH8kpVcw7yNV/E+It2BBJ82tZeGMLZQECg3ee5bHl1sZIgg4Cl+ninjdqeMv5z8ypI5dGdR"
"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"
)
_brep = zlib.decompress(base64.b64decode(SHELL)).decode("utf-8", "ignore")
_c = Part.Shape(); _c.importBrepFromString(_brep)
plates = list(_c.Faces)
print("пластин в оболочке:", len(plates))
# ---- складывание: поворот поддерева вокруг оси гиба ----
for J in JOINTS:
d = DELTA.get(J["name"], 0.0)
if abs(d) < 1e-9:
continue
ax_p = Vector(*J["point"]); ax_d = Vector(*J["axis"])
rot = Rotation(ax_d, d)
pl = Placement(ax_p, rot, Vector(0, 0, 0))
pl.Base = ax_p - rot.multVec(ax_p)
for k in J["subtree"]:
plates[k] = plates[k].transformGeometry(pl.toMatrix())
print(" %s: поворот на %+.2f° (пластин %d)" % (J["name"], d, len(J["subtree"])))
shell = Part.Shell(plates)
if App.ActiveDocument is None:
App.newDocument("RECADA")
Part.show(shell, "RECADA_shell")
# ---- попытка нарастить на толщину (может не пройти на сложной геометрии) ----
solid = None
for _join in (2, 1, 0):
for _sgn in (-1, 1):
try:
_s = shell.makeOffsetShape(_sgn * THICKNESS, 1.0e-4, False, False, 0, _join, True)
if _s.Volume > 0:
solid = _s; print("тело построено: join=%d знак=%+d" % (_join, _sgn)); break
except Exception:
pass
if solid: break
if solid is not None:
Part.show(solid, "RECADA_solid")
print("объём:", round(solid.Volume, 1))
else:
print("Тело не построилось — показана оболочка. Толщину можно задать")
print("в SheetMetal/Thickness вручную или экспортировать оболочку в STEP.")
App.ActiveDocument.recompute()
File diff suppressed because it is too large Load Diff
+4008
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,121 @@
# Инструмент реверса RECADA — установка (FreeCAD НЕ нужен)
Инструмент работает на ядре OpenCASCADE через библиотеку OCP — это то же ядро,
что внутри FreeCAD, но отдельная библиотека. **FreeCAD не требуется ни для чего.**
## 1. Python
Поставьте **Python 3.12** с python.org (3.13/3.14 пока без готовых колёс OCP).
При установке отметьте **«Add python.exe to PATH»**.
Проверка в PowerShell:
```powershell
python --version
```
## 2. Папка и окружение
```powershell
mkdir C:\CAD\recada-tool
cd C:\CAD\recada-tool
# положить сюда recada.py
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
Если PowerShell ругается на политику:
```powershell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
```
## 3. Библиотеки (~700 МБ, 5–10 минут)
```powershell
pip install cadquery-ocp build123d networkx numpy scipy streamlit
```
## 4. Запуск браузерного интерфейса
```powershell
streamlit run recada.py
```
Откроется http://localhost:8501
## Вкладки
| Вкладка | Что делает |
|---|---|
| **Обмер детали** | STEP → толщина, гибы (оба угла), отверстия, разгрузки, припуски развёртки, measurements.json |
| **Генерация кода** | STEP → обмер → подбор неизвестных параметров петлёй → готовый параметрический Python-код + params.json |
| **Приёмка** | два STEP → % точек в допуске, вердикт |
| **Справка** | как устроен алгоритм |
## Командная строка (без браузера)
```powershell
python recada.py probe деталь.step # обмер
python recada.py fit деталь.step # подбор параметров + код
python recada.py metro эталон.step кандидат.step
python recada.py unfold деталь.step
```
## Как достигается «100 % повторение»
По методике из документа (раздел «Критерий 100% копии»):
1. Обмер даёт скелет: толщина, радиусы, углы, оси, отверстия.
2. Генератор строит деталь из параметров.
3. **Двусторонняя** метрология (эталон→кандидат И кандидат→эталон) считает невязку.
4. Оптимизатор Powell/CMA подбирает неизвестные параметры до нулевой невязки.
5. Приёмка: ≥ 99.9 % точек в допуске + Δ объёма < 1 %.
**Проверено:** на эталонной детали с известными параметрами (40 / 60 / 25 / ширина 80)
петля восстановила их точно: RMS 0.00000 мм, 100 % точек, Δ объёма 0.0000 %.
## Важные уроки, встроенные в инструмент
- **Односторонняя метрология обманывает.** Первый прогон дал RMS 0 и 100 % точек
при детали ДЛИННЕЕ эталона на 1.8 мм — точки эталона лежали на кандидате,
а лишний металл не был виден. Поэтому невязка двусторонняя.
- **Объём — не критерий.** Сдвиг детали на 0.3 мм даёт Δ объёма 0.0000 %.
- **Два угла гиба.** Поворот (развёртка цилиндра) и двугранный (180 − поворот).
Старый Unfolder V1 показывал 45° и 80.6° там, где истина 135° и 99.39°.
## Ограничения
- Автоподбор работает для деталей с **параллельными осями гибов** (одна цепочка).
Для пространственных (как Defender LRDE-2BR1, 3 направления осей) выдаётся
скелет кода с группировкой по осям и TODO — сборка цепочек вручную.
- Отверстия попадают в код комментариями с координатами; перенос в hole_array()
с привязкой к базам (datums) — ручной шаг.
- Разгрузки распознаются, но генерируются правилом (features.py), а не копируются.
---
## Обновление от 01.09 (важные исправления)
**1. Метрология мерила до тела, а не до поверхности.**
`distToShape` до солида возвращает 0 для точек ВНУТРИ материала — значит «толстый»
кандидат мог пройти приёмку. Теперь замер идёт до оболочки (`surface_of`).
Разница на проверке: сдвиг детали на 0.3 мм давал 74 % точек в допуске, теперь 29.8 %.
Изменение толщины 3 → 4 мм тоже ловится (29.8 %), раньше могло проскочить.
**2. Дубли отверстий.** Центры окружностей склеиваются с допуском 0.05 мм.
На Defender было «7 отверстий», стало правильные 6 (одно D20 двоилось).
**3. Развёртка в DXF** — кнопка на вкладке обмера и команда:
```
python recada.py dxf деталь.step unfold.dxf
```
Контур заготовки + линии гиба на слое BEND с подписями «R3 90°».
**4. Скелет кода для пространственных деталей** содержит упорядоченную цепочку
гибов: ось, точка прохождения, угол, пометка разгрузки.
## Что НЕ получилось (честный статус)
Автоматическая сборка пространственных деталей (как Defender LRDE-2BR1 —
три направления осей гибов) требует расщепления детали на две оболочки.
Пробовали три алгоритма:
- по габаритам граней (торец = узкая полоса) — нашёл 18 из ~120 торцов;
- по эквидистантным партнёрам (плоскость-плоскость на t, цилиндры с ΔR = t) —
67 граней из 187, граф не развалился надвое;
- виртуальным щупом (точка − нормаль × t должна лежать на поверхности) —
38 граней, критерий слишком строг на скруглениях и малых гранях.
Причина: топология реальной детали сложнее канонического листа — одной грани
с одной стороны соответствует несколько с другой, есть места прямого смыкания.
Следующий подход: обход графа от базовой грани с локальным замером толщины
и мягким критерием (доля точек, а не все), плюс отдельная обработка мелких
скруглений контура. Оценка: 1–2 дня работы.
До этого пространственные детали проходят обмер, развёртку по гибам и метрологию,
но код выдаётся скелетом с TODO, а не готовым.
@@ -0,0 +1,77 @@
# Инструменты, использованные при создании RECADA-реверса
Всё бесплатное и open source. Платные строки проекта — только серверы и токены.
## Установка целиком
```
pip install cadquery-ocp build123d networkx numpy scipy streamlit ezdxf
```
## Ядро геометрии
| Инструмент | Роль в проекте |
|---|---|
| **OCP** (cadquery-ocp 7.9.3) | Python-биндинг ядра OpenCASCADE. Чтение и запись STEP, обход B-Rep, все булевы операции, наращивание, сшивка, метрология. Ровно то ядро, что внутри FreeCAD, но как библиотека — поэтому FreeCAD в цепочке не нужен |
| **build123d 0.11.1** | Параметрическое построение (кубики листового металла). Проверено: операций Bend/Flange/Hem в нём НЕТ, писали свои |
| **networkx 3.6** | Графы: AAG (смежность граней), FTG (переходы гибки), двухцветная раскраска для разделения оболочек, поиск поддеревьев при повороте шарниров |
| **numpy** | Векторная математика: нормали, оси, углы, проекции |
| **scipy** | Оптимизатор Powell — подбор неизвестных параметров по метрологической невязке |
| **ezdxf** | Экспорт развёртки в DXF с линиями гиба на отдельном слое |
| **streamlit 1.62** | Браузерный интерфейс: загрузка STEP, ползунки углов, вердикты, скачивание |
## Конкретные модули OpenCASCADE, которые пригодились
| Модуль | Зачем |
|---|---|
| `STEPControl_Reader/Writer` | чтение и запись STEP |
| `TopExp_Explorer`, `TopTools_IndexedDataMapOfShapeListOfShape` | обход топологии, поиск смежности граней и свободных рёбер |
| `BRepAdaptor_Surface`, `BRepLProp_SLProps` | тип поверхности, точка и нормаль в UV |
| `BRepTopAdaptor_FClass2d` | проверка, попадает ли UV-точка внутрь обрезанной грани (без неё метрология врала) |
| `BRepExtrema_DistShapeShape` | расстояние точка→поверхность — основа метрологии |
| `BRepBuilderAPI_Sewing` | сшивка граней в оболочку |
| `BRepBuilderAPI_MakeSolid` + флаг Closed | превращение замкнутой оболочки в тело (без этого STEP пишет поверхность, и портал отклоняет) |
| `BRepOffset_MakeOffset` | наращивание на толщину; поэлементно надёжнее, чем всей оболочкой |
| `BRepAlgoAPI_Fuse / Common` | объединение кусков, разрез полупространством |
| `BRepPrimAPI_MakeHalfSpace / MakePrism / MakeBox` | растяжение детали: разрез, призма сечения |
| `BRepFill_Filling` | заплатки на свободные контуры (даёт сплайн — распознавание листа ломает, применять осторожно) |
| `ShapeAnalysis_FreeBounds` | сборка свободных рёбер в контуры |
| `ShapeUpgrade_UnifySameDomain` | склейка граней одной поверхности после булевых |
| `GProp/BRepGProp` | объёмы и площади |
| `Bnd_Box/BRepBndLib` | габариты |
## Методы (что из v25 реально пригодилось)
- **AAG** — граф смежности граней, основа всего обмера
- **Виртуальный щуп** — точка минус нормаль на толщину: попала на поверхность → грань оболочечная. Дал разделение на две стороны листа там, где не сработали три других алгоритма
- **Парование + двухцветная раскраска** — щуп сообщает, на какую грань попал; граф парования оказался двудольным, стороны разделились 21/20
- **FTG** — фланцы узлы, гибы рёбра
- **Оригами-кинематика** — жёсткие поддеревья на шарнирах по осям гибов
- **Метрология point-sampling** — расстояние от точек эталона до поверхности кандидата
- **Два угла гиба** — поворот и двугранный (180 − поворот)
- **Аналитическая развёртка** — BA = φ·(R + K·t), K по таблице R/t
## Отвергнуто на практике
- **pythonocc-core отдельно** — то же ядро уже есть через OCP
- **CadQuery** — дублирует build123d
- **Analysis Situs** — тяжёлая C++-платформа ради того, что делают ~100 строк на networkx
- **Наращивание оболочки целиком** — оставляет дыры; поэлементно надёжнее
- **Заплатки BRepFill** для зоны гиба — дают сплайновую грань, распознавание листа ломается
- **Растяжение по глобальной оси** для наклонной стенки — даёт ступеньку в контуре; тянуть надо вдоль плоскости стенки
## Три ошибки, найденные и исправленные по ходу
1. **Метрология мерила до тела, а не до поверхности.** `distToShape` до солида возвращает 0 для точек внутри материала — «толстая» деталь проходила приёмку. Проверка: сдвиг 0.3 мм давал 74 % точек в допуске, после исправления 29.8 %
2. **Односторонняя выборка не видит лишний металл.** Кандидат длиннее эталона давал RMS 0 и 100 %. Невязка сделана двусторонней
3. **Не было проверки замкнутости.** Деталь может быть точной и дырявой одновременно; метрология этого не ловит. Добавлен подсчёт свободных рёбер — предсказал отказ портала до самого отказа
## Три критерия приёмки (итог)
| Критерий | Чем проверяется | Что ловит |
|---|---|---|
| Метрология | point-sampling двусторонний, до поверхности | точность геометрии |
| Целостность | свободные рёбра = 0, солидов ≥ 1 | дыры, незамкнутость |
| Производство | загрузка на портал поставщика | распознавание как листовой детали |
Третий критерий главный и не заменяется первыми двумя. Проверено: номинальная
реконструкция прошла портал Blechcon с развёрткой 299 × 168 мм — как оригинал.
+62
View File
@@ -0,0 +1,62 @@
# Запуск
Рабочая папка: `C:\CAD COWORK`
## Одной командой
**cmd:**
```
"C:\CAD COWORK\go.bat"
```
**PowerShell:**
```powershell
& "C:\CAD COWORK\go.ps1"
```
Скрипт сам переносит свежий `recada.py` из Downloads, если он там лежит,
и запускает интерфейс на `http://localhost:8501`.
## Вручную
**cmd:**
```
cd /d "C:\CAD COWORK\tool"
.venv\Scripts\activate
streamlit run recada.py --server.maxUploadSize 2000
```
**PowerShell** (без активации окружения, чтобы не возиться с политикой скриптов):
```powershell
cd "C:\CAD COWORK\tool"
.\.venv\Scripts\python.exe -m streamlit run recada.py --server.maxUploadSize 2000
```
Если порт занят — добавьте `--server.port 8502`.
## Вкладки
| Вкладка | Что делает |
|---|---|
| Рабочее окно | дерево сборки, групповой реверс, операции, подъём платформы, пакет производства |
| Изделие | продуктовые параметры: высота, длина, поперечины, проверки |
| Просмотр 3D | свой просмотрщик: разлёт, сечение, измерение, выбор деталей |
| Сборка | разбор сборки, выгрузка детали отдельным STEP |
| Операции | зеркало, сверление, заглушка, обрезка, скругления |
| Обмер детали | толщина, гибы, отверстия, разгрузки, DXF развёртки |
| Параметрическая модель | углы гибов ползунками, сборка тела |
| Генерация кода | самодостаточный Python для FreeCAD |
| Приёмка | метрология двух файлов |
## Командная строка
```
python recada.py probe|metro|unfold|dxf|rebuild|fold|fold2|stretch|check|fit файл.step
```
Примеры:
```
python recada.py check "C:\CAD COWORK\parts\LRDE-2BR1\LRDE-2BR1_nominal_v2.step"
python recada.py fold2 деталь.step bend_94=10
python recada.py stretch деталь.step y 20
```