MAL-Homepage Inhaltsverzeichnis



MAL Dokumentation: 3d-Graphik




Inhalt:

1. EINLEITUNG
2. KLASSEN FÜR DIE 3D-BEARBEITUNG
2.1. Trajektorien
2.2. Orientierungen
2.3. Der 3d-Arbeitsraum
3. WORTE FÜR DIE DARSTELLUNG VON 3D-OBJEKTEN
3.1. Einrichten von Animationsobjekten
3.2. Lesen von Animationsobjekten
3.3. Darstellung
3.4. Bewegte Objekte
3.5. Orientierungsdaten
4. SCHAFTBEARBEITUNG
4.1. Wählen des Teilbereichs
4.2. Kurven und Schnitte
4.3. Anbringen von Modellierungen
4.4. Längen- und Umfangmasse
4.5. Marken und Positionen


1. EINLEITUNG

Unter den Begriff ´Animationen´ fällt in MAL generell die dreidimensionale Darstellung von Objekten (Betrachtung mit Rot/Grünbrille), nicht nur bewegte Objekte. Das bedeutet, daß auch die Bearbeitung von Schaftformen auf Animationen beruht. Die Liste aller zu diesem Kapitel gehörenden Worte kann unter Topic
animation gefunden werden.

Rot/Grünbrille:
Für die Herstellung einer Rot/Grünbrille besorgt man sich am Besten 3mm Acrylglas (=Pexiglas) und lässt dieses bei einem Diskont-Brillenanbieter in irgendeine preisgünstige Brillenfassung einglasen. Das linke Glas muss rot und das rechte grün sein. Bei richtiger Wahl der Glasfärbungen müssen die roten Linien im roten Glas verschwinden und umgekehrt die grünen Linien im grünen Glas unsichtbar werden. Fall man keinen geeigneten Farbton findet, kann man auch die Farben der 3d-Darstellung anpassen. Sie sind in der Datei 'screen.cpu' in der Prozedur 'init_colortable()' definiert. Die Indizes der verwendeten Farben sind in der Datei '3d.cpu' mit den Bezeichnungen BLAU und ROT definiert.

Einstieg und Demo:
Für den Test der Rot/Grünbrille und zum Gewöhnen an die stereoskopische 3d-Darstellung kann das Wort wuerfel im Folder 'schaft_graphik' verwendet werden. Der Aufruf kann mit

private \ schaft \ graphik \ wuerfel
erfolgen.

3d-Raumspuren:
Speziell für die Bearbeitung von Raumspuren (Trajektorien) wie sie in der Bewegungsanalyse häufig anfallen, wurde basierend auf den grundlegenden MAL-Worten eine Menge von Klassen entwickelt, die die Handhabung von dreidimensionalen Zeitreihen und Figuren (Strichfiguren) erleichtert.

Das Animationsmenü:
Häufig wird für die Darstellung von 3d-Objekten das Wort anima_bedienung verwendet. Es startet ein Menü mit folgendem Aussehen:

Die Menüpunkte Drehen, Schieben und Tiefe dienen zum Positionieren der 3d-Objekte mit der 2d-Maus. Mit der linken Maustaste können die Objekte positioniert werden, mit der rechten Maustaste oder mit einer beliebigen Tastatur-Taste können die Menüpunkte verlassen werden.

Der Menüpunkt Bewegen dient zum Positionieren der Objekte mit der 3d-Maus. Wenn keine 3d-Maus vorhanden ist, ist dieser Menüpunkt funktionsgleich mit dem Menüpunkt Drehen (in der Datei "auto.cpu" ist eine entsprechende Deklaration : anima_move_objects anima_rotate ; zu finden).

Mit Laufen wird das Ablaufen der zeitabhängigen Größen gestartet. Dabei kann bei gedrückter linker Maustaste durch langsames Auf- und Abbewegen der Maus die Laufgeschwindigkeit eingestellt werden.

