Skip to content

RU codex docs scan reverse engineering

rkfsociety edited this page Oct 21, 2026 · 1 revision

Контракт обратного проектирования по сканам

Контракт расширяет рабочий процесс Document Model v7: восстановление CAD-модели по треугольной сетке заканчивается редактируемой конструкцией. Версия сохраняемого документа не меняется. Новые операции используют имеющиеся объекты тел, элементов, эскизов, точек и линий и существующий конвейер OCCT для loft, булевых операций и скруглений.

Область и достоверность

Для обратного проектирования по сетке import_scan (PLY из workspace) или import_project_scan (PLY в проекте) создаёт проверенную треугольную сетку cadyx-mesh-v1 с помощью CPU-моста Open3D (реконструкция облака либо очистка сетки). Отдельная команда import_project_point_cloud сохраняет PLY только с точками как связанное с исходником облако точек, не реконструируя поверхность. Ограничения на количество точек нет: CADYX потоково проверяет все точки и их координаты, вычисляет полные границы и SHA-256 источника, сохраняя неизменённый PLY полного разрешения в проекте.

Для отображения тело хранит не более 125000 детерминированно выбранных точек; браузер независимо ограничивает число отрисовываемых точек и потоково показывает PLY-превью. Облако только с точками можно просматривать и отображать, но оно не содержит треугольников, необходимых align_scan, извлечению сечений или сравнению тела со сканом. Для этих операций сначала восстановите треугольную сетку. Ни один импорт не создаёт редактируемую OCCT B-rep. Команды обратного проектирования по сетке строят эскизы, которые затем можно передать обычным операциям создания тела.

Физические единицы по координатам PLY не выводятся. align_scan сохраняет явно заданные агентом/пользователем единицы и численный масштаб. Модель, построенная по эскизам скана, получает полученный масштаб координат по построению; схема документа при этом не объявляет единицу.

compare_body_to_scan выполняет выборочную геометрическую проверку относительно триангулированных поверхностей. Она полезна для итеративной реконструкции, но не является исчерпывающим точным доказательством расстояния до B-rep, сертификатом метрологии, доказательством производственных допусков или гарантией посадки.

align_scan

Обязательно: body_id исходного тела reconstruct_scan.

Необязательные параметры:

  • mode: pca (по умолчанию) или explicit.
  • long_axis: X, Y или Z в режиме PCA; по умолчанию Y, потому что станции XZ с нормалью Y можно напрямую передать в loft_sketches.
  • basis: в явном режиме — три правые ортонормированные оси XYZ. Каждая строка задаёт целевую ось в координатах источника.
  • origin: начало отсчёта в координатах исходника. В режиме PCA при center=true по умолчанию используется центроид выборки; в режиме explicit — [0,0,0].
  • center: логическое поле только режима PCA, по умолчанию true.
  • axis_signs: три значения +1/-1; их произведение должно быть положительным, что разрешает разворот базиса на 180° без зеркального отражения.
  • scale: положительный множитель координат, по умолчанию 1.
  • units: unitless, mm, cm, m или in; по умолчанию unitless.
  • translation: итоговый перенос XYZ, по умолчанию [0,0,0].
  • ground_z: логическое поле, по умолчанию true; после выравнивания сдвигает скан так, чтобы минимальная Z была равна нулю.
  • name: необязательное новое имя тела.

PCA использует ограниченную детерминированную выборку вершин сетки, вычисление собственных значений симметричной матрицы ковариации 3×3, детерминированные знаки осей и правый базис. Команда меняет сетку исходного тела на месте, чтобы пассивный viewport не показывал дублирующие исходное и выровненное тела. Элемент reconstruct_scan сохраняет запись alignment и ссылку на исходный артефакт. Если команда set_scan_parameter впоследствии перестраивает сетку, Command System повторно применяет сохранённое выравнивание до фиксации ревизии.

Повторный align_scan сначала заново создаёт скан из неизменённого источника с прежним SHA-256 и только затем применяет новое преобразование. Поэтому преобразования не накапливают численные ошибки.

Сечения скана

create_sketch_from_scan_section

Обязательно: body_id и конечный offset.

