Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

CBSplineWrapperEffect Class Reference

Implementiert den B-Spline-Wrapper-Effekt. More...

#include <CBSplineWrapperEffect.h>

Inheritance diagram for CBSplineWrapperEffect::

GLEffect List of all members.

Public Types

Public Methods

Protected Methods

Protected Attributes

Protected Slots

Private Methods

Private Attributes

Private Slots


Detailed Description

Die Klasse CBSplineWrapperEffect implementiert den B-Spline-Wrapper-Effekt mit seiner gesamten funktionalität. Da sie von GLEffect abgeleitet ist, kann sie leicht in das GLFramework integriert werden.


Member Enumeration Documentation

enum CBSplineWrapperEffect::enmAnimationMode
 

Die Enumeration enmAnimationMode enthält alle Konstanten, die den Animationsmodus der Klasse CBSplineWrapperEffect steuern.

Enumeration values:
amOnce   Einfacher Abspielmodus. Die Animation wird nur einmal abgespielt.
amLoop   Die Animation wird immer wieder von vorne abgespielt.
amPingPong   Die Animation wird wiederholt, der Animtionscursor läuft immer wieder hin und zurück.

enum CBSplineWrapperEffect::enmTranslationMode
 

Die Enumeration enmTranslationMode enthält alle Konstanten, die den Manipulationsmodus der Klasse CBSplineWrapperEffect für Kontrolvertices steuern.

Enumeration values:
tmMove   Vertex-Verschiebemodus.
tmScale   Vertex-Skalierungsmodus.
tmRotate   Vertex-Rotationsmodus.

enum CBSplineWrapperEffect::enmDeformationMode
 

Die Enumeration enmDeformationMode enthält alle Konstanten, die den Deformationsmodus der Klasse CBSplineWrapperEffect steuern.

Enumeration values:
dmLinear   Linearer Deformationsmodus.

enum CBSplineWrapperEffect::enmEffectMode
 

Die Enumeration enmEffectMOde enthält alle Konstanten, die den Effektmodus der Klasse CBSplineWrapperEffect steuern.

Enumeration values:
emKeyFrame   Key-Frame-Modus.
emMorphing   Morphing-Modus.

enum CBSplineWrapperEffect::enmTranslationState
 

Die Enumeration enmTranslationState enthält alle Konstanten, die den aktuellen Bearbeitungszustand der Klasse CBSplineWrapperEffect angeben.

Enumeration values:
tsNothing   Nichts passiert...
tsMoving   Kontrolvertices werden gerade verschoben.
tsScaling   Kontrolvertices werden gerade skaliert.
tsRotating   Kontrolvertices werden gerade rotiert.
tsBoxing   Ein Selektionsrahmen wird gearde gezogen.
tsInterpolating   Keyframes werden gerade Interpoliert.

enum CBSplineWrapperEffect::enmMorphingEditState
 

Die Enumeration enmMorphingEditState enthält alle Konstanten, die den aktuellen Morphingbearbeitungszustand der Klasse CBSplineWrapperEffect angeben.

Enumeration values:
esSource   Es wird gerade das Quellgitter bearbeitet.
esDestination   Es wird gerade das Zielgitter bearbeitet.

enum CBSplineWrapperEffect::enmKnotMatrixType
 

Die Enumeration enmKnotMatrixType enthält alle Konstanten, die den aktuellen Knotenmatrixbearbeitungszustand der Klasse CBSplineWrapperEffect angeben.

Enumeration values:
kmCol   Es wird gerade die Spaltenmatrix bearbeitet.
kmRow   Es wird gerade die Zeilenmatrix bearbeitet.


Constructor & Destructor Documentation

CBSplineWrapperEffect::CBSplineWrapperEffect ( GLFramework * parent )
 

Der Konstruktor erzugt eine Instanz der Klasse CBSplineWrapper. Die Struktur effectInfo wird zunächst initialisert, der Effekt unterstützt zwei Bildlisten. Alle Zeigerreferenzen werden auf NULL gesetzt. Danach werden die Deformationsalgorithmen-Klassen erzegut und in die Algorithmenliste aufgenommen. Anschließend werden alle Steuerelemente verborgen.

Parameters:
parent   Referenz auf das Elternfenster.


Member Function Documentation

void CBSplineWrapperEffect::createControls ( QWidget * parentWindow ) [virtual]
 

