Assembly project/ru

Здесь Вы можете посмотреть планы по разработке модуля Assembly как части общих Планов разработки.

Задачи и принципы
Этот проект нацелен на реализацию возможностей монтажа и создания продукта. Он касается внедрения некоторых ключевых возможностей в модули Part и Assembly FreeCAD.

В этом месте этапы разработки планируются и отслеживаются в системе отслеживания ошибок, давая хорошо оформленный Changelog: Issue tracker

Результат
Цель проекта - сделать возможным выполнить на FreeCAD проектную задачу вроде этой:



Он получен, используя Assembly для составления различных видов деталей с ограничениями, оставаясь как можно ближе к спецификации ISO 10303 для лёгкого обмена моделями.

Другая цель - использование ODE для кинематики.

Многомодельность
Ключевая способность для проектирования в реальном мире это возможность разбить проект на обозримые части. Невозможно работать над всеми аспектами проекта одновременно или в одиночку. Это возможно для геометрии и для инженерных задач вроде расчётов по МКЭ или технологического программирования. Поэтому FreeCAD должен иметь возможность разбивать модели. Это открывает следующие возможности:
 * Задержанная загрузка - требуются лишь ресурсы вроде графики и основной памяти для элемента над которым Вы работаете.
 * параллельное проектирование - позволяет многим людям работать над одним и тем же проектом
 * Подробная система управления версиями - лучшее управление над различными аспектами проекта
 * И так далее....

Многомодельный проект должен выглядеть примерно так:

Управление проектом
Многомодельность подразумевает множество файлов, относящихся к проекту, обычно в общем каталоге. Файл проекта и браузер проекта могут помощь с организацией файлов. Он так же может хранить дополнительную информацию о проекта или сайте проекта.

1. Два режима, "Simple" и "Project". В режиме Simple только один документ, содержащий все сборки и части. Если открыт или создан проект, FreeCAD в режиме Project.

2. Проекты. Расположение файла FCPrj на диске определяет корневой каталог. Все файлы под этим каталогом определены с путями относительно корневого каталога. Дополнительные виды слева поддерживают ProjectExplorer, показывающий древо каталога с поддерживаемыми файлами. Этот корневой каталог так же используется как корень для "песочинцы" SVN, что позволяет далее обмен и контроль версиями. Внешние ссылки (ниже каталогов вне корневого, общедоступного сервера или веб-ресурса) поддерживаются и показываются в ProjectExplorer отдельно (один псевдокаталог для каждого файлового или веб-сервера). Это позволит получить быстрый обзор внешних ссылок и обновить их.

Copyright
Сейчас копирайт на на трёхмерные модели становится интересным вопросом. Трёхмерные модели попадают под авторское право. Авторские права получает создатель модели. Есть возможность защитить форму, представляемую моделью, патентом или патентом на дизайн (US). Но патент покрывает лишь создание физической детали для заработка. Примером служит Microsoft Mouse design patent.

Так что нам надо помнить создателя (держателя прав) и любой вид лицензий на каждую модель/продукт/файл проекта. Я буду использовать лицензии типа CC. http://creativecommons.org/

Ключевые аббревиатуры для лицензий CC:
 * BY = Attribution only
 * BY-ND = Attribution-NoDerivatives
 * BY-NC-ND = Attribution-NonCommercial- NoDerivatives
 * BY-NC = Attribution-NonCommercial
 * BY-NC-SA = Attribution-NonCommercial- ShareAlike
 * BY-SA = Attribution-ShareAlike
 * PD = Dedicated to or marked as being in the public domain via one of our public domain tools, or other public domain work; adaptations of works in the public domain may be built upon and licensed by the creator under any license terms desired

Additional a URL link to the full license document (in case of custom licenses)

ISO 10303
В этом плане очень важен ISO 10303 (STEP). Это единственное хорошо стандартизированное и широко обсуждавшееся, общепризнанное определение структуры продукта, которое я знаю.

