### Kommandozeilenorientierte Verarbeitung (nicht Kommandozeilenoptionen)

Dieses Dokument beschreibt nicht die allgemeinen Kommandozeilenoptionen von white_dune, sondern nur die Möglichkeiten wie man white_dune ohne die interaktive Eingabe (über Maus, Tastatur und andere Eingabegeräte) in der UNIX- bzw. M$Windows-Kommandozeile benutzen kann. Zur Zeit beschäftigen sich alle diese Möglichkeiten im weiteren Sinne mit der Konvertierung von Dateien.

- -vrml97
- -vrml97levelx3dv
- -illegal2vrml
- -ac3d
- -catt8geo

## -vrml97

White_dune unterstützt Erweiterungen des VRML97 ISO/IEC 14772-1:2002 (VRML97 Amendment 1) Standards, z.B. NurbsSurface oder NurbsCurve.
Diese Knotentypen werden nicht von allen VRML Viewern unterstützt, können aber zu Knoten des älteren VRML97 ISO/IEC 14772-1:1997 Standards wie IndexedFaceSet oder IndexedLineSet konvertiert werden.
Diese Konviertierung kann mit der -vrml97 Option vorgenommen werden. Dabei wird eine Datei eingelesen und auf die Standardausgabe geschrieben.
Eine Kommandozeile in der Form
`dune -vrml97 eingabedatei > ausgabedatei.wrl`
konvertiert eine Eingabedatei (entweder eine VRML97 oder eine X3DV Datei) zu VRML97 ISO/IEC 14772-1:1997 und schreibt sie in die Datei ausgabedatei.wrl.
Diese Option konvertiert auch die PROTO-Knotentypen SuperEllipsoid, SuperShape und SuperExtrusion, die normalerweise mit Hilfe des VRML Scriptknotens berechnet und dargestellt werden, in IndexedFaceSet Knoten.

## -vrml97levelx3dv

Diese Option funktioniert genauso wie die -vrml97 Option, sie schreibt aber eine X3DV Datei (X3D classic VRML encoding ISO/IEC ISO/IEC 19776-2:2005). Dabei werden die gleichen Konvertierungen wie bei der -vrml97 Option (Umwandlung von NurbsPatchSurface, NurbsCurve, usw. SuperEllipsoid, SuperShape, SuperExtrusion).
Eine Kommandozeile in der Form
`dune -vrml97vrml97levelx3dv eingabedatei > ausgabedatei.x3dv`
konvertiert eine Eingabedatei (entweder eine VRML97 oder eine X3DV Datei) zu ISO/IEC ISO/IEC 19776-2:2005 und schreibt sie in die Datei ausgabedatei.x3dv.

## -illegal2vrml

Diese Option konvertiert eine VRML97 Datei mit illegalen Erweiterungen in eine legale VRML97 Datei.
Im Annex F des VRML97 Standards ist beschrieben, wie ein Hersteller eines VRML Viewers legale Erweiterungen einbauen kann, ohne dass andere VRML Viewer die Datei als illegal ablehnen müssen.
Trotzdem gibt es Hersteller von VRML Viewern, die illegale Erweiterungen einbauen. Illegale Erweiterungen, die neue Nichtstandard-Felder in bisher standardisierte VRML-Knotentypen einbauen, lassen sich reparieren.
Eine Kommandozeile in der Form
`dune -illegal2vrml -prefix prefix protofile.wrl illegal.wrl > legal.wrl`
liest eine Datei protofile.wrl ein, die EXTERNPROTOs nach dem Vorbild des Annex F des VRML97 Standards enthalten. Die Namen der EXTERNPROTOs sollten mit der gleichen Zeichenkette (im Beispiel prefix) anfangen.
Im nächsten Schritt wird die Datei illegal.wrl eingelesen und alle Knotennamen, die identisch mit den Namen der EXTERNPROTOs ohne die Zeichenkette sind, durch die Namen der EXTERNPROTOs mit der Zeichenkette ersetzt. Das Ergebnis wird auf die Standardausgabe geschrieben und landet im Beispiel in der Datei legal.wrl.
Ein Beispiel: Eine VRML97 Datei enthält eine illegal Erweiterung des VRML97 WorldInfo Knotens (dabei beschreibt die Zeile `$ cat datei` einen Befehl zum eine Datei auszugeben).

           $ cat $HOME/worldinfo.wrl
    	      #VRML V2.0 utf8

    	      WorldInfo
    	      {
    		copyright "(C) illegal extension Inc."
    		info	  "a existing VRML97 node with a illegal extension"
    	      }

Dabei ist das Feld copyright eine illegale Erweiterung und kann VRML Viewer abstürtzen lassen.
Eine passende EXTERNPROTO Datei ist:

           $ cat $HOME/protofile.wrl
    	      #VRML V2.0 utf8

    	      EXTERNPROTO PrefixWorldInfo
    	      [
    	         field SFString copyright
    	         field MFString info
    	         field SFString title
    	      ]
    	      [
                   "urn:inet:browser.com:library:PrefixWorldInfo"
                   "PrefixWorldInfo.wrl"
                  ]