Die Methode createControls() erzeugt die vom Effekt zur Verfügung gestellten Steuerelemente. Sie erzeugt ein Panel in der rechten Leiste des Frameworks, welches Checkboxen zum Konfigurieren des Zeichenmodus des Effekts beinhaltet und ein Panel zum einstellen der Animationsabspielparameter. Ferner erzegut sie ein Top-Level-Toolfenster, welches Steuerelemente zur Einstellung der Bearbeitungsmodi, der Gitter-, B-Spline- und Keyframe-Parameter bereitstellt. Die Steuerelemente werden anschließend mit Standardwerten vorbelegt.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::stop ( ) [virtual]
 

Die Methode stop() hält eine laufende Animation an. Das Effekttoolfenster wird wieder eingeblendet, der Animationstimer gestoppt.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::play ( ) [virtual]
 

Die Methode play() startet den Abspielvorgang im Morphing, oder Keyframemodus. Dieser wird nur dann gestartet, wenn sich mehr als 1 Keyframe in der Liste befindet. Die Methode startet den Animationstimer, der die Animation in regelmäßigen Abständen aktualisiert. Das Toolfenster des Effekts wird durch die Methode versteckt.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::reset ( ) [virtual]
 

Die Methode reset() setzt den Effekt in seinen Ausgangszustand zurück. Eine mögliche Animation wird zunächst angehalten. Danach werden alle erzeugten OpenGL-Texturobjekte gelöscht. Der aktive Deformer wird von den Gittern getrennt. Die Gitter werden von ihren Painte-Objekten ebenfalls getrennt. Danach werden initialize() und initializeGUI() aufgerufen, um die Standardzustände des Effekts zu initialisieren.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::pause ( ) [virtual]
 

Die Methode stop() unterbricht eine laufende Animation. Das Effekttoolfenster wird dabei nicht wieder eingeblendet, es wird lediglich der Animationstimer gestoppt.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::render ( ) [virtual]
 

Die Methode render() rendert den Effekt. Je nach Konfiguration der Darstellungsmodi wird zunächst das texturierte Bildgittergezeichnet, danach das Bildgitter im Wireframemodus, dann das Kontrollgitter und anschließend die Kontrollgitterpunkte. Die Methode zeichnet ebenfalls ein Fadenkreuz und die Punkteselektionsbox.

Im Morphingmodus wird das texturierte Bildgitter zweimal gezeichnet. Einmal mit der aktuellen Textur der Quellbildsequenz, einmal mit der Textur der aktuellen Textur der Zielbildsequenz. Dabei variiert jedesmal der Alphablending wert, in abhängigkeit des Morphingzeitindex. Für das Rendern des Quellgitters wird TexelmeshA verwendet, für das Rendern des Zielgitters wird TexelmeshB verwendet.

Die Methode render() ruft jedesmal ebenfalls die Methode deform() des gerade aktiven Deformationsalgorithmus auf. Im Morphingmodus werden dabei jedesmal die Texelkoordinaten neuberechnet, so daß die Verzerrung keinerlei Auswirkungen auf das Bild hat.

Das Zeichnen der Gitter wird mit Hilfe des Objekts CGridPainter bewerkstelligt.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::mouseMoveEvent ( QMouseEvent * event ) [virtual]
 

Der Event-Handler mouseMoveEvent() behandelt das verschieben des Mauszeigers. Hier wird das Transformieren von Kontrollpunkten und das ziehen einer Selektionsbox implementiert.

Remarks:
Die Mouseevents werden ignoriert, wenn gerade eine Animation abgespielt wird.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::mousePressEvent ( QMouseEvent * event ) [virtual]
 

Der Event-Handler mousePressEvent() behandelt das Niederdrücken von Maustasten. Hier wird das selektieren von Punkten implementiert. Ebenfalls werden hier die Kontrollpunktmanipulationsmodi initialisiert.

Remarks:
Die Mouseevents werden ignoriert, wenn gerade eine Animation abgespielt wird.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::mouseReleaseEvent ( QMouseEvent * Event ) [virtual]
 

Der Event-Handler mouseReleaseEvent() behandelt das Loslassen von Maustasten. Hier wird der Bearbeitungszustand zurückgesetzt und der GLView aktualisiert.

Remarks:
Die Mouseevents werden ignoriert, wenn gerade eine Animation abgespielt wird.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::keyPressEvent ( QKeyEvent * event ) [virtual]
 

Der Event-Handler mousePressEvent() behandelt das Drücken von Tasten. Hier werden die in der Anwendung zugänglichen Schnelltasten implementiert, welche die wichtigsten Optionen aktivieren.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::selectAll ( ) [protected, slot]
 

Die Methode selectAll() fügt alle Kontrollpunkte zur Selektion hinzu.

void CBSplineWrapperEffect::unselectAll ( ) [protected, slot]
 

Die Methode unselectAll() setzt die Selektion aller Kontrollpunkte zurück.

