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

CLinearDeformer Class Template Reference

Klassentemplate, welches einen linearen Deformationsalgorithmuis implementiert, der auf Vertexgittern operiert. More...

#include <CLinearDeformer.h>

Inheritance diagram for CLinearDeformer::

CControlGridDeformer CGridDeformer CDeformer List of all members.

Public Methods

Protected Methods

Protected Attributes


Detailed Description

template<class T> class CLinearDeformer

Das Klassentemplate CLinearDeformer implementiert einen linearen Deformationsalgorithmus, der Vertexgitter mit Hilfe eines Kontrollgitters verzerrt. 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.

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>
CLinearDeformer< T >::~CLinearDeformer<T> ( ) [virtual]
 

Der Standarddestruktor gibt den Speicher, den die Vertexzugehörigkeitstabelle belegt, wieder frei.


Member Function Documentation

template<class T>
void CLinearDeformer< T >::BuildVertexAssignmentMap ( ) [protected]
 

Die Methode BuildVertexAssignmentMap() erzeugt eine Vertex-Zelle-Zugehörigkeitstabell. Dabei wird für jede Kontrollgitterzelle eine Liste der Vertices angelegt, die sich in ihr befinden. Ferner werden die Koordinaten der Quellgittervertices relativ zu ihrer Zelle berechnet und ebenfalls in einem zusätzlichen Array gespeichert.

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

template<class T>
void CLinearDeformer< T >::setSourceGrid ( CGrid< CVector< 2, T > > * objSourceGrid ) [virtual]
 

Die Methode setSourceGrid() weist dem Deformationsalgorithmus ein Quellgitter zu.

Remarks:
Falls bereits ein Kontrollgitter zugewiesen wurde, so wird mittels BuildVertexAssignmentMap() die Vertex-Zelle-Zugehörigkeitstabelle erzeugt.

Precondition:
Ein evtl. zuvor zugewiesenes Kontrollgitter muß regelmäßig sein.

template<class T>
void CLinearDeformer< T >::setControlGrid ( CGrid< CVector< 2, T > > * objControlGrid ) [virtual]
 

Die Methode setControlGrid() weist dem Deformationsalgorithmus ein Kontrollgitter zu.

Remarks:
Falls bereits ein Quellgitter zugewiesen wurde, so wird mittels BuildVertexAssignmentMap() die Vertex-Zelle-Zugehörigkeitstabelle erzeugt.

Precondition:
Das zugewiesene Kontrollgitter muß regelmäßig sein.

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

Die Methode Deform() implementiert den eigentlichen Deformationsalgorithmus. Dabei wird jede Zelle des Kontrollgitters durchlaufen. Die Eckpunkte einer Zelle bilden ein lineares Koordinatensystem. Die Basisvektoren dieses Koordinatensystems werden vom Algorithmus für die Zelle berechnet. Danach wird jeder Quellgittervertex, der zu der Zelle gehört, in dieses Kooridnatensystem transformiert. Durch Addition des Zellenortsvektors werden die lokalen Koordinaten wieder in die globalen umgerechnet. Die Ergebnisse der Transformation werden in dem Zielgitter gespeichert.

Remarks:
Da zur Berechnung nicht die Eigentlichen Vertexkoordinaten des Quellgitters verwendet werden, sondern die zuvor berechneten Relativkoordianten, kann als Zielgitter das gleiche Gitter zugewiesen werden, wie das Quellgitter.

Precondition:
Es wurden zuvor alle drei Gitter zugewiesen. Das Kontrollgitter war während des Zuweisungsvorgangs noch regelmäßig.

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