Problemstellung

Wenn man ähnliche Varianten eines Bauteiles erstellen, aber nicht jedes Mal von vorne anfangen möchte, kopiert man die (FCStd-)Datei und baut die Kopie in Variante002 um. Mit der Zeit erhält man immer mehr Dateien und verzweifelt, wenn in der Konstruktion ein Maß geändern werden muss - in allen Dateien. Da hilft es auch nichts, wenn man die Maße in Tabellen (Spreadsheets) verwaltet, denn jede Datei hat ihr eigene Tabelle.

Später entdeckt man, dass FreeCAD mehrere Bauteile in einer Datei verwalten kann, und möchte die vorhandenen Dateien in einer einzigen Datei zusammenfassen. Dort hat man dann mehrere Bauteile ... und mehrere Tabellen, in denen man Maße ändern müsste. Also will man auch noch mehrere Tabellen in eine einzige Tabelle zusammenführen.
Wie das geht, wird hier beschrieben.

Beim nächsten Mal konstruiert man die Varianten gleich in einer Datei mit einer Tabelle ... ;-)
Der Nachteil dabei ist allerdings, dass FreeCAD bei Änderungen immer länger rechnet je größer die FCStd-Datei wird. Also doch mit Einzeldateien beginnen und erst vereinigen, wenn die Konstruktion einigermaßen abgeschlossen ist?

Ziel: Das folgende Tutorial beschreibt, wie man ..

  • .. Bauteile (Body) von einer FCStd-Datei in eine andere verschiebt und so Dateien zusammenfassen kann.
  • .. Maße (Parameteradressen) von einer Tabelle auf eine andere umbiegt und so Tabellen zusammenfassen kann.
  • .. den XML-Code einer FCStd-Dateien bearbeiten kann.

Als Übungsmaterial zum Download dienen

Hinweise und Links

  • Ich nummeriere Variante000, Variante001 ..., weil auch FreeCAD so (ähnlich) nummeriert: Body, Body001, ...

 

Aus 2 mach 1: FCStd-Dateien zusammenführen

Vorbereitung

Screenshot
Abb.00: Combo-Ansicht - Modell
mit 2 Kästen in 2 Dateien

Body (Bauteil) kopieren

Hier wird beschrieben, wie ein Body (Bauteil) kopiert wird. Das kann aus einer FCStd-Datei in eine andere Datei hinein geschehen oder auch innerhalb einer Datei, z.B. als Grundlage für eine Variante.

Body aus Kasten_B kopieren

Screenshot
Abb.01: Ojektauswahl (alles)
  • Menuleiste - Arbeitsbereich: Icon des Arbeitsbereiches PartDesign in der MenuleistePartDesign
  • Combo-Ansicht - Modell - Kasten_B - Body: aktivieren
    • mit Doppelklick
      oder
    • Kontextmenu - Aktiven Körper umschalten
  • Combo-Ansicht - Modell - Kasten_B - Kontextmenu auf Body - Kopieren
    • Maske Objektauswahl - OK
      → Kopiert alles
      → Abb.01

Body in Kasten_A einfügen

Screenshot
Abb.02: Kasten_A mit Body001
  • Menuleiste - Arbeitsbereich: Icon des Arbeitsbereiches PartDesign in der MenuleistePartDesign
  • Combo-Ansicht - Modell - Kasten_A - Doppelklick auf Body (aktivieren)
  • Combo-Ansicht - Modell - Kasten_A - Kontextmenu auf Body - Einfügen
    → Abb.02

Body und Tabelle wurden aus Kasten_B in Kasten_A kopiert und haben dort neue Nummern erhalten: BodyBody001 und TabelleTabelle001 usw.

Nacharbeiten

Screenshot
Abb.04: Kasten.FCStd

Jetzt kann man aufräumen.

  • Kasten_B schließen:
    Screenshot
  • Kasten_A als neue Datei Kasten speichern:
    Datei - Speichern unter: Kasten.FCStd
  • Body und Body001 aussagekräftig benamsen:
    Combo-Ansicht - Modell - Kasten - Kontextmenu auf Body - Umbenennen: .......
    → Abb.04

Aus 2 mach 1: Tabellen vereinigen