void CBSplineWrapperEffect::setBorderLock ( bool Enabled ) [protected, slot]
 

Die Methode setBorderLock() aktiviert, oder deaktiviert die Bewegungsbeschränkung für die Kontrollgitterandpunkte. Beim aktivieren setzt diese gleichzeitig die Randpunkte an ihre ursprüngliche Position zurück.

void CBSplineWrapperEffect::setPaintImage ( bool Enabled ) [protected, slot]
 

Die Methode setPaintImage() aktiviert, oder deaktiviert das Zeichnen des Bildes

void CBSplineWrapperEffect::setPaintImageMesh ( bool Enabled ) [protected, slot]
 

Die Methode setPaintImageMesh() aktiviert, oder deaktiviert das Zeichnen des Bildgitters.

void CBSplineWrapperEffect::setPaintControlMesh ( bool Enabled ) [protected, slot]
 

Die Methode setControlMesh() aktiviert, oder deaktiviert das Zeichnen des Kontrollgitters.

void CBSplineWrapperEffect::setPaintControlMeshVertices ( bool Enabled ) [protected, slot]
 

Die Methode setControlMeshVertices() aktiviert, oder deaktiviert das Zeichnen der Kontrollpunkte.

void CBSplineWrapperEffect::setControlMeshVerticalResolution ( int NewResolution ) [protected, slot]
 

Die Methode setControlMeshVerticalResolution() ändert die vertikale Auflösung des Kontrollgitters. Hierzu wird die Methode resizeControlMesh() aufgerufen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::setControlMeshHorizontalResolution ( int NewResolution ) [protected, slot]
 

Die Methode setControlMeshHorizontalResolution() ändert die horizontale Auflösung des Kontrollgitters. Hierzu wird die Methode resizeControlMesh() aufgerufen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::setImageMeshHorizontalResolution ( int NewResolution ) [protected, slot]
 

Die Methode setImageMeshHorizontalResolution() ändert die horizontale Auflösung des Bildgitters. Hierzu wird die Methode resizeImageMesh() aufgerufen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::setImageMeshVerticalResolution ( int NewResolution ) [protected, slot]
 

Die Methode setImageMeshVerticalResolution() ändert die vertikale Auflösung des Bildgitters. Hierzu wird die Methode resizeImageMesh() aufgerufen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::setAnimationMode ( int Mode ) [protected, slot]
 

Die Methode setAnimationMode() setzt einen der drei Animationsmodi.

Note:
Der Parameter Mode sollte ein Wert der Enumeration enmAnimationMode sein.

void CBSplineWrapperEffect::setTranslationMode ( int Mode ) [protected, slot]
 

Die Methode setTranslationMode() ändert den Punktmanipulationsmodus und aktualisiert die zugehörige. Schaltfläche.

Note:
Der Parameter Mode sollte ein Wert der Enumeration enmTranslationMode sein.

void CBSplineWrapperEffect::setDeformationMode ( int mode ) [protected, slot]
 

Die Methode setDeformationMode() ändert den Deformationsalgorithmus des Effekts und aktualisiert die zugehörigen Steuerelemente. Eine bestehende Kontrollpunktselektion wird zurückgesetzt. Im Falle von B-Spline-Deformation wird geprüft, ob die Kontrollgitterauflösung zulässig ist, und danach angepaßt, wenn nötig.

Note:
Der Parameter Mode sollte ein Wert der Enumeration enmDeformationMode sein.

void CBSplineWrapperEffect::setEffectMode ( int Mode ) [protected, slot]
 

Die Methode setEffectMode() ändert den Effektmodus und aktualisiert die zugehörigen Steuerelemente. Der jeweilige Effektmodus wird mit seinen Standardwerten initialisiert. Im Falle von Keyframe-Interpolation wird eine Keyframenavigationsleiste eingeblendet. Im Falle von Morphing wird eine Morphingnavigationsleiste angezeigt. Bevor in den Morphingmodus geschaltet wird, wird geprüft, ob in jeder Bildliste des Frameworks mindestens ein Bild vorhanden ist. Ist dies der Fall, so erscheint eine Meldung und der Effektmodus wird nicht umgestellt.

Note:
Der Parameter Mode sollte ein Wert der Enumeration enmEffectMode sein.

void CBSplineWrapperEffect::setActiveKnotMatrix ( int Matrix ) [protected, slot]
 

Die Methode setActiveKnotMatrix() setzt die zu bearbeitende Knotenmatrix. Dabei wird der Inhalt des Tabellewidgets entsprechend aktualisiert.

Note:
Der Parameter Matrix sollte ein Wert aus der Enumeration enmKnotMatrixType sein.

