Files
Qinventor/docs/development-roadmap.md
T

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).