<chapter>
    <title>XVL - eXtensible Virtual world description Language</title>
    <para>
        Eine weitere Erweiterung zu VRML97 ist XVL und wird von der 1997 als Joint-Venture
        zwischen der Toyota Group und Matsua gegründeten Firma Lattice3D
        entwickelt. Das Verhältnis zwischen Lattice3D und Dessault wird nicht ganz klar,
        aber die Tatsache dass diese beiden Firmen gemeinsame Presse-Erklärungen abgeben
        lässt zumindest auf eine enge Zusammenarbeit schließen. XVL wurde unter etwas anderen
        Voraussetzungen entwickelt als X3D: Ziel war es dreidimensionale Konstruktionsdaten aus
        CAD-Anwendungen durch komplette Geschäfts-Prozesse hindurch zu nutzen, von der Konstruktion eines
        Produktes über die Fertigung bis hinein in den Verkauf. Hierzu ist es notwendig dass die Daten frei
        zwischen verschiedensten Applikationen ausgetauscht werden können, woraus schnell ersichtlich
        wird dass die Datenmengen die VRML bei genügender Genauigkeit produzieren würde zu groß wären.
        Lattice entwickelte nun eine Umgebung die diese Probleme lösen soll.
    </para>
    <section>
        <title>Lattice Structure</title>
        <para>
            Der Lösung Ansatz den Lattice anstrebt ist nun der dass man Oberflächen nicht mehr durch Polygon-Netze
            anzunähern, sondern diese in eine Struktur umzuwandeln die Lattice "Lattice Structure" nennt. Diese besteht
            aus der Lattice Surface - einer Freiformoberfläche die durch sogenannte Gregory-Patches repräsentiert wird
            und dem Lattice Mesh welches die Kontrollpunkte der Gregory-Patches enthält.
        </para>
        <para>
            Gregory-Patches sind eine besondere Art der parametrisierten Freiformoberflächen. Sie zeichnen sich durch eine
            sehr gute Oberflächen-Kontinuität aus, wodurch eine beliebige Oberfläche bei einer relativ hohen Genauigkeit
            durch sehr wenige Kontrollpunkte angenähert werden kann. Da Gregory-Patches verlustfrei aus NURBS erstellt und
            auch wieder in NURBS transformiert werden können können bekannte Algorithmen zur Darstellung genutzt werden.
            Siehe hierzu auch [4], Seiten 289-298 und [5].
        </para>
        <para>
            Das Lattice Mesh ist ein Polygon-Netz welches aus den Kontrollpunkten für die Gregory-Patches sowie Attributen
            zur Wiederherstellung der eigentlichen Flächen besteht und die Selbe Topologie wie die darzustellende Lattice Surface hat.
            Dies sind unter anderem Angaben über den Grad der Rundung und das Ende derer. 
        </para>
        <para>
            <mediaobject>
                <imageobject>
                    <imagedata fileref="./images/lattice.eps" format="eps">
                </imageobject>
                <caption>
                    <para>Abb. 1 - Objekt als Kontrollstruktur und Freiformoberfläche</para>
                </caption>
            </mediaobject>
        </para>
    </section>
    <section>
        <title>Dateistruktur</title>
        <para>
            Da das neue Format Internet-fähig sein sollte entschied man sich dafür eine Erweiterung zu VRML97 zu entwickeln.
            Da das Lattice Mesh nur aus Vertices und der Attribut-Struktur besteht kann man zur Speicherung dieser bereits vorhandene
            Strukturen des VRML-Formates nutzen. So wird das Lattice Mesh einfach als Polygon-Netz in bekannter VRML-Struktur gespeichert.
        </para>
        <para>
            Die weiteren Informationen die nötig sind die ursprüngliche Fläche wiederherzustellen werden in einem VRML-Choice
            Knoten gespeichert welcher nur dargestellt wird wenn der darstellende Browser die XVL-Erweiterung beherrscht.
            Diese Methode hat zur Folge dass XVL-Dateien auch in normalen VRML-Browsern dargestellt werden können, wobei allerdings
            nur die Kontrollstruktur, nicht die eigentliche Oberfläche gerendert wird.
        </para>
        <para>
            Weitere Änderungen am bestehenden VRML-Format werden nicht nötig, da XVL hauptsächlich auf den CAD/CAM-Bereich
            abzielt und dort die Genauigkeit der Repräsentation deutlich wichtiger ist als realistisches Aussehen der Modelle.
        </para>
        <para>
            Ein denkbares Code-Beispiel, aus [1]:
            
            <programlisting role="VRML"><![CDATA[
#VRML V2.0 utf8

PROTO XVL_EDGE [
    field SFFloat round_val 0
    field SFVec3f round_str 0 0 0
    field SFVec3f round_end 0 0 0
    field MFInt32 is_round [1, 1, 1]
]
{
    Text{
        string["weight of edge rounding"]
    }
}
PROTO XVL_STATUS[
    field SFString status "XVL_LATTICE"
]
{
    Text{
        string["status of shape"]
    }
}
Group{
    children[
        ## Shape information of Lattice
        Group{
            children[
                Shape{
                    geometry IndexedFaceSet{
                    ############################
                    ## coordinate information ##
                    ## of Lattice Mesh ##
                    ############################
                    }
                }
            ]
        },
        ## Property information of Lattice
        Switch{
            choice[
                XVL_STATUS{
                    status "XVL_GREGORY"
                }
                XVL_EDGE{
                    round_val 0.5
                    round_str 0 1 1
                    round_end 0.2 0.3 1
                    is_round [1 1 1]
                }
                IndexedLineSet{
                    coordIndex[ 24 103 ]
                }
            ]
            whichChoice -1
        }
    ]
}

            ]]></programlisting>
        </para>
        <para>
            Der geneigte Leser wird nun feststellen dass dieses Code-Beispiel in keinster Weise irgendeiner
            XML-Spezifikation entspricht. Das liegt daran dass Lattice XVL zwar als "offenes XML-basiertes Format"
            anpreist, aber mit Beispiel-Dateien oder gar einer Offenlegung der Spezifikation aber sehr zurückhaltend -
            obiges Code-Beispiel ist das einzige das der Autor finden konnte, sonst waren nur Dateien zu finden die
            in der Binär-Version des Formates gespeichert wurden. Da sich solche Dateien nicht ohne weiteres 
            öffnen lassen und Lattice auch hierzu keinerlei Information preisgibt war der Autor nicht in der Lage
            zu ergründen ob sich darin vielleicht XML verbirgt, aber selbst das würde ja sämtliche Vorteile
            von XML zunichte machen. Der Autor vermutet dass diese Zurückhaltung daher rührt, dass Lattice mit XVL
            eben nicht nur ein Format sondern ein komplettes Framework anbietet welches auch verkauft werden will.
        </para>
    </section>
    <section>
        <title>Produkte</title>
        <para>
            Wie kommt man also zu Dateien in diesem Format? Im CAD/CAM-Bereich wird schon jetzt sehr viel mehr
            als im Echtzeit-Bereich mit Freiformoberflächen gearbeitet, und da wie schon erörtert Gregory-Patches
            sehr einfach aus NURBS erstellt werden können gestaltet sich die Konvertierung solcher bestehender
            Daten als eher einfach. Komplizierter ist das Erstellen solcher Patches aus Polygon-Netzen. Zwar währe es sehr
            einfach das Polygon-Netz einfach als Kontrollstruktur zu verwenden, aber dabei ginge ja die zu speichernde
            Struktur verloren. Auch könnte man jedes Polygon relativ einfach mit einem einzelnen Patch beschreiben,
            aber hierbei würden wieder zu viele Daten entstehen.
            Um dieses Erstellungsproblem zu lösen bietet Lattice eine Reihe von Produkten und Services an:
        </para>
        <para>
            Der XVL-Kernel ist Mittelpunkt jeder XVL-Applikation und ist als "Devolopment Toolkit" als Laufzeit-Bibliothek
            ausgeliefert. Er beherrscht das Laden und Speichern des XVL-Datei-Formates sowie die Konvertierung verschiedener
            Ausgangsstrukturen in die Lattice Structure.
        </para>
        <para>
            Der XVL-Designer ist eine Freeware-Software die das Erstellen und Editieren einfacher Modelle unterstützt, 
            allerdings nur mit sehr eingeschränkten Möglichkeiten. Das XVL-Studio hingegen ist eine komplette
            Modellingsoftware die zusätzlich den XVL-Composer - eine Betrachtungssoftware für CAD-Datenformate - und
            den XVL-Director - eine Animationssoftware für XVL-Modelle - integriert. Außerdem enthält es den
            XVL-Webmaster der aus XVL-Dateien Bauteil-Listen und -Bäume und 2D-Illustrationen erzeugt und diese in einer
            Web-Seite zusammenfasst.
        </para>
        <para>
            Es existieren einige Browser-Plugins um diese XVL-fähig zu machen: den XVL-Viewer für Macintosh und den
            XVL-Player für Internet Explorer und den Netscape Navigator auf Windows-Plattformen. Von letzterem existiert
            auch eine Professional-Version welche Features für anspruchsvolle Benutzer wie zum Beispiel 
            präzise Messungen bietet.
        </para>
        <para>
            Der XVL-Signer ist eine Sicherheitsapplikation die es dem Anwender ermöglicht XVL-Dateien zu signieren und zu
            verschlüsseln. Außerdem bietet sie weitreichende DRM-Features, welche allerdings nur von zweifelhafter
            Nützlichkeit sind, da ein ambitionierter Nutzer sicher Mittel und Wege finden wird an die angezeigten
            Daten heranzukommen.
        </para>
        <para>
            Weiterhin bietet Lattice eine Reihe von Daten-Konvertern an welche die Transformation verschiedenster gängiger
            CAD/CAM-Formate nach XVL und zurück unterstützen. Des Weiteren existiert ein XVL-Plugin für 3DStudio-Max.
        </para>
    </section>
</chapter>
