Neben den Erweiterungen der 4 zuvor betrachteten Klassen wurde das GEOTOOLKIT noch um die Klasse topTypes, in der das Repräsentationsmodell für die im GEOTOOLKIT modellierten topologischen Beziehungen festgelegt wurde, ergänzt. Zu diesem Zweck dient der Aufzählungstyp topFlag, welcher schon mehrfach im Zusammenhang der Klassifikationsfunktionen angesprochen wurde. Eine geeignete Ausgabe der topologischen Beziehungen ist ebenso implementiert, wie eine Funktion zur Bestimmung der Dimension einer eventuellen Berührstelle und die Umsetzung des in Kapitel 5 eingeführten Konzeptes des Abstands zweier topologischer Beziehungen:
enum topFlag{NO_REL=0,
DISJOINT=1,
TOUCH_0D=2, TOUCH_1D=3, TOUCH_2D=4,
CROSS=5,
OVERLAP=6,
COVERED_0D=7, COVERED_1D=8, COVERED_2D=9,
COVERS_0D=10, COVERS_1D=11, COVERS_2D=12,
IN=13,
NI=14};
inline int dim (const topFlag flag);
inline int dist(topFlag flag1, topFlag flag2, int ff=0);
inline ostream& operator<<(ostream &o, topFlag &flag);
Die Funktion dist nimmt zwei topologische Beziehungen
anhand ihrer topFlags entgegen und bestimmt dann gemäß
Tabelle 5.2 ihren topologischen Abstand. Das Flag ff
gibt dabei an, ob es sich um den Fall zweier Flächen handelt, da
dann die geklammerten Werte aus der Tabelle gelten. Als Default
wird aber davon ausgegangen, daß mindestens ein Volumen involviert
ist (ff=0).
Alle sonstigen Hilfsfunktionen werden hier nicht aufgezählt,
obwohl eine Funktion noch angegeben werden soll, weil sie für
den in Abb. 5.5 dargestellten Sonderfall zweier Flächen sehr
wichtig ist. Wie in diesem Zusammenhang schon erwähnt wurde,
gibt es noch einen allgemeineren Fall dieses Beispieles, in dem
die beteiligten Winkel zur Ermittlung der topologischen Beziehung
einfließen müssen. Dieser Vorgang wird u.a. durch die folgende
Funktion realisiert
:
int anglePosition(const gtPoint& p0, const gtPoint& p1,
const gtPoint& p2, const gtPoint& p3,
const gtPoint& p4);