Joggen zeigt Standbilder, wobei durch Auf- und Abbewegen der Maus bei gedrückter linker Maustaste der dargestellte Zeitpunkt verschoben wird (Unten = Anfang, Oben = Ende).

Markieren öffnet eine Maske zum Auswählen eines Objektes. Hier kann der Name eines Objektes oder ein Leerstring eingegeben werden. In der Folge kann das markierte Objekt separat gedreht und verschoben werden.

MAL-Homepage Inhaltsverzeichnis


2. KLASSEN FÜR DIE 3D-BEARBEITUNG

Trajektorien sind Raumspuren, also Zeitreihen von dreidimensionalen Vektoren. Die Klassen für die Bearbeitung von Trajektorien sind im 3d-Folder (Public-Pool) definiert. Die entsprechenden Interfaces können mit

public \ 3d \ interfaces >voc

ins Vokabular geladen werden.

Unter anderem sind folgende Klassen im 3d-Folder zu finden:

MAL-Homepage Inhaltsverzeichnis


2.1. Trajektorien

Die Klasse
trajectory_class dient zum Beschreiben einer einzelen 3d-Raumspur (=Trajektorie). Eine Trajektorie besteht aus drei gleich langen Zeitreihen die jeweils eine Raumkoordinate (x, y und z) enthalten. Die Datenstruktur einer Instanz von trajectory_class sieht folgendermaßen aus:

[
class=trajectory_class
x=[ ... ]
y=[ ... ]
z=[ ... ]
]
Der Standardkonstruktor für Instanzen der trajectory_class hat folgende Syntax:
x y z -> this
wobei x, y und z jeweils Realverbunde oder Realzahlen mit den Zeitreihen einer Koordinate sind.

Beispiel:

public \ 3d \ interfaces >voc


100 ramp 10 / sin
100 ramp 15 / cos
100 ramp 12 / cos >trajectory 0.05 *
anima


erzeugt eine Raumspur, die an einer Kugeloberfläche mit 1 m Radius entlang führt. Durch die Multiplikation mit 0.05 wird der Radius auf 5 cm skaliert. Anschließend wird die Trajektorie mit der Member-Function anima dargestellt.



Die Klasse trajectories_class dient zur Handhabung von einer Gruppe von Trajektorien, die durch Polygone verbunden sind (Strichfigur). Die Konstruktoren erzeugen zunächst eine Instanz ohne Verbindungsliste. Diese kann in der Folge mit dem Wort set_connections eingestellt werden.

Es gibt zwei Konstruktoren: Der Konstruktor >trajectories erwartet einen Verbund von Trajektorien am Stack, während xyz>trajektories einen Verbund mit den einzelnen Koordinaten (jeweils x, y und z) am Stack erwartet.

Beispiel:

public \ 3d \ interfaces >voc


100 ramp 10 / sin
100 ramp 15 / cos
100 ramp 12 / cos >trajectory >> spur


[ spur 0.05 * spur 0.03 * ] >trajectories >> figur
figur anima


Beide Klassen haben eine Vielzahl von Member-Functions. Hier sind einige wesentliche von trajectories_class angeführt:

Die Datenstruktur einer Instanz von trajectories_class sieht wie folgt aus:
[
class=trajectories_class
traces=[ ... ]
connections=[ ...]
]
Die Variable traces ist ein Verbund mit allen Trajektorien (jeweils Instanzen von trajectory_class) und connections ist ein Verbund mit der Verbindungsliste.

MAL-Homepage Inhaltsverzeichnis


2.2. Orientierungen

Orientierungen werden in MAL üblicherweise in der Form

[ R v ]
dargestellt, wobei R die Drehmatrix in der Form
[ [ r11 r12 r13 ]
[ r21 r22 r23 ]
[ r31 r32 r33 ] ]
und v der Verschiebungsvektor in der Form
[ x y z ]
ist. Bei zeitabhängigen, also bewegten Orientrierungen müssen die einzelnen Variablen jeweils Zeitreihen sein. Damit die Berechnungen mit der daraus resultierenden doch etwas komplizierteren Datenstruktur möglichst einfach sind, kann die Klasse
orientation_class verwendet werden, die ihrerseits die Klasse 3d_matrix_class für die Bearbeitung der Drehmatrix und die Klasse trajectory_class für den Verschiebungsvektor verwendet.

