Assembly project/es

Aquí está la planificación del proyecto para el módulo de Ensamblaje como parte del Mapa de desarrollo

Propósito y principios
Este es un proyecto de desarrollo de software cuya intención es implementar capacidades para la creación de ensamblajes y productos. Trata de la implementación de algunas características principales en los módulos de CAD de FeeCAD, Piezas y Ensamblaje.

Los pasos del desarrollo se planifican aquí y se siguen en el sistema de gestión de incidencias para conseguir un histórico de cambios bien definido: Sistema de gestión de incidencias

Resultado
La intención del proyecto es permitir a FreeCAD lograr una tarea de diseño como está:



Esto se logrará utilizando el Ensamblaje para poner todos los diferentes tipos de piezas juntas con restricciones y permanecer lo más cerca que se pueda de la especificación ISO 10303 para permitir un intercambio de modelos sencillo.

Otro objetivo es utilizar ODE para la cinemática.

Modelo múltiple
Una característica importante para los diseños del mundo real es la habilidad de dividir un diseño en partes más manejables. Es imposible trabajar en todos los aspectos de un diseño al mismo tiempo o por separado. Esto es cierto para la geometría y también para las tareas de ingeniería como CAE o CAM. Por eso FreeCAD necesita la posibilidad de dividir los modelos. Esto abre algunas posibilidades:
 * Carga retardada - Sólo se necesitan recursos como los gráficos y la memoria principal para la pieza en la que se está trabajando.
 * Ingeniería concurrente - Permite a varias personas trabajar en el mismo diseño
 * Control de versiones - Mejorar el control sobre diversos aspectos del diseño
 * y muchas otras....

Un diseño de modelo múltiple podría parecerse a este:

Gestor de proyecto
Modelo múltiple significa un montón de archivos que pertenecen a un proyecto, normalmente bajo un directorio común. Un archivo de proyecto y un explorador de proyecto (project browser) pueden ayudar a organizar los archivos. También pueden guardar información adicional sobre el proyecto o una website del proyecto.

1. Dos modos, el modo "Simple" y el modo "Proyecto". "Simple" significa que sólo hay un documento, y todos los ensamblajes y piezas van en ese documento. Si se crea o abre un Proyecto, FreeCAD está en modo "Proyecto".

2. Proyectos. La posición del archivo FCPrj en el disco define un directorio raíz. Todos los archivos contenidos en este directorio están definidos con rutas relativas al directorio raíz. Una vista adicional a la izquierda contendrá el ProjectExplorer que mostrará el árbol de directorios con los archivos manejados.

Este directorio raíz se utiliza también como raíz para un entorno de pruebas SVN, que permitirá después facilitar el compartir y el control de versiones.

Las referencias externas (a un directorio fuera del directorio raíz, un servidor compartido o un recurso web) se manejarán y mostrarán de forma separada en el ProjectExplorer (un pseudo directorio para cada archivo de servidor o servidor web). Esto hace posible conseguir un rápido resumen sobre las referencias externas y redefinir sus rutas.

Derechos de autor
Ahora los derechos de autor de los modelos de 3D son un campo interesante. Los modelos 3D realmente tienen derechos de autor. Los derechos de autor son del creador del modelo. Sólo es posible proteger la forma, que es representada por el modelo, por una patente o una patente de diseño (EE.UU). Pero las patentes cubren sólo la creación de una pieza física para ganar dinero. Como ejemplo el Patente del diseño del ratón de Microsoft.

De modo que tenemos que recordar al creador (titular de los derechos de autor) y cualquier clase de licencia para cada modelo/producto/archivo de un diseño. Para la licencia yo utilizaría las licencias de tipo de CC. http://creativecommons.org/

Claves abreviadas para licencias CC:
 * BY = Sólo atribución
 * BY-ND = Atribución - No derivativos
 * BY-NC-ND = Atribución - No comercial - No derivativos
 * BY-NC = Atribución - No comercial
 * BY-NC-SA = Atribución - No comercial - como Share
 * BY-SA = Atribución - Como Share
 * PD = Dedicado o marcado para ser de dominio público por una vía de nuestras herramientas de dominio público, o otro treabajo de dominio público; adaptaciones de trabajo en el dominio público pueden crearse y licenciarse por el creador bajo cualquier término de licencia deseado

Añadir un enlace URL al documento de licencia completo (en caso de licencias de clientes)

ISO 10303
La ISO 10303 (STEP) es muy importante en este campo. Es la única definición de estructuras de producto que conozco que está bien estandarizada y ampliamente discutida y reconocida.

Here some links with info:
 * ISO 10303 on Wikipedia
 * WikiStep.org with a lot of basic info but mostly toward STEP-NC
 * The product structure in STEP
 * Some examples about STEP
 * ISO 10303-11 about the modeling language (EXPRESS)
 * A Wikipedia article about product modeling
 * Overview of Part 41 -- Fundamentals of Product Description and Support
 * Overview of Part 44 (edition 2) -- Product Structure Configuration
 * Examples of small AP 214 files

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

Tutorial

 * Assembly Basic Tutorial