Jump to content
BahnLand

Erweiterter DirectX-Exporter

Recommended Posts

Hallo Neo und alle Sketchup-Modellbauer,

der hier bereitgestellte neue Sketchup-DirectX-Exporter ist zwar ein Plugin, aber nicht für das Modellbahn-Studio, sondern für Sketchup (um dort Modelle für das Modellbahn-Studio exportieren zu können). Leider habe ich keine "passendere" Rubrik gefunden, weshalb ich diesen Beitrag trotzdem hier einstelle:

 

Ich habe noch ein wenig an meinem Sketchup-DirectX-Exporter herumgebastelt und dabei folgende Korrekturen und Erweiterungen vorgenommen:

  1. Fehlerbehebung bei Teilobjekten ohne Flächen
    Wenn in einem Sketchup-Modell gruppierte Bauteile vorhanden waren, für die keine Flächen darzustellen waren, brach der Export bisher mit Fehler ab. Der Fehler wird jetzt abgefangen. Wird nun ein Bauteil ohne zu realisierende Flächen erkannt, wird dies im Export-Protokoll zwar angezeigt, die Bearbeitung aber fortgesetzt und "sauber" beendet. Im Protokoll werden Bauteile ohne darzustellende Flächen mit "0 Flächen" ausgewiesen.
     
  2. DirectX-Exporter funktioniert jetzt auch mit den neuen Sketchup-Versionen
    Es ist mir gelungen, die Ursachen, warum der DirectX-Exporter bisher mit den neueren Sketchup-Versionen nicht eingesetzt werden konnte, zu identifizieren und zu beseitigen.

    Hauptknackpunkt war hierbei die Verwendung einer neueren Ruby-Version durch Sketchup, durch welche UTF-8-Codes, zu denen insbesondere die deutschen Umlaute ä, ö, ü und das scharfe ß gehören, nicht mehr unterstützt werden und daher zu einem Abbruch des Ruby-Scripts (also des DirectX-Exporters) mit Fehler führen. Ich habe deshalb alle Umlaute und das scharfe ß in den Textausgaben durch "ae", "oe", "ue" und "ss" ersetzt. Auch wenn's jetzt etwas "weniger schön" aussieht, funktioniert es jedenfalls.

    Ein weiteres Problem stellte die inkompatible Änderung der Datums- und Uhrzeit-Ausgabe dar, die ich zur Berechnung der Ausführungszeit für den Export verwende. Hier hat sich das Ausgabeformat geändert, sodass ich einen neuen Lokalisierungs-Algorithmus für die Uhrzeit benötigte. Der DirectX-Exporter stellt jetzt automatisch fest, in welchem Format Datum + Uhrzeit ausgegeben werden, und wählt dann selbst die passende Aufbereitungsvariante aus. Somit kann der Exporter nun gleichermaßen sowohl mit den älteren Sketchup-Versionen (z.B. Sketchup V8) als auch mit den neuern Sketchup-Versionen (z.B. Sketchup 2016 oder Sketchup 2017) eingesetzt werden.
     
  3. Ausgabe in verschiedenen Zielgrößen und Hinzufügen eines _Scale_-Objekts möglich
    Laut Neo wird sich der vom Modellbahn-Studio verwendete "Standard"-Maßstab in der angekündigten neuen Version 4 von H0 (1:87) auf den Vorbild-Maßstab (1:1) oder den Maßstab 1:100 ändern (noch nicht endgültig festgelegt). Damit muss der Modellbauer zukünftig seine Modelle entweder in der neuen "Eingangs-Größe" für das Modellbahn-Studio abliefern oder in sein Modell das "_Scale_"-Objekt integrieren, mit dem er dem Modellbahn-Studio mitteilen kann, dass sein Modell eine vom "Standard" abweichende "Eingangs-Größe" besitzt. Letzteres ist vor Allem für solche Modelle von essentieller Bedeutung, die bereits für die bisherige Version des Modellbahn-Studios übergeben wurden, und deren X-Datei nach dem Export durchgeführte Änderungen und Erweiterungen (z.B. eine nachträglich hinzugefügte AnimationSet-Definition) enthalten. Bei einer Umstellung des Maßstabs für die mit dem DirectX-Exporter zu erzeugenden X-Datei müssten auch die hinzugefügten Änderungen und Erweiterungen entsprechend "umskaliert" werden. Lässt man dagegen den Maßstab für die X-Datei unverändert (mit ebenfalls unveränderter Erweiterung), und fügt stattdessen das _Scale_-Objekt ein, wirkt sich die dann implizit durchgeführte "Umskalierung" durch das Modellbahn-Studio auf die gesamte X-Datei (einschließlich der hinzugefügten Änderungen) aus (der Modelbauer muss selbst die Umskalierung nicht mehr machen).

    Der DirectX-Exporter bietet nun in den Einstellungen sowohl die Möglichkeit, eine neue Zielgröße für die beim Export zu erstellende X-Datei zu spezifizieren, als auch das _Scale_-Objekt durch den DirectX-Exporter automatisch hinzufügen zu lassen. Der DirectX-Exporter testet dann zuerst, ob in dem zu exportierenden Sketchup-Modell bereits ein _Scale_-Objekt vorhanden ist. Wenn nein, erzeugt der DirectX-Exporter das _Scale_-Objekt selbst, indem der den dort zu hinterlegenden Maßstab, in dem er auch die X-Datei erzeugt, aus den Einstellungen für die Zielgröße herausliest, und die X-Datei selbsttätig um dieses _Scale_-Objekt ergänzt.
     
  4. _Gizmo-Objekt zur individuellen Positionierung des Koordinatenkreuzes im MBS-Modell
    In den Einstellungen des DirectX-Exporters besteht bisher die Möglichkeit, den von Sketchup anhand der Positionierung des Sketchup-Modells relativ zum Koordinatenkreuz "abgelieferten" Koordinaten-Ursprung des Modells unverändert zu übernehmen oder ihn - für jede Koordinaten-Richtung getrennt - an den Minimal- oder Maximal-Wert aller Eckpunkte des Modells oder den daraus berechneten Mittelpunkt zu verlegen.

    Mit dem "_Gizmo"-Objekt besteht nun die Möglichkeit, diesen "Koordinaten-Ursprung" im Sketchup-Modell an jede beliebige Stelle zu verlegen und dadurch bei der Anzeige des Modells im Modellbahn-Studio dessen Gizmo exakt an dieser Stelle zu positionieren.

    Hierzu fügt man in das Sketchup-Modell eine Bauteil-Gruppe ein, der man die Bezeichnung "_Gizmo" gibt. Das Bauteil muss aus einer eingefärbten Fläche bestehen (am besten eine horizontale quadratische Fläche), deren geometrischer Mittelpunkt (Mitte zwischen den kleinsten und größten Koordinaten des Bauteils) als individuell zu positionierendes Koordinatenkreuz verwendet wird. Dieses "_Gizmo"-Bauteil wird dann an jene Stelle im Modell verschoben, wo bei der Anzeige durch das Modellbahn-Studio das Gizmo positioniert werden soll.

    Beim Export des Sketchup-Modells bestimmt dann der DirectX-Exporter die Mittelpunkt-Koordinaten des _Gizmo-Bauteils und verwendet diese anstelle der Exporter-Einstellungen für die X-, Y- und Z-Ausrichtung, um das Gesamtmodell relativ zu diesem "Gizmo"-Koordinatenkreuz zu verschieben. Das "_Gizmo"-Objekt selbst (also das entsprechende Bauteil im Sketchup-Modell) wird nicht Bestandteil der X-Datei und damit auch nicht Teil des Modells im Modellbahn-Studio.

    Beispiel für die Wirkungsweise des _Gizmo-Objekts:
    Sketchup_alle.jpg
    Das obige Bild zeigt zwei Varianten desselben quadratischen Flächenmodells, die sich nur durch die Position des hellblauen Vierecks unterscheiden. Dieses ist die mit "_Gizmo" bezeichnete Bauteil-Gruppe des Sketchup-Modells. Beim linken Bild fällt dessen Mittelpunkt mit dem Mittelpunkt des Gesamtfläche zusammen. Beim rechten Bild ist der Mittelpnkt des _Gizmo-Objekts in die äußere Ecke des grünen Quadrats verschoben.

    Gizmo_alle.jpg
    Auf dem zweiten Bild sind 4 gleichartige Flächenodelle auf einer Bodenplatte des Modellbahn-Studios platziert, die sich wie folgt unterscheiden:

    Die beiden Flächen in der oberen Zeile besitzen kein _Gizmo-Objekt. Es sind daher die Angaben für die X-, Y- und Z-Ausrichtung in den Einstellungen des DirectX-Exporters gültig. Beim linken Bild ist dort die Angabe "unveraendert" für alle 3 Richtungen eingestellt. Es sollte also die originale Position des Koordinatenkreuzes aus dem Sketchup-Modell übernommen werden. Leider sind die Werte, die Sketchup für das Koordinatenkreuz relativ zum Modell ausgibt, in x-Richtung etwas verschoben, sodass auch das Gizmo im Modellbahn-Studio entsprechend etwas verschoben ist.

    Da das Gesamtmodell zum Koordinatenursprung symmetrisch aufgebaut ist, kann man diesen Fehler von Sketchup durch die Exporter-Einstellungen "mittig" für die X- und die Y-Richtung beheben. Bei am Koordinatenkreuz unsymmetrisch ausgerichteten Sketchup-Modellen kann man aber auch hier die Position des Koordinatenkreuzes gegenüber dem Sketchup-Modell nicht auf das Modell im Modellbahn-Studio übertragen. Denn es gibt ja nur die Einstellungen "kleinster oder größter Koordinatenwert aller Eckpunkte" oder "Mittelpunkt zwischen kleinstem und größtem Koordinatenwert", der ja nicht zwingend mit dem Koordinatenursprung zusammenfallen muss.

    Bei den zwei unteren Beispielen wurde im Sketchup-Modell ein _Gizmo-Objekt erzeugt und wie im vorangehenden Bild positioniert. Vergleicht man hierzu die untere Modell-Reihe in der Darstellung des Modellbahn-Studios, sieht man, dass das Gizmo jeweils exakt an jener Stelle platziert ist, an welcher es auch im Sketchup-Modell platziert wurde. Dies gilt unabhängig davon, in welcher Position das Sketchup-Modell bezogen auf das dortige Koordinatenkreuz platziert ist.

 