Die Klasse orientation_class besitzt zwei Konstruktoren. Einen für das Einrichten einer Einheitsorientierung (create_orientation) und einen für eine statische Orientierung (>orientation). create_orientation benötigt keine Input-Daten und >orientation benötigt die Orientierungsdaten in der oben beschriebenen Form als Verbund.

Mit den Funktionen set_rotation und set_shift kann einer bestehenden Orientierung die Drehmatrix bzw. der Verschiebungsvektor neu eingestellt werden.

Beispiel (drehen einer Figur um den Schwerpunkt):

Laden der Interfaces und der Messdaten aus der Datei gangdat.met:

public \ 3d \ interfaces >voc
"gangdat.met" meta> >> figur


Berechnung einer Zeitrampe:

figur count ramp >> zeit


Zeitabhängige Drehmatrix berechnen:

zeit 10 / zeit 15 / zeit 20 / euler>3d_matrix >> drehmatrix


Orientierung berechnen:

create_orientation drehmatrix set_rotation >> orientierung


Figur drehen und darstellen:

figur dup center - orientierung rotate+shift 0.1 * anima


Das Wort markers>orient (im Vetmed-Folder, Public-Pool) kann für die Berechnung einer Orientierung aus den Raumpositionen von drei Marken verwendet werden. Das ist für die Berechnung virtueller Marken von Bedeutung, denn virtuelle Marken sind Marken, die in Bezug auf ein derart berechnetes Koordinatensystem eine statische Position haben.

Beispiel (Berechnung eines virtuellen Nasenpunktes):

Laden der Messdaten und Berechnung des ersten Bewegungszyklus:

public \ vetmed >voc
public \ 3d \ interfaces >voc
"gangdat.met" meta> >> figur
figur x \ Ferse_L 10 fussungsbeginn from>timeslices >> schritte
figur schritte split 1 , >> figur1


Laden der Trajektorien ins Vokabular und berechnen des bezüglich der Kopfmarken relativen Koordinatensystems:

figur1 \ traces >voc
Kopf_LV Kopf_RV Kopf_H markers>orient >> relativ


Kontrollanzeige des relativen Koordinatensystems:

figur1 3d_axes 0.2 * relativ rotate+shift && 0.1 * anima


Nasenposition angeben und Gesamtfigur anzeigen:

: nase 0.05 -0.05 0.1 >trajectory relativ rotate+shift ;
figur1 [ nase ] >trajectories && 0.1 * anima

MAL-Homepage Inhaltsverzeichnis


2.3. Der 3d-Arbeitsraum

Die Klasse
3d_workspace_class unterstützt die Darstellung mehrerer 3d-Objekte in einem gemeinsamen Arbeitsraum. Das ist besonders für den Vergleich von verschiedenen Figuren nützlich. Mit dem Konstruktor create_3d_workspace wird ein leerer Arbeitsraum eingerichtet. Diesem können mit insert ein oder mehrere Objekte (Instanzen der Klasse trajectories_class) eingefügt werden, wobei die Objekte mit Namen versehen sein sollten, damit sie nachher im Arbeitsraum identifiziert werden können.

Beispiel (Vergleich einer großen mit einer kleinen Variante der Figur "figur"):

Interfaces und Daten laden:
public \ 3d \ interfaces >voc
"gangdat.met" meta> >> figur


Workspace einrichten:
create_3d_workspace >> workspace


Figuren eintragen:
workspace
figur 0.15 * "gross" >name insert
figur 0.05 * "klein" >name insert -> workspace


Blättern und animieren: workspace browse anima


Die Funktion browse zeigt eine Tabelle mit den im Arbeitsraum eingetragenen Objekten. Sie sieht beim obigen Beispiel folgendemaßen aus:

