Das Programm geo_conv

Das Programm geo_conv dient dazu, mehrere Objekte, die in Form von Standard-Files vorliegen, zu einem Objekt zu verknüpfen und als Standard-Files zu speichern. Dabei können auf die Objekte (Einzelobjekte oder Objektgruppen, aktive Objekte) geometrische Operationen (Verschieben, Drehen, Spiegeln) angewendet werden.

Beim Vereinigen der aktiven Objekte zusammenfallende Ecken, Kanten und Flächen können identifiziert und zusammengefaßt werden. Innerhalb einer Objektgruppe ist es möglich, eindeutige Namen zu erzeugen, so daß die Objektgruppe als ein Objekt in einem Standard-File abgelegt werden kann.

Das Programm ist textorientiert, menügesteuert und mit einer Online-Hilfe ausgestattet. Das Programm ist außerdem in der Lage, stapelorientiert zu arbeiten.

Die Rufzeile hat folgende Gestalt:
geo_conv [-v] [-t] [-c <cfgfile>] [-p <protfile>] [-e <exefile>] [<filename> [<filename> ...]];
wird kein <filename> angegeben, so wird der Nutzer beim Start des Programmes zur Eingabe eines Filenamens aufgefordert.

Das Konfigurationsfile <cfgfile> kann neben den durch den :set-Befehl einstellbaren Werten auch zusätzliche Typen für Flächen-Geometrien beschreiben.

Im Protokollfile <protfile> werden alle ausgeführten Befehle, ihre Ausgaben und Fehermeldungen festgehalten. Das Protokollfile kann als Steuerfile <exefile> für den stapelorientierten Programmablauf eingesetzt werden. Der Schalter -t schaltet in den trace-Modus, d.h. bei der Abarbeitung nachfolgender Steuerfiles wird der Nutzer jeweils zur Bestätigung der Abarbeitung der Befehle aufgefordert. Wird kein Steuerfile bearbeitet, ist der Schalter wirkungslos. -v dient zur Anzeige der aktuellen Programmversion.

Da die Parameter und Eingabefiles in der Reihenfolge ihres Auftretens in der Parameterzeile ausgeführt werden, ist ihre Reihnefolge wichtig, so hat z.B. der trace-Modus nur noch auf die nachfolgenden Steuerfiles Einfluß.

Befehlsübersicht

Folgende Befehle stehen zur Verfügung:

help (h,?) [<kuerzel>]

Anzeige einer kurzen Hilfe für <kuerzel>; fehlt <kuerzel>, so wird eine Befehlsübersicht angezeigt.

load (l) [<filename>]

Einlesen des Standard-Files <filename>; fehlt die Angabe von <filename> oder ist das Standard-File nicht lesbar, so wird der Nutzer zur Eingabe eines Filenamens aufgefordert.
Durch Eingabe des Zeichens "_" (Unterstrich) kann dieser Nutzerdialog abgebrochen werden. Durch die Eingabe von "?" kann eine Kurzhilfe angefordert werden.
Enthält der Filename eines der folgenden Zeichen: "*,?,[,]", so wird eine Liste dem Muster entsprechender Files angezeigt. Enthält diese Liste nur ein File, so kann es durch eine leere Eingabe als Filename übernommen werden. Die Auswertung des Musters ist dem ls-Kommando nachempfunden.

duplicate (d)

Duplizieren der aktiven Objekte. Für jedes aktive Objekt wird eine Kopie erzeugt, die ein eigenständiges Objekt darstellt.

write (w) [!] [<filename>]

Schreiben der aktiven Objekte in das Standard-File <filename>; fehlt die Angabe von <filename> oder ist das Standard-File nicht schreibbar, so setzt ein Nutzerdialog ein, wie er für den Befehl load beschrieben wurde.
Existiert das zu schreibende File bereits, so muß der Nutzer das Überschreiben bestätigen. Mit der Angabe eines "!"e; vor dem Filenamen wird diese Nachfrage unterbunden, ewentuell existierende Files werden ohne Nachfrage überschrieben.
Filenamen, die eines der folgenden Zeichen "*,?,[,]" enthalten, werden in der gleichen Weise behandelt, wie für load beschrieben. Wird dabei ein einzelnes File durch Leereingabe übernommen, so wird dieses File ohne weitere Nachfrage überschrieben.

quit (q)

Beenden des Programmes; wurden Objekte manipuliert, aber kein Ausgabefile erzeugt, so muß der Nutzer den Programmabbruch bestätigen.

exit (x)

Beenden des Programmes ohne Hinweis auf nicht gespeicherte Objekte.

show (s)