void CBSplineWrapperEffect::setSplineOrder ( int Order ) [protected, slot]
 

Die Methode setSplineOrder() ändert die Ordnung der B-Spline-Kurven. Im Falle, dass Keyframes gesetzt wurden wird der Wert Order auf das Minmum der Kontrollgittergröße limitiert. Ebenfalls werden die Spinboxen zur Einstellung der Kontrolgitterauflösung nach unten hin durch Order beschränkt. Die Routine setzt anschließend die Ordnung des B-Spline-Deformationsalgorithmus und berechnet die Deformation neu. Ebenfalls wird die Ansicht der Knotenmatrixtabelle aktualisiert.

Falls Morphing aktiviert ist, so werden die Koordinaten aller Texelgitter neu berechnet.

void CBSplineWrapperEffect::setAnimationSpeed ( int Speed ) [protected, slot]
 

Die Methode setAnimationSpeed() setzt die Abspielgeschwindigkeit für Animationen.

void CBSplineWrapperEffect::insertKeyFrame ( ) [protected, slot]
 

Die Methode insertKeyFrame() erzeugt einen Keyframe anhand des aktuellen Kontrollgitters. Das Keyframe wird an der Stelle eingefügt, an der sich der Framecursor befindet. Der Cursor wird um CURSOR_STEP Zeiteinheiten nach rechts verschoben. Die Zeitskalenansicht wird aktualisiert.

void CBSplineWrapperEffect::deleteKeyFrame ( ) [protected, slot]
 

Die Methode deleteKeyFrame() löscht den gerade selektierten Keyframe. Die Zeitskalenansicht wird aktualisiert.

void CBSplineWrapperEffect::gotoZero ( ) [protected, slot]
 

Die Methode gotoZero() verschiebt den Framecursor an die Position 0.0. Die Zeitskalenansicht wird aktualisiert.

void CBSplineWrapperEffect::gotoFirstKeyFrame ( ) [protected, slot]
 

Die Methode gotoFirstKeyFrame() setzt den Framecursor auf das erste Keyframe. Das Keyframe wird selektiert. Die Zeitskalenansicht wird aktualisiert.

void CBSplineWrapperEffect::gotoNextKeyFrame ( ) [protected, slot]
 

Die Methode gotoNextKeyFrame() setzt den Framecursor auf das Keyframe, welches direkt nach dem gerade selektierten Keyframe folgt. Das neue Keyframe wird selektiert. Die Zeitskalenansicht wird aktualisiert.

Ist kein Keyframe selektiert gewesen, so zeigt die Methode keinerlei Wirkung.

void CBSplineWrapperEffect::gotoLastKeyFrame ( ) [protected, slot]
 

Die Methode gotoLastKeyFrame() setzt den Framecursor auf das letzte Keyframe. Das Keyframe wird selektiert. Die Zeitskalenansicht wird aktualisiert.

void CBSplineWrapperEffect::gotoPreviousKeyFrame ( ) [protected, slot]
 

Die Methode gotoNextKeyFrame() setzt den Framecursor auf das Keyframe, welches dem gerade selektierten Keyframe vorangeht. Das neue Keyframe wird selektiert. Die Zeitskalenansicht wird aktualisiert.

Ist kein Keyframe selektiert gewesen, so zeigt die Methode keinerlei Wirkung.

void CBSplineWrapperEffect::controlMeshToSource ( ) [protected, slot]
 

Die Methode controlMeshToSource() kopiert das aktuelle Kontrollgitter in das Morphingquellgitter. Das aktuelle Arbeitstexelmesh wird ebenfalls dem Morphingquelltexelmesh zugewiesen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::controlMeshToDestination ( ) [protected, slot]
 

Die Methode controlMeshToDestination() kopiert das aktuelle Kontrollgitter in das Morphingzielgitter. Das aktuelle Arbeitstexelmesh wird ebenfalls dem Morphingzieltexelmesh zugewiesen. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::sourceToControlMesh ( ) [protected, slot]
 

Die Methode sourceToControlMesh() kopiert das Morphingquellkontrollgitter in das aktuelle Kontrollgitter. Das Morphingquelltexelmesh wird dem Arbeitstexelmesh zugewiesen. Ferner wird das erste Bild der Quellmorphingbildsequenz aktiviert. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::destinationToControlMesh ( ) [protected, slot]
 

Die Methode destinationToControlMesh() kopiert das Morphingzielkontrollgitter in das aktuelle Kontrollgitter. Das Morphingzieltexelmesh wird dem Arbeitstexelmesh zugewiesen. Ferner wird das letzte Bild der Zielmorphingbildsequenz aktiviert. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::clearKeyFrames ( ) [protected, slot]
 