Der Menüpunkt Orientation kann zum Abfragen und Editieren der Orientierungsdaten einzelner Objekte herangezogen werden.

MAL-Homepage Inhaltsverzeichnis


3. WORTE FÜR DIE DARSTELLUNG VON 3D-OBJEKTEN

Eine Zusammenfassung aller für die Darstellung und Bearbeitung von 3d-Objekten vorhandenen Worte findet man unter Topic
animation.

Bei der Darstellung dreidimensionaler Objekte wird folgendermaßen vorgegangen:

Zuerst werden sogenannte ´Animationsobjekte´ erstellt, die dann unter Verwendung verschiedenster Worte dargestellt, bewegt oder manipuliert werden können. Ein Animationsobjekt ist ein Datensatz, der ein dreidimensionales Objekt (und bei bewegten Objekten sein Zeitverhalten) beschreibt. Es wird als Variable im Vokabular geführt und wird von den entsprechenden Worten per Name adressiert. Dementsprechend werden Animationsobjekte auch genauso wie normale Variablen automatisch gelöscht, wenn die Doppelpunktdefinition, in der sie definiert wurden, verlassen wird.

MAL-Homepage Inhaltsverzeichnis


3.1. Einrichten von Animationsobjekten

Das Wort
>anima dient zum Einrichten eines Animationsobjekts, das aus Geraden besteht (Strichfigur). Es wird mit den Koordinatenwerten der Eckpunkte und einer Verbindungsliste versorgt. Ein bewegtes Objekt wird definiert, indem als Koordinatenwerte (gleich lange) Realverbunde übergeben werden.

Syntax:

[ x1 y1 z1 x2 y2 z2 ... ] [ verb1 .. ] objname ->
Das Wort polar>anima dient zum Definieren eines Animationsobjektes einer Schaft- oder Stumpfform - eines sogenannten Polarobjektes.

Syntax:
[ form schichtd marken bitliste kurven ] objname ->
Die Parameter ´marken´, ´bitliste´ und ´kurven´ können auch weggelassen werden, die Reihenfolge ist aber entscheidend. Man kann also keine Bitliste angeben, wenn man keinen Datensatz für ´marken´ angegeben hat.

MAL-Homepage Inhaltsverzeichnis


3.2. Lesen von Animationsobjekten

Mit den Wort
anima> kann ein Animationsobjekt in einen normalen Stackeintrag zurückgewandelt werden. Je nachdem, ob es mit >anima oder polar>anima erzeugt wurde, erhält man die entsprechenden Datensätze von >anima oder polar>anima zurück. Das ist von Wichtigkeit, wenn am Animationsobjekt eine Veränderung vorgenommen wurden (z.B. Modellierung an einem Schaft).

MAL-Homepage Inhaltsverzeichnis


3.3. Darstellung

Die Darstellung von Animationsobjekten erfolgt stereoskopisch. Die Bilder müssen mit einer Rot/Grün-Brille (linkes Glas rot, rechtes Glas grün) betrachtet werden. Zum Bewegen der Objekte (drehen und verschieben), kann die Maus (Worte
anima_rotate, anima_shift und anima_shift_depth) oder die 3d-Lasermaus (Wort anima_move_object) verwendet werden.

Das Drehen eines 3d-Objektes mit der normalen 2d-Maus erfolgt mit dem Wort anima_rotate. Dabei stellt man sich am besten eine das Objekt einschließende virtuelle Kugel vor, die bei gedrückter linker Maustaste an der Vorderseite mitgenommen wird. Das Verschieben von 3d-Objekten erfolgt mit den Worten anima_shift (Links/Rechts und Auf/Ab) oder anima_shift_depth (Vor/Rück), jeweils mit gedrückter linker Maustaste. Mit der rechten Maustaste werden die Worte jeweils beendet.