So, nun möchte ich Euch bitten, den neuen DirectX-Exporter, den ich Euch hier in dem beiliegenden ZIP-Paket beigelegt habe, einmal auszuprobieren. Bitte folgt bei der "Installation" des Exporters der als PDF-Datei ebenfalls in diesem Paket abgelegten aktualisierten Beschreibung. Denn die Dateien müssen in Abhängigkeit von der verwendeten Sketchup-Version in unterschiedlichen Verzeichnissen abgelegt werden. Ist der DirectX-Exporter erst einmal im zur Sketchup-Version "passenden" Plugins-Verzeichnis abgelegt, ist die Handhabung sowohl bezüglich der unterschiedlichen Sketchup-Versionen als auch in Bezug zu der existierenden und der angekündigten Version des Modellbahn-Studios identisch.

DirectX_Exporter.zip

Ich bin auf Eure Eindrücke sehr gespannt.

Viele Grüße
BahnLand  

 

 

Edited by BahnLand

Share this post


Link to post
Share on other sites

Hallo BahnLand,

da ich aktuell kein Sketchup bzw. Modelle für Sketchup besitze, habe ich mir deine aktualisierte PDF angeschaut. Auf mich macht das wie gewohnt von dir einen sehr guten Eindruck. Zum Thema "Scale" habe ich noch folgendes anzumerken:

