Name

VRML::Base.pm - Basis-Methoden für die VRML 1 und 2 Module


Übersicht

use VRML::Base;


Beschreibung

Folgende Methoden stehen zur Verfügung:

new
new

Erzeugt ein neues VRML-Szenen-Objekt. Diese Methode muß vor der Verwendung einer weiteren Methode aufgerufen werden.

browser
browser("vrml", "html")

vrml SFString ""
html SFString ""

Die Implementierung der VRML-Spezifikationen in den Browsern und Plug-Ins ist je nach Entwicklungsstand und Hersteller unterschiedlich. Um einige allgemeine Besonderheiten berücksichtigen zu können und Anzeigefehler zu verhindern, sollte deshalb der browser-Methode der Name des VRML- und HTML-Browsers mitgegeben werden. Leere Parameter oder das Weglassen der Methode führen zur Verwendung des kleinsten vertretbaren Implementierungsstandes aller unterstützten VRML-Browser.

Beispiele für VRML-Browser:

Cosmo Player 1.0
Cosmo Player 2.0
Cosmo Player 2.1
libcosmoplayer.so
GLview
Live3D 1.0
Live3D 2.0
VRweb
WorldView 2.0 Plugin

Gebräuchliche HTML-Browser:

Mozilla (Netscape)
Mosaic
MSIE (Microsoft Internet Explorer)

Prinzipiell ist es auch möglich, über das API eines VRML-2.0-Browsers den Namen und die Version zu ermitteln. Dieses Verfahren besitzt jedoch einen entscheidenden Nachteil: Bevor über das API die Informationen abgefragt werden können, muß die Szenenquelle bereits erstellt und erfolgreich geladen worden sein. Dann ist es aber für syntaktische Änderungen bereits zu spät.

Ein Beispiel für das unterschiedliche Verhalten der VRML-Browser ist die Interpretation eines "escapten" doppelten Anführungszeichens innerhalb einer Zeichenkette. Während einige Browser es, wie in der Spezifikation beschrieben, darstellen können, beenden andere Browser die Zeichenkette vorzeitig und erzeugen somit weitere Syntaxfehler. Ein weiteres Problem ist die unterstützte Sprache im Skriptknoten. Hier muß bei einigen Browsern 'vrmlscript' angegeben werden.

Beispiel:

$vrml->browser("Cosmo Player 2.0","Mozilla");

comment
comment('string')

string MFString []

Fügt an der aktuellen Szenenposition einen Kommentar ein. Jeder Zeichenkette aus dem Parameter string wird ein Doppelkreuz vorangestellt und ein Zeilenvorschub angefügt.

insert
insert('string')

string SFString ""

Fügt vorhandenen VRML-Code in die Szene ein. Dieser kann als skalare Variable oder als konstante Zeichenkette dem Parameter string übergeben werden.

Beispiel:

$vrml
->begin
  ->insert("Shape { geometry Box {} }")
->end
->print;