Werden mehrere Objekte gleichzeitig dargestellt, so kann mit der 2d-Maus keine Auswahl getroffen werden. Man kann aber mit dem Wort anima_mark ein Objekt (oder durch wiederholtes Aufrufen auch mehrere Objekte) markieren. Es werden dann bei den nachfolgenden Aufrufen von anima_rotate oder anima_shift nur die markierten Objekte bewegt.

Beim Arbeiten mit der 3d-Maus kann das Wort anima_move_object zum Bewegen (sowohl Verdrehen als auch Schieben) der Objekte verwendet werden. Sind mehrere Objekte dargestellt, so erscheint zusätzlich ein 3d-Cursor (kleines Kreuz) im Arbeitsraum. Der Cursor kann mit der unteren Maustaste gehalten werden. Mit der oberen Maustaste kann das ausgewählte Objekt (jenes, in dessen Nähe der 3d-Cursor steht) bewegt werden. Steht der 3d-Cursor abseits aller Objete, so werden alle Objekte gemeinsam bewegt. Mit dem Wort anima_move&run können die Objekte mit der 3d-Maus bewegt werden, während sie laufen. Die Laufgeschwindigkeit kann dabei durch Auf- und Abschieben der 2d-Maus eingestellt werden.

MAL-Homepage Inhaltsverzeichnis


3.4. Bewegte Objekte

Ein Animationsobjekt, das mit
>anima eingerichtet wurde und als Koordinatenwerte Verbunde angegeben hat, kann man mit dem Wort anima_run als Film laufen lassen. Durch Auf- und Abschieben der 2d-Maus bei gedrückter linker Maustaste kann die Laufgeschwindigkeit eingestellt werden. Dabei wird nicht die Bildfrequenz verändert, sondern es werden entsprechend feine Abstufungen bei der Interpolation von Zwischenbildern gewählt, das heißt, die Anzahl der Bilder pro Sequenz wird verändert.

Mit anima_jogg kann ein Standbild erzeugt werden, wobei mit der Maus bei gedrückter linker Maustaste der Zeitpunkt innerhalb der Sequenz verschoben werden kann (unten = Angang, oben = Ende).

MAL-Homepage Inhaltsverzeichnis


3.5. Orientierungsdaten

Die Orientierungsdaten (Drehmatrix und Verschiebungsvektor) eines Animationsobjektes können mit dem Wort
anima_set_orient eingestellt und mit anima_get_orient gelesen werden.

Orientierungsdaten haben immer die Form:

[ drehmatrix verschiebungsvektor ]
wobei ´drehmatrix´ die Form
[ 
[ r11 r12 r13 ]
[ r21 r22 r23 ]
[ r31 r32 r33 ]
] 
und ´verschiebungsvektor´ die Form
[ v1 v2 v3 ]
besitzt.

Es existiert auch eine für alle dargestellten Objekte gemeinsame Gesamtorientierung. Diese kann per Bedienung eingegeben werden und zwar, indem kein Objekt mit dem 3d-Cursor angeklickt wird, das heißt der 3d-Cursor irgendwo im Raum fernab von allen Objekten steht. Ebenso, wenn nur ein einziges Objekt dargestellt wird. Das Einstellen oder Lesen der Gesamtorientierung kann mit den Worten anima_set_orient bzw. anima_get_orient erfolgen, indem ein Leerstring als Objektname angegeben wird.

Die Orientierung eines Animationsobjektes errechnet sich durch die Hintereinanderanwendung der Gesamtorientierung und der objekteigenen Orientierung.

MAL-Homepage Inhaltsverzeichnis


4. SCHAFTBEARBEITUNG

Da Stumpf- und Schaftformen in MAL in Polarkoordinatenform (streng genommen ´Zylinderkoordinatenform´) gespeichert sind, wird für derartige Objekte auch der Begriff Polarobjekte verwendet. Ein vollständiger Datensatz für die Beschreibung eines Polarobjektes besteht aus