Ein "Standardmaßstab" wird es in V4 nicht mehr geben, das bedeutet, dass beim Einlesen von 3D-Modellen, die kein Scale-Objekt besitzen, weder ein 1:1, 1:87 oder ein 1:100 Maßstab angenommen wird, stattdessen erscheint ein Dialog, bei dem der Modellbauer den Modellmaßstab angeben muss. Das Scale-Objekt dient lediglich als Zusatz, um diesen Dialog zu automatisieren und nicht immer wieder erneut den Modellmaßstab angeben zu müssen.

Aus Sicht von MBS V3 und V4 würde das bedeuten:

  • Die Angabe einer "Zielgröße" im Exporter ist nicht notwendig. Es genügt, wenn das Scale-Objekt den Originalmaßstab beschreibt.
  • Eine manuelle Skalierung per Skalierungsframe ist somit nicht notwendig, das übernimmt das Studio

Würde der Exporter also nur für das Studio (V3 und/oder V4) benutzt werden, könnten die beiden Einstellungen (Zielgröße und "Erzeugen eines Scale-Objektes") sowie das Skalierungsframe entfernt werden, was den Export erleichtern würde (weil immer ein Scale-Objekt erzeugt wird, was den Originalmaßstab angibt).

Eine Zielgröße samt Skalierungsframe wird nur benötigt, wenn dein Exporter auch für andere Programme genutzt werden soll, die einen Maßstab vorgeben (z.B. alter 3D-Eisenbahnplaner). Hier kannst du selber entscheiden, wie universell du deinen Exporter halten möchtest.

Viele Grüße,

Neo

Share this post


Link to post
Share on other sites

Hallo zusammen,

aufgrund von Neo's Beitrag habe ich den Exporter und - vor allem - auch die Dokumentation noch einmal "angefasst". 

Mit der Aussage, dass es einen "Standard"-Maßstab für die an das Modellbahn-Studio zu übergebenden Modelle nicht mehr geben wird, ist die Einstellung "Zielgröße" in meinem DirectX-Exporter theoretisch überflüssig geworden, weil man dann, wenn man als Zielgröße für die X-Datei grundsätzlich die Originalgröße verwendet, gleich diesen Maßstab als _Scale_-Information weitergeben kann.

Da es aber aufgrund der ursprünglichen zwingenden Anforderung "H0-Maßstab" im ehemaligen 3D-Eisenbahnplaner, der auch in den bisherigen Versionen des Modellbahn-Studios als "Standard-Maßstab" beibehalten wurde (jetzt allerdings wegen der möglichen _Scale_-Objekt-Definition nicht mehr zwingend einzuhalten), und in bisherigen "Zwischenlösungen" die neuen "Standard-Maßstäbe" 1:1 und 1:100 angedacht wurden, hatte ich bereits in der Februar-Version meines DirectX-Exporters indirekt (über die MBS-Versions-Auswahl) die Auswahlmögichkeit der Zielgröße in den Exporter-Einstellungen eingeführt. Die aktuelle Zielgröße stellt also "nur" eine Verallgemeinerung der Einstellung "Zielgröße" mit Eliminierung des Versionsbezugs dar.   

