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