Необязательные параметры:

  • normal_axis: Y (по умолчанию) или Z.
  • join_tolerance: допуск соединения концов; по умолчанию определяется границами скана.
  • simplify_tolerance: допуск RDP-упрощения замкнутого контура; по умолчанию 0.
  • max_points: не менее 16 точек на контур, по умолчанию 512. Если предел меньше числа исходных точек контура, длинные циклы равномерно пересэмплируются по длине дуги.
  • max_contours: необязательное положительное ограничение количества создаваемых эскизов; если не задано, остаются все подходящие контуры. При заданном пределе сначала сохраняются контуры с наибольшей охватываемой площадью.
  • min_area, min_perimeter: неотрицательные фильтры шума.
  • name: префикс имени эскиза.

Сетка пересекается с указанной плоскостью по одному треугольнику. Концы отрезков соединяются в граф с учётом допуска. Эскизы строятся только для замкнутых компонент без ветвлений. Число открытых, ветвящихся и шумовых компонент возвращается агенту, чтобы он мог изменить плоскость или допуск вместо молчаливого принятия разомкнутого профиля.

Станция с нормалью Y становится эскизом XZ с section_normal_axis="Y" и точным section_offset; её можно сразу передать в loft_sketches. Станция с нормалью Z становится эскизом XY. Преобразование станции с нормалью X в неверную плоскость эскиза YZ намеренно не имитируется; пока нативные эскизы YZ недоступны для этой операции, используйте явное перевыравнивание.

Для каждого возвращённого контура указаны площадь, знаковая площадь, периметр, центроид, двумерные границы, число точек и ID эскиза. В метаданных сгенерированного эскиза сохраняются исходное тело скана и допуски сечения.

create_scan_sections

Пакетный вариант той же операции. offsets содержит любое число строго возрастающих станций. Команда возвращает:

  • section_groups: по одному списку ID эскизов на станцию, в том числе при нескольких контурах на станции;
  • общий список sketch_ids;
  • измерения контуров и количество отклонённых компонент по каждой станции.

Для станций с нормалью Y список section_groups можно напрямую передать в loft_sketches. Существующая реализация loft принимает один или несколько контуров на станцию, нормализует соответствие профилей и требует строго возрастающий section_offset.

compare_body_to_scan

Обязательно: body_id редактируемого немешевого тела и scan_body_id скана.

Необязательные параметры:

  • max_samples: 64–20000, по умолчанию 4096.
  • tolerance: положительный порог в единицах совмещённых координат скана/модели.
  • bidirectional: по умолчанию false; при true дополнительно сравниваются вершины триангуляции тела и сетка скана.

Команда строит иерархию ограничивающих объёмов по треугольникам-целям и измеряет расстояния выборочных точек до треугольников. scan_to_body сообщает число точек выборки, среднее, RMS, P95, максимальное отклонение и десять наихудших точек. При заданном tolerance возвращается также число и процент точек в пределах допуска. Двусторонний режим добавляет body_to_scan и выборочный максимум в обе стороны.

B-rep оценивается по текущей viewport-триангуляции. Идентификатор метода — sampled-point-to-tessellated-triangle-bvh-v1. Всегда указывайте это ограничение рядом с численным результатом.

Рекомендуемый рабочий процесс агента

  1. Импортируйте источник командой import_scan, настраивая параметры реконструкции и сохраняя исходный PLY.
  2. Запустите align_scan; оставьте units: "unitless", пока масштаб неизвестен. Для вытянутых деталей совместите главную ось с глобальной Y и сохраняйте ground_z=true, если датум изделия не требует другого.
  3. Проверьте границы выровненного тела. Если известен физический размер, повторно выровняйте скан с scale = target_dimension / measured_scan_dimension и явно укажите units.
  4. Создайте стратегически расположенные станции с нормалью Y через create_scan_sections. Добавляйте станции там, где меняются кривизна, рёбра жёсткости, защёлки, бобышки или топология контура.
  5. Постройте основную редактируемую B-rep через loft_sketches; добавляйте местные тела, вырезы и скругления существующими командами CADYX, вместо переноса шума скана в топологию CAD.
  6. Выполните compare_body_to_scan, изучите P95/максимум и точки наибольшего отклонения, затем уточните станции/элементы и повторите сравнение.
  7. Осмотрите готовую B-rep целиком и viewport, затем, если запрошено, используйте export_brep для проверяемой передачи STEP/STL.

Цель обратного проектирования — чистая редактируемая модель конструкции, соответствующая измеренной геометрии референса в заявленном выборочном допуске, а не преобразование каждого треугольника сканерного шума в отдельную сущность CAD.

Clone this wiki locally