#include <CBSplineDeformer.h>
Inheritance diagram for 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.
|
Der Standardkonstruktor setzt alle dynamischen Arrays auf die Größe 0 zurück. Ebenfalls die Kurvenordnung. |
|
Der Standarddestruktor gibt jeglichen dynamsich alloziierten Speicher wieder frei. Die zugewiesenen Gitter ausgenommen. |
|
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.
|
|
Die Methode macht nichts, außer das Indexarray neu zu dimensionieren. |
|
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. |
|
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. |
|
Die Methode setOrder() setzt die Ordnung der B-Spline-Kurven.
|
|
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. |
|
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.
Reimplemented from CDeformer. |