next up previous contents
Next: Topologische 3D-Beziehungen Up: Die Klasse gtTetraNet Previous: Die Klasse gtTetraNet

Randverwaltung

Die einzige Änderung, die innerhalb dieser internen Datenstruktur für Voluminia im GEOTOOLKIT vorgenommen wurde, ist die Einführung einer Randverwaltung. Zu einem Volumen wird nun auch dessen Rand persistent gespeichert und muß nicht bei jedem Bedarf erst berechnet werden. Da der Rand aber nicht für alle Anwendungen von Bedeutung ist, sondern hauptsächlich für topologische Fragestellungen eine Rolle spielt, ist es nicht sinnvoll, den Rand bei jeder Veränderung des Volumens adäquat anzupassen. Auch beim Aufbau eines Tetraedernetzes durch sukzessives Einfügen von Tetraedern sind Randinformationen für die ``Zwischenzustände`` zu vernachlässigen und würden die Konstruktion des Volumens nur unnötig verlangsamen.

In dieser Arbeit wird demnach eine bedarfsorientierte Randverwaltung implementiert. Die Klasse gtTetraNet wird um die folgenden Datenelemente erweitert:

   int m_SurfaceLegal;

   gtTriangleNet* m_pSurface;


In m_pSurface wird der zugehörige Rand des Volumens genau dann vorgehalten, wenn m_SurfaceLegal true ist. Bestimmt wird der Rand bei Bedarf über die gtTetraNet-Methode getSurface, welche dann das m_SurfaceLegal-Flag setzt und den Rand für spätere Aufrufe ablegt:

   gtTriangleNet* gtTetraNet::getSurface() const;


Diese Methode liest den gespeicherten Rand eines Volumen aus, wenn er aktuell ist; ansonsten muß dieser neu berechnet werden, um wieder Gültigkeit zu erlangen. Ungültig wird der Rand durch alle Methoden, die das gtTetraNet-Objekt verändern, insbesondere insert und remove, mit denen einzelne Tetraeder hinzugefügt oder entfernt werden können. Bei diesen Methoden wird dann das Flag m_SurfaceLegal entsprechend auf false gesetzt.



Stefan Hecht
Thu Aug 26 14:06:24 MET DST 1999