Auch für 3D-Objekte der Klasse gtTriangleNet werden im Zuge dieser Arbeit topologische Beziehungen bereitgestellt. Welche Erweiterungen dazu implementiert wurden, wird nun angegeben.
Da die Funktionalität für ein zu untersuchendes Paar einer Fläche und eines Volumens schon bei der Betrachtung der Klasse gtTetraNet beschrieben wurde, sollen hier nur noch die Köpfe der jeweiligen Methoden aufgelistet werden. Dabei ist zu beachten, daß für die antisymmetrischen topologischen Beziehungen covers und ni hier mit covered und in deren inverse Varianten zur Verfügung stehen:
int gtTriangleNet::disjoint(const gtTetraNet& t) const; int gtTriangleNet::touch(const gtTetraNet& t) const; int gtTriangleNet::touch_0D(const gtTetraNet& t) const; int gtTriangleNet::touch_1D(const gtTetraNet& t, int strict=0) const; int gtTriangleNet::touch_2D(const gtTetraNet& t, int strict=0) const; int gtTriangleNet::cross(const gtTetraNet& t) const; int gtTriangleNet::covered(const gtTetraNet& t) const; int gtTriangleNet::covered_0D(const gtTetraNet& t) const; int gtTriangleNet::covered_1D(const gtTetraNet& t, int strict=0) const; int gtTriangleNet::covered_2D(const gtTetraNet& t, int strict=0) const; int gtTriangleNet::in(const gtTetraNet& t) const; topFlag gtTriangleNet::topRel(const gtTetraNet& t) const;
Die zuletzt aufgeführte Klassifikationsfunktion hat als mögliche
Rückgabewerte wiederum genau diejenigen topologischen 3D-Beziehungen,
welche darüber auch als Prädikate angegeben sind.
Der letzte Fall, der bei der Untersuchung von topologischen
Beziehungen zwischen Flächen und Volumina auftreten kann, ist die
Betrachtung der relativen räumlichen Lage zweier Flächen zueinander.
Hierbei ist zu beachten, daß in diesem Fall keine 2-dimensionalen
Berührungen möglich sind, da solche als echte Überlappungen
angesehen werden
. Es gibt also nur
2 verschiedene Ausprägungen der dimensionsbehafteten topologischen
Beziehungen touch, covers und covered.
Die restlichen Methoden entsprechen aber wiederum den Köpfen der schon zuvor erläuterten Funktionen, womit dem Benutzer der topologischen Komponente des GEOTOOLKIT ein einheitlicher Zugang verschafft wird. Mit der disjoint-Methode werden erneut die betrachteten Objekte (Flächen) auf einen Abstand > 0 getestet, während die Prädikate zum touch genau dann wahr werden, wenn eine Berührung (des jeweiligen Typs) ermittelt wird - die Bedeutung des strict-Flags wurde schon angegeben und kann direkt übernommen werden.
int gtTriangleNet::disjoint(const gtTriangleNet& t) const; int gtTriangleNet::touch(const gtTriangleNet& t) const; int gtTriangleNet::touch_0D(const gtTriangleNet& t) const; int gtTriangleNet::touch_1D(const gtTriangleNet& t, int strict=0) const;
Für zwei Flächen existiert sowohl die topologische Lage des
cross, als auch die overlap-Beziehung. Beide sind
sogar benachbart
und durch eine
Drehung um das Schnittsegment des cross ineinander
überführbar (vgl. Abb. 6.2). Ist das Schnittobjekt
2-dimensional und nicht identisch zu einem der betrachteten Flächen,
so liegt, wie zuvor schon erwähnt, ein overlap vor. Für
eine cross-Lage ist ein 1-dimensionaler Schnitt zu beobachten,
der jedoch echt sein und im Inneren der Objekte liegen muß:
int gtTriangleNet::cross(const gtTriangleNet& t) const; int gtTriangleNet::overlap(const gtTriangleNet& t) const;
Die Methoden zum covers bzw. covered werden auch
adäquat an die Besonderheiten dieses Falles, in dem beide Objekte
eine Codimension von 1 aufweisen, angepaßt und demnach nicht
in einer Variante angeboten, die 2-dimensionale Berührstellen
erfaßt. Die Anwendung der topologischen Prädikate erfolgt analog
zu dem bisher gesagten, wobei mit covers/covered und
in/ni jeweils beide zueinander inversen Beziehungen zur
Verfügung stehen:
int gtTriangleNet::covers(const gtTriangleNet& t) const; int gtTriangleNet::covers_0D(const gtTriangleNet& t) const; int gtTriangleNet::covers_1D(const gtTriangleNet& t, int strict=0) const; int gtTriangleNet::covered(const gtTriangleNet& t) const; int gtTriangleNet::covered_0D(const gtTriangleNet& t) const; int gtTriangleNet::covered_1D(const gtTriangleNet& t, int strict=0) const; int gtTriangleNet::in(const gtTriangleNet& t) const; int gtTriangleNet::ni(const gtTriangleNet& t) const;
Neben diesen topologischen Prädikaten gibt es im GEOTOOLKIT wiederum
die Möglichkeit, auch die topologische Beziehung zwischen zwei
Flächen direkt zu ermitteln. Dies kann mit der
gtTriangleNet-Methode topRel vorgenommen werden,
welche die topologische Beziehung als topFlag zurückliefert:
topFlag gtTriangleNet::topRel(const gtTriangleNet& t) const;