Die Schaftform ist als Liste von Radien gespeichert, die Scheibendicke gibt den Abstand der Stützpunkte in Schaft-Längsrichtung an. Die Anzahl der Winkelschritte ergibt sich automatisch aus der Anzahl der Komponenten des Verbundes mit den Schaftdaten, die Anzahl der Scheiben ergibt sich aus der Länge einer Komponente (=Längsrille).

Worte für die Bearbeitung von Polarobjekten beginnen mit der Zeichenfolge polar_. Nicht alle arbeiten mit Animationsobjekten. Manche sind mit einem Verbund in der Form wie bei
polar>anima oder mit Teilen davon zu versorgen.

Den Worten, die für die Darstellung von Polarobjekte dienen ist gemeinsam, daß sie durch Drücken einer beliebigen Tastatur-Taste verlassen werden (die Graphik wird dabei geschlossen).

Für das interaktive Bearbeiten von Polarobjekten wird entweder der 3d-Arm oder die 3d-Maus verwendet. Die Geräte sind im Prinzip kompatibel, nur hat der 3d-Arm keine Tasten. Daher entspricht die linke Maustaste der unteren 3d-Maustaste und die mittlere Maustaste der oberen 3d-Maustaste.

Die untere (linke) Maustaste wird generell für das Halten des 3d-Cursors verwendet und die obere (mittlere) für das Aktivieren (Anklicken, Halten usw.).

MAL-Homepage Inhaltsverzeichnis


4.1. Wählen des Teilbereichs

Mit dem Wort
polar_select_part kann für die Darstellung ein rechteckiger Teilbereich eingestellt werden. Der Teilbereich wird durch die linke untere und rechte obere Ecke definiert. Die Eingabe erfolgt, indem man eine Ecke des gewünschten Teilberechs anklickt, die Maustaste hält und den Curser zur zweiten Ecke zieht. Ein strichliertes Rechteck zeigt dabei den gerade gewählten Bereich an. Wird das Wort verlassen, bevor ein Eckpunkt angeklickt wurde, so wird die ganze Form wieder dargestellt. Das Wort wirkt nur auf die Darstellung und verändert die gespeicherten Formdaten nicht.

MAL-Homepage Inhaltsverzeichnis


4.2. Kurven und Schnitte

Kurven dienen zum Ausschneiden von Teilen aus Stumpf- oder Schaftformen. Eine fertige Kurve ist ein geschlossener Linienzug. Es können mehrere Kurven gezeichnet werden, bevor mit dem Wort
polar_cut die entsprechenden Teile ausgeschnitten werden. Nach der Anwendung von polar_cut kann die Form der Kurven nicht mehr verändert werden (außer durch neu Zeichnen und neu Schneiden). Bei der gleichzeitigen Verwendung mehrerer Kurven ist die Zeichenrichtung zu beachten. Will man zum Beispiel zwei ovale Segmente gleichzeitig ausschneiden, so müssen entweder beide im, oder beide gegen den Uhrzeigersinn gezeichnet werden, sonst kann das Wort polar_cut die Teile nicht richtig zuordnen.

Es empfiehlt sich, zum Zeichnen der Kurven das Polarobjekt im Flachmodus (Wort polar_flat_mode) darzustellen. Eine Kurve kann auch um den Stumpf herum geschlossen werden. Damit man im Flachmodus wieder zum Anfangspunkt zurück findet, wird ein kleiner Ring am Gegenüberende der aufgerollten Form eingeblendet. Man muß, um das zu erreichen, aber in der Nähe des Randes (beim 0-Grad Winkel) mit der Kurve beginnen.

Zum Zeichnen einer Oberflächenkurve auf einem Polarobjekt dient das Wort polar_draw_curve. Die Kurve wird durch Stützpunkte und Tangenten in den Stützpunkten definiert. Jeder Stützpunkt wird durch Anklicken mit der 3d-Maus definiert. So lange die obere Maustaste mit gehalten wird (beim 3d-Arm die mittlere Maustaste), kann die Tangente vom Stützpunkt weg gezogen werden. Gleichzeitig wird das neue Kurvenstück (vom letzen Stützpunkt zum aktuellen) strichliert dargestellt. Nach dem Auslassen der Maustaste wird das neue Kurvenstück durchgehend gezeichnet. Die Länge der Tangente ist jeweils ein Maß für den Wirkungsbereich des Stützpunktes, also die Krümmung der Kurve im Stützpunkt (längere Tangente=weniger Krümmung).