Die Methode clearKeyFrames() löscht alle Keyframes aus der Keyframeliste. Die Zeitskalenansicht wird danach aktualisiert. Der Benutzer wird vorher gefragt, ob er wirklich alle Keyframes löschen möchte.

void CBSplineWrapperEffect::resetControlMesh ( ) [protected, slot]
 

Die Methode resetControlMesh() setzt das Kontrollgitter zurück auf ein reguläres rechteckiges Gitter. Der Effekt wird anschließend gerendert.

void CBSplineWrapperEffect::resetKnotMatrix ( ) [protected, slot]
 

Die Methode resetKnotMatrix() setzt beide Knotenmatrizen auf uniforme und normalisierte Matrizen zurück. Hierzu wird die Methode buildUniformNodeMatrices() der Klasse CBSplineDeformer benutzt. Das Tabellenwidget wird mittels knotMatrixToTable() aktualisiert. Der Effekt wird anschließend neu gerendert.

void CBSplineWrapperEffect::finishInterpolate ( ) [private, slot]
 

Die Methode finishInterpolate() finalisiert das manuelle Interpolieren. Im Morphing-Modus wird dabei zu dem Kontrollgitter zurückgesprungen, welches zuletzt bearbeitet wurde, d.h. entweder zum Quellkontrollgitter, oder zum Zielkontrollgitter.

void CBSplineWrapperEffect::interpolate ( float TimeIndex ) [private, slot]
 

Die Methode interpolate() interpoliert das Kontrollgitter am Zeitpunkt TimeIndex. Dabei werden zunächst das Keyframepaar ermittelt, in dessen Zeitintervall sich TimeIndex befindet. Danach wird mittels der Klasse CGridInterpolator das Kontrollgitter zwischen den beiden Keyframes interpoliert. Anschließend wird das Bildgitter neu deformiert. Der Effekt wird danach gerendert. Die Methode sorgt auch dafür, dass im Falle von geladenen Bildsequenzen das zum Zeitpunkt Timeindex zugehörige Bild ermittelt wird. Die Bilder der Bildsequenzen werden dabei gleichmäßig auf den durch die Keyframes gebildete Gesamtzeitspanne verteilt.

void CBSplineWrapperEffect::animate ( ) [private, slot]
 

Die Methode animate() aktualisiert die Animation. Über die interpolate() Methode wird der neue Zustand berechnet. Danach wird die Framecursorposition aktualisiert in Abhängigkeit vom gesetzten Animationsmodus.

void CBSplineWrapperEffect::updateKnotMatrixValue ( int row,
int col ) [private, slot]
 

Die Methode updateKnotMatrix() kopiert das durch row und col spezifizierte Element aus dem Tabellenwidget, in die gerade aktive Knotenmatrix. Es werden zuvor einige Plausibilitäts- und Bereichsprüfungen durchgeführt. Falls diese Fehlschlagen, so wird der Benutzer darüber informiert, und die Änderung rückgängig gemacht. Danach wird der Effekt neu gerendert.

void CBSplineWrapperEffect::initialize ( ) [protected, virtual]
 

Die Methode initialize() initialisiert den Effekt mit Standardwerten. Auch die GUI-Elemente werden mit Werten vorbelegt. Die Methode erzeugt alle Gitter und nötigen dynamischen Strukturen.

Reimplemented from GLEffect.

void CBSplineWrapperEffect::initializeGUI ( ) [protected, virtual]
 

Die Methode initializeGUI() belegt alle Steuerelemente des Effekts mit Standardwerten. Der Effekt wird in den Keyframemodus zurückgesetzt. Der Manipulationsmodus wird auf "Move" gesetzt. Der Lineare Deformationsalgorithmus wird aktiviert. Alle Keyframes werden gelöscht. Die Animationseinstellungen werden zurückgesetzt. Die Zeichenmoduseinstellungen ebenfalls. Die Gitter werden alle 2 x 2 dimensioniert. Die Splineordnung wird ebenfalls auf 2 zurückgesetzt.

void CBSplineWrapperEffect::getControlPlaneCoordinates ( ) [protected]
 

Die Methode getControlPlaneCoordinates() projiziert die Mauskoordinaten zurück auf die Kontrollgitterebene. Das Ergebnis wird in ControlGridPlaneU und ControlGridPlaneV abgelegt.

Remarks:
Die Routine ermittelt mit Hilfe der Frameworkfunktion get3DMouseCoords() einen Strahl und berechnet seinen Schnittpunkt mit der Kontrollgitterebene mittels der Methode getPlaneRayIntersection()