Befinden sich im vorhandenen VRML-Code doppelte Anführungszeichen, so sollte die Perl-Funktion qq verwendet werden, um den Code unverändert übernehmen zu können. Alternativ dazu besteht die Möglichkeit, die Anführungszeichen durch einen Backslash zu maskieren (\").

$vrml
->begin
  ->insert(qq(WorldInfo { title "Meine Welt" } ))
->end
->print;

Der Szenenaufbau kann schnell unübersichtlich werden, wenn der VRML-Code einige Zeilen überschreitet. Für das Einfügen größerer Programmteile ist die Methode insert__DATA__ besser geeignet.

insert__DATA__
insert__DATA__()

Macht sich die Perl-Syntax zunutze, in der alle folgenden Zeilen nach der Zeichenkette __DATA__ als Daten behandelt werden. Diese liest die Methode insert__DATA__ ein und fügt sie an der betreffenden Stelle in die Szene ein. Beachte die führenden und abschließenden ZWEI Unterstriche.

Beispiel:

use VRML;
new VRML(2)
->begin
  ->insert__DATA__
->end
->print;

__DATA__
Shape {
  geometry Sphere {}
  appearance Appearance {
    material Material {
      diffuseColor 0 0.5 0
    }
  }
}

Hinweis: Der __DATA__-Abschnitt in Perl-Skripten wird derzeit nicht von modperl auf dem Apache-Server unterstützt. D.h., insert__DATA__ funktioniert dort nicht wie erwartet.

include
include('files')

files MFString []

Fügt vorhandene VRML-Dateien in die aktuelle Szene ein. Der Parameter files kann eine Liste von Dateinamen enthalten, die der Reihenfolge nach eingebunden werden.

Beispiel:

$vrml->include("c:/vrml/cubes.wrl");

print
print('mime', 'pipe')

mime SFBool   0
pipe SFString ""

Übergibt den Inhalt des Szenenobjekts an STDOUT. Das bedeutet im Normalfall, daß die VRML-Quelle auf dem Bildschirm erscheint. Wird das Skript von einem WWW-Server über CGI gestartet, so benötigt der Client (Browser) einen MIME-Typ, um die korrekte Wiedergabeart zu ermitteln. Der MIME-Typ muß im Header vor der eigentlichen Szene gesendet werden. Diese Option kann über den Parameter mime aktiviert werden.

Um die Übertragungs- bzw. Ladezeiten virtueller Welten zu verkürzen, besteht die Möglichkeit, VRML-Quellen zu komprimieren. Zu diesem Zweck wird ein Programm benötigt, welches das GNU-ZIP-Verfahren realisiert. Über den Parameter pipe müssen der Pfad, Name und die Programmparameter der ausführbaren Datei spezifiziert werden. Befindet sich die Datei im aktuellen Pfad, genügt nur der Name und die Parameter (meistens gzip -f). Der Parameter pipe ist jedoch nicht nur auf das Komprimieren der VRML-Skripten beschränkt. Prinzipiell kann hier jeder Filter angewendet werden.

Beispiel 1:

$vrml->print;

Beispiel 2 (UNIX gzip):

$vrml->print(1,"/usr/local/bin/gzip -f");

Beispiel 3 (MS-DOS gzip.exe):

$vrml->print(1,"c:\\Perl\\bin\\gzip.exe -f");

oder für alle Plattformen, wenn sich das Programm gzip im Suchpfad befindet:

$vrml->print(1,"gzip -f");

save
save('filename', 'pipe')

filename SFString ""
pipe     SFString ""

Speichert den Inhalt des Szenenobjekts in einer Datei. Wird kein Dateiname angegeben, so wird die Erweiterung des gerade abgearbeiteten Skripts (zum Beispiel .pl) gegen die Erweiterung '.wrl' ausgetauscht. Um bei großen Welten Speicherplatz zu sparen, besteht auch hier die Möglichkeit, die VRML-Datei zu komprimieren. Zu diesem Zweck wird ein Programm benötigt, das ein beliebiges Packverfahren realisiert. Besonders gut eignet sich dafür das GNU-ZIP-Verfahren, da es vom VRML-Browser selbst entpackt werden kann. Über den Parameter pipe müssen Name und Pfad der ausführbaren Datei spezifiziert werden. Die Funktionsweise von pipe ist analog zu der in der Methodenbeschreibung von print.

Beispiel 1:

$vrml->save;

Beispiel 2:

$vrml->save("world.wrl");

Beispiel 3:

$vrml->save(undef,"gzip");

as_string
as_string()

Gibt die komplette VRML-Quelle als Zeichenkette zurück. Diese Methode wird jedoch nur in seltenen Fällen benötigt und ist die einzige Methode, die keine Referenz auf das Szenenobjekt zurückliefert. Für die Ausgabe oder Speicherung einer VRML-Quelle sollten im allgemeinen die Methoden print oder save benutzt werden. Diese Methoden sind wesentlich effizienter und schonen die Ressourcen des Rechners.

$vrml
->begin
  ->box("1 2 1")
->end;
$scene = $vrml->as_string;
Folgende Methoden sollten nicht verwendet werden. Sie sind normalerweise nicht notwendig. Besteht dennoch Bedarf, so senden Sie mir bitte eine E-Mail, und ich werde sie in den nächsten Versionen beschreiben.

debug
_init
_add
_trim
_swap
_put
_row
_pos


Version

Diese Manpage dokumentiert "VRML::Base.pm" in der Version VRML-1.04.


Autor

Hartmut Palm <palm@gfz-potsdam.de>


Übersetzer

Deutsche Übersetzung von Hartmut Palm,
© 1998 by Hartmut Palm