Assembly project/de

Hier ist der Projektplan für das Assembly-Modul (Montagemodul) als Teil der Development roadmap

Anliegen und Grundlagen
Dies ist ein Softwareentwicklungsprojekt mit dem Ziel, Montage- und Fertigungsfähigkeiten zu implementieren. Es geht um die Integration einiger Kern-Features in die FreeCAD-Modulesammlung Part and Assembly,

Die Entwicklungsschritte werden hier geplant und im Issue-Tracking-System verfolgt um ein brauchbares Change-Log zu erhalten: Issue tracker

Ergebnis
Ziel des Projektes ist es, FreeCAD zu befähigen, Design-Aufgaben wie diese umsetzen zu können:



Dies wird durch das Assembly-Modul ermöglicht werden, welches die verschiedenen Teile und Zwangs- bzw. Nebenbedingungen zusammenfasst und dabei so nahe wie möglich an der Spezifikation ISO 10303 bleibt, um Modelländerungen zu erleichtern.

Ein weiteres Ziel ist die Verwendung von ODE für Kinematik.

Multi-Modell
Ein Schlüssel-Feature komplexer Designs ist die Möglichkeit, dieses in handhabbare Teile zu zerlegen. Es ist schlicht nicht möglich, an allen Aspekten eines Designs zur gleichen Zeit oder allein zu arbeiten. Dies gilt für die Modellierung der Geometrie genauso wie für FEM-oder CAM-Aufgaben.

Daher benötigt FreeCAD die Fähigkeit, Modelle zu teilen. Dies öffnet folgende Möglichkeiten:
 * Late loading - Hauptspeicher und Grafik werden nur für den gegenwärtig bearbeiteten Teil benötigt.
 * Concurrent engineering - erlaubt mehreren Mitarbeitern am selben Design zu arbeiten.
 * Feinkörnige Versionskontrolle - bessere Kontrolle über verschiedene Designaspekte.
 * und vieles mehr....

Ein Multi-Modell-Design könnte folgendermaßen aussehen:

Projektmanagement
Multi-Modell bedeutet, daß eine Menge Dateien, wahrscheinlich in einem gemeinsamen Verzeichnis, zu einem einzigen Projekt gehören. Eine Projektdatei und ein Projekt-Browser können die Organisation dieser Dateien erleichtern. Weiterhin kann dann zusätzliche Information über das Projekt oder eine Projekt-Webseite mit verwaltet werden.

1. Zwei Modi: "Simple" und "Project" Modus. Simple bedeutet, dass nur ein Dokument angelegt wird und alle Assemblies und Teile in dieser Datei abgelegt werden. Wenn ein Projekt geöffnet oder angelegt wird, befindet sich FreeCAD im Project-Modus.

2. Projekte. Die Position der FCPrj-Datei auf dem Laufwerk definiert ein Projektverzeichnis. Alle Dateien unterhalb dieses Verzeichnisses werden mit relativen Pfaden zu diesem Projektverzeichnis definiert. Eine zusätzliche Ansicht auf der linken Seite wird den ProjectExplorer darstellen, welcher den Verzeichnisbaum und die daruntger verwalteten Dateien anzeigt. Das Projektverzeichnis ist gleichzeitig das Wurzelverzeichnis (root) einer SVN-Sandbox, wodurch spätere Verteilung und Versionskontrolle (Konfigurationsmanagement) erleichtert werden. Externe Referenzen (zu einem Verzeichnis außerhalb des Verzeichnisbaumes, einem Server-Share oder einer Web-Ressource) werden im ProjectExplorer separat gehandhabt und angezeigt (ein Pseudo-Verzeichnis für jeden Dateiserver oder Webserver). Dies erleichtert den Überblick über externe Referenzen und das einfache Re-Routing derselben.

Copyright
Das Thema Copyright für 3D-Modelle ist ein interessantes Feld. 3D-Modelle fallen unter das Copyright, welches dem Autoren eines Modells zugestanden wird. Es ist nur möglich, die Form, welche durch das Modell repräsentiert wird, durch ein Patent oder Geschmacksmuster schützen zu lassen (US). Patente decken aber nur den kommerziellen Teil der tatsächlichen Teileproduktion. Als Beispiel sei hier das Microsoft Mouse design patent angeführt.

Wir müssen also für jedes Model/Produkt/Datei eines Designs den Autoren (Copyright-Inhaber) speichern. Als Lizenz würde ich CC-Lizenzen verwenden: http://creativecommons.org/

Abkürzungsschlüssel für CC-Lizenzen:
 * 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

Zusätzlich kann eine URL zum vollständigen Lizenztext für alternative Lizenzen verwendet werden.

