#include <CLinearDeformer.h>
Inheritance diagram for 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.
|
Der Standarddestruktor gibt den Speicher, den die Vertexzugehörigkeitstabelle belegt, wieder frei. |
|
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.
|
|
Die Methode setSourceGrid() weist dem Deformationsalgorithmus ein Quellgitter zu.
|
|
Die Methode setControlGrid() weist dem Deformationsalgorithmus ein Kontrollgitter zu.
|
|
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.
Reimplemented from CDeformer. |