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.