ISO 10303
Die ISO 10303 (STEP) ist in diesem Zusammenhang sehr wichtig. Es ist die einzige mir bekannte Definition von Produktstrukturen, welche standardisiert und gemeinhin anerkannt ist.



Hier einige Links mit Informationen:
 * ISO 10303 auf Wikipedia
 * Einführung und Übersicht
 * ISO 10303-11 über die Modelliersprache (EXPRESS)
 * Ein Wikipedia-Artikel über Produktmodellierung
 * Überblick Part 41 -- Grundlagen der Produktbeschreibung und Support
 * Überblick Part 44 (edition 2) -- Produktstrukturkonfiguration
 * Beispiele kleiner AP 214 Dateien

Montage-Randbedingungen (assembly constraints)
Eine wichtige Rolle beim Zusammensetzen großer Modelle und Produkte spielen die Randbedingungen der Montage (assembly constraints), welche bestimmte Regeln festlegen, nach denen die Teile eines Produktes zusammengesetzt werden. Diese sind im wesentlichen Fix, FaceToFace (Fläche zu Fläche), Angle (Winkel), Offset (Verschiebung) und eine Art Musterbildung. Diese Randbedingungen benötigen zum Aufrechterhalten bei Modelländerungen einen spezialisierten Solver. Dieser Solver unterscheidet sich fundamental vom Sketch-Solver. Ich glaube wir werden einen Graph-basierten Ansatz hierfür verfolgen...

Kinematik
Ein weiterer Schritt wäre die Verwendung von ODE oder ähnlichen Bibliotheken, um Teile und Randbedingungen einer kinematischen Maschinensimulation zu unterziehen. Dies würde die Kollisionsprüfung und Analyse des Verhaltens mechanischer Systeme ermöglichen.

Versionskontrolle
Wichtige Punkte sind verteilte Entwicklung und Versionskontrolle, da ein Multimodell-Design die Zerlegung und Aufteilung größerer Designs im Team ermöglicht. Für einen Softwareentwickler klingen "verteilt" und "Version" vertraut, also warum nicht ein DVCS verwenden? Ein guter Vergleich findet sich hier.

Da wir mit großen und schwer vergleichbaren (diff) Datenmengen zu tun haben, sind wir auf die Versionskontrollsysteme angewiesen, welche ein snapshot-persistence-Modell verwenden. Alle Systeme, welche nur Versionsunterschiede speichern, werden schwerwiegende Probleme mit diesen Daten haben (selbst getestet mit Mercurial- und Catia-Dateien). Wenn man kommerzielle und unfreie Varianten aussortiert, bleiben nur noch Git und SVN.

Die Verwendung von Git für diese Aufgabe setzt zwei große Einschränkungen:
 * Git ist reichlich kompliziert; Branching, Merging und Tagging entlang eines nichtlinearen Entwicklungspfades, oder sogar Merging mit externen Repositories (push, pull), bringt eine hohe Komplexität mit sich, die schwierig vor dem Anwender zu verbergen ist.
 * Git ermöglicht Dateityp-spezifische Merge- und Diff-Handler - wir benötigen einen für .fcstd. Dieser Handler muß zwei FreeCAD-Dokumente untersuchen und Unterschiede in den Objekten, Eigenschaften und Parametern zeigen und integrieren können. Ebenfalls nicht einfach.

Andererseits würde die Verwendung von Git eine Menge Möglichkeiten eröffnen, von denen hochklassige PLM-Systeme nur träumen können...

Organisation
Hier einige der für ein brauchbares Montagemodul nötigen Entwicklungsaufgaben:

Infrastruktur
Das Montagemodul benötigt einige Änderungen am Basissystem und im Infrastruktur-Layer von FreeCAD.

Multi-Modell
Multi-Modell war von Anfang an ein Ziel in der FreeCAD-Entwicklung. Daher gibt es bereits ein MDI zum Laden einer unbegrenzten Anzahl von Dokumenten. Allerdings muß der 3D-Viewer erweitert werden, um mehr als ein Dokument im Sichtbereich (View) darstellen zu können (Part-Trees).

Part-Trees
Da in der Montage das Zusammensetzen von Teilen und Teilegruppen der Hauptanwendungsfall ist, müssen die Werkzeuge zum Gruppieren von Teilen in einem Baum implementiert werden. Anders als die DocumentObjectGroup muß die Montagegruppe die Sichtbarkeit und Platzierung, am besten durch Aufeinandersetzen mehrerer ViewProvider, von Kindern verwalten können. Dafür wird eine Art ClaimChildren-Interface zu den ViewProvidern benötigt.

Einheitliches Drag/Drop/Copy/Paste-Interface
Ein Interface um ViewProvider und Workbenches volle Kontrolle über Drag/Drop/Copy/Paste-Operationen im Baum oder der 3D-Ansicht zu ermöglichen.

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