Вот несколько ссылок на информацию:
 * ISO 10303 на Wikipedia
 * WikiStep.org с базовой информацией, но в основном про STEP-NC
 * Структура продукта в STEP
 * Некоторыепримеры STEP
 * ISO 10303-11 о языке моделирования EXPRESS
 * Статья в Wikipedia о моделировании продукта
 * Обзор Части 41 -- Основы Описания и Поддержки Продукта
 * Обзор Части 44 (редакция 2) -- Конфигурация Структуры Продукта
 * Примеры небольших файлов AP 214

Assembly constraints
An important role in building up large models and products take the assembly constraints, which formulate certain rules how parts assemble a product. Mainly these are Fix, FaceToFace, Angle, Offset and some kind of pattern instantiation. This constraints need a specialized solver to keep them up if the parts change. This solver is fundamentally different to the Sketch solver. I think we have to go for a graph based approach on this...

Kinematics
A further step would be to use ODE, or similar libs, to put the parts and the assembly constraints together to do a kinematic simulation of machines. That would allow checking for collisions and exploring the conditions of a mechanical system.

Revision control
An important point is the version control and distributed development. With multi model design we are able to split designs in smaller pieces and can distribute work among a team. For a software developer "distributed" and "Version" sounds familiar, so why not use a DVCS. A good comparison is here.

Since we deal with big data, and data which can not be easily diffed, we are limited to those which use the snapshot persistence model. Any system storing just diffs will have grave problems with our data (personally tested with Mercurial and Catia files). After sorting out commercial and non-free, basically only Git and SVN remains.

Using Git for the task leaves us with two big frontiers: will put a lot of complexity in that matter. To hide it from the user will be a challenging task. documents and show and merge differences in the objects, features and parameters. Also not easy.
 * Git is very complicated; Branching merging and tagging along a non linear development path let alone merging with remote repositories (push, pull)
 * Git allow Merge and Diff handlers for certain file types; We need one for .fcstd. This handler has to examine two FreeCAD

But using git would open a lot of possibilities even high class PLM system would dream of...

Organizing
Here some development task needed for a decent Assembly/Product design:

Infrastructure
The assembly will demand some changes in the base system and infrastructure layer of FreeCAD.

Multi model
Multi-Model was in mind from the beginning of FreeCADs design. There fore we have a multi document interface and can load unlimited documents. But we need to upgrade especially the 3D-Viewer to handle showing more the one document in its view (Part-Trees).

Part-Trees
Since in Assembly the composition of parts and sub-assemblies is the main workflow, the tools to stack (group) Parts in a tree have to be implemented. Unlike a DocumentObjectGroup the Assembly group has to deal with visibility and placement of the children. Best done by stacking ViewProvider on each other. That need a kind of ClaimChildren interface to the ViewProviders.

Unified Drag/Drop/Copy/Paste interface
A interface allow ViewProvider and Workbenches full control about Drag/Drop/Copy/Paste operations in the tree or the 3D view.

External resources
Handling of doped links (from internal or external browsers). Means loading resources over (potential) slow connections (http).

Material
Describing material and its properties is a vital part of a CAD/CAE system. Material has a lot of properties and names heavily dependent on the field its use. E.g. FEM and mechanical engineering have different frameworks and standards to describe Material.

For the Material description a special article is made: Material

Object model
Class tree to deal with concepts needed. References, interfaces, document links, views, compounds, constraints, configurations, and many more...

STEP check loop
Implementing a first STEP importer for more then geometry and color to check if the object model holds for a wider usage.

Assembly constraint solver
Define a interface to a assembly constraint solver, very similar to the Sketcher solver interface.

Physics simulation interface
Interface to allow a (external) (multi)physics simulation software to take control over the positioning of the Parts of a assembly. This would allow to use "bullet" or "ODE" to do kinematic tests and DMU.

Next actions

 * Object model
 * Wait for the 0.12 release branch happened

Учебник

 * Базовый учебник Assembly