gemTest - Test des GEM Interfaces
SYNOPSIS
gemTest <options>
DESCRIPTION
Initiliasiert ein GEM Objekt, entweder lokal durch Einlesen der
entsprechenden Files (default: world.gs, wenn vorhanden auch
world.{cad|fea|off|gsb|gfa} oder remote durch Kontakten eines
zentralen GEM-Servers (gem_srv). Für so ziemlich
jede Methode aus gem.h gibt es einen Button. Die
von "GetLines()" gelieferten Linien werden projiziert und in ein
Kamerafenster gezeichnet. Das Testbett kann damit natürlich auch zur
Visualisierung von Modelldateien verwendet werden, ist aber nicht sehr
intuitiv bedienbar (Anordnung der Buttons in der Reihenfolge in der
die Methoden entwickelt wurden :-)
Software-Struktur
Das Programm stellt einen GEM-Client dar, das heißt nur die in gem.h definierte
Schnittstelle ist verfügbar. Über die Buttons des Bedienfensters und das Kamerafenster sind
also keine internen Zustände und Daten der Bibliothek (wie z.B. ein Grundriß des Modells)
verfügbar. GEM selbst öffnet aber, wenn im Visualisierungsmodus gestartet,
für jeden angeforderten gemAccessContext ein weiteres Fenster. Diese Fenster können auch
interne Zustände visualisieren, sind ansonsten aber eigentlich passiv. Die drei
aktiven Buttons sind zwar praktisch aber gefährlich, da sie den
Zustand des Contexts ohne Zutun und damit auch ohne Wissen des Client-Programmes ändern.
Benutzung auf eigene Gefahr, Bedeutung der Buttons siehe gem_srv.
OPTIONS
- -help,-?
- Optionenübersicht
- -world <file>
- Filenamen des zu startenden Modells ohne Endung. Details siehe gem_srv.
- -server <server> <relrpc>
- gem_srv läuft auf dem Rechner <server> mit der Programmnummer 80033120+<relrpc>
BUTTONS des GEM-Clients (oben nach unten)
- NavigationsBox (der Kasten ganz oben)
- dient zum Einstellen der SensorPose, entweder durch direkte Eingabe,durch Klicken auf der in einem separaten Fenster hochpoppenden "SpaceMouse" oder über den EnumButton rc . Die dort vorgeschlagenen Poses werden aus dem File poserc im aktuellen Directory gelesen, Syntax <name> <pose>,
- wobei <pose> genauso anzugeben ist wie im Eingabefeld (nPose::operator<<).Der Clear-Button ist dann sinnvoll, wenn man eine Pose z.B. aus einem Log oder anderen Fenster über die X-Selection pasten möchte.
-
- draw
- Ruft GetLines() auf und zeichnet die erhaltenen Linien ins Kamerafenster
- set po
- Pose aus der Navigationsbox mit SetPose() setzen
- faces
- Statt GetLines() wird bei draw GetFaces() aufgerufen.
- zoom
- EnumButton zum Aufruf der wichtigsten "ZooM...()" Methoden
- island
- Fokussieren auf eine Insel
- class
- Fokussieren auf eine Klasse
- object
- Fokussieren auf ein Objekt
- foc mem
- "Abwärts" fokussieren auf das Member "joint", der Inhalt des joint -EnumButtons ändert sich je nach den bei aktueller Fokussierung sichtbaren Membern (i.e. enthält immer die nächste Ebene im Objekt-Baum"
- foc up
- "Aufwärts" fokussieren (BTW, die Baumwurzel ist, wie in der Informatik üblich "oben")
- get isle
- Namen der gerade fokussierten Insel ausgeben (oder der Insel, auf der das gerade fokussierte Objekt steht)
- SAP
- Set All Preffered: beim gerade fokussierten Objekt alle Joints auf den Preffered State setzen.
- StateButton (kein Name)
- setzt den State des gerade im joint -EnumButton ausgewählten Gelenks. Erlaubte States: [0,1], -1 (=unknown, SubBaum wird durch seine Maske ersetzt, so sie vorhanden ist), -2 (=cut, SubBaum wird weggelassen)
- set all
- setzt alle Gelenke auf den State des StateButtons (links daneben)
- dance
- fährt alle States aller Gelenke durch
- update o
- nur wirksam bei Objekt-Fokus: Zustände und Position des fokussierten Objektes werden global sichtbar gemacht
- create o
- nur wirksam bei Klassen-Fokus: ein Instanz der fokussierten Klasse wird an der durch nebige VectorBox definierten Position instantiiert, die Winkel sind im Testbett hart auf 45,0,0 eincodiert.
- delete o
- nur wirksam bei Objekt-Fokus: löscht das fokussierte Objekt
- cube
- Last-Test: Führt einen typischen Modellzugriff an vielen Gitterposition mit vielen Winkeln durch
- sym port
- Popt eine Box für "Symbolische Zugriffe" hoch, das sind Sensor & Context-unabhängige Zugriffe um global Objekte zu instatiieren oder zu manipulieren. Diente zur Kopplung mit Q6, L8
- regions
- Testet den Regionenzugriff der definitiv noch nicht richtig funktioniert, z.Zt. aber noch von niemand vermißt wird
- new acc
- Nach einem ungültigen Zugriff wird ein AccessContext "hochohmig", d.h. er geht in den Fehlerzustand und gibt auf weitere Zugriffe dummy-Werte zurück. Die Idee an diesem Konzept ist zu vermeiden, daß ein Aufrufer der eine Transaktion durchführt die aus einer Sequenz von Methodenaufrufen besteht nach jedem Aufruf eine Fehlerbehandlung vorsehen muß. Es reicht, am Ende der Transaktion den Fehlerzustand abzufragen und dann gegebenenfalls die Fehlerbeschreibung abzurufen. Der Button löscht den hochohmigen Context und instantiiert einen "frischen".
- get fail
- Abrufen der Fehlerbeschreibung (sieh auch new acc )
- get fp
- Aufruf von "GetFocusPose()". Zurückgegeben wird die Transformation aus dem gerade fokussierten (Member-)Objektkoordinatensystem in Weltkoordinaten, i.e. die Pose des fokussierten Koordinatensystems in Weltkoordinaten
- orbit
- Umkreist den Ursprung
- single
- Nach jeder gezeichneten Line wird deren Id ausgegeben und ein Bummer hochgepoppt
- auto s
- vor "GetLines()" wird immer automatisch "SetPose()" mit der aktuellen Pose aus der NavigationBox ausgeführt. Ist angenehm wenn man sich mit der SpaceMouse bewegt, untergräbt aber das Z-Buffer-Caching. Also ausschalten wenn man seine Position nicht ändert und nur Objekte manipuliert. Achtung: orbit funktioniert auch nur wenn auto s ausgeschaltet ist
- optic f
- Poppt eine Optic Flow Box hoch
- agg fea
- Poppt eine Box zum Testen aggregierter Merkmale hoch
- best
- Stellt nur die 3 "sichtbarsten" aggregierten Merkmale dar
- live
- ruft ständig "GetLines()" auf (am besten schaltet man vorher auto s aus).
- refresh
- refreshed den object Button (sinnvoll wenn z.B. von einem zweiten Client neue Objekte eingetragen wurden)
- move
- nur wirksam bei Objekt-Fokus: setzt das fokussierte Objekt auf die Position aus der VectorBox (4 weiter oben).
- flush
- entfernt alle Objekte mit Namen CO-*
- dpl
- Draw Pixel Lines, wie draw , aber CoordinateMode==pixel
- vis calc
- Verdeckungsrechnung ein/ausschalten
- special
- Variierende Wirkung :)
- zline
- Test des zeilenweisen Zugriffs auf den Z-Buffer per "GetZLine()". Das komplette Bild wird unter "zbuffer.tif" abgespeichert
- crea fa
- Testface erzeugen, Parameter hart eincodiert
- dump
- Dump() aufrufen, i.e. dynamische Modellkomponenten speichern.
- crea isl
- Insel erzeugen, Name "lummerland"
- dcl
- Draw Camera Lines, wie draw , aber CoordinateMode==camera
- Exit
- was wohl?
VISUALISIERUNG AccessContext
siehe gem_srv
FILES
- poserc
- Default Poses für Button rc in der Navigationsbox
- camera.ini
- Kameraparameter, Syntax: camera: dx <horizontale Pixel> dy <vertikale Pixel> sx <horizontale Pixelgröße in m> dy <vertikale Pixelgröße in m> cx <Hauptpunkt x in Pixel> cy <Hauptpunkt y in Pixel> f <Brennweite in m> r 5 <Reichweite in m> res <Mindestlinienlänge in Pixel>
- topview.ini
- Parametrierung des Topview Fensters, Syntax: win3d dx <Breite in m> oxp <Ursprung X in Pel> oyp <Ursprung X in Pel>. Default: Breite=10m, Ursprung in der Mitte, bei (200,200)
stoffler