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

CBSplineDeformer Class Template Reference

Klassentemplate, welches einen Deformationsalgorithmus implementiert, der auf Vertexgittern operiert und B-Spline-Interpolation nutzt. More...

#include <CBSplineDeformer.h>

Inheritance diagram for CBSplineDeformer::

CControlGridDeformer CGridDeformer CDeformer List of all members.

Public Methods

Protected Methods

Protected Attributes


Detailed Description

template<class T> class CBSplineDeformer

Das Klassentemplate CBSplineDeformer implementiert einen linearen Deformationsalgorithmus, der Vertexgitter mit Hilfe eines Kontrollgitters verzerrt. Zur berechnung der Vertexkoordinaten wird B-Spline-Interpolation verwendet.

Die Klasse erlaubt die Spezifikation eines Quell-, eines Ziel- und eines Kontrolgitters. Die Elemente der Vertexgrids sind vom Typ CVector. Die Anzahl der Komponenten wird vom Template auf 2 festgesetzt. Der Templateparameter T gibt den Datentyp der Vektorkomponenten an. Ferner können für die B-Spline-Interpolation spezifischen Parameter, wie Funktionsordnung und Knotenvektoren spezifiziert werden.

Remarks:
Das als Quell- und Zielgitter kann ein und das selbe Gitter spezifiziert werden, da der Deformationsalgorithmus eine Kopie der Gitterkoordinaten anlegt, und danach auf die Originalkoordinaten des Quellgitters nicht mehr zugreift.

Note:
Die Ausmaße der zugewiesenen Gitter müssen übereinstimmen, da ansonsten eine Exception vom Typ invalid_argument ausgelöst wird. Ausgenommen hiervon ist das Kontrollgitter.

Note:
Die Maße der Grids sollten mindestens 2 x 2 betragen.

Note:
Nachdem alle drei Gitter spezifiziert wurden, hat ein verändern der Positionen der Quellgittervertices keine Auswirkungen auf das Ergebnis. Um den gewünschten Effekt zu erhalten, müssen die Gitter nochmals neu zugewiesen werden.

Precondition:
Für den Datentyp T müssen alle gängigen arithmetischen Operatoren überladen sein. Ferner sollte der T zu float oder zu int kompatibel sein.


Constructor & Destructor Documentation

template<class T>
CBSplineDeformer< T >::CBSplineDeformer<T> ( )
 

Der Standardkonstruktor setzt alle dynamischen Arrays auf die Größe 0 zurück. Ebenfalls die Kurvenordnung.

template<class T>
CBSplineDeformer< T >::~CBSplineDeformer<T> ( ) [virtual]
 

Der Standarddestruktor gibt jeglichen dynamsich alloziierten Speicher wieder frei. Die zugewiesenen Gitter ausgenommen.


Member Function Documentation

template<class T>
void CBSplineDeformer< T >::buildCellArray ( ) [protected]
 

Die Methode buildCellArray() erzeugt eine Liste aller Vertices, die sich innerhalb des Kontrollgitters befinden. Ferner werden ihre zum Kontrollgitter relativen Koordinaten in einem weiteren Array gespeichert. Desweiteren erzeugt die Routine eine Liste mit den Indizes der zu deformierenden Vertices innerhalb des Zielgitters.

Precondition:
Das Kontrollgitter muss regelmäßig sein, d.h. aus Rechtecken bestehen, damit der Algorithmus korrekt funktioniert.

template<class T>
void CBSplineDeformer< T >::buildIndexArray ( ) [protected]
 

Die Methode macht nichts, außer das Indexarray neu zu dimensionieren.

template<class T>
void CBSplineDeformer< T >::resizeNodeMatrices ( ) [protected]
 

Die Methode resizeNodeMatrices() redimensioniert die Größe der Knotenmatrizen unter Berücksichtigung der Kurvenordnung und er Kontrollgitterausmaße. Die Zeilenmatrix hat die Ausmaße (Kontrollgitterbreite + Kurvenordnung) x Kontrollgitterhöhe. Die Spaltenmatrix hat die Ausmaße (Kontrollgitterhöhe + Kurvenordnung) x 1.

template<class T>
int CBSplineDeformer< T >::getIntervalIndex ( float u,
int KnotVectorSize,
float * KnotVector ) [protected]
 

Die Methode durchläuft den über KnotVector angegebenen Knotenvector, und überprüft, ob sich u in einem der durch den Vektor definierten Intervalle befindet. Die Methode gibt den Index des ermittelten Intervalls zurück.

template<class T>
void CBSplineDeformer< T >::setOrder ( int newOrder )
 

Die Methode setOrder() setzt die Ordnung der B-Spline-Kurven.

Note:
Wurde bereits ein Kontrollgitter zugewiesen, so werden die Knotenmatrizen neudimensioniert und mit uniformen normalisierten Knotenvektoren initialisiert.

template<class T>
void CBSplineDeformer< T >::buildUniformNodeMatrices ( )
 

Die Methode buildUniformMatrices() initialisiert die Spalten- und Zeilenknotenmatrix mit uniformen normierten Knotenvektoren. Die ersten CurveOrder+1 Werte des Knotenvektors sind 0.0, die letzten CurveOrder+1 Werte des Knotenvektors sind 1.0. Die übrigen Werte werden zwischen 0 und 1 linear interpoliert.

template<class T>
void CBSplineDeformer< T >::deform ( ) [virtual]
 

Die Methode deform() implementiert den eigentlichen Deformationsalgorithmus. Das Quellgitter wird mittels B-Spline-Interpolation verformt. Dabei wird mit Hilfe der Funktionen aus BSplineLib.h und BSplineLib.cpp Das Tensorprodukt der durch die Kontrollgitterpunkte definierten B-Splines berechnet. Das Ergebnis wird in dem Zielgitter gespeichert.

Remarks:
Da der Algorithmus nur die zwischengespeicherten relativen Koordinaten der Quellvertices benutzt, ist es durchaus erlaubt als Quellgitter und als Ziellgitter ein und das selbe Vertexgitter zu spezifizieren.

Reimplemented from CDeformer.


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