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 proyectos
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 proyectos 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 "Simple" y el modo "Proyecto". Simplemente significa que sólo un documento y todos los ensamblajes y piezas van en un documento. Si un Proyecto es abierto o creado, 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 que se comparta y el control de versiones.

Las referencias externas (aun 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/

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.

Aquí algunos vínculos con información:
 * ISO 10303 en Wikipedia
 * WikiStep.org con un montón de información básica pero principalmente centrada en STEP-NC
 * La Estructura de producto en STEP
 * Algunos ejemplos sobre STEP
 * ISO 10303-11 sobre el lenguaje de modelado (EXPRESS)
 * Un artículo de Wikipedia sobre modelado de producto
 * Visión general de la Parte 41 -- Fundamentos de Descripción de producto y soporte
 * Visión general de la Parte 44 (edición 2) -- Configuración de la estructura de producto
 * Ejemplos de pequeños archivos de AP 214

Restricciones de ensamblajes
Una función importante en la construcción de modelos grandes y productos son las restricciones de ensamblajes, que formulan ciertas reglas sobre como se ensamblan las piezas en un producto. Principalmente están Fijo, Cara a cara, Ángulo, Equidistancia y algún tipo de matrices de instancias. Estas restricciones necesitan un solucionador especializado para mantenerse con los cambios de las piezas. Este solucionador es fundamentalmente diferente al solucionador de croquis. Creo que tenemos que ir hacia un acercamiento basado en gráficos en este...

Cinemáticas
Un paso más sería utilizar ODE para poner las restricciones de piezas y ensamblajes juntas para hacer una simulación de la cinemática de las máquinas. Eso permitiría comprobar si existen colisiones y explorar las condiciones de un sistema mecánico.

Control de revisiones
Un importante punto es el control de versión y desarrollo distribuido. Con diseño multi modelo podremos dividir los diseños en piezas menores y podemos distribuir el trabajo entre un equipo. A un desarrollador de software "distribuido" y "Versión" le sonará familiar, así que por que no utilizar un DVCS. Una buena comparación está aquí.

Ya que manejamos datos grandes, y datos que no pueden diferenciarse fácilmente, estamos limitados a aquellos que utilizan el modelo de captura persistente. Cualquier sistema de almacenamiento diferente nos dará problemas con los datos (probado personalmente con archivos de Mercurial y Catia). Después de separar los comerciales y no-libres, básicamente sólo quedan Git y SVN.

Utilizando Git para la tarea nos deja a nosotros con dos grandes fronteras:
 * Git es muy complicado; El ramificado, el fusionado y etiquetado a lo largo de una ruta de desarrollo no lineal deja sólo el fusionado con repositorios remotos (push, pull) traerá un montón de complejidad en al asunto. Ocultarlo del usuario será un complicado.
 * Git permite manejadores de Fusión y Diferencia para ciertos tipos de archivos; Necesitamos uno para .fcstd. Este manejador tiene que examinar dos documentos de FreeCAD y mostrar y fusionar diferencias en los objetos, operaciones y parámetros. Tampoco es fácil

Pero utilizando Git podrían abrirse un montón de posibilidades incluso podríamos soñar con un sistema PLM de primera clase...

Organización
Aquí están algunas tareas de desarrollo necesarias para un diseño decente de Ensamblaje/Productos:

Infraestructura
El ensamblaje demandará algunos cambios en e sistema base y capa de infraestructura de FreeCAD.

Modelos múltiples
Los modelos múltiples estaban en mente desde el principio del diseño de FreeCAD. Por tanto tenemos una interfaz de múltiples documentos y podemos cargar ilimitados documentos. Pero necesitamos promocionar especialmente el visor 3D para manejar el mostrar más de un documento en su vista (Part-Trees).

Piezas en un Árbol
La combinación de piezas y subensamblajes es la actividad principal durante los ensamblajes. Por ello, hay que tener herramientas adecuadas para agrupar ordenadamente las piezas en una estructura de arbol. Esas herramientas hay que implementarlas. A diferencia de un DocumentObjectGroup el grupo de Ensamblaje tiene que manejar visibilidad y ubicación de sus hijos. Mejor hacerlo por apilado ViewProvider en cada otro. Eso necesita un tipo de ClaimChildren interfaz para el ViewProviders.

Interfaces unificados de Arrastrar/Soltar/Copiar/Pegar
Un interfaz proporciona a ViewProvider y los Entornos control total sobre las operaciones de Arrastrar/Soltar/Copiar/Pegar en el árbol o la vista 3D.

Recursos externos
Manejar enlaces (de navegadores internos o externos). Significa recursos cargando sobre (potencialmente) conexiones lentas (http).

Modelo de objetos
Una Clase árbol para manejar conceptos necesarios. Referencias, interfaces, enlaces de documentos, vistas, compuestos, restricciones, configuraciones, y mucho más...

Solucionador de restricciones de ensamblaje
Definir un interfaz para un Solucionador de restricciones de ensamblaje, muy similar al interfaz del solucionador del Croquizador.

Interfaz de simulación física
Interfaz para permitir a un software de simulación (multi)física (externo) tomar el control sobre el posicionamiento de las Piezas en el Ensamblaje. Esto podría permitir utilizar "bullet" o "ODE" para hacer los test de cinemática y DMU.

Próximas acciones

 * Modelo de objetos
 * Esperar a que se libere la versión 0.12