Wie Quackster an anderer Stelle mit Recht anmerkte, kann es nicht sein, dass aufgrund einer Änderung der Zielgröße in der X-Datei aufgrund neuer Vorgaben bei der Neugenerierung eines bereits bestehenden Modells vorhandene X-Datei-Erweiterungen (z.B. AnimationSet-Definitionen) neu berechnet (umskaliert) und damit auch neu geschrieben werden müssen. Deshalb lasse ich die individuelle Auswahl-Möglichkeit der Zielgröße in meinem DirectX-Exporter bestehen. Dem Modellbahn-Studio ist es nach Neo's letzter Aussage schließlich egal, in welchem Maßstab ihm das Modell vorgelegt wird, da es in jedem Fall die Information benötigt, in welchem Maßstab das Modell in der X-Datei vorliegt.

Durch die automatische Ergänzung der X-Datei um diese Information mittels des "_Scale_-Objekt-Frames" durch den DirectX-Exporter, wenn die entsprechende Exporter-Einstellung gesetzt ist (_Scale_-Objekt : hinzufuegen), erspart man sich die händische Eingabe des X-Datei-Maßstabs beim Hochladen des Modells in den Online-Katalog und auch das Bereitstellen eines solchen Objekts im Sketchup-Modell. Deshalb lasse ich auch diese Exporter-Einstellung bestehen.

Mit der Ersetzung der als Zielgröße eigentlich "sinnlosen" Einstellung "H0*Zoll" durch "wie Original", was bedeutet, dass als ZIelgröße der Maßstab der Originalgröße übernommen werden soll, kann jeder Anwender des DirectX-Exporters selbst entscheiden, ob er wie in obigem Beitrag von Neo beschrieben als Zielgröße grundsätzlich die Originalgröße des Sketchup-Modells weitergeben oder die Zielgröße individuell auswählen möchte. Entsprechend kann der Anwender auch entscheiden, ob er die Abfrage des Maßstabs durch das Modellbahn-Studio beim Hochladen beantworten oder diese Information bereits vorab in der X-Datei hinterlegen (lassen) möchte. Im DirectX-Exporter einmal eingegebene Einstellungen bleiben für alle danach durchgeführten Export-Vorgänge bestehen, bis sie der Anwender durch einen neuen Aufruf des Einstellungs-Dialogs explizit ändert.

Anbei die aktualisierte Fassung des DirectX-Exporters und der zugehörigen Beschreibung.

DirectX_Exporter.zip

 

Noch ein Erklärungsversuch zur auswählbaren Einstellung "H0*Zoll" bei der Originalgröße:

Sketchup ist ein amerikanisches Programm und gibt an der Ruby-Schnittstelle, die vom DirectX-Exporter "angezapft" wird, die Modellmaße in der Einheit "Zoll" gemessen aus. Das Modellbahn-Studio und auch dessen Vorläufer 3D-Eisenbahnplaner sind deutsche Programme und interpretieren die in der X-Datei hinterlegten Maßangaben als cm-Maße. Hierdurch ergibt sich der Effekt, dass dann, wenn beim Export keine entsprechende Transformation der Modellmaße erfolgt, beispielsweise ein Würfel, der in Sketchup mit einer Kantenlänge von 1 Zoll (= 2,54 cm) erstellt wurde, nach dem Export in der X-Datei dieselben Koordinaten-Angaben aufweist, diese aber im Modellbahn-Studio (oder 3D-Eisenbahnplaner) zur Darstellung des Würfels mit einer Kantenlänge von 1 cm, also zu einer um den Faktor 2,54 verkleinerten Darstellung gegenüber der Originalgröße des Sketchup-Modells führen.

Da der vor der Existenz des eigenen DirectX-Exporters benutzte Exporter von Erwan de Cadoudal (https://sites.google.com/site/edecadoudal/sketchupwithdirectx) nur eine solche 1:1 Übernahme der Sketchup-Koordinaten in die X-Datei unterstützte, mussten daher alle Sketchup-Modelle, die im damaligen 3D-Eisenbahnplaner im Maßstab H0 dargestellt werden sollten, in Sketchup in dem um das 2,54-fache vergrößerten Maßstab "H0*Zoll" konstruiert werden. Da diese Modelle bei marginalen Änderungen auch heute noch für das Modellbahn-Studio exportiert werden können sollen, ohne sie hierfür umskalieren zu müssen, habe ich in den Einstellungen des DirectX-Exporters auch diesen Maßstab als Originalgröße berücksichtigt.

Viele Grüße
BahnLand

Edited by BahnLand

Share this post


Link to post
Share on other sites

Hallo BahnLand,

habe dein Exporter bei SketchUp 8 ausprobiert und was soll ich sagen, (y). Jetzt wo es den Exporter auch für spätere Versionen gibt, bin ich dabei SketchUp Make 2016 zu Testen. Nun habe ich festgestellt das die Lizenz nach 30 Tagen abläuft. Weist du was danach passiert? Ist das Programm danach gesperrt?

Gruß fex

Share this post


Link to post
Share on other sites

Hallo fex,

Danke für das Däumchen und auch allen anderen für die "Gefällt-mir"-Klicks! :)