void CBSplineWrapperEffect::enableControlMeshResolutionPanel ( bool Enabled ) [protected]
 

Die Methode enableControlMeshResolutionPanel() aktiviert oder deaktiviert die Spinboxen, welche für die Einstellung der horizontalen und der vertikalen Kontrollgitterauflösung zuständig sind.

void CBSplineWrapperEffect::enableKnotMatrixPanel ( bool Enabled ) [protected]
 

Die Methode enableKnotMatrixPanel aktiviert oder oder deaktiviert die Steuerelemente die zur Bearbeitung der Knotenmatrizen dienen.

void CBSplineWrapperEffect::resizeControlMesh ( int newWidth,
int newHeight ) [protected]
 

Die Methode resizeControlMesh() ändert die Größe des Kontrollgitters.

Hierzu wird das Bildgitter zunächst zurückgesetzt, so dass es wieder regulär ist. Dann wird ein Backup des Kontrollgitters erzeugt. Es wird ebenfalls ein reguläres temporäres Kontrollgitter erzeugt, welches dieselben Ausmaße aufweist wie das gerade aktive. Danach wird ein neues Kontrollgitter mit der neuen Auflösung erzeugt. Das neue Kontrolgitter wird nun an den aktiven Deformationsalgoritmus zusammen mit dem zurückgesetzen Bildgitter verbunden. Nun wird ein CLinearDeformer -Objekt dazu verwendet das neue Kontrollgitter durch mit dem alten zu verformen. Danach hat das neue Kontrollgitter eine ähnliche Form, wie das alte. Die temporären Objekte werden freigegeben. Die neuen Gitter werden neu gebunden an die CGridPainter -Objekte.

Im Morphingmodus werden zusätzlich die Texelkoordinaten neu berechnet.

Im B-Splinemodus werden neue Knotenmatrizen erzeugt und die Tabelle aktualisiert.

void CBSplineWrapperEffect::resizeImageMesh ( int newWidth,
int newHeight ) [protected]
 

Die Methode resizeImageMesh() ändert die Auflösung des Bildgitters. Hierzu wird zunächst der aktive Deformationsalgorithmus von allen gittern getrennt. Es wird ein Backup des Kontrollgitters erzeugt, danach wird das Kontrollgitter auf ein reguläres Gitter zurückgesetzt. Nun wird ein neues Bildgitter mit der gegebenen Auflösung erzeugt. Ebenfalls werden die Texelgitter neu skaliert und mit Standardwerten belegt. Die Gitter werden wieder an den aktiven Deformer gebunden. Danach wird der alte Zustand der Kontrollgitterpunkte wiederhergestellt. Das Bildgitter wird dann mit dem aktiven Deformer neu berechnet. Zum Schluss werden die Bindungen an die CGridPainter -Objekte wiederhergestellt.

Im Morphingmodus werden zusätzlich die Texelkoordinaten aller Texelgitter nach dem defomrieren neu berechnet, so daß dei Textur unverzerrt erscheint.

void CBSplineWrapperEffect::setActiveDeformer ( CControlGridDeformer< 2, GLfloat > * newDeformer ) [protected]
 

Die Methode setActiveDeformer() ändert den aktiven Deformationsalgorithmus. Dabei werden zunächst die Gitterbindungen zum alten Algorithmus aufgelöst. Danach wird ein Backup des Kontrollgitters erzeugt. Das Kontrollgitter und das Bildgitter werden anschließend auf reguläre Gitter zurückgesetzt. Nun wird der neue aktive Deformer gesetzt und die Gitter mit ihm verbunden. Danach wird der alte Zustand des Kontrollgitters wiederhergestellt und das Bildgitter mit dem neuen Deformationsalgorithmus verzerrt. Schließlich werden die Bindungen an die CGridPainter -Objekte wiederhergestellt.

Im Morphing-Modus werden die Texelkoordinaten aller Texelgitter nach dem Deformieren neu berechnet.

void CBSplineWrapperEffect::selectBoxedVertices ( bool clear = true ) [protected]
 

Die Methode selectBoxedVertices() ermittelt alle Kontrollpunkte, die sich in der Selektionsbox befinden und fügt diese zur Selektion hinzu. Der Parameter clear legt fest, ob zuvor die bereits bestehende Selektion zurückgesetzt werden soll.

void CBSplineWrapperEffect::lockBorderVertices ( ) [protected]
 

Die Methode lockBorderVertices() setzt die Randkontrollgitterpunkte an ihre ursprünglichen Koordinaten, so dass diese nur noch entlang der rechteckigen Gitterkanten verschoben werden können. Die Eckpunkte werden dadurch unbeweglich gemacht.