In Abb.04 enthält Tabelle die Maße für das Bauteile Kasten ohne Fächer und Tabelle001 die Maße für Kasten mit 3 Fächern. Da sich die Kästen nur in Details unterscheiden, sind die meisten ihrer Maße identisch - es wäre also einfacher, die Maße in einer einzigen Tabelle zu verwalten. Dazu muss man Tabellen zusammenfassen.

Beachten Sie:

  • FreeCAD ist freigiebig mit Begriffen und verwendet die Synonyme Spreadsheet, Tabelle und Tabellenblatt durcheinander. Intern gelten die englischen Begriffe, also Spreadsheet.
  • Hier soll Tabelle erhalten bleiben und Tabelle001 gelöscht werden.
  • Alle Maße, die von den Bauteilen als Parameter abgerufen werden, müssen in Tabelle vorhanden sein. Falls nötig, müssen Maße aus Tabelle001 in Tabelle übertragen werden.
  • In den Bauteilen Kasten ohne .. und Kasten mit .. gibt es Verweise auf die Maße in den Tabellen. Alle Verweise aus Tabelle001 müssen auf Tabelle umgebogen werden, bevor Tabelle001 gelöscht wird.

Maße zwischen Tabellenblättern übertragen

Hinweis:

  • In den Übungsdateien ist dieser Schritt nicht nötig, da die Tabellenblätter identisch sind.
  • Dieser Schritt ist auch nicht nötig, wenn Sie Body innerhalb einer Datei kopiert haben, weil in diesem Fall auch die zugehörigen Tabellen identisch sind.

Beachten Sie:

  • In FreeCAD enthalten die Zellen einer Tabellen zwei Werte: Inhalt und Alias.
    • Der Inhalt einer Zelle ist das, was als Maß in den Bauteilen verwendet werden kann, z.B. der Inhalt 50.
    • Das Alias einer Zelle ist die Adresse, unter der Bauteile das Maß finden, z.B. der Alias Radius.
    • Eine Zellenadresse wie z.B. B11 wird nur tabellenintern verwendet und spielt hier keine Rolle.
  • Von einem Tabellenblatt zu anderen kann man Zellen mit Copy (Ctrl-C) und Paste (Ctrl-V) kopieren, da FreeCAD Inhalt UND Alias mitnimmt.
  • Innerhalb eines Tabellenblattes funktioniert Copy&Paste mit Aliasen nicht, weil die Aliase kurzzeitig doppelt vorkämen, und da spielt FreeCAD nicht mit. Formeln werden mit relativen Bezügen übertragen.
  • Innerhalb eines Tabellenblatts muss (und kann) man Zellen mit Ausschneiden (Ctrl-X) & Einfügen (Ctrl-V) verschieben. Das kurzzeitige Fehlen eines Alias beim Ausschneiden kann FreeCAD nach dem Einfügen kompensieren. Formeln mit Bezügen werden korrekt übertragen, wenn die Bezüge im übertragenen Bereich liegen.
  • Jedes Alias muss eindeutig sein, darf also nur einmal in einem Tabellenblatt auftreten.
    • Kopieren Sie nur die Zellen aus Tabelle001, die in Tabelle fehlen.
    • Doppelte Aliase müssen Sie noch in Tabelle001 händisch ändern.
    • Wo eine Zelle mit Inhalt und Alias liegt, spielt für die Parameter keine Rolle.

 

Parameter in Bauteilen automatisiert ändern / XML-Code einer FCStd-Datei bearbeiten

Parametrische Bemaßung hat viele Vorteile, aber wenn man zwei Tabellen zusammenführen will, steht man vor dem Problem, dass sich einige Bauteile auf Tabelle001 beziehen, andere auf Tabelle002. Man könnte zwar alle Konstruktionen durchsuchen und die Parameter einzeln von Hand ändern, aber es geht einfacher.

Ob es für das automatische Ändern von Parametern eine Funktion gibt, weiß ich nicht. Ich habe es im XML-Code der FCStd-Datei versucht, das hat problemlos funktioniert und genügt mir, solange ich noch ungelöste Probleme habe. Außerdem birgt die Bearbeitung des XML-Codes auch noch Potential für andere Problemlösungen...

Ein bisschen Theorie