Unfertige Kurven (also Kurven, die nicht geschlossen sind) können auch bei einem weiteren Aufruf von polar_draw_curve (zum Beispiel, nachdem das Objekt bewegt wurde) weiter gezeichnet werden.

Eine unmittelbare Korrektur ist nicht möglich. Erst nachdem der Kurvenzug geschlossen wurde, also zum Startpunkt zurückgeführt ist, können mit dem Wort polar_modi_curve die Stützpunkte und Tangenten verschoben werden. Dabei ist mit dem 3d-Cursor jeweils der gewünschte Stützpunkt anzuklicken. Daraufhin erscheint die Tangente und die beiden angrenzenden Kurvenstücke werden strichliert. Der Stützpunkt oder die Tangentenspitze können dann direkt mit der 3d-Maus genommen und verschoben werden. Setzt man den 3d-Cursor fernab von einem Stützpunkt und drückt kurz die obere (mittlere) Maustaste, so wird der Kurvenzug wieder durchgehend gezeichnet.

Das Zeichnen mit polar_draw_curve und das Verändern mit ´polar_modi_curve´ greift auf einen internen Datensatz zu, der mit anima> nicht gelesen werden kann. Die Kurven werden, so lange sie mit diesen Worten bearbeitbar sein sollen als eine Kette von Bezierkurven gespeichert. Erst mit dem Wort polar_save_curves werden sie in die normalen Koordinatendaten umgewandelt und mit ´anima>´ abfragbar. Auch polar_cut arbeitet erst nach dem Aufruf von polar_save_curves korrekt. Gesicherte Kurven sind allerdings nicht mehr veränderbar. Im Zuge dieser Umwandlung wird auch festgestellt, ob die Kurven über die 0-Grad Kante gehen. In diesem Falle werden sie in Teilstücke zerlegt. Daher kann es vorkommen, daß sich in dem mit anima> erhaltenen Datensatz mehrere Kurven befinden, obwohl z.B. nur eine gezeichnet wurde.

Die Datensätze der beiden beim Zerschneiden mit polar_cut erhaltenen Teile unterscheiden sich nur durch die Bitlisten (die eine ist exakt die Invertierung der anderen). Das heißt, es sind auch stets die nicht dargestellten Oberflächenpunkte und Marken mit gespeichert. Mit dem Wort polar_draw_complete (Gegenteil=polar_draw_incomplete) kann das ganze Objekt dargestellt werden. Dieses Wort hat aber nur Auswirkung auf die Darstellung, nich auf den Datensatz.

Zum Zusammenfügen von Teilen oder zum Verschieben der Bezugsachse existiert das Wort polar_&. Es berechnet ein neues Objekt, mit einer neuen (wählbaren) Winkelanzahl, Scheibendicke und Bezugsachse. Die Berechnung ist aber aufwendig und dauert einige Sekunden.

MAL-Homepage Inhaltsverzeichnis


4.3. Anbringen von Modellierungen

Für das Zurechtschieben von Modellierungen existieren die Worte
polar_adapt, polar_adapt_linear und polar_adapt_ring, wobei die ersten beiden für das punktgenaue Zurechtschieben und das dritte für das grobe Zurechtschieben des Sitzringes dient. Beide haben die gleiche Syntax:

stumpf muster namen ->
stumpf und muster sind Namen von Polarobjekten. Die Korrekturen sind in muster anzugeben und werden an die Markierungspunkte von stumpf angepaßt, wobei jene Punkte berücksichtigt werden, deren Namen in der Liste namen angeführt sind. Das Ergebnis wird in das Polarobjekt muster gespeichert.