und der Aufruf zur Umwandlung in eine legale VRML97 Datei lautet:

           $ illegal2vrml -prefix Prefix  $HOME/protofile.wrl $HOME/worldinfo.wrl
    	      #VRML V2.0 utf8

    	      EXTERNPROTO PrefixWorldInfo
    	      [
    	         field SFString copyright
    	         field MFString info
    	         field SFString title
    	      ]
    	      [
                   "urn:inet:browser.com:library:PrefixWorldInfo"
                   "PrefixWorldInfo.wrl"
                  ]

    	      PrefixWorldInfo
    		{
    		copyright "(C) illegal extension Inc."
    		info
    		  [
    		  "a existing VRML97 node with a illegal extension"
    		  ]
    		}

Die Datei PrefixWorldInfo.wrl kann dann ein PROTO enthalten, das den legalen VRML Knoten nachbildet:

           $ cat PrefixWorldInfo.wrl
    	      #VRML V2.0 utf8

    	      PROTO PrefixWorldInfo
    	      [
    	         field SFString copyright ""
    	         field MFString info ""
    	         field SFString title ""
    	      ]
    	      {
                     WorldInfo
                     {
                        info IS info
                        title IS title
                     }
                  }

## -ac3d

Diese Option öffnet ein Graphikfenster, konvertiert die Datei ins AC3D file format (Version AC3Db) und schreibt das Ergebnis auf die Standartausgabe.
Das AC3D file format ist das Eingabe/Ausgabe Datei-Format des 3D modellers ac3d. Der ac3d 3d modeller unterstützt einige Features von VRML/X3D nicht (zum Beispiel keine Animation/Interaktion, der VRML-Knoten PointSet oder das Feld IndexedFaceSet.colorPerVertex). Deshalb kann das AC3D file Format im allgemeinen die Informationen, die in einer VRML97/X3D Datei sind, im allgemeinen nicht speichern.

## -catt8geo

Diese Option öffnet ein Graphikfenster, konvertiert die Datei ins Catt geo format (Version 8), und schreibt das Ergebnis in verschiedene Dateien des in der Kommandozeile angegebenen Verzeichnisses. Eine Kommandozeile in der Form
`dune -catt8geo verzeichnis eingabe.wrl`
schreibt die Ergebnisdatei Master.geo (die INCLUDE Befehle der anderen .geo Ausgabe-Dateien enthält) ins Verzeichnis verzeichnis, das die Datei material.geo enthalten muss.
Die Datei material.geo wird genauso per INCLUDE-Befehl von Master.geo benutzt und enthält die Zuordnung von Soundeigenschaften und den Namen der Objekte in der VRML97 Datei ("DEF Namen"). Hat ein Objekt in der VRML97 Datei keinen Namen, wird im Szenenbaum (ausgehend vom Material Knoten des Objekts) nach einem Namen gesucht. Gibt es bis zur Wurzel des Szenenbaums keinen Namen, wird der Name "TOTREF" angenommen, der in CATT 8 für Totalreflektion fest eingebaut ist.
Eine minimale material.geo Datei k&oum;nnte so aussehen:

       ; material.GEO

       ABS unknown  = < 10 10 10 10 10 10 > L < 10 10 10 10 10 10> {128 128 128}

       CORNERS
       ; section is empty

       PLANES
       ; section is empty

Da CATT Dateien nur aus einem einzigen Verzeichnis lesen kann, müssen seine Dateien src.loc und res.loc ebenfalls im Verzeichnis verzeichnis liegen.
VRML97 kann von vielen Programmen direkt erzeugt werden (3D Studio Max, Cinema 4D, Rhino 3D, Blender, Catia, Wings3D, Catt8 usw.), die Sitten und Gebräuche beim Exportieren der DEF Namen unterscheiden sich dabei beträchtlich.
Deshalb kann mit dem Menüpunkt
Options -> Output Settings -> Material name generation on non VRML/X3D export
gewält werden, ob man den ganzen Namen oder den ersten bzw. letzten mit "_" abgetrennten Teil des Namens verwenden soll.
Man kann auch DEF Namen für Objektbäume mit dem Menüpunkt
Actions -> Rest of Scenegraph Branch -> remove -> DEF Name
löschen, allerdings nur wenn der Name nicht für eine Route-Informations-Verbindung gebraucht wird (z.B. bei Animation oder Interaktion).
CATT Version 8 unterstützt wohl nur einseitige Objekte. Um Einseitigkeit eines Teilbaums des VRML-Modells zu erzwingen, kann man man die Sequenz
Actions -> Rest of Scenegraph Branch -> set -> solid
true
benutzen. In VRML97 kann man beim Knoten für Meshes (IndexedFaceSet) die Einseitigkeit über das Feld "solid" an- bzw. ausschalten. Zwischen Innen- und Aussenseite schaltet man mit dem Feld "ccw" um. Manche Objekte wie Primitive (Kugel, Kegel, Zylinder usw.) muss man erst mit dem Menüpunkt
Convert -> Convert to IndexedFaceSet
umwandeln, um z.B. ccw benutzen zu können.