FCStd-Dateien bestehen aus ZIP-gepackten XML-Dateien, also aus einfachen Textdateien.

In den Textdateien sind die Konstruktionsmaße als einfache Zahlen abgelegt, z.B. als Maß 15, oder als Parameter, also als Querverweis in ein Tabelle.

Beispiel 1: Der Parameter Spreadsheet001.Gesamtbreite besteht aus dem Namen des Tabellenblattes (Spreadsheet001, intern für Tabelle001) und dem Alias der Zelle (Gesamtbreite) mit dem Inhalt (15) → Maß.
Beispiel 2: Ein Parameter wie <<Parameterliste>>.Gesamtbreite weist auf eine Tabelle, die händisch umbenannt wurde (hier Parameterliste statt Tabelle...). Sonst funktioniert es wie oben.

Man muss also nur mit einem einfachen Texteditor in einer einfachenTextdatei den einfachen Textschnipsel Spreadsheet001. suchen und durch den Textschnipsel Spreadsheet. ersetzen.

Mehr Programmierkenntnisse braucht es nicht, um alle Parameter von Tabelle001 auf Tabelle abzuändern.

Sezieren einer FCStd-Datei

Screenshot
Abb.05: Die Innereien einer FCStd-Datei
  • Schließen Sie FreeCAD und machen Sie eine Sicherheitskopie der Datei Kasten.FCSTd !!!
  • Hängen Sie an den Dateinamen Kasten.FCStd zusätzlich die Endung .zip an:
    → Die Datei heißt jetzt Kasten.FCStd.zip
  • Öffnen Sie die Datei Kasten.FCStd.zip mit einem Doppelklick.
    • → Wegen der Endung .zip öffnet ihr Betriebssystem nicht mit dem Programm FreeCAD, sondern mit einem Programm zum Entpacken von ZIP-Dateien.
    • → Sie sehen eine Liste von Dateien, die zu Kasten.FCStd gehören.
      → Abb. 05
  • Kopieren Sie die Datei Document.xml aus dem ZIP-Ordner heraus.

Suchen und Ersetzen in der XML-Datei

Screenshot
Abb. 06: Die Innereien einer FCStd-Datei

Untersuchen Sie die XML-Datei mit einem Texteditor. Finden Sie ein Muster, um Spreadsheet001 eindeutig innerhalb Parametern zu identifizieren, im Unterschied zu Spreadsheet001 an anderen Stellen, wo es nicht verändert werden sollte. Ersetzen Sie dann Spreadsheet001 mit Suchen&Ersetzen in den Parametern der ganzen Datei durch Spreadsheet. Wenn Sie kein Muster finden, müssen Sie die Entscheidung, ob ersetzt werden soll, bei jeder Fundstelle selbst treffen.

  • Kopieren Sie die Datei Document.xml aus dem ZIP-Ordner heraus.
  • Öffnen Sie die Datei Document.xml mit einem einfachen Texteditor, z.B. WordPad. Verwenden Sie auf keinen Fall Word oder LibreOffice oä., denn die großen Programme bauen alle Dokumente in ihr eigens XML um, das FreeCAD nicht lesen kann.
  • Suchen Sie nach dem Text Spreadsheet001 und vergleichen Sie. Parameter enthalten immer einen Text wie expression="Spreadsheet001.Gesamtbreite", während andere Fundstellen keinen Punkt hinter Spreadsheet001 haben. Man kann also alle Parameter mit Suchen&Ersetzen auf Spreadsheet umbiegen. Tun Sie's:
  • (Suchen&)Ersetzen
    • Suchen: Spreadsheet001.   (mit Punkt!)
    • Ersetzen: Spreadsheet.    (mit Punkt!)
    • Vergessen Sie die Punkte nicht
  • Document.xml speichern und schließen

Nacharbeiten

  • Schieben Sie die geänderte Datei Document.xml zurück in den ZIP-Ordner.
  • Schließen bzw. verlassen Sie den ZIP-Ordner.
  • Umbenennen Sie Kasten.FCStd.zip wieder in Kasten.FCStd
  • Öffnen Sie Kasten.FCStd mit FreeCAD und testen Sie es.
  • Löschen Sie Spreadsheet001 in Kasten.FCStd.