Die Anpassung bei polar_adapt_ring erfolgt, indem eine Verkippung und Verschiebung des Gesamtmusters berechnet wird, die minimale Abstände zwischen den Ist- und Soll-Markenpositionen hat.

Bei polar_adapt_linear sind nur 1 bis 3 Markierungspunkte möglich. Die Verschiebung der Muster erfolgt durch eine lineare Koordinatentransformation. Das heißt, daß eine Gerade auch nach dem Zurechtschieben wieder eine Gerade wird. Man muß aber beachten, daß auf der der Änderung gegenüber liegenden Seite des Schaftes ein stufiger Übergang im Muster entsteht. Dieses Wort ist also nur für die Anpassung lokaler Korrekturen geeignet.

polar_adapt verwendet eine Bezierfunktion, um zwischen den Marken gleitende Übergänge zu berechnen.

Um eine einwandfreie Form bei der Anbringung von Korrekturen zu erreichen ist es erforderlich, zuvor den Einfluß der Bezugsachse zu reduzieren. Die Worte polar_get_offset und polar_set_offset dienen dazu, die einzelnen Scheiben von Polarformen zu zentrieren. polar_get_offset berechnet die bestehenden Abweichungen der Scheibenschwerpunkte von der Achse und polar_set_offset verschiebt die Scheiben um einen angebbaren Wert. Es kann daher sowohl für das "Strecken" als auch das Zurückrechnen auf die ursprüngliche Knickung verwendet werden. Diese Art von Normalisierung sollte auch beim Berechnen der Korrekturmuster (Differenzen) angewandt werden.

Mit dem Wort polar_mirror kann eine Polarform inklusive aller Marken, Bitlisten und Kurven gespiegelt werden, was u.a. bei der Anbringung von linken Korrekturen auf einen rechten Stumpf erforderlich ist.

MAL-Homepage Inhaltsverzeichnis


4.4. Längen- und Umfangmasse

Zum Messen von Umfangmaßen dient das Wort
polar_get_circum. Es ist mit einer Liste von Höhenangaben zu versorgen und übergibt die in diesen Höhen gemessenen Umfangmaße. Mit polar_rel_circum oder polar_abs_circum können die Umfangmaße an bestimmten Höhen relativ beziehungsweise absolut eingestellt werden. In den nicht angegebenen Bereichen werden sinusförmige Interpolationskurven verwendet, um Zwischenwerte zu berechnen.

Eine Längenveränderung kann mit dem Wort polar_set_length durchgeführt werden. Es ist mit Paaren von alten und neuen Höhenangaben zu versorgen und dehnt oder staucht die Bereiche zwischen den alten Höhen so, daß an den neuen Positionen die gleichen Querschnittformen zu liegen kommen, wie vorher an den alten Positionen. Die Berechnung der Zwischenwerte erfolgt durch lineare Interpolation.

MAL-Homepage Inhaltsverzeichnis


4.5. Marken und Positionen

Die interaktive Zuordnung von Namen zu Markierungspunkten kann mit dem Wort
polar_marker_sequence erfolgen. Dem Wort ist eine Liste von Markennamen zu übergeben. Der Benutzer wird aufgefordert, die zu den Namen gehörenden Markierungspunkte der Reihenfolge nach anzuklicken. Voraussetzung ist, daß sich zumindest gleich viele Markierungspunkte am Polarobjekt befinden, wie in der Namensliste Einträge sind.

Mit dem Wort polar_locations können Positionen auf der Schaftoberfläche bestimmt werden, was für die interaktive Veränderung von Umfangs- oder Längenmaßen erforderlich ist. Die Positionen werden mit der 3d-Maus oder dem 3d-Arm eingegeben und nach Abschluß des Wortes (mit beliebiger Tastatur-Taste) in Form von Winkel- und Höhenmaßen am Stack übergeben.

MAL-Homepage Inhaltsverzeichnis