Was da nach 30 Tagen abläuft, ist die Lizenz für die Vollversion "Sketchup 2016". Denn wenn Du Sketchup Make installierst, bekommst Du automatisch für diese 30 Tage die Vollversion bereitgestellt. Wenn die 30 Tage um sind, wird dann automatisch auf Sketchup Make 2016 (die Light Version von Sketchup 2016) zurückgeschaltet. Sketchup Make hat keine zeitliche Beschränkung und kann daher von Dir bis zum  "Sankt-Nimmerleins-Tag" benutzt werden.

Wenn Du nicht gerade obj-Dateien exportieren oder importieren möchtest, reicht Sketchup Make (d,h, die Light Version) nach meiner bisherigen ERkenntnis vollkommen aus. Ich verwende auch nur Sketchup Make und habe zumindest bisher noch nicht bemerkt, dass mir irgend eine dringend benötigte Funktionalität fehlen würde. Übrigens gibt es jetzt auch schon Sketchup 2017 und Sketchup Make 2017. Mit diesen Versionen kannst Du den neuen DirectX-Exporter ebenfalls einsetzen.

Viele Grüße
BahnLand

Share this post


Link to post
Share on other sites

Hallo BahnLand,

den neuen Exporter habe ich jetzt endlich auch ausprobiert. Funktioniert 1a. Allerdings musste ich, entgegen deiner Anleitung, die Dateien in das Sketchup-Unterverzeichnis "Tools" kopieren. Damit wurde der Exporter einwandfrei erkannt.

HG

Brummi

Share this post


Link to post
Share on other sites

Hallo Brummi,

jetzt bin ich aber total verwirrt:

Ich habe neben Sketchup V8 die beiden neuen Versionen Sketchup 2016 und Sketchup 2017 installiert. Daher gibt es bei mir im AppData-Bereich auch die beiden Verzeichnisse

C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2016\SketchUp\Plugins      und
C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2017\SketchUp\Plugins.

In beiden Verzeichnissen habe ich den DirectX-Exporter angelegt und kann daher den Exporter sowohl in Sketchup 2016 als auch in Sketchup 2017 aufrufen. Die beiden Verzeichnisse

C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2016\SketchUp\Tools      und
C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2016\SketchUp\Tools

gibt es bei mir dagegen nicht. Wenn ich dieses neu anlege und das Exporter-Script (die rb-Datei) dorthin verschiebe, ist beim erneuten Start von Stektchup der Menüpunkt "Erweiterungen" verschwunden. erst wenn ich die rb-Datei in das Plugins-Verzeichnis zurückschiebe, ist der Menüpunkt beim erneuten Statt von Sketchup wieder da, und ich kann den Exporter aufrufen.

Ich habe nun auch das Prorammverzeichis von Sketchup 2016/2017 angeschaut und dort tatsächlich jeweils das Unterverzeichnis Tools gefunden:

C:\Program Files\SketchUp\SketchUp 2016\Tools     und
C:\Program Files\SketchUp\SketchUp 2017\Tools.

Dort sind auch eine Menge von Sketchup-Rupy-Scripts und die "StandardlLib" von Ruby abgelegt. Also habe ich versucht, auch den DirctX-Exporter dort mit hinein zu packen (geht allerdings nur mit Administrator-Berechtigung, da es sich bei dem Programme-Verzeichnisbaum um einen System-Verzeichnisbaum handelt). Wenn ich danach wieder die entsprechende Sketchp-Version starte, ist auch hier der DirectX-Exporter im Hauptmebü von Sketchup nicht sichtbar. Bei mir funktioniert also tatsächlich nur die Variante

C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2016\SketchUp\Plugins      und
C:\Users\<username>\AppData\Roaming\SketchUp\SketchUp 2017\SketchUp\Plugins.

Was ist an Deinem System anders als bei meinem?

Ich habe Windoes 10 Home (64 Bit, Version 1607) im Einsatz.

Viele Grüße
BahnLand

 

Share this post


Link to post
Share on other sites

Hallo BahnLand,

ich hatte das auch nur so probiert, weil ich den Ordner "appdata" nicht sofort gefunden hatte. Jetzt habe ich festgestellt, dass sich die Datei "DirectX_Exporter.ini" von selbst dort auf deinem angegebenen Pfad hingeschrieben hat. Ich wars nicht! Ich schwöre! Aber so funktioniert es irgendwie. Ich kann auch die Einstellungen ändern und die Hilfedatei aufrufen.

Habe ebenfalls Windows 10 Home 64 Bit.

Viele Grüße

Brummi

Share this post


Link to post
Share on other sites

Hallo Brummi,

