319 lines
36 KiB
Markdown
319 lines
36 KiB
Markdown
# Развитие QInventor до практического аналога Inventor
|
|
|
|
Дата исходного аудита: 12 октября 2026 года. Цель активна.
|
|
|
|
## Результат, к которому идём
|
|
|
|
Самостоятельное Windows-приложение с русским интерфейсом, в котором инженер
|
|
может пройти связанный процесс: эскиз → параметрическая деталь → сборка →
|
|
спецификация → оформленный чертёж → сохранение и обмен точной геометрией.
|
|
Сценарий должен оставаться работоспособным после изменения размеров,
|
|
отмены/повтора действий и повторного открытия проекта.
|
|
|
|
Архитектура сохраняется: собственные Python/Qt-сервисы и интерфейс поверх
|
|
неизменённого portable FreeCAD/Open CASCADE. Исходники, проверки и сборка
|
|
принадлежат этому репозиторию. Дополнительные внешние сервисы не нужны.
|
|
|
|
Ориентир — поведение рабочих инструментов Inventor. Совместимость IPT/IAM/IDW,
|
|
совпадение закрытого ядра Autodesk и полная коммерческая эквивалентность
|
|
не входят в доказанный результат. Продвинутые инженерные модули требуют
|
|
отдельных этапов реализации и проверки.
|
|
|
|
## Что обнаружено в текущем коде
|
|
|
|
| Область | Реальная основа | Основной следующий шаг |
|
|
|---|---|---|
|
|
| Эскиз | Sketcher, универсальный размер, проекция, связанные offset/зеркала/массивы, отменяемый предпросмотр | Дуги и составные контуры; конфликты ограничений; интерактивность выбора |
|
|
| Деталь | Нативные PartDesign-операции; собственное ассоциативное выдавливание; общая таблица параметров и выражений | Единый процесс остальных операций с предпросмотром и повторным редактированием |
|
|
| Сборка | Native Assembly, App::Link, закрепление и соединения с решателем | Проверка ошибок решателя; вставка и замена компонентов; вложенные сборки |
|
|
| Спецификация | Сводный и структурный состав вложенных экземпляров, материалы, масса, CSV и ассоциативная таблица на A4 | Приёмка переносимого выпуска; исключения, сохранённая нумерация, продолжение и выноски |
|
|
| Чертёж | Три связанные TechDraw-проекции детали/сборки, русский A4, PDF/SVG/DXF и таблица состава | Основные надписи, размеры, разрезы, компоновка и большие сборочные листы |
|
|
| Поставка | Launcher, sync, portable runtime, проверка снимка исходников при упаковке | Регрессионные проекты, проверка переносимой сборки после каждого этапа |
|
|
|
|
Ключевые точки архитектуры: `src/QInventor/qi_model.py`, `qi_commands.py`,
|
|
`qi_ui.py`, `qi_parameters.py`, `qi_parameters_ui.py`, `qi_bom.py`, `qi_bom_ui.py`, `qi_extrude.py`, `qi_projection.py`, `qi_sketch_offset.py`,
|
|
`qi_sketch_patterns.py`; интеграционные сценарии находятся в `tests`.
|
|
Вращение, отверстия, скругления, фаски и 3D-массивы уже доступны через штатные
|
|
команды PartDesign. Их следует улучшать как существующие сценарии.
|
|
|
|
## Очередь реализации
|
|
|
|
### 1. Надёжность связанного процесса
|
|
|
|
- Устранить блокировку создания чертежа сборки без выделенной детали.
|
|
- Сохранять отсутствие проекта при отмене выбора плоскости нового эскиза.
|
|
- Исправить редактирование координат со знаком, углов и размеров,
|
|
управляемых выражениями, без потери параметрических связей.
|
|
- Проверять состояние исходной геометрии до создания листа и экспорта.
|
|
- Отвергать неуспешное соединение по результату реального Assembly solver;
|
|
откатывать новый объект и положения компонентов.
|
|
- Проверить весь путь: сборка → чертёж → изменение детали → обновление →
|
|
сохранение/открытие → экспорт, включая недопустимые изменения.
|
|
- Сделать область чертежа явной: весь документ/сборка или выбранная деталь.
|
|
Сейчас команда строит виды всего документа независимо от выделения.
|
|
|
|
Готовность: свежие kernel/GUI-проверки проходят; ошибки не оставляют ложного
|
|
результата, изменённой геометрии или лишнего шага в истории отмены.
|
|
|
|
### 2. Параметрическая деталь для повседневной работы
|
|
|
|
- Единая таблица модельных и пользовательских параметров: имя, размерность,
|
|
выражение, вычисленное значение; атомарное применение с проверкой перестроения.
|
|
- Единый русский процесс вращения, отверстий, скруглений, фасок и массивов
|
|
с выбором геометрии, предпросмотром и повторным редактированием.
|
|
- Расширить эскизные операции на дуги и составные контуры; диагностировать
|
|
недоопределённость и конфликтующие ограничения.
|
|
|
|
Готовность: корпус, кронштейн, вал и фланец создаются через интерфейс;
|
|
изменение управляющего параметра обновляет downstream-операции. Неверные
|
|
значения, размерности и циклические зависимости не портят проект.
|
|
|
|
### 3. Сборки и спецификации
|
|
|
|
- Вставка из файлов/открытых документов, позиционирование, замена компонента
|
|
с сохранением поддерживаемых связей и понятной диагностикой остальных.
|
|
- Вложенные сборки, плоская и структурированная спецификация, обозначения,
|
|
позиции, исключение компонентов и корректная масса повторных экземпляров.
|
|
- Проверка пересечений твёрдых тел, управление видимостью и степенями свободы.
|
|
|
|
Готовность: сборка с повторными деталями и подсборкой сохраняется, открывается,
|
|
решается; изменение исходника обновляет экземпляры. BOM учитывает структуру
|
|
и количество. STEP сохраняет экземпляры и их положения.
|
|
|
|
### 4. Производственный чертёж
|
|
|
|
- Формат/масштаб, редактируемая основная надпись, проекции и их размещение.
|
|
- Редактируемые поля основной надписи и явный выбор области листа. При
|
|
создании листа материал определяется по источникам видов; для разных материалов используется
|
|
«См. спецификацию».
|
|
- Размеры, оси, разрезы и выносные виды в доступном TechDraw-процессе.
|
|
- Таблица спецификации и позиции компонентов на сборочном листе.
|
|
- Продолжение спецификации на нескольких листах, большие сборки и другие
|
|
форматы. Первая таблица собственного A4 ограничена четырьмя сводными или
|
|
пятью отображаемыми структурными строками; переполнение должно давать отказ,
|
|
а не обрезанный экспорт. Позиционные выноски и общие шаблоны ещё требуют
|
|
отдельной реализации и проверки.
|
|
- Обновление всех ассоциативных видов после изменения детали или сборки.
|
|
|
|
Готовность: детальный и сборочный листы проходят визуальную проверку;
|
|
PDF/SVG содержат настоящую геометрию и читаемые подписи. Проект хранит
|
|
редактируемые виды и связи, а не только изображение результата.
|
|
|
|
### 5. Расширенные инженерные возможности
|
|
|
|
Листовой металл с развёрткой; локальная библиотека стандартных деталей;
|
|
конфигурации деталей/сборок; простые правила проектирования; каркасы;
|
|
кинематика. Для каждого модуля сначала определить поддерживаемые сценарии,
|
|
ограничения и эталонные проекты. Наличие среды FreeCAD само по себе не
|
|
означает завершённого модуля QInventor.
|
|
|
|
### 6. Подтверждение готовности и поставка
|
|
|
|
- Свежий полный `scripts/test.ps1` с зафиксированными хешами исходников.
|
|
- Сохранение/повторное открытие регрессионных FCStd, проверка solids и связей.
|
|
- Реальные GUI-сценарии с Qt-событиями и снимками окон; визуальная проверка.
|
|
- `scripts/package.ps1`, запуск распакованной копии с новым и существующим
|
|
профилем, проверка отсутствия внешних зависимостей и сохранения лицензий.
|
|
|
|
Этап принимается по конкретным рабочим проектам и результатам проверок.
|
|
Цель не считается выполненной только по наличию кнопок, количеству команд
|
|
или успешному запуску приложения.
|
|
|
|
## Источники ориентира
|
|
|
|
- [Autodesk: возможности Inventor](https://www.autodesk.com/ca-en/products/inventor/features)
|
|
- [Autodesk: работа с параметрами](https://help.autodesk.com/cloudhelp/2026/ENU/Inventor-Help/files/GUID-595F9D8E-9EEA-4446-91AB-830E5BAE548E.htm)
|
|
- [Текущие границы соответствия](inventor-compatibility.md)
|
|
- [Рабочие сценарии QInventor](workflows.md)
|
|
|
|
## Журнал этапов
|
|
|
|
- 12.10.2026: проведён исходный аудит архитектуры, создана активная цель и
|
|
очередь работ. Свежая базовая проверка: 16 групп, 110 вложенных проверок,
|
|
0 ошибок; native exit code 0. Начат этап надёжности связанного процесса.
|
|
- 12.10.2026: исправлены отмена выбора плоскости без создания пустого проекта,
|
|
координаты со знаком и углы эскиза, защита формул/справочных размеров,
|
|
повторное применение без потери точности и лишнего Undo. Чертёж сборки
|
|
создаётся без выделения тела; ошибочная исходная геометрия отвергается до
|
|
создания листа. Жёсткие соединения по началам компонентов проверяются по
|
|
фактическим мировым положениям, включая прямые и косвенные конфликты с
|
|
откатом всей сборки. Подготовка чертежа дожидается фонового расчёта и
|
|
пересчитывает проекции по окончательным размерам после быстрых изменений.
|
|
- Итог этого набора: `scripts/test.ps1` — 19 групп, 129 вложенных проверок,
|
|
0 ошибок, native exit code 0, неизменный снимок 46 исходных файлов.
|
|
[Отчёт этого этапа](../artifacts/validation-previous-20261013-192524.json). Новые сценарии проверяют
|
|
настоящие Qt-действия, undo/redo, FCStd, ассоциативность и PDF/SVG.
|
|
Текущая рабочая среда синхронизирована. Новый portable-архив на этом этапе
|
|
не создавался. Общая цель остаётся активной; следующие крупные работы —
|
|
единая таблица параметров, полноценные сборочные сценарии и оформление листов.
|
|
- 13.10.2026: реализована общая таблица модельных и пользовательских параметров:
|
|
длина, угол и число; формулы, комментарии, переименование и удаление.
|
|
Новые переменные и связи применяются одним шагом Undo. Геометрия и
|
|
зависимости предварительно проверяются на временной нативной копии;
|
|
отклонение сохраняет существующий Redo, в том числе у детали с чертежом.
|
|
Проверены сохранение FCStd, внешние зависимости документов и циклы.
|
|
Таблица защищена от удаления скрытой строки и применения устаревшего
|
|
индекса ограничения после изменений вне окна; добавлено явное обновление.
|
|
Готовность проекций проверяется отдельно на каждой стадии расчёта.
|
|
Непосредственный экспорт DXF после быстрых изменений обновляет виды:
|
|
регрессия измеряет координаты экспортированных линий, а не только наличие файла.
|
|
Экспорт существующего листа проверяет нативные ошибки его зависимостей,
|
|
включая историю связанной детали в другом документе, до записи файлов.
|
|
Это предотвращает экспорт старой сохранённой геометрии ошибочной операции.
|
|
Независимые листы и проекции эскизов/линий сохраняют поддержку экспорта.
|
|
- Итог этапа таблицы параметров: свежий `scripts/test.ps1 -TimeoutSeconds 1800`
|
|
прошёл 21 группу и 155 вложенных проверок без ошибок; native exit code 0.
|
|
Снимок всех 50 исходных файлов совпал с текущим кодом. Таблица отдельно
|
|
проверена 16 сценариями ядра и 9 GUI-сценариями. Регрессия связанного чертежа
|
|
подтверждает актуальную DXF-геометрию после быстрых изменений и отказ
|
|
PDF/SVG/DXF до записи при ошибке операции исходной связанной детали.
|
|
[Полный отчёт](../artifacts/validation-previous-20261013-211849.json). Исходная рабочая среда
|
|
синхронизирована; portable-выпуск по этому снимку проверен свежим и
|
|
повторным запуском обычного launcher с сохранением FCStd и параметров.
|
|
Общая цель остаётся активной: дальнейшие этапы включают единый процесс
|
|
остальных операций детали, развитие сборок и производственных чертежей.
|
|
Ближайший приоритет — иерархическая спецификация вложенных сборок с
|
|
материалом и массой конечных деталей; нативная вставка FCStd и повторных
|
|
компонентов уже доступна и должна сохраняться.
|
|
- 13.10.2026: добавлены сводная и структурная спецификации вложенных сборок.
|
|
Количество внутри родителя и общее количество разделены; итоговая масса
|
|
считается по конечным деталям без повторного сложения родительских строк.
|
|
Нативные жёсткие и гибкие подсборки, внешние ссылки, масштабы и массивы
|
|
сохраняют фактические экземпляры и мировые положения. Скрытые элементы
|
|
остаются в физическом составе. Материал и плотность каждого экземпляра
|
|
определяют массу и центр масс; native PropertyDensity переводится из
|
|
внутренних единиц в кг/м³.
|
|
Определения деталей, развёрнутые элементы массива и исходники булевых
|
|
операций не становятся дополнительными деталями. Циклы, отсутствующие
|
|
ссылки, ошибочные операции и плотности отклоняются до записи CSV.
|
|
CSV заменяется атомарно после проверки всей выбранной области.
|
|
Основная надпись использует материалы источников видов; посторонняя деталь
|
|
документа не меняет материал листа. Пустой контейнер конструкционной
|
|
геометрии не мешает просмотру массы единственной физической сборки.
|
|
- Точечные проверки этого этапа: 13 сценариев ядра, 3 группы реальных Qt
|
|
действий и 8 независимых проверок ранее найденных ошибок прошли успешно;
|
|
native-процессы завершились с кодом 0. FCStd, изменение исходника,
|
|
Undo/Redo и STEP проверены на сборке из семи твёрдых деталей; количество
|
|
и положения в STEP измерены после чтения экспортированного файла.
|
|
Итоговая полная регрессия прошла 23 группы и 172 вложенные проверки
|
|
без ошибок, native exit code 0. Контрольные суммы всех 54 исходных файлов
|
|
совпали с проверенным снимком. [Полный отчёт](../artifacts/validation-previous-20261014-224048.json).
|
|
Дополнительно исправлен обработчик входа/выхода штатного редактора сборки:
|
|
он обрабатывает только доступный объект эскиза. Проверка выбора ребра
|
|
использует один жест мыши с обработкой событий между нажатием и отпусканием;
|
|
клавиша D направляется фактическому Qt-фокусу внутри нативного viewport.
|
|
Сохраняются проверка реального выбора, штатный диалог 40 мм, решатель и solid.
|
|
Точечный прогон ленты прошёл 11/11 проверок, native exit code 0.
|
|
Следующий приоритет после поставки этого этапа — ассоциативная таблица
|
|
спецификации и позиции на сборочном листе, затем единый процесс остальных
|
|
операций детали. Рендер и экспорт таблицы на листе ещё требуют реализации
|
|
и проверки; наличие нативных типов TechDraw не подтверждает готовность.
|
|
|
|
- 14.10.2026, текущий этап: реализована ассоциативная спецификация на русском
|
|
A4 через нативные Spreadsheet::SheetPython и TechDraw::DrawViewSpreadsheet.
|
|
Область берётся из источников проекций листа. Чертёж основной сборки хранит
|
|
ссылку на её корень, поэтому изменение состава обновляет виды и таблицу.
|
|
Проверены реальные метрики шрифта, число экземпляров, масса, FCStd и
|
|
восстановление значения ячейки при Undo до дополнительного пересчёта.
|
|
Отдельные проверки ядра прошли 10/10; DXF — 12/12 на настоящем повторном
|
|
импорте. Независимая проверка восьми исходных/дополненных DXF подтверждает
|
|
корректные идентификаторы и ссылки записей без скрытого ремонта при чтении.
|
|
[Доказательства DXF](../artifacts/drawing-bom-dxf-review/README.md).
|
|
Первый полный прогон остановлен лимитом 1800 секунд после 17 успешных групп
|
|
без ошибок; снимок 59 исходных файлов не изменился. Повторный прогон того же
|
|
набора завершился с 24 успешными группами и одной ошибкой: экспорт при
|
|
переполнении A4 скрывал точную причину за общим сообщением. CAD завершился
|
|
с кодом 0; все 59 исходных файлов сохранили контрольные суммы. Исправлена
|
|
диагностика ошибки таблицы, конфликт имён dxf/DXF в отчёте и штатный
|
|
30-минутный лимит теста, недостаточный для измеренного 40-минутного прогона.
|
|
Новый прогон требует подтверждения полного исправленного снимка. Этап ещё
|
|
не принят: остаются полный результат, упаковка и свежий/повторный запуск
|
|
точной распакованной копии. Доступный ZIP пока относится к предыдущему этапу.
|
|
[Текущее состояние](../artifacts/drawing-bom-development-checkpoint-20261014.json).
|
|
|
|
- 15.10.2026: проверка будущего вращения выявила также дефект действующей
|
|
таблицы параметров. Нативное `copyObject` при предварительной проверке
|
|
теряет сохранённую топологическую ссылку эскиза на грань. На реальном
|
|
Revolution → Groove → эскиз на грани → Pocket копия принимает изменение
|
|
угла 180° → 90°, а исходная модель теряет опору. Отмена и пересчёт
|
|
восстанавливают геометрию и экземпляры сборки, но прежний Redo исчезает.
|
|
Выпуск удерживается до исправления предварительной проверки и добавления
|
|
этого сценария в регрессию. Проход существующих тестов недостаточен для
|
|
данного случая.
|
|
[Измеренный пример](../artifacts/revolve-native-probe/draft/downstream-comparison-runs/20261015-000602-3ecc43185eba4da5ac81dd26e6b52f8f/comparison-report.json).
|
|
Отдельно воспроизведён отказ допустимого изменения высоты через ту же
|
|
таблицу после создания спецификации: пробная копия исключает проекции,
|
|
но ошибочно оставляет требующий их выходной лист. Исходный проект и Redo
|
|
при таком отказе сохраняются. Исправление должно одновременно обеспечить
|
|
изменение детали, пересчёт массы и ячеек, Undo/Redo и повторное открытие,
|
|
сохранив проверку обычных входных таблиц и выражений.
|
|
[Сквозной сценарий](../artifacts/parameter-drawing-bom-integration/README.md).
|
|
Отдельный кандидат исправления прошёл 10 проверок геометрии, входных
|
|
таблиц, истории и повторного открытия, а также четыре проверки выражений
|
|
масштаба чертежа и пользовательских ячеек спецификации. Все процессы
|
|
завершились с кодом 0; исходники проекта не менялись. Перенос кандидата
|
|
в основной модуль и новая полная регрессия ещё обязательны.
|
|
[Независимая проверка кандидата](../artifacts/parameter-preflight-regression-draft/acceptance-v2-20261015.md).
|
|
Исправление перенесено в основной модуль. Первый прогон новой регрессии
|
|
обнаружил также штатную ошибку Undo при смене типа вычисленной ячейки
|
|
таблицы. Защита до применения проверена на обычных таблицах и спецификации:
|
|
шесть сценариев прошли, включая немедленный Undo и исполнение прежнего Redo.
|
|
Меняющие тип ячейки операции пока отклоняются; формулы не переписываются.
|
|
Итоговые проверки параметров прошли 33/33 на основном коде, включая
|
|
четыре сценария повторного открытия и изменения FCStd в новом процессе.
|
|
Ядро завершилось с кодом 0, снимок 60 исходных файлов сохранился;
|
|
ошибок восстановления Undo в журнале нет. Полный GUI-прогон 26 групп
|
|
запущен на этом снимке; упаковка и обычный запуск точного ZIP ещё впереди.
|
|
[Итоговая проверка параметров](../artifacts/parameter-preflight-integration-plan/production-runs/20261015-010323-c67ad7fd65534c41858f0107cec2df59/production-focused-report.json).
|
|
Полный прогон на этом снимке не имеет подтверждённого завершения: сохранены
|
|
13 успешных групп без ошибок и отдельный результат новой регрессии 9/9,
|
|
но процесс и родительская сессия уже отсутствуют. Проходом полного набора
|
|
этот результат не считается. Дополнительный native-сценарий выявил потерю
|
|
Redo при эквивалентной записи формулы с префиксом собственного документа;
|
|
выпуск удерживается до исправления и повторной проверки итогового кода.
|
|
[Воспроизведение no-op](../artifacts/parameter-canonical-noop/runs/20261015-154741-1506ba00e5734e39ba8cf5ead46dcdb3/report.json).
|
|
Исправление канонических формул внесено: реальные отличия зависимостей,
|
|
комментариев, имён и переменных сохраняются как изменения, а эквивалентная
|
|
формула не открывает транзакцию. Обновлённый набор параметров прошёл 34/34,
|
|
native exit 0, снимок 60 исходников неизменен.
|
|
[Проверка исправленного кода](../artifacts/parameter-preflight-integration-plan/production-runs/20261015-155710-caa40c30f0a64deda709970c55d8c374/production-focused-report.json).
|
|
Независимый STEP-тест выявил потерю переноса и поворота корня размещённой
|
|
сборки и в штатном экспорте документа, и при явном выборе корня. Прежний
|
|
STEP-тест использовал корень без преобразования и этот случай не покрывал.
|
|
Изолированная нативная экспортная иерархия сохраняет мировую геометрию;
|
|
исправление перенесено в основной STEP-экспортёр. Восемь проверок product API
|
|
и чтение девяти STEP-файлов новым процессом прошли с native exit 0.
|
|
Подтверждены общие определения повторных компонентов, исходные имена,
|
|
мировые координаты и точная сохранность исходного проекта/Redo, включая
|
|
холодный запрос геометрии и ошибку уже начавшейся записи файла.
|
|
[Проверка STEP](../artifacts/step-world-export-candidate/README.md).
|
|
Исправлен также экспорт BREP/IGES/STL: мировая геометрия извлекается
|
|
по отдельным экземплярам, не вызывая меняющее исходные данные чтение
|
|
составной Shape контейнера. Писатель получает отдельный BRep-снимок,
|
|
а готовый файл заменяет прежний атомарно. Постоянная регрессия прошла
|
|
45 сценариев с массивами, масштабом, зеркальностью, масками, явным
|
|
скрытым элементом и отказами записи. Пустая геометрия отклоняется
|
|
до изменения файла. Сохранена измеренная штатная семантика форматов:
|
|
STEP включает физические элементы массива, геометрические форматы
|
|
учитывают маску; явный выбор скрытого элемента сохраняет его геометрию.
|
|
Итоговый основной код прошёл 12 групп, включая полный headless kernel
|
|
20/20, и чтение 15 STEP-файлов новым процессом, native exit 0.
|
|
Полный GUI-прогон 15.10.2026 завершён: 26/26 групп, native exit 0,
|
|
все 61 исходный файл неизменны, ошибок восстановления в журнале нет.
|
|
Свежие PDF трёх сценариев проверены после рендеринга Poppler: таблицы,
|
|
количества и массы читаемы, наложения и обрезки нет. Упаковка и проверка
|
|
обычного запуска точного portable-архива ещё обязательны.
|
|
[Проверка основного кода](../artifacts/step-cold-root-probe/runs/20261015-163917-c4c46544873547e0ae015636af68378c/fresh-report.json).
|
|
|
|
- Следующий этап после приёмки спецификации на листе — единый процесс
|
|
вращения и вращательного выреза для валов, втулок и фланцев. Нативный
|
|
прототип Revolution/Groove дополнен собственным русским Qt-интерфейсом.
|
|
Свежий и повторный запуск прошли по три сценария с native exit 0:
|
|
видимый предпросмотр канавки, создание и редактирование одним Undo,
|
|
Cancel и эквивалентная формула без потери исполняемого Redo, отклонение
|
|
угла 361° до изменения проекта. Это пока отдельный проверенный кандидат;
|
|
самостоятельные модули продукта, полная регрессия и portable-проверка
|
|
ещё обязательны. Неожиданная ошибка уже начатого нативного изменения
|
|
остаётся отдельным ограничением точного восстановления истории.
|
|
[Прототип и ограничения](../artifacts/revolve-native-probe/README.md).
|