Hier ist der Projektplan für das Assembly-Modul (Montagemodul) als Teil der Development roadmap
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
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.
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:
Ein Multi-Modell-Design könnte folgendermaßen aussehen:
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.
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:
Zusätzlich kann eine URL zum vollständigen Lizenztext für alternative Lizenzen verwendet werden.
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:
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...
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.
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:
Andererseits würde die Verwendung von Git eine Menge Möglichkeiten eröffnen, von denen hochklassige PLM-Systeme nur träumen können...
Hier einige der für ein brauchbares Montagemodul nötigen Entwicklungsaufgaben:
Das Montagemodul benötigt einige Änderungen am Basissystem und im Infrastruktur-Layer von FreeCAD.
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).
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.
Ein Interface um ViewProvider und Workbenches volle Kontrolle über Drag/Drop/Copy/Paste-Operationen im Baum oder der 3D-Ansicht zu ermöglichen.
Handhabung von Links (interner oder externe Browser). Bedeutet das Laden von Ressource über potentiell langsame Verbindungen (http).
Beschreibung von Materialien und deren Eigenschaften ist grundlegender Bestandteil eines CAD/CAE-Systems. Materialien haben unzählige Eigenschaften und Namensgebungen hängen stark vom Einsatzgebiet ab: FEM und Maschinenbau haben zum Beispiel verschiedene Frameworks und Standards der Materialbeschreibung.
Für die Materialbeschreibung gibt es einen eigenen Artikel: Material
Klassenbaum für folgende Konzepte nötig: Referenzen, Interfaces, Dokumentenlinks, Ansichten, Objektgruppen, Randbedingungen, Konfigurationen u.v.m.
Implementierung eines STEP-Importers, der mehr Möglichkeiten bietet, als nur die Prüfung von Geometrie und Farbe.
Definiere ein Interface zum Assembly Constraint Solver analog zum Sketcher Solver interface.
Interface um einer (externen) (Multi-)Physiksimulationssoftware die Kontrolle über die Positionierung von Teilen einer Baugruppe zu ermöglichen. Dies eröffnet die Möglichkeit der Verwendung von "bullet" oder "ODE" für DMU und kinematische Tests.