Anzeige wichtiger Daten über die eingelesenen Standard-Files. Es werden folgende Informationen für jedes Objekt angezeigt:
- Aktivierungsstatus, interne Objektnummer und Filename
- Koordinatenextrema der Eckpunkte
- Anzahl von VERTEX, EDGE, FACE, SOLID, REGION, FACE_GEO und MATERIAL
- Namens-Offsets für diese Elemente
Der Aktivierungsstatus wird durch folgende Anzeiger charakterisiert:
" -" inaktiv
" +" aktiv
" @" Fehler beim Einlesen des Files - nicht aktivierbar.

activate (a) [ s | [=] <nrliste> | - <nrliste> | + <nrliste>]

Anzeige und "Anderung des Aktivierungsstatus der Objekte.
activate s zeigt den Aktivierungsstatus der Objekte an.
activate [=] <nrliste> aktiviert genau die in <nrliste> bezeichneten Objekte.
activate + <nrliste> aktiviert zusätzlich die in <nrliste> bezeichneten Objekte.
activate - <nrliste> deaktiviert die in <nrliste> bezeichneten Objekte.
Wird activate ohne weitere Angaben aufgerufen, wird eine Liste der aktiven Objekte angezeigt und eine Eingabe (+ | - | = | s ) erwartet. Die Eingabe von " ?" fordert eine Kurzhilfe an.
<nrliste> ist eine Liste von Objektnummern, die durch Leerzeichen getrennt werden. Ist das erste Element der Liste eine "0", so werden alle Objekte aktiviert bzw. deaktiviert.

merge (m)

Finden und Zusammenfassen von "gleichen" Ecken, Kanten, Flächen, Materialien und Flächen-Geometrien. Zwei Ecken werden dabei als gleich angesehen, wenn ihr Abstand in der Maximumnorm einen nutzerdefinierten Wert unterschreitet. Die Behandlung von Kanten, die zwar gleiche Eckpunkte haben, aber Flächen mit unterschiedlicher Geometrie begrenzen und von Flächen, die zwar von gleichen Kanten berandet werden, deren Geometrie jedoch nicht übereinstimmt, wird durch den Schalter force_merge beeinflußt. Weitere Angaben zur Steuerung des Verhaltens des merge-Befehls sind unter :set/:unset zu finden.

transpose (t) [ <x> <y> <z> ]

Verschieben um den Vektor $(x,y,z)$, fehlt die Angabe von <x> <y> <z>, so wird der Nutzer zur Eingabe des Verschiebungsvektors aufgefordert.

flip (f) [ x | y | z ]

Spiegeln der x-, y- bzw. z-Koordinaten; fehlt die Angabe der Koordinaten, wird der Nutzer aufgefordert, die gewünschte Richtung einzugeben.

rotate (rot,r) [ x | y | z <winkel>]

Drehung um den Winkel <winkel> um die x-, y- bzw. z-Achse; wird rotate ohne weitere Angaben aufgerufen, so wird der Nutzer zur Eingabe der Rotationsachse und des Rotationswinkels aufgefordert. Die Angabe des Winkels erfolgt in Grad.

offset (o) [ a|v|e|f|s|r|m|g <nr> | <nrliste> ]

Erzeugen eindeutiger Namen für die aktivierten Elemente; wird offset ohne weitere Angaben aufgerufen, so wird für jedes Element (VERTEX, EDGE usw.) einzeln der aktuelle Startwert für die Namenserzeugung angezeigt und der Nutzer zur Eingabe eines neuen Startwertes aufgefordert. Die Startwerte haben dabei folgende Bedeutung:
0 : automatische Namenswahl
-1 : keine Namensänderung - Beibehaltung der Namen des Eingabefiles
1... : Namen werden fortlaufend ab der angegebenen Nummer generiert.
Durch Angabe des Elementes (v|e|f|s|r|m|g) läßt sich der Startwert für einzelne Elemente setzen; wird als Element "a" angegeben, wird für alle Elemente ein Startwert zur Namensgenerierung benutzt.
Durch Angabe einer <nrliste> kann der Prozeß der Einzeleingabe abgekürzt werden, die Nummern von <nrliste> werden dabei wie Nutzereingaben behandelt, wobei ein "_" (Unterstrich) zum Beibehalten des bisherigen Wertes dient.
Die Reihenfolge der Offsets in der <nrliste> ist:
VERTEX - EDGE - FACE - SOLID - REGION - MATERIAL - GEOMETRY.

:set/:unset [<parameter> [<value>]]

Anzeigen und "Andern der Parameter und Schalter.

auto_offset (TRUE)

Wurde vor dem Identifizieren gleicher Elemente keine Namensgenerierung durchgeführt, so wird dies bei gesetztem auto_offset automatisch während des merge-Befehls nachgeholt.

force_merge (TRUE)