void CBSplineWrapperEffect::buildRegularMesh ( CGrid< CVector< 2, GLfloat > > *& Mesh,
GLfloat origX,
GLfloat origY,
GLfloat width,
GLfloat height,
int ResH,
int ResV ) [protected]
 

Die Methode buildRegularMesh() erzeugt mit Hilfe der Klasse CMeshBuilder ein regelmäßiges rechteckiges Gitter. Die Parameter origX und origY geben die linke obere Ecke des Gitters in Weltkoordinaten an. Die Parameter width und height geben die Ausdehnung des Gitters in Weltkooridnaten an. Die Parameter ResH und ResV legen schließlich die Auflösung des Gitters fest. Die Referenz auf das dynamisch erzegute CGrid -Objekt wird in Mesh abgelegt.

void CBSplineWrapperEffect::makeRegularMesh ( CGrid< CVector< 2, GLfloat > > *& Mesh,
GLfloat origX,
GLfloat origY,
GLfloat width,
GLfloat height ) [protected]
 

Die Methode makeRegularMesh() verhält sich analog zur Methode buildRegularMesh(). Sie erzeugt jedoch kein neues CGrid-Objekt, sondern berechnet die Vertexkoordinaten des über Mesh spezifizierten Gitters neu. Aus diesem Grunde entfällt auch die Angabe der Gitterauflösung.

Precondition:
Mesh muss auf ein gültiges CGrid- Objekt zeigen.

bool CBSplineWrapperEffect::getPlaneRayIntersection ( CVector< 3, float > rayOrigin,
CVector< 3, float > rayDirection,
CVector< 3, float > planeOrigin,
CVector< 3, float > planeU,
CVector< 3, float > planeV,
float & resultU,
float & resultV ) [protected]
 

Die Methode getPlaneRayIntersection() berechnet den Schnittpunkt zwischen einem durch rayOrigin und rayDirection spezifizierten Strahl und einer durch planeOrigin, planeU und PlaneV parametrisierten Eben. Das Resultat wird in resultU und resultV zurückgegeben, d.h. der Schnittpunkt wird in Ebenenkoordinaten zurückgeliefert. Die Methode gibt true zurück, wenn ein Schnittpunkt existiert, false sonst. In diesem Fall sind resultU und resultV undefiniert.

bool CBSplineWrapperEffect::getControlPointAtMouse ( float threshold,
float mx,
float my,
int & pntCol,
int & pntRow ) [protected]
 

Die Methode getControlPointAtMouse() liefert die Gitterindices des Kontrollunkts zurück, der sich unter dem Mauszeiger befindet. Der Parameter threshold gibt dabei einen Schwellwert an, der bestimmt wie nah ein Punkt an der Maus sein muss damit er als angewählt angesehen wird. Die Parameter mx und my müssen die bereits auf die Kontrollgitterebene umgerechneten Mauskoordinaten sein. Die Methode liefert das Ergebnis in pntCol und pntRow zurück. Die Methode gibt true zurück, falls ein Punkt getroffen wurde, false sonst. In diesem Fall sind pntCol und pntRow gleich -1.

Remarks:
Die Methode bestimmt, ob sich ein Punkt unter dem Mauszeiger befindet, indem sie zunächst den Punkt ermittelt der die geringste Distanz zum Mauszeiger hat, und dann prüft, ob die Distanz den Schwellwert unterschreitet.

void CBSplineWrapperEffect::selectControlPoint ( int x,
int y ) [protected]
 

Die Methode selectControlPoint() markiert den über x und y spezifizierten Kontrollgitterpunkt. Dazu wird er in die Liste der markierten Punkte aufgenommen und seine Farbe auf die eines Markierten Punkts gesetzt.

void CBSplineWrapperEffect::moveSelectedControlPoints ( CVector< 2, GLfloat > Delta ) [protected]
 

Die Methode moveSelectedControlPoints() verschiebt alle markierten Kontrollgitterpunkte um den Vektor Delta. Dazu wird die Liste der markierten Punkte durchlaufen und auf jeden Punkt der Vektor Delta addiert.

void CBSplineWrapperEffect::rotateSelectedControlPoints ( float Angle,
CVector< 2, GLfloat > Center ) [protected]
 

Die Methode rotateSelectedControlPoints() rotiert alle markierten Kontrollgitterpunkte um den Punkt Center um den Winkel Angle. Dazu wird von jedem selektierte Punkt zunächst der Vektor Center abgezogen. Anschließend wird jeder selektierte Punkt mit einer 2x2 Drehmatrix multipliziert. Schließlich wird der Vektor Center wieder auf jeden Punkt aufaddiert.

