gs-Dateiformat
Direkte Verweise
Im folgenden können die einzelnen Kapitel und Unterkapitel direkt durch das Anklicken des entsprechenden Feldes angewählt werden.
Damit Aussagen über den Inhalt einer Datei getroffen werden können, wird eine Konvention für die Dateierweiterung in Abhängigkeit vom Inhalt der Datei bestimmt. In nachstehender Tabelle 1.1 sind dazu die Dateierweiterung und der geforderte Inhalt der Datei festgelegt. Für eine geplante Erweiterung der Featuredefinitionen wird eine mögliche Konvention für Dateien, welche erweiterte Featuredefinitionen beinhalten bereits vorgenommen.
Erweiterung | Dateiinhalt |
.gso | Es sind nur Objektdefinitionen in der Datei vorhanden. |
.gsf | Es sind nur Featuredefinitionen in der Datei vorhanden. |
.gsc | Es sind nur Klassendefinitionen in der Datei vorhanden. |
.gs | Alle obengenannten Definitionen sind in der Datei vorhanden. |
Tabelle 1.1: Konvention für die Dateiendung einer gs-Datei
Die syntaktische Beschreibung des Dateiformats erfolgt durch Angabe von BNF-Notationen. Vor der Definition der einzelnen Einträge werden oft verwendete syntaktische Elemente definiert. Besonders zu beachten sind dabei die Elemente Float, Integer, Zeichenkette und Schlüsselwort.
Ziffer ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Integer ::= <Ziffer>{<Ziffer>}
Float ::= [<Ziffer>].<Ziffer>{<Ziffer>}
Buchstabe ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
Zeichenkette ::= <Buchstabe>{<Buchstabe >|< Ziffer>}
Schlüsselwort ::= "["<Zeichenkette>"]"
Das Element Schlüsselwort zeigt an, um welchen Eintrag es sich handelt und muß somit immer am Anfang eines Eintrages stehen.
Das Vertex-Element gibt einen Eckpunkt einer Fläche an. Das Schlüsselwort für das Element ist gefolgt von einem Index, auf welchen die drei Komponenten der Eckpunktkoordinate folgen.
Der Index gibt dabei an, der wievielte Eckpunkt innerhalb einer Klasse oder einer Unterklasse vorliegt.
Index ::= <Integer>
x-Koord ::= <Float>
y-Koord ::= <Float>
z-Koord ::= <Float>
Vertex ::= "[Vertex]" <Index> <x-Koord> <y-Koord> <z-Koord>
Der Matrix-Eintrag gibt die einzelnen Matrizenelemente einer Transformationsmatrix an. Für das Matrix-Element wird zu Beginn kein Schlüsselwort angeben. Bei einer Organisation von 4 Spalten und 3 Zeilen geben die ersten 3 Spalten die x-, y- und z-Achsen des Koordinatensystems der zum Gelenk gehörigen Unterklasse an. Die Angabe der Koordinaten erfolgt dabei im Koordinatensystem des übergeordneten Elements. Die bei Transformationsmatrizen übliche 4. Zeile wird hier weggelassen, da sie nicht gebraucht wird. In der vierten Spalte wird der Translationsvektor angegeben. Dieser Vektor stellt den Ursprung des Koordinatensystems dar.
Matrix ::= <Float> <Float> <Float> <Float>
<Float> <Float> <Float> <Float>
<Float> <Float> <Float> <Float>
Der <State>-Eintrag stellt einen bevorzugten Zustand für einen Joint dar. Nach dem Schlüsselwort wird ein Wert für den bevorzugten Zustand angegeben. Dieser Wert ist normiert auf einen Wert im Bereich [0 ... 1].
State ::= "[State]" <Float>
Der Joint-Eintrag definiert das Klassen-Gelenk. Diese dient zur Verbindung zweier Klassenelemente und zur Definition der Kinematikdaten des untergeordneten Klassenelements. Durch den Matrixeintrag <ToParent> wird die Position des Klassenelements bezüglich seines übergeordneten Klassenelements festgelegt. Eine Liste für bevorzugte Zustände kann optional angegeben werden.
Jointtyp ::= "Rotation" | "Translation" | "Fixed"
Joint ::= "[Joint]"
"<Type>" <Jointtyp>
"<Maximum>" <Float>
"<Tau>" <Float>
"<ToParent>"
<Matrix>
["[PreferredStateList]" <State> {<State>} "[~PreferredStateList]"]
"[~Joint]"
Der Eintrag <Obstacle> definiert eine Sichthindernisfläche eines Klassenelements. Verweise auf die Eckpunkte der Fläche werden durch den Eintrag <VertexIndex> gebildet. Dieser gibt den Index eines <Vertex>-Eintrages in der Vertexliste an.
VertexIndex ::= <Integer>
VertexZahl ::= <Integer>
Obstacle ::= "[Obstacle]"
"<Vertices>" <VertexZahl>
{<VertexIndex>}<VertexZahl>
Wie bereits im Abschnitt 1. erwähnt, sollen erweiterte Featuredefinitionen eingeführt werden. Da deren Definition aber noch bevorsteht, wird im folgenden nur eine Definition des Eintrages für ein linienförmiges Merkmal vorgenommen.
Der Eintrag <LineFeature> dient der Definition eines Linienförmigen Merkmals. Wie der Eintrag <Vertex> besitzt auch dieser Eintrag einen Index, der angibt, um das wievielte Merkmal in dem Element es sich handelt. Darauffolgend werden die beiden Indizes der zugehörigen Eckpunkte angegeben.
VertexIndex ::= <Integer>
Index ::= <Integer>
LineFeature ::= "[Line]"
<Index>
{<VertexIndex>}2
Durch den <Member>-Eintrag wird ein Unterelement des <Class>-Eintrages beschrieben. Die obligatorische Listen für Eckpunkte und Flächen definieren die Geometrie des Unterelements. Optional kann der Eintrag Listen für Maskenflächen, Merkmale und weitere untergeordneten <Member>-Einträge.
Member ::= "[Member]"
"<Name>" <Zeichenkette>
<Joint>
"[VertexList]"
<Vertex> {<Vertex>}
"[~VertexList]"
"[ObstacleList]"
<Obstacle> {<Obstacle>}
"[~ObstacleList]"
["[MaskObstacleList]" <Obstacle> {<Obstacle>} "[~MaskObstacleList]"]
["[FeatureList]" <Feature> {<Feature>} "[~FeatureList]"]
["[MemberList]" <Member> {<Member>} "[~MemberList]"]
"[~Member]"
Der Eintrag <Class> stellt die Definition für eine Klasse dar. Durch die obligatorischen Listen für die Eckpunkte und Flächen wird wie im <Member>-Eintrag die Geometrie bestimmt.
Class ::= quot;[Class]"
"<Name>" <Zeichenkette>
"[VertexList]"
<Vertex> {<Vertex>}
"[~VertexList]"
"[ObstacleList]"
<Obstacle> {<Obstacle>}
"[~ObstacleList]"
["[FeatureList]" <Feature> {<Feature>} "[~FeatureList]"]
["[MemberList]" <Member> {<Member>} "[~MemberList]"]
"[~Class]"
Der Eintrag <Object> instanziiert die Klasse welche durch den Eintrag <Class> angegeben wird. Mittels der Eintrages <ToWorld> wird die Position des Objektes innerhalb der Welt angegeben.
Object ::= "[Object]"
"<Class>" <Zeichenkette>
"<Name>" <Zeichenkette>
"<ToWorld>"
<Matrix>
"[~Object]"
Anhand einer einfachen Beispieldatei, wird das Dateiformat verdeutlicht. Ein Quader dessen Oberseite sich wie ein Deckel öffnen läßt, dient zu diesem Zweck als Anschauungsstück.
Die nachstehende Abbildung 1.1 zeigt den Quader und die Orientierung der für die Transformation benötigten Koordinatensysteme. Durch das ungestrichene Koordinatensystem (x, y, z) wird das Weltkoordinatensystem angegeben, wohingegen das gestrichene Koordinatensystem (x', y', z') für den Deckel des Quaders verantwortlich ist. Die Abmessungen des Quaders betragen 3.0 in x-Richtung, 5.0 in y-Richtung und 4.0 in z-Richtung. Daraus ergibt sich für den Ursprung der Koordinatensystems des Deckels der Punkt (3.0, 0.0, 4.0). Die x'-Achse zeigt in Richtung der z-Achse, die y'-Achse in Richtung der y-Achse und die z'-Achse in der entgegengesetzten Richtung der x-Achse. Daraus läßt sich das Elementkoordinatensystem des Deckels auf einfache Weise ableiten.
Abbildung 1.1: Körper für die Beispieldatei
[Class]
<Name> Box
[VertexList]
[Vertex] 0 0.0 0.0 0.0
[Vertex] 1 0.0 5.0 0.0
[Vertex] 2 3.0 5.0 0.0
[Vertex] 3 3.0 0.0 0.0
[Vertex] 4 0.0 0.0 4.0
[Vertex] 5 0.0 5.0 4.0
[Vertex] 6 3.0 5.0 4.0
[Vertex] 7 3.0 0.0 4.0
[~VertexList]
[ObstacleList]
[Obstacle] <Vertices> 4 0 1 2 3
[Obstacle] <Vertices> 4 0 4 5 1
[Obstacle] <Vertices> 4 1 5 6 2
[Obstacle] <Vertices> 4 2 6 7 3
[Obstacle] <Vertices> 4 3 7 4 0
[~ObstacleList]
[FeatureList]
[Line] 0 0 1
[Line] 1 1 2
[Line] 2 2 3
[Line] 3 3 0
[Line] 4 0 4
[Line] 5 1 5
[Line] 6 2 6
[Line] 7 3 7
[Line] 8 4 5
[Line] 9 5 6
[Line] 10 6 7
[Line] 11 7 4
[~FeatureList]
[MemberList]
[Member]
<Name> BoxTop
[Joint]
<Type> Rotation
<Maximum> 270
<Tau> 1
<ToParent>
0.0 0.0 -1.0 3.0
0.0 1.0 0.0 0.0
1.0 0.0 0.0 4.0
[~Joint]
[VertexList]
[Vertex] 0 0.0 0.0 0.0
[Vertex] 1 0.0 0.0 5.0
[Vertex] 2 0.0 3.0 5.0
[Vertex] 3 0.0 3.0 0.0
[~VertexList]
[ObstacleList]
[Obstacle] <Vertices> 4 3 2 1 0
[~ObstacleList]
[FeatureList]
[Line] 0 0 1
[Line] 1 1 2
[Line] 2 2 3
[Line] 3 3 0
[~FeatureList]
[~Member]
[~MemberList]
[Object]
<Class> Box
<Name> Box01
<ToWorld>
1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0
[~Object]
Stefan Unterholzner
Lehrstuhl für Prozessrechner
Technische Universität München
$Id: datei.htm,v 1.2 1996/03/08 14:45:40 uholzner Exp uholzner $