auf jeden Fall ist es gut, dass Du Deine Variante hier veröffentlicht hast. Es könnte ja sein dass es auch bei anderen nicht so funktioniert wie ich es beschrieben habe. Welches Kriterium letztendlich dafür verantwortlich ist, welche Variante nun bei wem "die richtige" ist, werden wir wohl nie herausfinden.

Jedenfalls vielen Dank für Deine Information.

Viele Grüße
BahnLand

Edited by BahnLand

Share this post


Link to post
Share on other sites

hallo, bei mir funktioniert auch die von bahnland beschriebene variante.

Gruß fex

Share this post


Link to post
Share on other sites

Hallo (Sketchup-)Modellbauer,

heute gibt es noch einmal eine neue Version des DirectX-Exporters. Ich habe ihn ziemlich umgekrempelt. Dafür kann er aber jetzt auch deutlich mehr als vorher. Als wichtigste Neuerungen können nun ineinander geschachtelte Gruppen verarbeitet und für beliebige Bauteile "Ankerpunkte" gesetzt werden.

Geschachtelte Gruppen und Frames
Im Sketchup-Modell verschachtelte Gruppen werden nun nicht mehr aufgelöst und zu einem großen Mesh vereinigt, sondern jede Gruppe wird in einen eigenen Frame umgewandelt. Verschachtelte Gruppe führen also zu verschachtelten Frames, die jeweils neben einem eigenen Mesh wieder weitere Unterframes enthalten können. So können nun beispielsweise "RadAnim..."-Gruppen für sich drehende Räder in Sketchup direkt in Rad0/Rad1-Gruppen für Drehgeselle eingebettet und anschließend vom DirectX-Exporter automatisch korrekt aufbereitet werden, ohne dass es hierfür noch eines nachträglichen händischen Eingriffs in die X-Datei bedarf. Wird  also aus einem in Sketchup konstruierten Drehgestell-Wagen mit Speichenrädern mittels des DirectX-Exporters eine X-Datei  erzeigt, kann diese direkt ohne weitere Nacharbeiten in das Modellbahn-Studio hochgeladen werden.

Ankerpunkte
Der "Ankerpunkt" ist eine "Verallgemeinerung" des in der letzten Exporter-Version neu eingeführten "_Gizmo"-Objekts. Enthält ein Bauteil eines Sketchup-Modells, dessen "Einzelteile" zu einer "Gruppe" oder "Komponente" zusammengefasst wurden, eine "Untergruppe" mit der Bezeichnung "_AP..." (wobei die Punkte für eine beliebige Zeichenkette innerhalb der für DirectX erlaubten Zeichenmenge stehen), wird diese Gruppe vom DirectX-Exporter als "Ankerpunkt"-Definition der umschließenden Bauteil-Gruppe interpretiert. Der aus den "Randkoordinaten" der "_AP"-Gruppe berechnete Mittelpunkt wird als "Ankerpunkt" für die übergeordnete Sketchup-Gruppe oder Sketchup-Komponente herangezogen.

Soll nun beispielsweise in einem Sketchup-Modell via Animation ein Bauteil gedreht oder skaliert werden, wird der mittels der "_AP"-Gruppe definierte Koordinatenpunkt als Dreh- oder Fixpunkt für die Rotations- oder Skalierungs-Animation herangezogen. Hierzu ein kleines Beispiel:

DemoSignal_1.thumb.jpg.d9586faac57eb6b7cde7f622a1fd3f7e.jpg

Das obige Bild zeigt ein Sketchup-Modell, das ein primitives Flügelsignal darstellen soll. Es besteht aus einem "Signalmast" (grau), einem "Flügel" (rot) und einem "Hänger" (blau), der eigentlich mit dem "Signal" nichts zu tun hat, aber für die Demonstration von gekoppelten Drehungen benötigt wird. Zusätzlich sind in dem Modell 3 "Ankerpunkte" ("_AP"-Gruppen, gelbe Quadrate) postiert, die jeweils verschiedenen Sketchup-Gruppen zugeordnet sind.

Im Teilbild links ist unter dem Signalmast die Gruppe  "_AP1" zu erkennen. Sie ist der Ankerpunkt für das Gesamtmodell und wurde daher in der "obersten Sketchup-Gruppen-Ebene"  angesiedelt. Mit diesem Ankerpunkt wird festgelegt, wo im Modell im 3D-Modellbahn Studio das Koordinatenkreuz angezeigt werden soll. Man hätte daher diesen Ankerpunkt auch als "_Gizmo" bezeichnen können (wird aus Kompatibilitätsgründen weiterhin unterstützt).

Der rote Flügel und der blaue Hänger sollen beim Öffnen des "Signals" nach oben geschwenkt werden. Sie werden daher zu einer Sketchup-Gruppe "Fluegelgruppe" zusammengefasst, die auch den Ankerpunkt "_AP2" als Drehpunkt für den Signalflügel enthält (siehe mittleres Teilbild, gelbes Quadrat links im Flügel)).