Zwei Kanten werden immer dann zusammengefaßt, wenn sie gleiche Endpunkte haben. Ist force_merge gesetzt, so werden diese Kanten auch dann zusammengefaßt, wenn sie durch den Schnitt von Flächen gebildet werden, deren Geometrien unterschiedlich sind. Zwei Flächen werden zusammengefaßt, wenn sie von den gleichen Kanten berandet werden; solche Flächen werden auch dann zusammengefaßt werden, wenn sie sich in ihrem Geometie-Typ unterscheiden.

eps_abs (FALSE)

Zum Identifizieren gleicher Punkte wird ein Wert benutzt, der sich aus der Multiplikation der maximalen Kantenlänge des achsparallelen Umquaders der aktiven Elemente mit dem nutzerdefinierten Wert epsilon ergibt (relativer Abstand). Ist jedoch eps_abs gesetzt, wird stattdessen der Wert epsilon direkt zum Testen benutzt (absoluter Abstand).

epsilon (1e-05)

Wert zum Festlegen der Umgebung, in der zwei Punkte als gleich angesehen werden.

Das Protokollfile -p <protfile>

Das Programm geo_conv kann seine ausgeführten Operationen in einem File protokollieren. Da dieses Protokollfile außer den Konsolenausgaben des Programms weitere Infomationen enthält, kann es neben der Dokumentation auch noch der Fehlersuche dienen. Das Protokollfile ist so aufgebaut, daß es ohne "Anderung als Steuerfile für -e <exefile> dienen kann.

Das Protokollfile besteht aus Zeilen folgender Gestalt:
<code><information>

<code> ist ein Zeichen der Menge [@,?,>,!,#] mit folgender Bedeutung:
@ Allgemeine Information des Programms und Konsolenausgaben
? Dialogaufforderungen an den Nutzer
> Eingaben des Nutzers
! Fehler und Warnungen
# Ausgeführte Befehle (nach dem Nutzerdialog).

Das Steuerfile -e <exefile>

Die Arbeit mit Steuerfiles dient einerseits der schnelleren Erledigung von Routineaufgaben (z.B. Konvertierung von VERSION-1-Files in VERSION-2-Files) und andererseits zur besseren Handhabbarkeit größerer Projekte (Fehlersuche).

Das Steuerfile besteht aus Zeilen mit folgendem Aufbau:
<code><information>,
wobei Leerzeichen und Tabulatoren am Zeilenanfang ignoriert werden.

<code> ist ein einzelnes Zeichen, wobei von geo_conv nur Zeilen abgearbeitet werden, die mit dem Zeichen "#" beginnen (Befehlszeilen). Alle Zeilen, die einen anderen Code tragen, werden ignoriert.

Für Befehlszeilen muß der Inhalt von <information> entweder ein Befehl für geo_conv sein (s.o.), oder die Filekennung "geo_conv.prot".
Beginnt <information> einer Befehlszeile mit einem weiteren "#", so wird diese Zeile nicht abgearbeitet.

Durch Angabe des Schalters "-t" (tracing), wird der Nutzer zur Bestätigung der Ausführung einer Befehlszeile aufgefordert.

Das Konfigurationsfile -c <cfgfile>

Im Konfigurationsfile können neben den durch den :set-Befehl beinflußbaren Parametern und Schaltern auch zusätzliche Typen für die Flächengeometrien beschrieben werden. Das Konfigurationsfile beginnt immer mit der Filekennung "#geo_conv.cfg". Zeilen, die mit "##" sowie Leerzeilen haben keinen Einfluß auf das Programm geo_conv.

Einfache Wertzuweisungen haben folgenden Aufbau:
<parameter> <value>,
wobei <parameter> ein durch den :set-Befehl beinflußbarer Schalter oder Parameter ist. Für Schalter kann <value> die Werte "TRUE" oder "FALSE" annehmen.

Die Beschreibung zusätzlicher Typen der Flächengeometrie wird durch die Zeile "#geo_struct" eingeleitet, der dann die zeilenweise Beschreibung der einzelnen Geometrietypen folgt.
Ein Geometrietyp wird folgendermaßen beschrieben:
<type> <struktur> [: <bemerkungen>]
<type> stellt den Typnamen des Geometrietypes dar; <struktur> beschreibt den Geometrietyp.

<struktur> ist eine Zeichenkette, die folgende Zeichen enthalten darf:
"r" Bezeichnet eine einzelne real-Zahl, die durch geometriche Operationen nicht verändert wird
"c" Bezeichnet ein Tripel von real-Zahlen, die eine Koordinate beschreiben; d.h., das Zahlentripel wird durch Drehung, Spiegelung und Verschiebung verändert. "d" Bezeichnet ein Tripel von real-Zahlen, die eine Richtung beschreiben; d.h., das Zahlentripel wird nur durch Drehung und Spiegelung verändert.


Dag Lohse