Files
project/tool/ИНСТРУМЕНТЫ.md

7.7 KiB

Инструменты, использованные при создании 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 мм — как оригинал.