Der blaue Hänger soll bei Öffnen des Signals seine senkrechte Ausrichtung beibehalten. Deshalb wird er in die Sketchup-Gruppe "Haengergruppe" eingebettet, in welcher auch der dritte Ankerpunkt "_AP2" enthalten ist (rechtes Teilbild, gelbes Quadrat im blauen Hänger).

Nachdem aus dem Sketchup-Modell mithilfe des Exporters die X-Datei erzeugt wurde, wird diese durch eine AnimationSet-Definition ergänzt, in der für die "Haengergruppe" eine zur "Fluegelgruppe" entgegengesetzte Drehung definiert wird. Da die Drehung für die "Haengergruppe" mit jener für die "Fluegelgruppe" gekoppelt ist, bleibt die aufrechte Position des Hängers beim Öffnen des Flügels erhalten (siehe das nächste Bild). Beim linken Signal wird die Position des Gizmos angezeigt, die der Position des Ankerpunkts "_AP0" im Sketchup-Modell aus dem oberen Bild entspricht.

DemoSignal_2.thumb.jpg.5fd58b14e3f04dbe6f0ff1f94bcdbd18.jpg

Ohne die im Sketchup-Modell hinzugefügten Ankerpunkte würde der DirectX-Exporter bei jedem gruppierten Bauteil dessen geometrischen Mittelpunkt als Bauteil-bezogenen "Koordinatenursprung" verwenden. Dieser würde dann bei einer Animation (Rotation oder Skalierung) als "Fixpunkt" verwendet.  Mithilfe der Ankerpunkt-Definition im Sketchup-Modell wird dieser Punkt an die korrekte Stelle innerhalb der zu animierenden Baugruppe verschoben.

Da die Drehpunkte für die zu schwenkenden Bauteile des Signals durch die Ankerpunkte an der richtigen Stelle positioniert sind, genügt es in der AnimationSet-Definition, nur die Rotationen zu definieren (eine mit der Rotation des Bauteils koordinierte Verschiebung (Translation) ist nicht mehr notwendig). Die Definition sieht daher für das hier beschriebene Signalbeispiel wie folgt aus:  

AnimationSet.thumb.jpg.ef11832bf0a96dee837c5fc34f1ee3e1.jpg

Mithilfe dieser in beliebigen Sketchup-Gruppen positionierbaren Ankerpunkte sollte es beispielsweise auch ohne große Positionsberechnungen in der AnimationSet-Definition möglich sein, mittels der "_AnimWheel"-Animation das Gestänge einer Elektro- oder Diesellok mit Stangenantrieb zu animieren (die Animation der Heusinger-Steuerung bei Dampfloks ist dann doch etwas komplizierter).

Weitere Kontaktpunkt-Varianten
Bisher wurden durch den DirectX-Exporter nur Kontaktpunkte ("_CP...") unterstützt, deren Ausrichtung in der Bezeichnung der als Kontaktpunkt ausgewiesenen Sketchup-Gruppe hinterlegt wurde (Beispiel: Die Bezeichnung "_CP-22.5" kennzeichnet eine horizontale Auslenkung der Kontaktpunkt-Ausrichtung gegenüber der x-Achse des Modells um -22.5°).  Eine Auslenkung der Kontaktpunkt-Ausrichtung nach oben oder unten war nicht möglich.

Es gibt nun zwei weitere Definitions-Varianten, die vom DirectX-Exporter entsprechend automatisch ausgewertet und umgesetzt werden: "_CPD..." und "_CP_...", wobei die Punktreihe nun eine beliebige Zeichenkette aus in DirectX erlaubten Zeichen repräsentiert. In beiden Varianten ist eine Winkel-Angabe in der Bezeichnung der "_CP"-Gruppe nicht mehr notwendig.

Drehbarer Kontaktpunkt "_CPD…"
Hier soll das mit dem Kontaktpunkt versehene Modell nach dem Andocken an ein anderes Modell in alle Richtungen frei schwenkbar sein, ohne dass die Andock-Funktionalität hierdurch verloren geht. Aus diesem Grund wird hier auch keine Winkel-Definition mehr benötigt.

Kontaktpunkt mit automatisch feststellbarer Winkel-Ausrichtung "_CP_..."
Hier stellt der DirectX-Exporter die Ausrichtung des Kontaktpunkts gegenüber der x-Achse des Sketchup-Modells selbst fest, indem die im Sketchup-Modell nach dem Erzeugen des Kontaktpunkts als "_CP_"-Gruppe dessen Drehung in die endgültige Kontaktpunkt-Position auswertet. Hierbei ist jedoch beim Bereitstellen solcher Kontaktpunkte folgendes zu beachten:

Wenn im Sketchup-Modell aus Einzelelementen eine Gruppe erzeugt wird, ist diese immer parallel zur x-Achse des Modells ausgerichtet. Dies gilt insbesondere für neu erzeugte Kontaktpunkte mit der Bezeichnung "_CP_...". Im nachfolgenden Bild sind die Kontaktpunkte als Oktaeder-förmige Sketchup-Gruppen dargestellt, deren geometrischer Mittelpunkt (Kreuzungspunkt der Objekt-Achsen) jeweils die Koordinate des Kontaktpunkts repräsentiert. Der auf der roten x-Achse des Sketchup-Modells platzierte Kontaktpunkt ist derjenige, der an dieser Stelle konstruiert und zur "_CP_"-Gruppe zusammengefasst wurde. Er ist daher parallel zur x-Achse ausgerichtet.

Kontaktpunkte.thumb.jpg.9d98090fd4fca8b84a2522f63806da4b.jpg

Wird nun dieser "Kontaktpunkt" (oder eine Kopie von ihm) an einer anderen Stelle positioniert und dabei verdreht (siehe im Bild das Kontaktpunkt-Objekt auf der schrägen Fläche vor der Pfeilspitze), kann der DirectX-Exporter die Rotationskoordinaten dieses Objekts auslesen und für die Weitergabe von dessen Ausrichtung in der X-Datei weiterverwenden. Wird nun aber die Sketchup-Gruppe dieses Kontaktpunkts aufgelöst und zu einem späteren Zeitpunkt wieder zusammengefügt, sind die vor der Auflösung vorhandenen Rotationskoordinaten verloren. Die neu gebildete Gruppe zeigt wieder die Ausrichtung parallel zur x-Achse an. Deshalb darf ein Kontaktpunkt, dessen Rotationskoordinaten vom DirectX-Exporter selbst bestimmt werden sollen, nicht nachträglich aufgelöst und wieder zusammengefasst werden.

Abgesehen von der Möglichkeit, die Kontaktpunkte der Form "_CP_..." auch vertikal schräg zu stellen, ist aus der Sicht des 3D-Modellbahn Studios die Funktionalität mit jener der "klassischen" "_CP<winkel>"-Kontaktpunkte identisch. Die unterschiedliche Interpretation und Aufbereitung der Kontaktpunkte mit den Bezeichnungen "_CP<winkel>", "_CPD<text>" und "_CP_<text>" findet ausschließlich im DirectX-Exporter statt.  Für das 3D-Modellbahn Studio sind dies alles gleichermaßen zu verarbeitende "_CP"-Objekte, deren Ausrichtungs-Informationen in den vom DirectX-Exporter in der X-Datei hinterlegten Rotationskoordinaten enthalten sind.

Anhänge
Das beiliegende ZIP-Paket  DirectX-Exporter V3.zip  enthält wieder das Exporter-Script (Endung .rb), die Initialisierungs-Datei (.ini) und die Exporter-Beschreibung (.pdf). In der Beschreibung zur letzten Exporter-Version hatte ich fälschlicherweise das #-Zeichen als zulässiges Zeichen für die Objekt-Bezeichnungen in Sketchup aufgezählt. Dieses Zeichen darf nicht verwendet werden. Denn es kennzeichnet in X-Dateien den Beginn eines Kommentars, der bis zum Zeilenende reicht. Tritt nun in der X-Datei eine Objekt-Bezeichnung auf, die ein #-Zeichen enthält, wird alles dahinter als Kommentar interpretiert. Die Daten in der X-Datei sind deshalb nicht mehr konsistent, und die Datei kann vom 3D-Modellbahn Studio nicht mehr eingelesen werden.

[Beispiel.zip]

Im zweiten ZIP-Paket  Demo-Signal.zip  habe ich das oben gezeigte Beispiel des "Demo-Signals" hinterlegt. Es enthält die Sketchup-Source (.skp), die vom Exporter erzeugte X-Datei (.x) mit der darin enthaltenen AnimationSet-Definition und das fertige MBS-Modell als mbe-Datei. Damit könnt Ihr dann etwas "herumspielen".

Schlussbemerkung
Ich könnte mir vorstellen, dass man in den Exporter auch noch das automatische Erzeugen der AnimationSet-Definition einbauen könnte. Das ist jedoch eine weitere neue Baustelle, an die ich mich bisher noch nicht heran gewagt habe. Insbesondere ist mir noch nicht klar, wie man hier die einzelnen Animationstypen unter einen Hut bringen (AnimSignal ist sich ganz anders zu behandeln als z.B. AnimWheel) und vor allem über in Sketchup verfügbaren Mittel steuern kann (müsste wohl auch über die Gruppen-Bezeichnung gelöst werden). Ich denke aber, dass mit der jetzt vorhandenen Funktionalität des DirectX-Exporters schon einige Erleichterungen gegenüber der bisherigen Funktionalität geschaffen sind.

Ich wünsche jedenfalls viel Spaß und Erfolg beim Ausprobieren und bin auf Eure Erfahrungen sehr gespannt

Viele Grüße
BahnLand

 

Share this post


Link to post
Share on other sites

hallo BahnLand,

vielen dank für deinen neuen exporter.
auch wenn ich noch nicht alle neuerungen ausprobiert habe,
danke ich dir für die ganze arbeit und mühe die sicherlich beim erstellen hattest

vg quackster

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×