void CBSplineWrapperEffect::scaleSelectedControlPoints ( float stretchX,
float stretchY,
CVector< 2, GLfloat > Center ) [protected]
 

Die Methode scaleSelectedControlPoints() skaliert alle markierten Kontrollgitterpunkte um den Punkt Center mit den Faktoren stretchX und stretchY. Dazu wird von jedem selektierte Punkt zunächst der Vektor Center abgezogen. Anschließend wird jeder selektierte Punkt mit einer 2x2 Skalierungsmatrix multipliziert. Schließlich wird der Vektor Center wieder auf jeden Punkt aufaddiert.

void CBSplineWrapperEffect::resolveGridBindings ( ) [protected]
 

Die Methode resolveGridBindigs() löst alle Bindungen der verschiedenen Gitter auf. Hierzu werden die Bindungen an die CMeshPainter -Objekte aufgelöst und ebenfalls an die Deformer-Klassen.

void CBSplineWrapperEffect::bindActiveDeformer ( ) [protected]
 

Die Methode bindActiveDeformer() verbindet die Gitter mit dem gerade aktiven Deformationsalgorithmus, d.h. Das Bildgitter und das Kontrollgitter werden dem Algorithmus zugewiesen.

void CBSplineWrapperEffect::unbindActiveDeformer ( ) [protected]
 

Die Methode unbindActiveDeformer() löst die zum aktiven Deformationsalgorithmus bestehenden Gitterverbindungen auf, d.h. das Kontrollgitter und das Bildgitter werden vom Algorithmus getrennt.

void CBSplineWrapperEffect::initializeKeyFrameMode ( ) [protected]
 

Die Methode intializeKeyFrameMode() initialisiert den Keyframe-Modus des Effekts. Dabei werden alle Keyframes gelöscht, das Verschieben der Keyframes aktiviert und das Sperren der Randpunkte wiede deaktiviert. Der Framecursor wird an die Position 0 zurückgesetzt. Ebenfalls werden die Steuerelemente zum Einstellen der Kontrollgitterauflösung wieder aktiviert.

void CBSplineWrapperEffect::initializeMorphingMode ( ) [protected]
 

Die Methode intializeMorphingMode() initialisiert den Morphing-Modus des Effekts. Dabei werden zwei feste Keyframes an den Stellen 0.0 und 1.0 mit dem aktuellen Kontrollgitterzustand eingefügt. Das Verschieben der Keyframes wird deaktiviert, das Sperren der Randpunkte wiede aktiviert, Der Framecursor wird an die Position 0 zurückgesetzt. Ebenfalls werden die Steuerelemente zum Einstellen der Kontrollgitterauflösung wieder deaktiviert. Ferner werden die Texelkoordinaten neu berechnet, so dass die Verzerrung des Bildgitters keinerlei Auswirkungen zeigt.

void CBSplineWrapperEffect::recalculateTexelCoordinates ( CGrid< CVector< 2, GLfloat > > & ImageMesh,
CGrid< CVector< 2, GLfloat > > & TexelMesh ) [protected]
 

Die Methode recalculateTexelCoordinaes berechnet die Texelkoordinaten des Gitters TexelMesh anhand des Bildgitters ImageMesh neu. Dabei werden die Koordinaten einfach planar auf das ImageMesh neu projiziert, so dass anschließend das sich darauf befindende Bild unverzerrt erscheint.

void CBSplineWrapperEffect::knotMatrixToTable ( enmKnotMatrixType matrixType ) [protected]
 

Die Methode knotMatrixToTable() kopiert den Inhalt der durch matrixType spezifizierten KnotenMatrix des B-Spline-Alogrithmus in das Tabellen-Widget des Effekttoolfensters.

void CBSplineWrapperEffect::recalculateMorphingTexelCoordinates ( ) [protected]
 

Die Methode recalculateMorphingTexelCoordinates() berechnet die Quell- und Zeilmorphingtexelkoordinaten neu. Zuerst wird dazu ein Backup des Kontrollgitters erzeugt. Danach wird dem Kontrollgitter das Quellmorphinggitter zugewiesen. Das Bildgitter wird nun mit dem aktiven Deformer verzerrt. Jetzt werden die Quellmorphingtexelkoordinaten neu berechnet. Anschließend wird dem Kontrollgitter das Zielmorphinggitter zugewiesen und dieselbe Prozedur für die Zielmorphingtexelkoordinaten wiederholt. Zuletzt wird der alte Zustand des Kontrollgitters wiederhergestellt.


The documentation for this class was generated from the following files:
Generated at Fri Apr 19 16:53:06 2002 for GLFramework by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001