Geodateninterpretation
Geodateninterpretation Geodateninterpretation
Bericht zum Projekt Geodateninterpretation Projektmanagement: Projektdurchführung: GWT Gesellschaft für Wissens- und Technologietransfer der TU Dresden mbH TU Dresden Institut für Künstliche Intelligenz Professur Erkennende Systeme und Bildverarbeitung Projektleitung: Projektnummer: 142-2/01 Prof. Dr.-Ing. habil. Siegfried Fuchs Drittmittelgeber: SMWA Dezernat 23 ESAG Energieversorgung Sachsen Ost AG GASO Gasversorgung Sachsen Ost GmbH kubit GmbH DGIS Dresden Informationssystem Service GmbH Stand: 10. Februar 2003
- Seite 3 und 4: Inhaltsverzeichnis 1 Projektaufgabe
- Seite 5 und 6: 3 1 Projektaufgabe Die flexible ele
- Seite 7 und 8: slich in die beiden Demonstratoren
- Seite 9 und 10: 2.1 CAD-Modelle 7 Text Strich P P T
- Seite 11 und 12: 2.1 CAD-Modelle 9 Abbildung 2.3: Il
- Seite 13 und 14: 2.1 CAD-Modelle 11 Strich Bogen Tex
- Seite 15 und 16: 2.1 CAD-Modelle 13 Strich Bogen Tex
- Seite 17 und 18: 2.2 Rasterbild-Modelle 15 VRegion V
- Seite 19 und 20: 3.1 Konturfindung 17 3.1 Konturfind
- Seite 21 und 22: 3.2 Randkonturvergleich mittels Zei
- Seite 23 und 24: 3.3 Skelettierung 21 tigt bleiben d
- Seite 25 und 26: 4 Interaktion, Kontrolle/Korrektur
- Seite 27 und 28: 4.1 AutoCAD als Rahmen für die Int
- Seite 29 und 30: 4.2 Auswertung von CAD-Eigenschafte
- Seite 31 und 32: 4.3 Kontrolle und Korrektur 29 silo
- Seite 33 und 34: 4.3 Kontrolle und Korrektur 31 Men
- Seite 35 und 36: 4.3 Kontrolle und Korrektur 33 Kons
- Seite 37 und 38: 4.3 Kontrolle und Korrektur 35 Zus
- Seite 39 und 40: 4.4 Lernverfahren 37 C 6 ⊕ ⊗
- Seite 41 und 42: 4.4 Lernverfahren 39 (a) (b) Abbild
- Seite 43 und 44: 41 5 Demonstratoren Die Demonstrato
- Seite 45 und 46: 5.2 Demonstrator für Rasterbild-Da
- Seite 47 und 48: 6.1 Teststrategie 45 Die Unterschei
- Seite 49 und 50: 6.2 Auswahl der Testfälle 47 6.2 A
- Seite 51 und 52: 6.3 Testergebnisse 49 Datei: Test8
Bericht zum Projekt<br />
<strong>Geodateninterpretation</strong><br />
Projektmanagement:<br />
Projektdurchführung:<br />
GWT Gesellschaft für Wissens- und Technologietransfer<br />
der TU Dresden mbH<br />
TU Dresden<br />
Institut für Künstliche Intelligenz<br />
Professur Erkennende Systeme und Bildverarbeitung<br />
Projektleitung:<br />
Projektnummer: 142-2/01<br />
Prof. Dr.-Ing. habil. Siegfried Fuchs<br />
Drittmittelgeber: SMWA Dezernat 23<br />
ESAG Energieversorgung Sachsen Ost AG<br />
GASO Gasversorgung Sachsen Ost GmbH<br />
kubit GmbH<br />
DGIS Dresden Informationssystem Service GmbH<br />
Stand: 10. Februar 2003
Inhaltsverzeichnis<br />
1 Projektaufgabe 3<br />
2 Modellierung 6<br />
2.1 CAD-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2 Rasterbild-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3 Vektorisierung 16<br />
3.1 Konturfindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
3.2 Randkonturvergleich mittels Zeichenprototypkatalog . . . . . . . . . 19<br />
3.3 Skelettierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
4 Interaktion, Kontrolle/Korrektur & Lernverfahren 23<br />
4.1 AutoCAD als Rahmen für die Interaktion . . . . . . . . . . . . . . . 24<br />
4.2 Auswertung von CAD-Eigenschaften in Ypsilon . . . . . . . . . . . 26<br />
4.3 Kontrolle und Korrektur . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
4.4 Lernverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5 Demonstratoren 41<br />
5.1 Demonstrator für CAD-Daten . . . . . . . . . . . . . . . . . . . . . 41<br />
5.2 Demonstrator für Rasterbild-Daten . . . . . . . . . . . . . . . . . . . 43<br />
6 Test des Y-Demonstrators für Gasleitungspläne 44<br />
6.1 Teststrategie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
6.2 Auswahl der Testfälle . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
6.3 Testergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
7 Bewertung 50<br />
8 Ergebnisse 51<br />
A Abstraktionsregeln 52<br />
A.1 CAD-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
A.2 Rasterbild-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
B Definitionen aller Layout_Klassen in Datensammler 80<br />
B.1 Definitionen für CAD-Daten . . . . . . . . . . . . . . . . . . . . . . 80<br />
B.2 Definitionen für Rasterbild-Daten . . . . . . . . . . . . . . . . . . . 82<br />
1
C Implementierung der Vektorisierung 84<br />
C.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />
C.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
C.3 Schnittstelle: Vektorisierung → Y . . . . . . . . . . . . . . . . . . . 89<br />
2
3<br />
1 Projektaufgabe<br />
Die flexible elektronische Verfügbarkeit von Geodaten ist eine heute wirtschaftlich<br />
bedeutende Voraussetzung für Planungs- und Managementprozesse. Geodaten in dieser<br />
Verfügbarkeit sind zu einem wichtigen Wirtschaftsgut geworden. Probleme dies<br />
zu gewährleisten wurden in [3] zusammengetragen und sind aktuell am Internetforum<br />
GDI-SN-L (http://www.kbx7.de/?lid=11265&c=list) zu verfolgen. Während viele dieser<br />
Probleme gesetzliche Grundlagen,Vereinbarungen, Normen und Organisationsformen<br />
betreffen, wurde in [3] ein Problem besonders herausgearbeitet: Die elektronische<br />
Erfassung und Interpretation der in analoger Form, d.h. in Form technischer Zeichnungen,<br />
vorliegenden Geodaten. An einer effizienten automatischen Methode wird seit etwa<br />
2 Jahrzehnten mit mässigem Erfolg geforscht. Mit einem neuen Ansatz gelang an<br />
der TU Dresden ein hoffnungsvoller Durchbruch. Diese neue Methode ist der Gegenstand<br />
der Dissertation von Bringmann [1].<br />
Aufbauend auf diese wissenschaftlichen Grundlagen wurden zwei auf einander<br />
aufbauende Projekte vom SMWA und den auf dem Deckblatt genannten Firmen gefördert.<br />
Das erste Projekt (PNr. 142/00: Konzeption der Software für ein Tool zur Interpretation<br />
von Karten und Plänen) lieferte eine solide softwaretechnologische Basis<br />
zur Programmierung von Anwendungslösungen, dokumentiert in [2]. Sie hat sich<br />
bereits bewährt in einem Interpretationswerkzeug für die Architekturvermessung und<br />
-planung bei der Firma kubit GmbH. Dieses wird bereits kommerziell genutzt. Es ist<br />
auch die Basis des zweiten, hier berichteten Projektes.<br />
Während der Bearbeitung wurden etwa monatlich Diskussionen mit potenziellen<br />
Anwendern, z.B. DGIS GmbH, kubit GmbH, ESAG, GASO GmbH, SAG GmbH, über<br />
die Spezifizierung von Aufgabenstellung, Vorausetzungen und Anforderungen geführt.<br />
Anlässlich der anzufertigenden Zwischenberichte wurden diese Beratungen als Demonstrationen<br />
gestaltet. Auf Anregung der Anwender wurde die im Projektantrag beschriebene<br />
Aufgabenstellung modifiziert. Diese wurde jeweils in den Zwischenberichten<br />
angegeben und begründet. So wurde die separate Modellierung von Leitungsplänen<br />
und Grundkarte (ALK) in die weitaus schwierigere kombinierte Modellierung und<br />
Interpretation verändert. Darüberhinaus wurde anwendungsseitig gewünscht, sowohl<br />
vordigitalisierte Vektordaten (CAD-Datenstrukturen) als auch gescannte Rasterdaten<br />
interpretieren zu können. Die wissenschaftlichen Grundlagen geben durchaus diese<br />
Möglichkeit und Voruntersuchungen lagen am Institut für Künstliche Intelligenz bereits<br />
vor, jedoch waren sehr aufwendige Neuprogrammierungen auf der Basis der o.g.<br />
Softwarekonzeption notwendig. Es erwies sich auch als unabdingbar, nun zwei separate<br />
Demonstratoren zu entwickeln, da die Modelle für Rasterdaten zwar den gleichen<br />
Prinzipien folgen, aber wegen der viel stärkeren Varianz und Störungen gegenüber
4 1 PROJEKTAUFGABE<br />
CAD-Daten aufwendigere Modelle erfordern. Diese zusätzlichen Teilaufgaben, aber<br />
auch einige unerwartete wissenschaftliche Modellierungsprobleme bei der Modellierung<br />
von ALK-Objekten, insbesondere bei Flurstücken führten notwendigerweise dazu,<br />
den weiteren Anwendungsbereich der Elektropläne nicht zu bearbeiten. Das erscheint<br />
in Folge der Anwenderdiskussionen auch zweckmässig, denn die Anwendbarkeit<br />
lässt sich ohne Einschränkungen an Gasplänen, kombiniert mit ALK-Plänen untersuchen.<br />
Eine komerziell einsetzbare Software erfordert aber die genaue Kenntnis des<br />
Anwenderdatenbestandes und seiner spezifischen Anforderungen und etwa 1 Mannjahr<br />
reine Softwareentwicklung, wie sie an einem wissenschaftlichen Institut nicht zu<br />
leisten ist. Diese Erkenntnisse wurden auch bei der Entwicklung des Architekturtools<br />
bei der Firma kubit gewonnen. Es würde also für das Gebiet der Elekropläne ohnehin<br />
auch nur ein Demonstrator entstehen, auf dem eine Softwareentwicklung aufsetzen<br />
müsste.<br />
Ziel des hier berichteten Projektes war es, Demonstratoren für interaktive effiziente<br />
Interpretationssysteme bereitzustellen, an denen die Effizienz in einem konkreten<br />
Anwendungsgebiet (z.B. Gasnetze) untersucht und die Zielparameter für ein kommerzielles<br />
Tool bestimmt werden können. Die Interpretation beruht entsprechend dem Ansatz<br />
von Bringmann [1] auf hierarchischen Modellen mit einer Teile-von-Hierarchie,<br />
bei der aus Primitiven immer komplexere Objekte aufgebaut werden. Die Steuerung<br />
der Interpretation sieht dabei eine Instanziierung von unten nach oben vor unter gezielter<br />
Schaffung von Mehrdeutigkeiten und deren Markierung durch Konflikte. Diese<br />
werden auf komplexeren Hierarchieebenen mit Hilfe von Kontextwissen und damit robust<br />
aufgelöst. Eine endgültige Eindeutigkeit der Interpretation wird in der komplexesten<br />
Ebene durch Optimierung hergestellt. Die Interaktion bezieht sich dabei auf zwei<br />
Grundfunktionen: 1. Die Anpassung der Modelle an einen konkreten Zeichnungssatz<br />
durch das Erlernen von Wahrscheinlichkeitsverteilungen unter Benutzung eines handinterpretierten<br />
Beispielplanes und 2. die visuelle Überprüfung und Korrektur der Interpretationsergebnisse,<br />
verbunden mit der Eingabe zusätzlicher Attribute aus anderen<br />
Datenquellen.<br />
Unter der Modifikation der im Projektantrag beschriebenen Aufgabe (Pkt 1. bis<br />
Pkt 8.) ergaben sich die folgenden, einzelnen Hauptabschnitten zugeordneten Teilaufgaben:<br />
Die Überarbeitung, Neuentwicklung und vollständige Neuimplementierung<br />
von Modellen für Gasnetzobjekte und Grundkartenobjekte (Hauptabschnitt 2), die Entwicklung<br />
der Interaktionsschnittstellen und eines Lernalgorithmus (Hauptabschnitt 4),<br />
die Überarbeitung und Neuimplementierung der Vektorisierung zur Ermittlung von<br />
Kontur- und Skelettlinien als grafische Primitive und die Erkennung von Schriftsymbolen<br />
als Textprimitive (Hauptabschnitt 3). Alle Softwarekomponenten mussten schlies-
slich in die beiden Demonstratoren eingebunden werden (Hauptabschnitt 5). Die Ergebnisse<br />
wurden einer experimentellen Bewertung unterzogen, wobei das Testszenario<br />
durch den potenziellen Anwender DGIS und die Testdurchführung von der Firma kubit<br />
verantwortet wurden (Hauptabschnitt 6).<br />
5
6 2 MODELLIERUNG<br />
2 Modellierung<br />
Diese Teilaufgabe besteht aus zwei Varianten: Die erste Variante (CAD-Modelle) geht<br />
von CAD-Rohdaten aus und liefert eine GIS-adäquate Ausgangsdatenstruktur und die<br />
zweite Version (Rasterbilder-Modelle) geht von gescannten Plänen (Rasterdaten) aus<br />
und führt zur gleichen Datenstruktur. Als Analysewerkzeug setzen wir das gemeinsam<br />
mit kubit zur Interpretation technischer Zeichnungen entwickelte und in diesem<br />
Projekt weiterentwickelte System „Y“ ein. Es setzt an der Eingangsschnittstelle CAD-<br />
Datenstrukturen voraus. Für die zweite Variante des Demonstrators ergibt sich damit<br />
als erste Teilaufgabe die „Vektorisierung“. Sie hat das Rasterbild in eine CADadäquate<br />
Datenstruktur zu transformieren. Im folgenden werden die zwei Modellierungsvarianten<br />
separat diskutiert.<br />
2.1 CAD-Modelle<br />
Das Modellierungsverfahren beruht darauf, daß komplexe Zeichen aus einfachen Zeichen<br />
Schritt für Schritt aggregiert werden. Die einfachsten Zeichen werden „Primitive“<br />
und die komplexesten ausgegebenen Zeichen „Top-Zeichen“ genannt. Die angewendeten<br />
„Primitive“ bzw. aggregierte „Top-Zeichen“ in diesen Modellen sind:<br />
Primitive = {Linie, Text, Bogen, Blockreferenz};<br />
Top = {Leitung, Bemaßung, Gebäude, Flurstück, Blocksymbol}.<br />
2.1.1 Das Modell für Leitungen<br />
Hierarchie<br />
Abbildung 2.1 zeigt die Hierarchie für das Modell „Leitung“. Die Legenden für die<br />
graphische Darstellung bzw. die technische Beschreibung für jede Klasse sind in Anhang<br />
A gegeben. Als primitive Zeichen werden hier „Text“ und „Strich“ benutzt; Die<br />
Top Zeichen sind „LeitungsstückGeneral“ und „Materialwechsel“.<br />
Erklärung<br />
Ein Leitungsstück (LS) ist ein ununterbrochener Linienverlauf von einer Verzweigung<br />
/ Einzelendpunkt bis zur nächsten Verzweigung / Einzelendpunkt (Siehe Abb. 2.2<br />
auf Seite 8). Eine Verzweigung ist so zu verstehen, dass an einer Verzweigung mehr<br />
als zwei LS miteinander verbunden sind; analog versteht man unter einem Einzelendpunkt,<br />
dass an diesem Punkt ein LS mit einem Materialwechsel, einem Leitungsendsymbol<br />
oder einem Gebäude (besonders für Hausleitungen) endet.
2.1 CAD-Modelle 7<br />
Text<br />
Strich<br />
P<br />
P<br />
TextZeile<br />
Leitungsstück<br />
Beschriftung<br />
Distanz<br />
Beschriftung<br />
Schutzrohr<br />
LS-Beschriftet<br />
Leitungsstück-<br />
General<br />
Schutzrohrsymbol<br />
Materialwechsel<br />
Abbildung 2.1: Hierarchie für das Modell “Leitung”.
8 2 MODELLIERUNG<br />
Materialwech<br />
Leitungsen<br />
Verzweigung<br />
Schulzrohrsym<br />
Abbildung 2.2: Beispiel Leitungsabschnitt.<br />
2.1.2 Das Modell für Bemaßungen<br />
Hierarchie<br />
Abbildung 2.4 zeigt die Hierarchie für das Modell „Bemaßung“. Die Legenden für<br />
die graphische Darstellung bzw. die technische Beschreibung für jede Klasse sind in<br />
Anhang A gegeben. Als primitive Zeichen werden „Text“ und „Strich“ benutzt; Das<br />
einzige Top Zeichen ist „Bemaßung“.<br />
Erklärung<br />
Vier verschiedene Typen von Bemaßung werden definiert. Eine graphische Illustration<br />
ist in der Abb. 2.3 auf Seite 9 gegeben. Im einfachsten Fall ist es eine Bemaßung von<br />
Typ3: eine Maßzahl steht oben, unten oder neben einer Maßlinie. Eine typische Bemaßung<br />
ist eine Bemaßung vom Typ1 oder Typ2. Damit hier die Pfeilspitze deutlich<br />
zu sehen ist, wird die Spitze auf dem Plan als ein gefülltes Dreieck gezeichnet. Dass<br />
die Pfeilspitze gefüllt ist, spielt aber keine Rolle bei der Modellierung. Der komplexeste<br />
Typ ist der Typ4 – ein Objekt von diesem Typ ist eine Maßkette von mehreren<br />
nachfolgenden Maßstücken.
2.1 CAD-Modelle 9<br />
Abbildung 2.3: Illustration verschiedener Bemaßungen.<br />
2.1.3 Das Modell für Gebäude<br />
Hierarchie<br />
Abb. 2.5 zeigt die Hierarchie für das Modell „Gebäude“. Die Legenden für die graphische<br />
Darstellung bzw. die technische Beschreibung für jede Klasse sind in Anhang<br />
A gegeben. Als primitive Zeichen werden „Text“, „Strich“ und „Bogen“ benutzt; Das<br />
einzige Top Zeichen ist „Gebäude“.<br />
Erklärung<br />
Ein Gebäude ist im Prinzip als ein abgeschlossenes Polygon modelliert. D.h. es ist nur<br />
der Gebäuderand zu betrachten. Die Flächenfüllung, die als mehrere parallele Linien<br />
eine Schraffur bildet, spielt hier aber keine Rolle. Ein erster Gedanke war, daß ein<br />
Gebäude aus einer Flächenfüllung und einem Gebäuderand zusammen gebildet werden<br />
kann. Aus folgendem Grund wird darauf verzichtet: in dem Fall, wenn mehrere<br />
Gebäude nebeneinander oder sehr eng aneinander stehen, ist es sehr schwer, jede Flächenfüllung<br />
zum entsprechenden richtigen Gebäude zuzuordnen. Meistens werden in<br />
diesem Fall alle Flächenfüllungen als eine einzelne Flächenfüllung erkannt. Trotzdem<br />
ist ein Zwischentyp „Flächenfüllung“ definiert und modelliert, damit alle Linien, die<br />
zur Flächenfüllung gehören, nicht als Quellelement anderer Typen wie z.B. als Leitungsstück<br />
verfügbar sind.<br />
Nachteil der momentanen Version ist, daß ein Gebäude nicht mehr erkannt wird,<br />
wenn sein Rand nicht als ein abgeschlossen Polygon dargestellt wird (z.B. könnte es
10 2 MODELLIERUNG<br />
Strich<br />
Text<br />
P<br />
Winkel<br />
ZeichenStück<br />
ZeichenEnde<br />
Spitze<br />
ZeichenReihe<br />
PfeilTyp2<br />
PfeilTyp1<br />
Bemaßung3<br />
Bemaßung4<br />
Bemaßung2<br />
Bemaßung1<br />
Bemaßung<br />
Abbildung 2.4: Hierarchie für das Modell “Bemaßung”.
2.1 CAD-Modelle 11<br />
Strich<br />
Bogen<br />
Text<br />
StrichII<br />
GebäudeLeft<br />
GebäudeRight<br />
GebäudeUNBS<br />
Gebäudefüllung<br />
GebäudeBS<br />
Gebäude<br />
Abbildung 2.5: Hierarchie für das Modell “Gebäude”.
12 2 MODELLIERUNG<br />
Abbildung 2.6: Beispiel eines komplexen Gebäudes.<br />
sein, daß durch einen technischen Fehler eine kleine Lücke entsteht). Ein besserer<br />
Gedanke, z.B. daß eine Flächenfüllung als Hilfssymbol angewandt wird, soll in einer<br />
zukünftigen Version betrachtet werden.<br />
Ein weiteres Problem des Modells Gebäude ist die Modellierung für ein komplexes<br />
Gebäude. Ein komplexes Gebäude bezeichnet eine Menge von mehreren einzelnen<br />
Gebäuden, die nebeneinander stehen und teilweise gemeinsame Ränder haben. Ein<br />
Beispiel ist in der Abb. 2.6 auf Seite 12 gezeichnet. In diesem Fall werden alle einzelne<br />
Gebäude zusammen als ein einziges Gebäude erkannt. Es sind zwei Varianten<br />
des Modells für den Gebäuderand („GebäudeLeft“ und „GebäudeRight“) entwickelt<br />
worden, um solche Probleme zu lösen: es wird von einem beliebigen Randstück (ein<br />
Objekt der Klasse „StrichII“) angefangen und durch zweimalige Ausführung eines rekursiven<br />
Verfahrens, einmal im linksdrehenden Sinn und einmal im rechtsdrehenden<br />
Sinn, zwei Polygone, ein kleinstes (bezeichnet den Rand eines einzelnen Gebäudes)<br />
und ein größtes (bezeichnet der gesamte Rand), erzeugt. Durch eine Optimierung wird<br />
schließlich das größte als ein gesamtes Gebäude bezeichnet.<br />
2.1.4 Das Modell für Flurstück und Blocksymbol<br />
Hierarchie<br />
Abb. 2.7 zeigt die Hierarchie für das Modell „Flurstück“ und das Modell „Blocksym-
2.1 CAD-Modelle 13<br />
Strich<br />
Bogen<br />
Text<br />
Blockreferenz<br />
StrichII<br />
FKante<br />
S<br />
FlurstückUNBS<br />
Flurstück<br />
SchieberBR<br />
WassertopfBR<br />
Abbildung 2.7: Hierarchie für die Modelle “Flurstück” und “Blockreferenz-Symbole”.
14 2 MODELLIERUNG<br />
bol“. Die Legenden für die graphische Darstellung bzw. die technische Beschreibung<br />
für jede Klasse sind in Anhang A gegeben. Als primitive Zeichen werden „Text“,<br />
„Strich“, „Bogen“ und „Blockreferenz“ benutzt; Die Top-Zeichen sind „Flurstück“,<br />
„SchieberBR“ und „WassertopfBR“.<br />
Erklärung<br />
Die Modellierung für Flurstück ist die komplexeste Aufgabe bei den CAD-Modellen.<br />
Ein Flurstück wird normalerweise aus einer Flurstücksnummer und mehreren Flurstückskanten<br />
zusammen gebildet. Die Komplexität besteht darin, dass mehrere Lücken<br />
in der Begrenzung eines Flurstücks enthalten und die Topologie des Flurstück sehr unbestimmt<br />
sein könnte. Deswegen ist eine geometrische Beschreibung oder Modellierung<br />
schwer zu geben. Zur Zeit ist das Ergebnis der Erkennung von Flurstücken nicht<br />
zufrieden stellend.<br />
2.2 Rasterbild-Modelle<br />
Hierarchie<br />
Abb. 2.8 zeigt die Hierarchie für die Modelle aller zu modellierenden Symbole in<br />
Rasterbildern. Die Legenden für die graphische Darstellung bzw. die technische Beschreibung<br />
für jede Klasse sind in Anhang A gegeben. Die primitiven Zeichen hier<br />
sind „Vektor“ und „VSymbol“. Beide wurden durch einen speziellen Metatypalgorithmus<br />
von einem Hilfszeichen „VRegion“ entwickelt und spielen ihre Rollen hier wie<br />
„Strich“ und „Text“ bei der CAD-Modellen. Das Hilfzeichen „VRegion“ definiert eine<br />
Schnittstelle zwischen Vektor-Objekten (durch das Vektorisierensverfahren erzeugt<br />
und in einer entsprechenden Text-Datei gespeichert) und CAD-Objekten. Die Top-<br />
Zeichen sind „VLeitung“ (Vektor-Leitung), „VBemaßung“ und „VGebäude“.<br />
Erklärung<br />
Wegen der Bearbeitungszeit sind zur Zeit die Modelle für Rasterbilder nicht vollständig.<br />
Hier ist für die Bemaßung z.B. nur der einfacheste Typ – Bemaßung aus einer<br />
Maßlinie und einer nebenstehenden Maßzahl – zu modellieren.
2.2 Rasterbild-Modelle 15<br />
VRegion<br />
Vektor<br />
VSymbol<br />
Maßlinie<br />
VLeitungsstück<br />
Beschrift<br />
VGebäudeLeft<br />
VGebäudeRight<br />
VGebäudeUNBS<br />
VGebäudeBS<br />
VBemaßung<br />
VLeitung<br />
VGebäude<br />
Abbildung 2.8: Hierarchie für die Rasterbild-Modelle.
16 3 VEKTORISIERUNG<br />
3 Vektorisierung<br />
Aus historischen Gründen liegt heutzutage ein nicht zu vernachlässigender Bestand an<br />
technischen Leitungsplänen in Form von Papierzeichnungen vor. Eine der Hauptaufgaben<br />
des Projektes widmet sich demnach der Lösung der ausgesprochen anspruchsvollen<br />
Aufgabe der Vektorisierung dieser – als Rasterbilddaten in den Rechner eingescannten<br />
– ursprünglich hand- bzw. maschinengezeichneten technischen Zeichnungen.<br />
Die Vielfalt der Schwierigkeiten bei der Lösung des Vektorisierungsproblems umfaßt<br />
einerseits die durch das Einscannen entstandenen Rauschstörungen (zufällig entstandene<br />
bzw. verlorene Einzelpixel, die Form des Randverlaufs einzelner Zeichenelemente<br />
usw.) bis hin zur Auseinandersetzung mit der Variabilität der semantisch inhaltsgleichen<br />
Zeichnungsprimitiven bei handgezeichneten Leitungsplänen (oft aufgetretene<br />
Formunterschiede).<br />
Es ist offensichtlich, daß Schwierigkeiten dieser Natur i.A. nicht immer allein rechnergestützt<br />
gelöst werden können und scheinbar einfache Bildstörungen – wie das Fehlen<br />
bzw. Entstehen eines Pixels an geeigneter Stelle – zur qualitativen semantischen<br />
Änderung eines Zeichenprimitivs führen können. Daher werden dem darauffolgenden<br />
Zeichnungsinterpretationsmodul durchaus grundsätzlich andere Modellierungsanforderungen<br />
gestellt um durch Bildstörungen zusammengeklebte bzw. auseinandergerissene<br />
Linienprimitive oder eine durch das Handzeichnen entstandene mehrdeutige Interpretation<br />
von beispielsweise „S“ und „5“ zu verarbeiten.<br />
Der Modul zur Vektorisierung der binären Rasterbilder hat folgende Aufgaben zu<br />
erfüllen. Erstens müssen alle zu einem Zeichenprimitiv gehörenden Vordergrundpixel<br />
gefunden und die Umrißkurve dieses Primitivs sowie gewisse Formparameter seiner<br />
konvexen Hülle ermittelt werden (Lokalisierung/Konturfindung). Zweitens, anhand eines<br />
schon vor der Vektorisierung angelegten Katalogs von im Rasterbild zu erwartenden<br />
häufig vorkommenden identischen Zeichenelementen (Schriftsymbole, andere<br />
formgleiche isolierte Primitive) wird durch einen Vergleichsalgorithmus versucht,<br />
diese im Bild lage- und ausrichtungsunabhängig mit einer vorgegebenen Genauigkeit<br />
wiederzufinden (Segmentierung/Vektorisierung). Anschließend werden alle zusammenhängenden<br />
Rasterbildelemente mittels Skelettierung vektorisiert. Dies umfaßt<br />
das Finden einer sogenannten Mittelkurve der Zeichenfigur derart, daß ihre ursprüngliche<br />
sowohl metrische (jedoch nicht unbedingt exakt pixelgenaue) als auch topologische<br />
Zusammenhangsstruktur eindeutig erhalten bleibt. Sie wird als planarer Graph<br />
angesehen (Skelettierung/Vektorisierung).<br />
In folgenden Abschnitten werden die Algorithmen bzw. Prinzipien näher erläutert,<br />
wonach die oben beschriebenen drei Verarbeitungsstufen – Konturfindung, Randkonturvergleich<br />
und Skelettierung – stattfinden.
3.1 Konturfindung 17<br />
3.1 Konturfindung<br />
Als Ergebnis der Prozedur Konturfindung, angewendet auf das binäre, zu vektorisierende<br />
Rasterbild, sind erstens alle Randkurven zu finden, die im Bild Vordergrundgebiete<br />
vom Hintergrund trennen. Zweitens werden die topologischen „Enthaltensein“-<br />
Beziehungen bestimmt, d.h. es wird für jede Kontur die „nächstäußere“ Kontur bestimmt,<br />
welche diese enthält. Drittens wird ermittelt, ob eine gegebene Kontur als ihr<br />
Inneres Bildvordergrund oder -hintergrund beinhaltet. Jede Kontur bestimmt durch ihr<br />
Inneres ein Gebiet im Rasterbild. Weiterhin wird zu jedem dieser Gebiete seine konvexe<br />
Hülle im geometrischen Sinn gebildet, woraus ihr minimaler und maximaler Durchmesser<br />
für den darauffolgenden Symbolvergleichsalgorithmus ermittelt wird.<br />
0<br />
0 1 2 3 4 5 6 ... n<br />
1<br />
2<br />
H INTERGRU ND<br />
3<br />
4<br />
VORDERGRU ND<br />
5<br />
:<br />
m<br />
Abbildung 3.1: Binäres Rasterbild: Konturen verlaufen zwischen Pixeln.<br />
Unter der Randkontur eines zusammenhängenden geschlossenen Vordergrundgebietes<br />
im Rasterbild muss man sich eine Kurve vorstellen, die immer zwischen den<br />
benachbarten Vordergrund- und Hintergrundpixeln verläuft. Da es sich um ein waagerecht<br />
ausgerichtetes Pixelbild handelt, besteht diese Kurve abwechselnd aus horizontalen<br />
und vertikalen Abschnitten und ist durch die Angabe ihrer Eckpunkte (Übergänge<br />
zwischen horizontalen und vertikalen Abschnitten) vollständig beschrieben. Die<br />
Hauptaufgabe der Konturfindung ist es, aus dem Rasterbild jede Randkontur jedes<br />
Vordergrundgebietes als eine Liste ihrer Eckpunkte (x,y) ausgehend aus einem ausgezeichneten<br />
Aufsetzpunkt im Gegenuhrzeigersinn zu gewinnen.<br />
Während der Konturfindung wird das Rasterbild spaltenweise von links nach rechts<br />
im Zeilenmodus und von oben nach unten abgearbeitet. Eine geschlossene Kontur wird
18 3 VEKTORISIERUNG<br />
in folgende drei topologische Bestandteile aufgeteilt: 1. vertikal/schräg verlaufende<br />
Abschnitte, 2. konkave und 3. konvexe Stellen. Bei den beiden letztgenannten weist<br />
die Kontur eine vertikale Kehrtwende auf (im mathematischen Sprachgebrauch „Monotoniegebiete“,<br />
„lokale Maxima“ und „lokale Minima“, wenn man sich die Kontur<br />
lokal als eine mathematische Funktion y = f (x) vorstellt).<br />
Abbildung 3.2: Konturaufbau: ◦ – Konkavitätsstellen; • – Konvexitätsstellen. Zweiter<br />
Durchlauf der Konturfindung (Rekonstruktion der Kontur): Gestrichelte Pfeile verweisen<br />
auf Aufsetzpunkte neuer Teile der Kontur. Blau bzw. rot kennzeichnet das Zusammensetzen<br />
der Konturabschnitte in bzw. gegen Uhrzeigersinn.<br />
Dem Algorithmus der Konturfindung liegt folgende Festlegung zugrunde: beim<br />
Abtasten des Rasterbildes zeilenweise von oben nach unten beginnt an konkaven Stellen<br />
ein Teilabschnitt dieser Kontur und in konvexen Stellen endet er (in monotonen<br />
Bereichen verläuft die Kontur quasi „vertikal“). In der insgesamt obersten Konkavitätsstelle<br />
beginnt die Kontur und in der untersten Konvexitätsstelle endet sie. Beim<br />
Abtasten des Rasterbildes von unten nach oben werden die Bezeichnungen dieser<br />
Festlegung umgedreht. Hieraus ist der grundlegende Gedanke ersichtlich, wonach alle<br />
Konturen im Rasterbild gleichzeitig in insgesamt zwei Durchläufen – von oben nach<br />
unten und umgekehrt – gefunden und als Eckpunktkoordinatenlisten ermittelt werden<br />
können. In der ersten „links-rechts-oben-unten“-Durchlaufreihenfolge werden alle<br />
Konvexitätsstellen sowie die Längen der jeweiligen monotonen Bereiche gefunden und<br />
gespeichert. Die unterste Konvexität wird als Aufsetzpunkt der jeweiligen Kontur angesehen<br />
und diese „pflanzt sich fort“ während des zweiten „rechts-links-unten-oben“-<br />
Durchlaufs mithilfe der (oder über die) vorher abgespeicherten Konvexitätsstellen.<br />
Da man die Längen der Konturteile zwischen einzelnen Konvexitätsstellen kennt,
3.2 Randkonturvergleich mittels Zeichenprototypkatalog 19<br />
kann man die Liste der Kontureckpunkte im zweiten Rasterbilddurchlauf (beispielsweise<br />
in der Gegenuhrzeigersinnumlaufrichtung) für jede Bildkontur gleichzeitig eineindeutig<br />
zusammenstellen.<br />
Für die Ermittlung der nächstäußeren Kontur, die die aktuelle Kontur unmittelbar<br />
einschließt, betrachtet man die Zeile im Rasterbild zwischen dem rechten Bildrand und<br />
dem Aufsetzpunkt der aktuellen Kontur. Man zählt, ob eine Kontur eine gerade oder<br />
ungerade Anzahl von Schnittstellen aufweist, wenn man sich vom rechten Bildrand<br />
nach links zum Aufsetzpunkt bewegt. Diejenige Kontur, welche am nächsten ist und<br />
eine ungeradzahlige Schnittstelle aufweist, entspricht der gesuchten Kontur, welche<br />
die aktuelle einschließt.<br />
Unter der Festlegung, daß außerhalb aller Bildkonturen Hintergrund vorliegt, kann<br />
anhand der Enthaltenseinrelation festgestellt werden, ob die aktuelle Kontur ein Vorderoder<br />
Hintergrundgebiet in sich einschließt.<br />
Abbildung 3.3: Enthaltenseinrelation: vom rechten Bildrand nach links zum -Aufsetzpunkt<br />
der „aktuellen“ Kontur; ◦ – Eintritt in ein Gebiet; •···• – Ein- und Austritt.<br />
3.2 Randkonturvergleich mittels Zeichenprototypkatalog<br />
Der hier verwendete Zeichenprototypkatalog entsteht in einem Anlernprozeß, indem<br />
man aus dem zu vektorisierenden Rasterbild einen Satz von Zeichensymbolbeispielen,<br />
die im folgenden als Symbolprototypen dienen werden, in eigenständige Rasterbilder<br />
herauskopiert und auf alle die Prozedur Konturfindung anwendet. Somit werden die im<br />
Weiteren notwendigen Parameter der Symbolprototypen gewonnen, die in der Abarbeitung<br />
des Gesamtrasterbildes für Konturvergleich als Grundlage verwendet werden.
20 3 VEKTORISIERUNG<br />
Der Vergleich einer „unbekannten“ Rasterbildkontur mit dem Katalog geschieht<br />
folgendermaßen. Man überprüft, ob im Katalog ein Prototyp existiert, dessen „Abstand“<br />
zu der Bildkontur (im Sinne einer sog. Hausdorff-Metrik) einen vorgegebenen<br />
Wert nicht überschreitet. Der Abstand d wird nicht überschritten, wenn es möglich ist,<br />
die beiden zu vergleichenden Konturen so übereinanderzulegen, daß man – bildlich<br />
gesprochen – gleichzeitig entlang der beiden Konturen mit jeweils einem Stift fahren<br />
könnte, wenn diese Stifte miteinander mit einem Faden der Länge d verbunden wären.<br />
Im Prinzip wird während der Überprüfung, ob eine Katalogkontur mit der Bildkontur<br />
innerhalb der vorgegebenen Genauigkeit d übereinstimmt oder nicht, versucht,<br />
eine Aufsetz- und Drehlage der Katalogkontur bezüglich der Bildkontur zu finden,<br />
wo die Distanz in jedem Punkt auf der Katalogkontur zu irgendeinem Punkt auf der<br />
Bildkontur kleiner-gleich als d ist. Dafür werden die beiden Konturen mittig übereinandergelegt<br />
und alle möglichen Drehlagen ausprobiert.<br />
Abbildung 3.4: Konturvergleich: Bekannte und unbekannte Kontur. Kann mit zwei<br />
Stiften im maximalen Abstand d gleichzeitig gezeichnet werden?<br />
3.3 Skelettierung<br />
Die Skelettierung als Bestandteil der Vektorisierung findet eine Überlagerung aller<br />
Vordergrundgebiete des Rasterbildes mit trapezförmigen Vierecken derart, daß sie die<br />
topologische Zusammenhangsstruktur des Rasterbildes eineindeutig wiedergibt. Die<br />
Art und die Genauigkeit dieser Überlagerung kann vorgegeben werden, wodurch bestimmt<br />
werden kann, ob und wieviele – durch die Natur der Rasterbilder gegebene –<br />
„irrelevante Randzipfel“ und „Ungenauigkeiten in Geradenverläufen“ unberücksich-
3.3 Skelettierung 21<br />
tigt bleiben dürfen. Diese Vierecke entsprechen elementaren, zusammenhängenden Linienelementen<br />
im Rasterbild, deren Anfangs- und Endpunktkoordinaten sowie Breiten<br />
an Anfangs- und Endpunkten das Vektorisierungsergebnis des Rasterbildes bilden.<br />
Die Ermittlung des Skeletts (eines zusammenhängenden Gebietes) eines Rasterbildes<br />
erfolgt grundsätzlich in zwei Etappen. Im ersten Schritt wird das sog. Grundskelett<br />
gebildet. Der zweite Schritt überarbeitet dies mit dem Ziel, die Anzahl seiner elementaren<br />
Bestandteile zu verringern. Während dieser Optimierung entsteht ein vereinfachtes<br />
Skelett, aber mit gewissen Pixelungenauigkeiten als „Randeffekte,“ jedoch wird dabei<br />
streng dafür gesorgt, daß der topologische Aufbau des Rasterbildes trotzdem eindeutig<br />
wiederherstellbar bleibt.<br />
Das Grundskelett besteht am Ende aus horizontal und vertikal angeordneten Rechtecken,<br />
die sich bei Bedarf (vorwiegend an „Enden,“ d.h. ihren Anschlußstellen) überlappen,<br />
so daß jedes Rasterpixel von mindestens einem solchen Rechteck überdeckt<br />
wird. Zusätzlich werden diese Rechtecke untereinander mit „Verbindungen“ versehen,<br />
so daß man, von diesen Verbindungen gesteuert, entlang der Mittellinien dieser<br />
Rechtecke über das jeweils gesamte zusammenhängende Gebiet im Rasterbild wandern<br />
könnte.<br />
Abbildung 3.5: Skelettbildung: links Rasterbild, rechts Skelett davon.<br />
Die Erstellung des Grundskeletts erfolgt in der Abarbeitung des Rasterbildes in einem<br />
Zug von oben nach unten und zeilenweise von links nach rechts, wobei aus dem<br />
Rasterbild Abschnitt für Abschnitt (senkrecht oder waagerecht ausgerichtete) Rechtecke<br />
als zukünftige elementare Bestandteile des Grundskeletts „abgeschnitten“ (d.h.<br />
vom Bild entfernt), und zum schon ermittelten Skelett entsprechend angeklebt (d.h.<br />
hinzugefügt) werden.<br />
Es ist ersichtlich, daß das Skelettieren der eingescannten technischen Leitungspläne<br />
(überwiegend bestehend aus linienhaften Zeichenelementen und Schriftsymbolen)<br />
zu einer Überzahl von elementaren Bestandteilen im Grundskelett führt, welche<br />
in ihrer Vielzahl für die semantische Auswertung nicht viel beitragen. Deswegen ist<br />
es zweckmäßig, die Anzahl dieser Bestandteile zu reduzieren, d.h. das Grundskelett
22 3 VEKTORISIERUNG<br />
anschließend zu überarbeiten. Dies bedeutet hiermit lediglich das Einführen von neuen<br />
trapezförmigen, i.A. schräg ausgerichteten Vierecken als zusätzliche elementare<br />
Bestandteile, und das Ersetzen von Teilen des Grundskeletts entlang „geradlinig“ angeordneter<br />
Folgen von waagerechten Rechtecken durch diese neuen trapezförmigen<br />
Bausteine. Dabei werden natürlich auch die Verbindungen einzelner Skelettelemente<br />
entsprechend geändert oder neu gesetzt.<br />
Abbildung 3.6: Links: Rasterbild; mitte: Grundskelett; rechts: vereinfachtes Skelett.
4 Interaktion, Kontrolle/Korrektur & Lernverfahren<br />
Bei den meisten Programmsystemen muss — auch im Hinblick auf die Benutzerinteraktion<br />
— der Eingabe- und Ausgabeschnittstelle besondere Aufmerksamkeit geschenkt<br />
werden. Dies gilt auch für das Ypsilon-System, es sind aber darüberhinaus<br />
noch weitere Besonderheiten zu berücksichtigen. Dazu zählen vor allem die Implementierung<br />
als AutoCAD-Runtime-Extension (ARX) und — als wichtiges Mittel zur<br />
Verbesserung der Erkennungsleistung — die Durchführung eines Lernverfahrens, das<br />
neben der Ein- und Ausgabe als dritter Schwerpunkt für die Benutzungsoberfläche<br />
betrachtet werden muss. Eine kurze Zusammenfassung zu den allgemeinen Voraussetzungen<br />
und Folgerungen, die sich daraus ergeben, dass Ypsilon als ARX-Applikation<br />
implementiert wurde, befindet sich in Abschnitt 4.1.<br />
Die Eingabedaten für Ypsilon stammen aus der technischen Zeichnung, die interpretiert<br />
werden soll. Liegt diese Zeichnung als Rasterbild vor, importiert Ypsilon als<br />
Eingabedaten das Ergebnis der Vektorisierung. Liegt die urprüngliche Zeichnung als<br />
CAD-Datei vor, so hat Ypsilon in seiner Eigenschaft als AutoCAD-Applikation die<br />
Möglichkeit, direkt auf die CAD-Objekte zuzugreifen, um so die notwendigen Eingabedaten<br />
zu lesen. AutoCAD-Objekte verfügen neben den Attributen zur Beschreibung<br />
ihrer geometrischen Lage jedoch über weitere Attribute, die von dem Erkennungssystem<br />
nicht ignoriert werden sollten. Da die Bedeutung dieser zusätzlichen Attribute<br />
aber nicht automatisch abgeleitet werden kann, muss dem Benutzer die Möglichkeit<br />
gegeben werden, diese Information mit Hilfe von entsprechenden Dialogfenstern an<br />
das Erkennungssystem weiterzugeben. Dies geschieht nur einmal bei der Konfigurierung<br />
des Systems für einen bestimmten Zeichnungssatz. Drei der wichtigsten CAD-<br />
Eigenheiten, die das Erkennungssystem auswerten sollte, sind Blocksymbole, Ebeneninformation<br />
(AutoCAD-Layer) und Linientypen. Für diese Fälle wurden die zugehörigen<br />
Dialoge entwickelt (siehe Abschnitt 4.2), wodurch letztlich der Informationsgehalt<br />
der Ypsilon-Eingabedaten mit geringem Bedienungsaufwand stark verbessert werden<br />
kann.<br />
Die Ausgabedaten von Ypsilon müssen — da die Interpretation grundsätzlich nicht<br />
vollautomatisch gelöst werden kann — durch effiziente Mittel zur Kontrolle und Korrektur<br />
aufbereitet werden, damit sie im letzten Arbeitsschritt ohne Fehler in ein Geoinformationssystem<br />
eingespeist werden können. Eine einfache aber wichtige Korrekturmöglichkeit<br />
ist die Verbesserung der Eingabedaten bzw. der grafischen Primitive,<br />
weil sich diese Korrekturen auf den Erkennungsprozess auswirken und damit letztlich<br />
eine Verbesserung der Ausgabedaten bewirken (Abschnitt 4.3.1). In den Abschnitten<br />
4.3.2 bis 4.3.4 wird die Interaktionskomponente “Datensammler” als umfangreichste<br />
und effizienteste Möglichkeit zum Kontrollieren und Verbessern der Ypsilon-Aus-<br />
23
24 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
gabeobjekte und -Ausgabedaten beschrieben. Nach jedem Interpretationsdurchgang<br />
von Ypsilon werden alle gefundenen Objekte durch den Datensammler in einer Baumansicht<br />
aufgelistet und in der Zeichnungsansicht durch Fähnchenmarkierungen lokalisiert.<br />
Der Benutzer hat zahlreiche Funktionen zum Navigieren und Korrigieren<br />
des Ypsilon-Ergebnisses zur Verfügung. Eine dritte, ganz andere Korrekturmöglichkeit<br />
bietet die Rückweisung von Ypsilon-Objekten (Abschnitt 4.3.5), wobei von Ypsilon<br />
vorgeschlagene Objekte gelöscht werden können, bevor sie als Ausgabeobjekte<br />
an den Datensammler übergeben werden. Ypsilon reagiert auf jede Rückweisung einiger<br />
Objekte mit der Suche nach einer neuen Zeichnungsinterpretation, in der die<br />
zurückgewiesenen Objekte nicht mehr enthalten sind. Durch diesen Vorgang kann von<br />
Ypsilon in einigen Fällen nach wenigen Bedienungsschritten eine wesentlich bessere<br />
Interpretation gefunden werden. Um Objekte zurückweisen zu können, arbeitet der<br />
Benutzer dabei nicht mit den Ausgabeobjekten des Datensammlers, sondern mit Ypsilon-internen<br />
Objekten. Für die Benutzerinteraktion besteht dadurch eine wichtige<br />
Gemeinsamkeit zwischen den beiden Anwendungsfällen “Rückweisung” und “Lernverfahren”.<br />
Daher wird auch für die Rückweisung die in Abschnitt 4.4.2 beschriebene<br />
Interaktionsform verwendet, die eigens für das Lernverfahren und für die Interaktion<br />
mit Ypsilon-Objekten entwickelt wurde.<br />
Die Bedienung des Lernverfahrens wurde bereits erwähnt. Für die Durchführung<br />
des Verfahrens ist darüberhinaus erforderlich, dass der Benutzer mit den Grundzügen<br />
des jeweils verwendeten Ypsilon-Modells, wie es in Abschnitt 2 beschrieben wurde,<br />
vertraut ist. Die Beschreibung zur Durchführung des Lernverfahrens findet sich in Abschnitt<br />
4.4.<br />
4.1 AutoCAD als Rahmen für die Interaktion<br />
Ypsilon ist als ARX-Applikation in AutoCAD implementiert, da es im umschließenden<br />
CAD-Programm eine nützliche Umgebung für seine Arbeit findet. AutoCAD ist<br />
geradezu als Host-Applikation konzipiert worden und bietet einer CAD-Erweiterung<br />
wie Ypsilon eine Vielzahl von Möglichkeiten um dem Benutzer neue Funktionen zur<br />
Verfügung zu stellen. Die Einbettung von Ypsilon in AutoCAD hat den Vorteil, dass<br />
ein großer Teil der Benutzerinteraktion nicht neu entwickelt werden muss, da er durch<br />
die Standard-Funktionen von AutoCAD abgedeckt wird. Ein Beispiel dafür ist die Korrektur<br />
der Ypsilon-Interpretation durch Verbesserung der grafischen Primitive (Abschnitt<br />
4.3.1).<br />
Ein Grundsatz in AutoCAD ist, dass alle Befehle über die eingebaute Kommandozeile<br />
gestartet werden können und so ist auch jede Programmfunktion von Ypsilon<br />
über ein entsprechendes Kommando verfügbar. Die Tabelle 4.1 enthält alle für
4.1 AutoCAD als Rahmen für die Interaktion 25<br />
die Benutzung von Ypsilon wichtigen Befehle mit einer kurzen Beschreibung. Einige<br />
Kommandos zur Vorverarbeitung der CAD-Primitive wurden in Tabelle 4.1 nicht<br />
aufgeführt, da sie für die Domäne Gas zur Zeit nicht verwendet werden. Für mehr<br />
»YDO«<br />
»YCLEAR«<br />
»YDOVECTOR«<br />
»YDCSAVE«<br />
»YCONFIG«<br />
»YCADCONF«<br />
»YDOREJECTION«<br />
»YLERNEN«<br />
Interpretationsvorgang für CAD-Daten starten<br />
Löschen der Ypsilon-Ausgabe<br />
TIFF-Bild vektorisieren und interpretieren<br />
Speichern der Datensammler-Objekte<br />
Konfiguration für versch. Ypsilon-Stellgrößen<br />
Ypsilon-Konfiguration für CAD-Eigenschaften<br />
Interpretation mit Rückweisung<br />
Lernverfahren starten<br />
Tabelle 4.1: Ypsilon Kommandos für die AutoCAD-Befehlszeile.<br />
Benutzerfreundlichkeit können Befehle, die für die AutoCAD-Kommandozeile implementiert<br />
wurden, auch über ein Menü oder eine Knopfleiste verfügbar gemacht werden,<br />
ohne dass sich die Funktion des Befehls dadurch ändert. Für eine kleine Auswahl<br />
der vorhandenen Befehle wurde das bei Ypsilon gemacht. So ist z.B. der Menübefehl<br />
»Alles interpretieren« (Abb. 4.1a) bzw. das Drücken der entsprechenden Werkzeugschaltfläche<br />
(Abb. 4.1b) äquivalent zum Aufruf des Kommandos »YDO«.<br />
(a)<br />
(b)<br />
Abbildung 4.1: Ypsilon-Menü und Ypsilon-Knopfleiste.<br />
Wie es in AutoCAD üblich ist, kann jedes Kommando nach seinem Aufruf unterschiedlich<br />
reagieren. Der Dialog mit dem Benutzer wird häufig über das Kommando-<br />
Textfenster von AutoCAD fortgesetzt. So kann der Benutzer z.B. aufgefordert werden,<br />
über eine weitere Texteingabe den gestarteten Befehl zu konkretisieren, durch
26 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
Mausklick einen Punkt in der Zeichnung anzugeben oder eine Menge von Zeichnungselementen<br />
auszuwählen. Andere Befehle setzen die Interaktion mit dem Benutzer über<br />
geeignete Dialogfenster fort, die sofort nach dem Kommandoaufruf geöffnet werden.<br />
Auch die Ypsilon-Kommandos wurden entsprechend dieser AutoCAD-spezifischen<br />
Interaktionsform entwickelt und nutzen unterschiedliche Möglichkeiten zur Kommunikation<br />
mit dem Nutzer.<br />
4.2 Auswertung von CAD-Eigenschaften in Ypsilon<br />
Um Ypsilon im Hinblick auf die CAD-Eigenschaften konfigurieren zu können, wurde<br />
das Kommando »YCADCONF« für die AutoCAD-Befehlszeile implementiert. Nach<br />
dem Start des Kommandos wird der Benutzer gefragt, ob Blockreferenzen, Layer, Linientypen<br />
oder Linienbreiten konfiguriert werden sollen und nach einer entsprechenden<br />
Antwort öffnet sich einer der vier Dialoge, die in den folgenden Unterabschnitten<br />
beschrieben sind.<br />
4.2.1 Aufnahme von CAD-Blocksymbolen in die Interpretation<br />
Die Abb. 4.2 zeigt zwei Ausschnitte aus einem Gasplan, die CAD-Blocksymbole enthalten.<br />
In 4.2a kommen drei Schieber vor und in 4.2b ist eine Endkappe abgebildet.<br />
(a)<br />
(b)<br />
Abbildung 4.2: CAD-Blocksymbole Schieber und LeitungsEndkappe.<br />
Normalerweise baut der Erkennungsvorgang von Ypsilon auf einfachsten Primitiven<br />
(Strich, Bogen, Buchstaben bzw. Text) auf und bildet alle komplexeren Objekte<br />
selbst. Zusammengesetzte CAD-Elemente werden von Ypsilon durch Aufrufen einer<br />
entsprechenden AutoCAD-Funktion temporär gesprengt um ihre einfachsten Bestandteile<br />
schließlich dem Erkennungsprozess zuzuführen. So kann auch die Endkappe aus<br />
Abb. 4.2b in drei Striche gesprengt werden, die von einem entsprechenden Ypsilon-<br />
Modell — wie bei der Verarbeitung von vektorisierten Rasterdaten — aufgrund ihrer
4.2 Auswertung von CAD-Eigenschaften in Ypsilon 27<br />
Lage zu der Leitungslinie wieder zu einer Endkappe zusammengesetzt werden könnten.<br />
Für die Interpretation von CAD-Daten ist das Auflösen der CAD-Blöcke nicht immer<br />
sinnvoll. Nicht jedes Blocksymbol lässt sich wie die Endkappe in wenige, charakteristische<br />
Linien sprengen. Die Schieber-Symbole aus Abb. 4.2a bestehen z.B.<br />
aus AutoCAD-Flächenelementen (Schraffuren), die von Ypsilon nicht als primitive<br />
Objekte akzeptiert werden. Für solche Fälle wurde Ypsilon so angepasst, dass<br />
CAD-Blöcke unverändert in die Ypsilon-Interpretation eingehen, wenn der Benutzer<br />
den Namen der Blockdefinition einem geeigneten Ypsilon-Typ zugeordnet hat (siehe<br />
4.2.2). Dieser Konfigurationsprozess hat bezüglich der Zeichnungsinterpretation<br />
von Rasterbildern eine analoge Funktion zur Bestimmung des Zeichenprototypkatalogs<br />
(siehe Abschnitt 3.2).<br />
4.2.2 Dialoge zur Konfiguration<br />
Blockreferenzen zu Y-Typen. Abb. 4.3 zeigt das Dialogfenster, mit dem der Benutzer<br />
Namen von Blockdefinitionen mit entsprechenden Ypsilon-Typen verknüpfen<br />
kann. Verknüpfungen werden aktiviert, indem der Nutzer in der Liste “Blockdefinitionen”<br />
einen oder mehrere Einträge und in der Liste “Y-Typen für Blocks” einen Eintrag<br />
selektiert und schließlich die Schaltfläche “Hinzufügen” klickt. Wenn der Dialog<br />
durch Drücken der Schaltfläche “Ok” verlassen wird, werden die Änderungen sofort<br />
übernommen. Nach dem AutoCAD-Menübefehl “Speichern” wird die Konfiguration<br />
in der *.dwg-Datei abgelegt und beim nächsten Öffnen der Datei wieder aktiviert.<br />
Erleichtert wird die Konfiguration zusätzlich durch die beiden quadratischen Bild-<br />
Schaltflächen in der Steuerelement-Gruppe “Blockdefinitionen”. Der obere Knopf ermöglicht<br />
die Auswahl von Blockreferenzen in der Zeichnung, worauf die entsprechenden<br />
Einträge in der Liste der Blockdefinitionen automatisch selektiert werden. Der<br />
untere ist nur aktiviert, wenn genau ein Eintrag in der Namensliste der Blockdefinitionen<br />
aktiviert ist. Alle Blockreferenzen in der Zeichnung, die zu dieser Blockdefinition<br />
gehören, werden dem Nutzer nach Betätigung der unteren Schaltfläche nacheinander<br />
präsentiert.<br />
AutoCAD-Layer zu Y-Typen. Das Dialogfenster zur Eingabe der Layer-Konfiguration<br />
zeigt die Abbildung 4.4. Die Bedienung erfolgt analog zu der Beschreibung im<br />
vorherigen Absatz “Blockreferenzen zu Y-Typen”.<br />
Die Liste “Y-Typen” oben rechts im Dialogfenster scheint — verglichen mit der<br />
Anzahl der Ypsilon-Typen, die im Abschnitt “Modellierung” vorgestellt werden —<br />
sehr kurz zu sein. Der Grund dafür ist, dass diese Liste keine bloße Auflistung aller Yp-
28 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
Abbildung 4.3: Konfiguration von CAD-Blocksymbolen für Ypsilon.<br />
Abbildung 4.4: Dialog zur Layerkonfiguration für Ypsilon-Typen.
4.3 Kontrolle und Korrektur 29<br />
silon-Typen darstellt, sondern eine Liste von Pseudonymen, unter denen sich die Ypsilon-Typen<br />
beim Dialog als Interessenten für Layer-Information angemeldet haben. So<br />
sind z.B. unter dem Pseudonym “Bemassung” in Wirklichkeit mehrere Bemaßungs-<br />
Typen angemeldet, die nach einer Änderung im Dialogfenster alle die gleiche Layerkonfiguration<br />
erhalten.<br />
Linientypen zu Y-Typen. Der Dialog aus den Abbildungen 4.3 und 4.4 kann weiterhin<br />
verwendet werden, um für Ypsilon-Typen nur Linien mit einem bestimmten AutoCAD-Linientyp<br />
zuzulassen (ohne Abbildung). Das Konzept ist prinzipiell für jede<br />
Art von CAD-Zusatzinformation erweiterbar. Gibt es jedoch sehr zahlreiche Möglichkeiten<br />
zur Konfiguration der CAD-Eigenschaften, erhält man schnell redundante Information.<br />
Häufig tragen CAD-Attribute den Wert “VonLayer”, so dass z.B. in einigen<br />
Fällen die Layer-Information und die CAD-Linientyp-Information bereits äquivalent<br />
ist. Deshalb werden von Ypsilon zur Zeit die CAD-Linientyp-Attribute schon nicht<br />
mehr ausgewertet.<br />
Linienbreiten zu Y-Typen. Der Dialog aus den Abbildungen 4.3 und 4.4 kann weiterhin<br />
verwendet werden, um für Ypsilon-Typen nur Linien mit einer bestimmten Linienbreite<br />
zuzulassen. Zur Zeit wird diese Konfiguration nur dann ausgewertet, wenn<br />
das Ergebnis eines vektorisierten Rasterbildes in Form einer *.Res-Datei importiert<br />
und interpretiert wird. Die vorhandene Linienbreiteninformation wird dabei auf eine<br />
relativ geringe Anzahl von Abstufungen diskretisiert. Diese Linienbreite-Stufen können<br />
im Dialog schließlich den passenden Ypsilon-Typen zugeordnet werden.<br />
4.3 Kontrolle und Korrektur<br />
4.3.1 Verbesserung der grafischen Primitive<br />
Dass die Verbesserung der grafischen Primitive eine Verbesserung der Ypsilon-Ergebnisse<br />
mit sich bringt, versteht sich fast von selbst. Dennoch muss dieser wichtige Korrekturschritt<br />
erwähnt werden. Mit “Verbesserung” ist dabei weniger eine Verbesserung<br />
im Sinne von Ypsilon gemeint, sondern die Korrektur im Sinne der Zeichenvorschrift,<br />
auf deren Grundlage das Ypsilon-Modell entwickelt wurde. Wenn zum Zeitpunkt der<br />
Ypsilon-Modellentwicklung Zeichenregeln als gültig angenommen wurden, die in einer<br />
CAD-Datei durch Zeichnungsfehler verletzt werden, sind fehlerhafte oder fehlende<br />
Ypsilon-Ausgabeobjekte kaum zu vermeiden. Für solche Fehlinterpretationen ist die<br />
beste Abhilfe, die ursächlichen Zeichnungsfehler zu beseitigen.
30 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
Durch die Notwendigkeit dieser Korrekturform ergibt sich für die Benutzungsoberfläche<br />
von Ypsilon jedoch kaum eine Änderung. Es kommt hier zum Tragen, was<br />
in Abschnitt 4.1 (S. 24) bereits angesprochen wurde: Das Verändern und Verbessern<br />
der grafischen Primitive kann ohne Einschränkung mit Hilfe der vorhandenen Auto-<br />
CAD-Werkzeuge bewerkstelligt werden.<br />
Wenn Zeichnungsfehler oder notwendige Bedienungsschritte zur Einhaltung von<br />
Zeichenregeln massenhaft auftreten, werden Hilfswerkzeuge notwendig. Während der<br />
Entwicklung von Ypsilon wurden auch verschiedene Werkzeuge zur Vorverarbeitung<br />
entwickelt und sind über die Benutzungsoberfläche von Ypsilon abrufbar. Sie sind<br />
eher eine Erweiterung der CAD-Funktionen als Bestandteil von Ypsilon und werden<br />
für die Domäne Gas zur Zeit nicht verwendet.<br />
4.3.2 Die Dialogleiste “Datensammler”<br />
Die Behandlung des Ypsilon-Ergebnisses durch den Benutzer ist die umfangreichste<br />
Interaktionskomponente in Ypsilon, da hier zahlreiche und unterschiedliche Funktionen<br />
bereitgestellt werden müssen. Wichtige Grundlage für den Datensammler ist ein<br />
klassenorientiertes Datenkonzept, das dem Ypsilon-Konzept der grafischen Typen entspricht,<br />
aber auch geeignet ist, die exportierten Daten in ein relationales Datenbankschema<br />
zu überführen.<br />
Eine verbindliche Datendefinition wird zusammen mit dem Ypsilon-Modell bzw.<br />
mit der Festlegung der Ypsilon-Ausgabetypen erstellt. Diese Definition wird von Ypsilon<br />
beim Öffnen jeder neuen Zeichnung verwendet und befindet sich somit als erste<br />
Vorlage im Datensammler (siehe Abb. 4.5a). Sie ist in der Baumansicht unter der zweiten<br />
Wurzel “GASO Definition” zu finden, und zeigt in der Abbildung die für die Gas-<br />
Domäne verwendete Standardeinstellung. Aus den beiden expandierten Klassendefinitionen<br />
ist zu ersehen, dass dem Leitungsabschnitt die Attribute Durchmesser (Datentyp<br />
double) und Material (Datentyp enum) zugeordnet wurden, die Voreinstellung für<br />
ihren Wert ist “0” bzw. “unbestimmt”. Für die Klasse Schutzrohr wurde die Klasse<br />
Leitungsabschnitt als Basisklasse ausgewählt, so dass sie über einen Vererbungsmechanismus<br />
die gleichen Attribute erhält. Neben den Klassen selbst werden auch die<br />
Beziehungen zwischen den Klassen modelliert, wodurch die Grundlage für die Erzeugung<br />
von relationalen Datenstrukturen gegeben ist.<br />
Von besonderer Bedeutung für die Interaktion ist die Anforderung, dass der Nutzer<br />
die Möglichkeit haben muss, dem vorhandenen Datenkonzept eigene Datenstrukturen<br />
hinzuzufügen. Diese Funktion wird durch vier Menübefehle, die in Abb. 4.5a aufgelistet<br />
sind, bereitgestellt. Die Weiterführung der Interaktion nach dem Aufruf der Be-
4.3 Kontrolle und Korrektur 31<br />
Menübefehle:<br />
(rechte Maustaste)<br />
Kontext: “Klassen”<br />
Klasse hinzufügen<br />
Kontext: “Relationen”<br />
Relation hinzufügen<br />
Kontext: “Basisklassen”<br />
neue Basisklasse wählen<br />
Kontext: “Attribute”<br />
Attribut hinzufügen<br />
(b)<br />
(c)<br />
(a)<br />
Abbildung 4.5: Erweiterung der Datendefinition im Datensammler.<br />
fehle »Relation hinzufügen« bzw. »Klasse hinzufügen« zeigen die Abbildungen 4.5b<br />
bzw. 4.5c.<br />
4.3.3 Kontrolle mit dem Datensammler<br />
Objektnavigation und -inspektion. In der Baumansicht des Datensammlers gibt es<br />
neben der Wurzel “GASO Definition” noch eine zweite Wurzel, in deren Unterverzeichnissen<br />
die Klasseninstanzen gesammelt werden, die entsprechend der gegebenen<br />
Datendefinition erstellt wurden. Ypsilon trägt hier nach jedem Interpretationsdurchlauf<br />
mit dem Befehlszeilenkommando »YDO« bzw. dem Menü »Alles interpretieren«<br />
automatisch alle gefundenen Ausgabeobjekte und Objekt-Relationen ein.<br />
In der Abbildung 4.6 ist die Situation nach der Erkennung von zwei Leitungsabschnitten<br />
und einem Materialwechsel dargestellt. Expandiert man den Eintrag für<br />
die Klasse Leitungsabschnitt findet man die Klasseninstanzen Leitungsabschnitt1 und<br />
Leitungsabschnitt2. Expandiert man — wie in der Abbildung zu sehen — Leitungsabschnitt2,<br />
so erhält man eine Sicht auf die Attribute Durchmesser und Material und auf<br />
die Relationen, die für die Klasse Leitungsabschnitt definiert wurden. Für die Relation<br />
benachbart wurde, erkennbar durch das Symbol + vor dem Eintrag, eine Verknüpfung<br />
gefunden und expandiert man — wie in der Abbildung zu sehen — diesen Eintrag,<br />
erhält man die Information, dass Leitungsabschnitt2 ein Nachbar von Leitungs-
32 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
Menübefehle:<br />
(rechte Maustaste)<br />
Kontext: Wurzel “GASO”<br />
Attributwert suchen<br />
Neue Suchabfrage<br />
Kontext: 〈Klassenname〉<br />
Objekt hinzufügen<br />
Kontext: 〈Objektname〉<br />
Zeige Objekt<br />
Kontext: 〈Objektattribut〉<br />
Attributwert ändern<br />
Kontext: 〈Objekt-Relation〉<br />
Verknüpfungen hinzufügen<br />
Abbildung 4.6: Objektnavigation und Editierfunktionen im Datensammler.<br />
abschnitt1 ist. In der gezeigten Situation könnte man weiterhin Leitungsabschnitt1 expandieren<br />
und diese Kette der Expansionen noch weiter fortsetzen, wodurch der Datensammler<br />
z.B. die Möglichkeit einer einfachen Leitungsverfolgung bietet.<br />
Ein wichtiger Aspekt der Interaktion ist die Verknüpfung zwischen den Einträgen<br />
im Datensammler und den zugehörigen Objekten in der Zeichnung. Der Name eines<br />
Datensammler-Objektes, z.B. Leitungsabschnitt2, wird daher auch für eine Fähnchenmarkierung,<br />
die die Lage des Objektes in der Zeichnungsansicht angibt, verwendet.<br />
Der Benutzer kann in beide Richtungen navigieren. Der Links-Klick auf ein<br />
Datensammler-Objekt zeigt dem Benutzer das Objekt in der Zeichnungsansicht durch<br />
einen sekundenlang erscheinenden Pfeil, der auf die Fähnchenmarkierung des Objektes<br />
zeigt. Nach einem Links-Klick auf eine Fähnchenmarkierung expandiert der Datensammler<br />
automatisch zum richtigen Unterverzeichnis und selektiert das zugehörige<br />
Datensammler-Objekt.<br />
Die Abbildung 4.6 enthält auch eine Liste der Befehle, die über das Kontextmenü<br />
in diesem Zweig des Datensammlers, der die Klasseninstanzen auflistet, verfügbar<br />
sind. Als weitere wichtige Möglichkeit für die Navigation kann durch Rechts-Klick<br />
auf eine Klasseninstanz der Befehl »Zeige Objekt« ausgeführt werden, wodurch das<br />
zugehörige Zeichnungsobjekt, wenn es außerhalb des Anzeigebereiches liegt, in die<br />
Mitte der Zeichnungsansicht bewegt wird. Die anderen Menübefehle werden in den<br />
folgenden Abschnitten erläutert.<br />
Die gezeigten Möglichkeiten der Navigation bieten bereits alle nötigen Vorraussetzungen<br />
für eine gründliche Inspektion des Ypsilon-Ergebnisses. Wenn jeder einzelne<br />
Wert überprüft werden muss, ist die einfachste Vorgehensweise, im Datensammler für<br />
jedes Objekt von oben nach unten alle Attribute und Relationen zu inspizieren.
4.3 Kontrolle und Korrektur 33<br />
Konsistenzprüfung am Beispiel Bemaßung. Ausgabeobjekte, für die bestimmte<br />
Konsistenzbedingungen erfüllt sein müssen, können durch das vorgestellte Konzept<br />
und mit Hilfe einer Suchfunktion im Datensammler überprüft werden. So wurde bei<br />
der Modellierung für die Klasse Bemassung ein einfaches Attribut “Richtigkeit” mit<br />
den möglichen Werten “Ja” bzw. “Nein” angelegt. Dieser Wert wird von Ypsilon bei<br />
der Eintragung in den Datensammler entsprechend eines Vergleichs zwischen der zugeordneten<br />
Maßzahl (Attribut “Masszahl”) und dem Abstand der beiden Bemaßungspunkte<br />
(Attribut “Abstand”) gesetzt. Die zulässige Abweichung bei diesem Vergleich<br />
(b)<br />
(a)<br />
(c)<br />
(d)<br />
Abbildung 4.7: Konsistenzprüfung “Maßzahl ↔ Abstand” bei Bemaßungen.<br />
kann nach Aufruf des Befehls »YCONFIG« im Dialog “Y-Konfiguration” unter dem<br />
Schlüssel “MasszahlAbstandToleranz” konfiguriert werden (siehe Abb. 4.7a). In Kombination<br />
mit einer Suchfunktion für Attributwerte hat der Benutzer ein wichtiges Werkzeug<br />
für die Ergebniskontrolle zur Verfügung, da er gezielt alle Bemaßungen überprüfen<br />
kann, bei denen die Überprüfung der Konsistenz negativ ausgefallen ist.<br />
Die Menübefehle für die Suchfunktion wurden bereits in Abbildung 4.6 aufgelistet<br />
und in Abbildung 4.7b ist der Aufruf von »Neue Suchabfrage« gezeigt, worauf das<br />
Dialogfenster “Suchabfrage für Attribute” geöffnet wird (Abbildung 4.7c). Nach der<br />
Eingabe der Suchabfrage wird die Baumansicht des Datensammlers zum ersten gefundenen<br />
Objekt expandiert und das entsprechende Attribut selektiert (Abb. 4.7d). Durch<br />
wiederholtes Aufrufen von »Attributwert suchen« können alle übrigen Bemaßungen<br />
mit “Richtigkeit: Nein” kontrolliert werden.<br />
Eine weitere wichtige Anwendung der Suchfunktion beim Kontrollvorgang ist die<br />
Suche nach voreingestellten Attributwerten. Ein Beispiel für diese Strategie ist die<br />
Suchabfrage {Attribut-Name: “Material”, Suchbegriff: “unbestimmt”} mit der man<br />
alle Leitungsstücke findet, denen Ypsilon keine Beschriftung zuordnen konnte.
34 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
4.3.4 Korrektur mit dem Datensammler<br />
Zur Korrektur der bestehenden Daten können die Attributwerte geändert und neue Objekte<br />
und Relationen hinzugefügt werden. Diese Funktionen können über die entsprechenden<br />
Menübefehle, die ebenfalls in der Liste in Abbildung 4.6 (S. 32) zu finden<br />
sind, aufgerufen werden.<br />
Der Datensammler unterscheidet zwei Betriebsmodi. In welchem er sich befindet,<br />
hängt davon ab, wer gerade Schreibzugriff auf die Datensammler-Objekte hat.<br />
Für den Interpretationsdurchlauf muss Ypsilon den Schreibzugriff erhalten, damit die<br />
alten Objekte gelöscht und die neuen Objekte nach der Interpretation eingetragen werden<br />
können. Durch den ersten Aufruf eines Befehls zur Datenänderung fordert der<br />
Nutzer den Schreibzugriff auf die Objekte an und der Datensammler wechselt in den<br />
Editiermodus. Als visuelle Zustandsanzeige erscheinen die Datensammler-Einträge im<br />
Interpretationsmodus in schwarzer, im Editiermodus in blauer Schrift. Der Übergang<br />
in beide Richtungen ist mit einer Sicherheitsabfrage an den Benutzer verbunden.<br />
Löschen und Hinzufügen von Objekten. Das Löschen eines Datensammler-Objektes<br />
geschieht — in Anlehnung an die AutoCAD-Konvention — durch Selektion der<br />
Fähnchenmarkierung in der Zeichenansicht und Drücken der Taste “Entf”.<br />
Nach Aufruf von »Objekt hinzufügen« wird der Benutzer aufgefordert, alle Zeichnungsobjekte<br />
auszuwählen, die zum Objekt gehören sollen. Im nächsten Schritt muss<br />
ein Referenzpunkt angegeben werden, worauf das neue Objekt im Datensammler erscheint.<br />
Das Hinzufügen einer Relation durch »Verknüpfungen hinzufügen« geschieht ebenfalls,<br />
nach entsprechender Aufforderung im AutoCAD-Textfenster, durch Selektion<br />
der Fähnchenmarkierung eines zur Definition der Relation kompatiblen Objektes.<br />
Attributwerte ändern. Nach dem Aufruf von »Attributwert ändern« erscheint, abhängig<br />
vom Datentyp des Attributes, ein geeignetes Dialogfenster für die Eingabe des<br />
neuen Wertes. Werte vom Typ double oder string können in Editierfelder eingegeben<br />
werden, für Werte vom Typ enum erscheint ein Auswahlmenü mit den vordefinierten<br />
Alternativen. Für Werte vom Typ Punkt können X- und Y-Koordinate in<br />
zwei Editierfeldern verändert werden; es ist aber außerdem möglich, einen Punkt in<br />
der Zeichnung durch Mausklick anzugeben, um dessen Koordinaten automatisch in<br />
die entsprechenden Felder zu übernehmen.<br />
Verändert der Benutzer einen der beiden Punkte in einem Bemaßungsobjekt, so<br />
wird das Attribut “Abstand” sofort neu berechnet und im Datensammler aktualisiert.
4.3 Kontrolle und Korrektur 35<br />
Zusätzlich wird der Vergleich zwischen Maßzahl und Abstand erneut durchgeführt und<br />
gegebenenfalls wird der Wert des Attributs “Richtigkeit” automatisch korrigiert.<br />
4.3.5 Rückweisung von Ypsilon-Objekten<br />
Einige Aspekte zur Rückweisung wurden bereits in der Einleitung zum Abschnitt 4 auf<br />
Seite 24 angesprochen. In Abbildung 4.8 wird ein sehr einfaches Beispiel vorgestellt,<br />
das dazu dienen soll, die Bedienung und Wirkungsweise dieser Korrekturmöglichkeit<br />
zu verdeutlichen. Die verwendete Interaktionsform ist ab Seite 37 genauer beschrieben.<br />
Die Abbildung 4.8a zeigt die grafische Repräsentation eines Datensammler-Objektes<br />
nach der Interpretation. In dem gezeigten Fall wurde eine Bemaßung gefunden,<br />
aber eine grüne Linie lässt erkennen, dass nicht der Abstand zwischen den Pfeilspitzen,<br />
sondern irrtümlich der Schaft des linken Pfeiles als bemaßte Strecke interpretiert<br />
wurde. Die Rückweisung bietet die Möglichkeit, fehlerhafte Objekte wie dieses zu<br />
löschen, bevor sie in den Datensammler gelangen.<br />
(a) (b) (c)<br />
(d)<br />
(e)<br />
Abbildung 4.8: Rückweisung von Ypsilon-Objekten.<br />
Wird die Ypsilon-Interpretation nicht mit »YDO« gestartet, sondern mit »YDO-<br />
REJECTION«, so bietet sich dem Benutzer nach dem kompletten Interpretationsdurchlauf<br />
von Ypsilon die Situation aus Abb. 4.8b und er kann anhand der gezeigten<br />
farbigen Markierung alle falschen Objekte wie in 4.8c markieren. Wird der Vorgang<br />
mit der Taste »Esc« abgeschlossen, werden alle rot markierten Objekte gelöscht. Dies
36 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
sind weitreichende Änderungen, weil dadurch zwischen den verbleibenden Objekten<br />
eine völlig neue Konfliktsituation geschaffen wird, die anschließend von Ypsilon mit<br />
einer Optimierungsphase wieder aufgelöst wird. Die gewünschte Auswirkung ist, dass<br />
sich in der neuen Interpretation, wie in Abb. 4.8d gezeigt, korrekte Hypothesen durchsetzen<br />
können. Ist dies gelungen, kann die verbesserte Interpretation an den Datensammler<br />
weitergegeben werden (Abb. 4.8e). Wurde keine Verbesserung erreicht, kann<br />
der Vorgang der Rückweisung in einer Schleife auch mehrmals ausgeführt werden.<br />
Diese Korrekturmöglichkeit ist zum Teil problematisch, da eine Verbesserung der<br />
Interpretation nicht vorhergesagt werden kann. Unter Umständen führt man die Rückweisungsschleife<br />
viele Male aus und erhält dennoch nicht das erwartete Ergebnis. Andererseits<br />
ist eine Verschlechterung nicht zu befürchten, da der Benutzer immer mehr<br />
fehlerhafte Objekte löscht und — da Ypsilon nur die Optimierung neu startet und nicht<br />
die Objektaggregation — keine neuen fehlerhaften Objekte hinzukommen können. Im<br />
besten Fall kann mit wenigen Schritten die Interpretation einer relativ großen Objektmenge<br />
berichtigt werden.<br />
4.4 Lernverfahren<br />
4.4.1 Anforderungen an den Ablauf<br />
Die Grundidee des für den Anwender sichtbaren Teil des Lernverfahrens ist sehr einfach<br />
zu beschreiben: Jede von Ypsilon erzeugte Objekthypothese muss durch den<br />
Lernoperator als “richtig” oder “falsch” markiert werden. Eine wichtige Anforderung<br />
dazu wurde bereits in der Einleitung auf S. 24 erwähnt: Bei der Anwendung des Lernverfahrens<br />
muss der Nutzer mit dem verwendeten Ypsilon-Modell vertraut sein. Diese<br />
und weitere Anforderungen sind erkennbar, wenn man sich den Ablauf des Verfahrens<br />
anhand des Ypsilon-Modells vergegenwärtigt. Die Abbildung 4.9 zeigt ein Beispiel<br />
unter Verwendung der in [1] entwickelten Darstellungsweise (Klassen als Ellipsen,<br />
Objekte als Quadrate, causes-Relation als Pfeile). Die Abbildung zeigt den Fall, dass<br />
eine Objekthypothese der Klasse C 4 , die auch eine Objekthypothese der Klasse C 6 ermöglicht,<br />
negativ bewertet wurde. Die erwähnte Objekthypothese der Klasse C 6 ist<br />
damit nicht mehr gegeben. Es ist demnach zweckmäßig, die Bewertung der Hypothesen<br />
aller Klassen nicht in beliebiger Reihenfolge, sondern bottom-up entsprechend der<br />
Klassenhierarchie durchzuführen. Das bedeutet, dass die Bewertung für eine Klasse<br />
nur durchgeführt werden darf, wenn jede ihrer Vorgängerklassen im Ypsilon-Modell<br />
entweder zu den primitiven Klassen gehört (siehe C primitive in Abb. 4.9) oder die Bewertung<br />
ihrer Objekte bereits durchgeführt wurde. Obwohl nach dieser Regel im Allgemeinen<br />
mehrere Klassen für die Bewertung in Frage kommen, ist es bei der hier für
4.4 Lernverfahren 37<br />
C 6<br />
⊕<br />
⊗<br />
⊕<br />
⊕<br />
⊕<br />
C ⊕<br />
4 C<br />
⊕<br />
5<br />
⊖ ⊕<br />
⊕<br />
⊕<br />
⊕<br />
⊕<br />
C ⊕<br />
⊕<br />
1 C ⊕<br />
2 C 3<br />
⊕<br />
C primitive<br />
⊕<br />
⊕ ⊕<br />
⊕<br />
⊕<br />
⊕<br />
⊕<br />
Abbildung 4.9: Lernverfahren am Y-Modell.<br />
die Objektevaluation gewählten Methode sinnvoll, dem Benutzer stets nur die Hypothesen<br />
einer einzigen Klasse zu präsentieren.<br />
Die Benutzerinteraktion läuft so ab, dass der Benutzer aus einer Kandidatenliste,<br />
die alle in Frage kommenden Klassen enthält, eine Klasse auswählt und anschliessend<br />
die Objekte dieser Klasse bewertet. Nach der Bewertung werden an Stelle dieser<br />
Klasse je nach Situation eventuell einige ihrer Nachfolgerklassen der Kandidatenliste<br />
hinzugefügt. Der Benutzer wird wieder zur Auswahl einer Klasse aufgefordert und<br />
der Vorgang wiederholt sich, bis alle Objekthypothesen aller “lernfähigen” Klassen<br />
bewertet wurden.<br />
Es gibt Ypsilon-Klassen die bezüglich des verwendeten Lernalgorithmus nicht<br />
lernfähig sind, weil bei der Modellierung für die Erzeugung ihrer Objekte eine spezielle<br />
Strategie gewählt wurde. Diese Klassen kommen in der Kandidatenliste nie vor,<br />
da sie bezüglich des Lernalgorithmus so behandelt werden, als wären all ihre Objekte<br />
bereits positiv bewertet worden.<br />
4.4.2 Interaktion mit Ypsilon-Objekten<br />
Der Entwurf für die Interaktion beim Lernverfahren hat seinen Ursprung auch in der<br />
bereits gezeigten Interaktionsform mit den Fähnchenmarkierungen des Datensammlers.<br />
Auch beim Lernverfahren werden Markierungen verwendet, die auf Benutzereingaben<br />
reagieren und so eine in der Softwaretechologie als “Direkte Manipulation”<br />
klassifizierte Interaktionsform ermöglichen. Beim Lernverfahren ist die zu behandelnde<br />
Objektmenge jedoch keine durch Optimierung gefundene Interpretation ohne Konflikte,<br />
sondern die Menge aller Objekthypothesen zu einer Ypsilon-Klasse. Häufig haben<br />
zwei oder mehr Hypothesen, besonders wenn sie in Konflikt zueinander stehen,
38 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
den gleichen Referenzpunkt. Eine einfachere Art von linienhafter Markierung erlaubt<br />
das Anzeigen aller Hypothesen durch die Auffächerung an einem Punkt. Die Zeichnungsansicht<br />
sieht dann so aus, als ob auf der technischen Zeichnung viele Objekte mit<br />
Stecknadeln markiert wurden. Um ein Objekt zu inspizieren braucht der Benutzer nur<br />
mit der Maus auf eine Stecknadel (bzw. auf einen Stecknadelkopf) zu zeigen. Das zugehörige<br />
Objekt wird dann sofort gezeichnet, wird aber auch sofort wieder unsichtbar,<br />
sobald sich der Mauszeiger auf ein anderes Objekt bewegt.<br />
Der Benutzer kann in der Zeichnung wie gewohnt Bildlauf- und Zoom-Funktionen<br />
nutzen und so auf einfache Weise alle Objekte begutachten. Sobald ein Objekt gezeichnet<br />
und damit aktiviert ist, kann der Benutzer durch Tastendruck (z.B. linke und rechte<br />
Maustaste) die Bewertung des Objektes verändern.<br />
Um den Prozess der Objektbewertung übersichtlich zu gestalten, wurde ein einfaches<br />
Farbschema eingeführt. Zu Beginn des Lernverfahrens erhalten alle Elemente in<br />
der möglicherweise sehr bunten AutoCAD-Zeichnung die Farbe grau. Alle Stecknadeln<br />
sind stets farbig, um die Bewertung des zugehörigen Objektes sichtbar zu machen.<br />
Dabei gibt es je eine Farbe für unbewertete, positive und negative Objekte (z.B. gelb,<br />
grün, rot). Wenn der Benutzer beginnt, die Objekte einer Klasse zu bewerten, sind alle<br />
Stecknadeln gelb. Er muß die Bewertung solange durchführen, bis in der Zeichnung<br />
nur noch grüne oder rote Stecknadeln vorhanden sind. Wenn das Lernverfahren beendet<br />
ist, erhalten alle grau gefärbten Objekte wieder ihre ursprüngliche Farbe.<br />
4.4.3 Bedienung und Durchführung des Lernverfahrens<br />
Dialogfenster. Das Lernverfahren wird durch Eingabe von »YLERNEN« in die Auto-<br />
CAD-Kommandozeile gestartet. Die Dialogleiste “Datensammler” wird ausgeblendet<br />
und der Auswahldialog “Typ für Objektbewertung wählen” (Abb. 4.10a) wird geöffnet.<br />
Wie bereits erklärt wurde, führt dieser Dialog in seiner Liste stets nur die Ypsilon-Klassen,<br />
die für das Lernen überhaupt und nach der Vorgehensweise bottom-up als<br />
nächste in Frage kommen. In der Abbildung 4.10a wurde LeitungsstueckBeschriftet selektiert<br />
und nach der Bestätigung durch die Schaltfläche “Objekte bewerten” werden<br />
in der Zeichnungsansicht die entsprechenden Stecknadeln gezeichnet und zusätzlich<br />
wird die Dialogleiste “Zähler für Y-Objekte” eingeblendet (Abb. 4.10b). Diese Dialogleiste<br />
dient als Objektzähler, bietet aber außerdem noch zwei Zusatzfunktionen, die<br />
die Objektbewertung erleichtern. Der Befehl “Unbewertetes Objekt finden” kann sich<br />
in Situationen, in denen sich in der aktuellen Zeichnungsansicht kein unbewertetes<br />
Objekt befindet, nützlich sein. Der Befehl “Marken skalieren” ermöglicht die Größenänderung<br />
der Stecknadeln und damit eine übersichtlichere Darstellung.
4.4 Lernverfahren 39<br />
(a)<br />
(b)<br />
Abbildung 4.10: Beginn der Objektbewertung für LeitungsstueckBeschriftet.<br />
Maus Tastatur Funktion<br />
»links-Klick« »Pfeil-Auf« Bewertung des aktivierten Objektes auf positiv<br />
(grün) setzen<br />
»rechts-Klick« »Pfeil-Ab« Bewertung des aktivierten Objektes auf negativ<br />
(rot) setzen<br />
»Num-0«<br />
»Esc«<br />
Bewertung des aktivierten Objektes auf unbewertet<br />
(gelb) setzen<br />
Objektevaluation abschließen und Dialog<br />
“Typ für Objektbewertung wählen” öffnen<br />
Tabelle 4.2: Maus- und Tastaturbefehle während der Objektevaluation.<br />
Objektbewertung. Abbildung 4.11 zeigt ein Szenario bei der Objektbewertung, Tabelle<br />
4.2 zeigt die dabei zur Verfügung stehenden Befehle, wobei ein weiterer grundlegender<br />
Befehl — das Aktivieren und Zeichnen eines Objektes — nur durch Bewegen<br />
des Mauszeigers gesteuert wird.<br />
In Abbildung 4.11a zeigen zwei Stecknadel-Markierungen zwei mögliche Objekte<br />
von LeitungsstueckBeschriftet an. Die Abbildungen 4.11b bis 4.11e zeigen die Aktivierung<br />
und Bewertung der beiden Hypothesen.
40 4 INTERAKTION, KONTROLLE/KORREKTUR & LERNVERFAHREN<br />
(a) (b) (c) (d) (e)<br />
Abbildung 4.11: Bewertung von zwei Objekten des Typs LeitungsstueckBeschriftet.
41<br />
5 Demonstratoren<br />
Die Demonstratoren vereinigen in funktionell geschlossener Form die entwickelten<br />
Softwarekomponenten. Sie sollen die entgültige und geschlossene Nutzung des Interpretationssystems<br />
demonstrieren. Dazu gehört:<br />
• Konfigurieren auf einen bestimmten Zeichensatz einschließlich des Anlernens<br />
der Wahrscheinlichkeitsverteilung.<br />
• Das automatische Interpretieren.<br />
• Die interaktive Kontrolle und Korrektur.<br />
Da die Funktionen für die Interpretation von Raster- und Vektorbildern wesentliche<br />
Unterschiede haben müssen, sind auch zwei spezifische Demonstratoren entwickelt<br />
worden. Mit Hilfe dieser Demonstratoren soll es potentiellen Anwendern möglich sein,<br />
experimentell zu entscheiden, ob das Interpretationssystem wirtschaftlich eingesetzt<br />
werden kann. Außerdem sollen dabei auch weitere Spezifizierungen und Qualifizierungen<br />
definiert werden, die bei der entgültigen Entwicklung kommerzieller Software<br />
zu berücksichtigen sind.<br />
5.1 Demonstrator für CAD-Daten<br />
Die entwickelten und implementierten CAD-Modelle zur automatischen Interpretation<br />
von Gasplänen sind geeignet, um Betriebsmittel aus digitalen Bestandsplänen in<br />
eine Datenbank- und GIS-taugliche Form zu überführen. Dies wird im Demonstrator<br />
CAD-Interpreter realisiert. Der Demonstrator basiert auf einer AutoCAD ObjektARX-<br />
Applikation „YforAC“, die innerhalb des Vorprojektes entwickelt wurde (Siehe [2]).<br />
5.1.1 Import<br />
Da das „YforAC“ auf AutoCAD basiert, benötigt der Demonstrator Bilder in einem<br />
speziellen AutoCAD-Format: DWG-Images. Die originalen Test-Bilder, die wir als<br />
Testdaten von der Firma DGIS GmbH bekommen haben, sind aber im Microstation-<br />
Format. Durch eine Konvertierung aus einer Microstation- auf eine AutoCAD-Datei<br />
können Dateninformationen möglicherweise verändert oder verloren werden.<br />
5.1.2 Beschränkung der Domäne<br />
Dieser Demonstrator ist auf Gasleitungspläne, die wir von DGIS bekommen haben,<br />
beschränkt. Er wurde zuerst auf einen solchen Gasplan implementiert und dann auf
42 5 DEMONSTRATOREN<br />
neuen vergleichbaren Plänen überprüft. Die Top-Klassen, die zur Zeit aus solchen Plänen<br />
erkennbar sind, werden im Folgenden gegeben:<br />
Top =<br />
{Leitung, Bemaßung, Gebäude, Flurstück, Blocksymbol}<br />
5.1.3 Export<br />
Nach dem gesamten Erkennungsverfahren wird eine konfliktfreie Interpretation, die<br />
alle erkannten Objekte von Topklassen umfasst, ausgegeben. Für jede Topklasse werden<br />
eine oder mehrere Layout_Klassen definiert, damit die Attribute der Objekte jeder<br />
Topklasse in einem Informationssystem, einem Datensammler gespeichert werden<br />
können. Außerdem werden ggf. Relationen zwischen Objekten von verschiedenen<br />
Topklassen definiert und auch in dem Datensammler gespeichert. Definitionen aller<br />
Layout_Klassen und der entsprechenden Attribute bzw. Relationen werden in Anhang<br />
B gegeben.<br />
5.1.4 Implementierung<br />
Der Demonstrator wurde mit Visual C++ unter Windows XP entwickelt. Für die Entwicklung<br />
wird die Bibliothek ObjektARX der Firma AUTODESK benötigt. YforAC<br />
ist eine ObjectARX-Applikation unter AutoCAD 2000. Sie wird nach dem Start von<br />
AutoCAD explizit geladen. Dazu gibt man in der Befehlszeileneingabe den Befehl<br />
appload ein.<br />
5.1.5 Ausführungsvoraussetzung<br />
Software- bzw. Hardware-Voraussetzungen für die Ausführung des Demonstrators sind<br />
in der folgenden Tabelle angegeben:<br />
Betriebssystem:<br />
Anwendungssoftware:<br />
CPU (empf.):<br />
Speicher (empf.):<br />
Freier Platz auf der Festplatte (empf.):<br />
Windows-NT, Windows-98 oder höher<br />
AutoCAD 2000 oder höher<br />
1 GHZ<br />
512 MB<br />
200 MB
5.2 Demonstrator für Rasterbild-Daten 43<br />
5.2 Demonstrator für Rasterbild-Daten<br />
Ähnlich wie für CAD-Modelle wurde ein Demonstrator für Rasterbild-Modelle entwickelt.<br />
Der grundlegende Unterschied ist, während der CAD-Demonstrator Bilder<br />
in AutoCAD-Format benötigt, benötigt dieser Demonstrator Bilder in einem speziellen<br />
Raster-Format: TIFF-Images. Außerdem ist die Menge von Top-Klassen eng beschränkt<br />
— es gibt zur Zeit nur Top-Klassen, nämlich, VLeitung, VBemasüng und<br />
VGebäude. Schließlich wurde der Demonstrator auf einem einfacheren Ausschnitt,<br />
der ein paar Objekte der obengenannten Top-Klassen umfaßt, überprüft. Export, Implementierung<br />
und Ausführungsvoraussetzung dieses Demonstratores sind ähnlich wie<br />
die vom CAD-Demonstrator und wurden hier nicht mehr in Details beschrieben.
44 6 TEST DES Y-DEMONSTRATORS FÜR GASLEITUNGSPLÄNE<br />
6 Test des Y-Demonstrators für Gasleitungspläne<br />
Die Strategie zur Testung wurde durch die kubit GmbH entwickelt. Ziel sind quantitative<br />
Maße für die Leistungsfähigkeit des Komplettpaketes Ypsilon-Algorithmus UND<br />
Gas-Modelle. Die Tests wurden vor allem aus Perspektive potenzieller Anwender des<br />
Systems entwickelt. Aussagen über den prinzipiellen Wert des Ansatzes für Forschung<br />
und Entwicklung können nur bedingt abgeleitet werden.<br />
6.1 Teststrategie<br />
Jedes Mustererkennungssystem besitzt eine bestimmte Fehlerrate. Es ist jedoch schwierig,<br />
die Folgen und Kosten von Fehlern abzuschätzen. Das gewählte Testkriterium geht<br />
von folgenden Annahmen aus, die viele subjektive Faktoren ausschließen:<br />
• Die Zeichnungen sind vom modellierten Typ. Es liegt stets die selbe Zeichenvorschrift<br />
zugrunde.<br />
• Die Zeichnungsinhalte sind für den Menschen eindeutig interpretierbar.<br />
• Die Zeichnungen sind auf dem Niveau der sogenannten Top-Klassen (Häuser,<br />
Leitungen, Bemaßungen usw.) korrekt.<br />
• Der Wert eines Objekts ist proportional zur Anzahl der CAD-Primitive (Linien,<br />
Bögen, Texte etc.), die in das Objekt eingehen.<br />
Die letzte Annahme gestattet die formale Definition eines Fehlermaßes, dessen Wert<br />
zwischen 0.0 (keine Fehler) und 1.0 (alle Primitive wurden falsch interpretiert) variieren<br />
kann.<br />
6.1.1 Fehlerkategorien<br />
Es werden drei Fehlerkategorien unterschieden.<br />
Modellierungsfehler: Eine zutreffende Objekthypothese wird nicht generiert.<br />
Konfliktfehler: Die korrekte Objekthypothese wurde erzeugt aber in der Optimierungsphase<br />
aufgrund von (irrtümlichen) Konflikten zu ebenfalls korrekten Objekthypothesen<br />
verworfen.<br />
Optimierungsfehler: Die korrekte Objekthypothese wurde erzeugt aber in der Optimierungsphase<br />
verworfen und es liegt kein Konfliktfehler vor.
6.1 Teststrategie 45<br />
Die Unterscheidung der Fehlerkategorien hat keine Relevanz für den potenziellen<br />
Endnutzer. Sie gestattet allerdings eine gewisse Beurteilung der Modellierungsqualität.<br />
Der Testaufwand erhöht sich durch die Unterscheidung nur marginal, weil die verschiedenen<br />
Fehlerursachen mit den in Ypsilon vorhandenen Debugging-Werkzeugen<br />
schnell identifiziert werden können.<br />
a) b) c) d)<br />
e)<br />
f)<br />
Abbildung 6.1: Y-Test-Beispiel: Interpretation einer Häuserreihe.<br />
Beispiel: In der Abbildung 6.1 wurde eine Häuserreihe interpretiert. Es existiert nur<br />
das Modell “Haus mit Spitzdach”. In der mittleren Zeile ist eine korrekte Interpretation<br />
dargestellt. Unten sind mögliche Fehler der Mustererkennung aufgeführt:<br />
a) kein Fehler<br />
b) Modellierungsfehler. Diese Art von Häusern wurde nicht implementiert.<br />
c) Modellierungsfehler. Ein topologisch falsches Haus entsteht.<br />
d) Optimierungsfehler, wenn das korrekte Haus als Hypothese existiert.<br />
e) Konfliktfehler, wenn das korrekte Haus in der Mitte als Hypothese existiert.<br />
f) Modellierungsfehler. Aufgrund des fehlenden Modells “Wolke” wird ein “Haus”<br />
erzeugt.
46 6 TEST DES Y-DEMONSTRATORS FÜR GASLEITUNGSPLÄNE<br />
6.1.2 Integrales Fehlermaß<br />
Die Anzahl der Primitive einer Zeichnung sei n. Jedem Primitiv wird nun genau eine<br />
Bewertung entsprechend der Fehlerkategorien zugeordnet. Damit ergibt sich folgende<br />
Zerlegung von n:<br />
o<br />
c<br />
m<br />
k<br />
Anzahl der Primitive mit Optimierungsfehlern,<br />
mit Konfliktfehlern,<br />
mit Modellierungsfehlern und<br />
ohne Fehler.<br />
Es gilt:<br />
n = o + c + m + k<br />
Die Fehlerrate f der Interpretation eines Planes wird mit<br />
beziffert.<br />
f = o + c + m<br />
n<br />
Im Beispiel ergeben sich folgende Fehlerwerte:<br />
a) 10 = k a<br />
b) 7 = m b<br />
c) 6 = m c<br />
d) 8 = o d<br />
e) 4 = c e<br />
12 = k e<br />
f) 6 = m f<br />
Die Gesamtbewertung lautet (wenn die die Wolke aus 10 Primitiven besteht):<br />
6.1.3 Durchführung der Tests<br />
f = 8 + 4 + 19<br />
68<br />
= 0.45<br />
Es werden verschiedene Pläne und Planausschnitte mit einheitlichen Modellen und Parametern<br />
bearbeitet. Jeder Plan wurde automatisch interpretiert. Die Anzahl n der Primitive<br />
wird automatisch ermittelt. Die Optimierungs- und Modellierungsfehler werden<br />
manuell ausgezählt.
6.2 Auswahl der Testfälle 47<br />
6.2 Auswahl der Testfälle<br />
Die Auswahl von neun Testplänen erfolgte unabhängig durch die DGIS Service GmbH.<br />
Die oben erwähnten Annahmen der Teststrategie treffen weitgehend zu.<br />
6.3 Testergebnisse<br />
Datei:<br />
Test1<br />
bearbeitete Flurstücke: 1274-1275, 1322-1325<br />
Ausführungszeit(sec.): 177.22<br />
Anzahl der Primitive n = 854<br />
Fehler: o = 18, m = 33, c = 0<br />
Fehlerrate: f = 5.97%<br />
Datei:<br />
Test2<br />
bearbeitete Flurstücke: 352,352-1,352a,388(Teil),391,395c<br />
Ausführungszeit(sec.): 55.92<br />
Anzahl der Primitive n = 744<br />
Fehler: o = 18, m = 60, c = 11<br />
Fehlerrate: f = 11.96%<br />
Datei:<br />
Test3<br />
bearbeitete Flurstücke: 178-3,179,181-1,1103a<br />
Ausführungszeit(sec.): 34.18<br />
Anzahl der Primitive n = 959<br />
Fehler: o = 15, m = 30, c = 7<br />
Fehlerrate: f = 5.42%
48 6 TEST DES Y-DEMONSTRATORS FÜR GASLEITUNGSPLÄNE<br />
Datei:<br />
Test4<br />
bearbeitete Flurstücke: 260,261,264,265,266a,267,269,270-274,278a,279<br />
Ausführungszeit(sec.): 93.47<br />
Anzahl der Primitive n = 1 310<br />
Fehler: o = 21, m = 102, c = 0<br />
Fehlerrate: f = 1.76%<br />
Datei:<br />
Test5<br />
bearbeitete Flurstücke: alle<br />
Ausführungszeit(sec.): 203.53<br />
Anzahl der Primitive n = 2956<br />
Fehler: o = 67, m = 138, c = 21<br />
Fehlerrate: f = 7.65%<br />
Datei:<br />
Test6<br />
bearbeitete Flurstücke: 6,9,10,15,18/2,583<br />
Ausführungszeit(sec.): 82.93<br />
Anzahl der Primitive n = 1083<br />
Fehler: o = 45, m = 126, c = 22<br />
Fehlerrate: f = 17.82%<br />
Datei:<br />
Test7<br />
bearbeitete Flurstücke:<br />
Ausführungszeit(sec.): 99.24<br />
Anzahl der Primitive n = 1370<br />
Fehler: o = 61, m = 302, c = 15<br />
Fehlerrate: f = 27.59%
6.3 Testergebnisse 49<br />
Datei:<br />
Test8<br />
bearbeitete Flurstücke: 726-11,-12,-13,-20,-23,-24,-26,-27,-28,-29,-30,-32,773- 5<br />
Ausführungszeit(sec.): 78.92<br />
Anzahl der Primitive n = 1117<br />
Fehler: o = 22, m = 59, c = 0<br />
Fehlerrate: f = 7.25%<br />
Datei:<br />
Test9<br />
bearbeitete Flurstücke: 300,301-1,303(Teil),304,305,307(Teil),401-4,404-2,405<br />
Ausführungszeit(sec.): 109.98<br />
Anzahl der Primitive n = 1373<br />
Fehler: o = 78, m = 188, c = 14<br />
Fehlerrate: f = 19.66%
50 7 BEWERTUNG<br />
7 Bewertung<br />
Auf der Basis der im Abschnitt 6 beschriebenen Testung kann eine zusammenfassende<br />
Bewertung nach drei Kriterien abgeleitet werden.<br />
1. Mittlere Fehlerrate bei erfolgreicher Interpretation bezogen auf Menge der Primitive:<br />
CAD-Daten-Interpreter: 11%<br />
Raster-Daten-Interpreter: ≈ 13,5% (an einem Testbild)<br />
2. Relative Laufzeit der automatischen Interpretation bei erfolgreicher Verarbeitung<br />
CAD-Daten-Interpreter:<br />
Raster-Daten-Interpreter:<br />
79 ms/Primitiv<br />
≈ 150 ms/Primitiv (an einem Testbild)<br />
3. Erfolgsrate: ≈ 80% der Versuche bei unterschiedlichen Ausschnitten.<br />
Nichterfolg bedeutet eine drastische Überschreitung der Interpretationszeit. Die<br />
Erfolgsrate kann durch Beschränkung der Zeichnungsgröße und durch Verbesserung<br />
der Modelle erhöht werden.
51<br />
8 Ergebnisse<br />
• Entwicklungssystem für Interpretationssysteme an Technischen Zeichnungen<br />
(anteilig mit Kubit GmbH). Nutzung nur in Vereinbarung mit Kubit GmbH.<br />
• Demonstrator für die Interpretation und- bzw. teilinterpretierter Vektordaten<br />
(CAD-Daten) von Gasleitungsplänen mit Grundkartenelementen und Bemaßungen.<br />
Nutzung frei. 1<br />
• Demonstrator für die Interpretation gescannter Rasterdaten von Gasleitungsplänen<br />
mit Bemaßungen. Nutzung frei. 1<br />
• Testergebnisse.<br />
1 http://www.ki.inf.tu-dresden.de/˜weser/AKTUELL/aktuell.html —<br />
passwortgeschützt. Passwort erhältlich durch e-Mail an: Siegfried.Fuchs@inf.tu-dresden.de.
52 A ABSTRAKTIONSREGELN<br />
A<br />
Abstraktionsregeln<br />
A.1 CAD-Modelle<br />
Erklärung<br />
Nachfolgend wird jede Objektklasse detailliert beschrieben. Jede Klasse wird durch<br />
zwei oder drei Teile, nämlich, Beschreibung, Attribute und Entscheidungsfunktion<br />
(falls gegeben), beschrieben. In den Beschreibungen wird Pseudo-Code verwendet.<br />
Zuerst wird der Begriff „Metatypen“ definiert, weil die Beschreibungsform von der<br />
Entscheidungsfunktion abhängig davon ist. Metatypen kann man so verstehen: viele<br />
unterschiedliche Typen können über einen gemeinsamen Zusammenfassungsalgorithmus<br />
verfügen. Bei der Abstraktion von primitiven zu höheren (komplexen) Typen eines<br />
Modells werden die Metatypen verwendet, damit die zugehörigen Algorithmen<br />
mehrfach verwendet werden können.Eine Legende für die graphische Darstellung jedes<br />
Metatyps ist in Abbildung A.1 gegeben.<br />
Quelle1<br />
Quelle2<br />
Quelle1<br />
Quelle2<br />
Quelle<br />
Quelle<br />
Senke<br />
CrossUmgebung<br />
Senke<br />
Cross<br />
Senke<br />
Spezial<br />
P<br />
Senke<br />
Pattern<br />
Quelle<br />
Quelle<br />
Senke RekursivKette Senke RekursivNetz<br />
Ein fetter Pfeil geht von<br />
der Quelle aus, welche<br />
die Suchumgebung<br />
definiert.<br />
Quelle1<br />
Senke<br />
Quelle2<br />
General<br />
s<br />
Grund<br />
Quelle ist wegen<br />
Grund sharable<br />
Typ<br />
Typ ist ein<br />
Ausgabetyp (top)<br />
Abbildung A.1: Legende für die Notation der Metatypen.<br />
Metatypen und die entsprechenden Entscheidungsfunktionsformen, die in diesem<br />
Bericht verwendet werden, werden im Folgenden gegeben.<br />
Metatyp CrossUmgebung: Es soll eine konstante Anzahl von Objekten verschiedenen<br />
Typs in einer vordefinierten Suchumgebung zu einer Einheit zusammengefasst
A.1 CAD-Modelle 53<br />
werden. CrossUmgebung erzeugt das Kreuzprodukt aller Objekte der Quellentypen in<br />
einer vordefinierten Umgebung.<br />
Entscheidungsfunktionsform:<br />
if( Bedingung nicht bestätigt ) return false;<br />
Bedeutung: Falls Bedingung nicht bestätigt ist, wird ein Objekt dieser<br />
Klasse nicht erzeugt.<br />
Metatyp Pattern ist eine spezialisierte Variante von CrossUmgebung. Wieder wird<br />
eine konstante Anzahl von Objekten zu einem Zielobjekt aggregiert. Das erste Quellobjekt<br />
spezifiziert die Suchumgebung. Die Beschreibung der zulässigen Konstellation<br />
der Quellobjekte erfolgt bei diesem Metatyp Pattern sehr elegant mittels zweistelliger<br />
geometrischer Relationen. Pattern prüft das Zutreffen aller Relationen und erzeugt ggf.<br />
ein neues Objekt.<br />
Entscheidungsfunktionsform:<br />
enum {Kandidaten von Quellobjekten}<br />
relationen->append(neue Relation zwischen Kandidaten definiert);<br />
. . . // hier könnten weitere Relationen definieren<br />
Metatyp Rekursiv: Es soll eine variable Anzahl von Objekten desselben Typs zu einer<br />
Einheit aggregiert werden. Dieser Metatyp erzeugt eine „geordnete Reihenmenge“<br />
von Objekten des Quellentyps. Eine Zahl könnte z.B. durch ein rekursives Verfahren<br />
aus mehreren Ziffern gebildet werden.<br />
Entscheidungsfunktionsform:<br />
if( Bedingung nicht bestätigt ) continue;<br />
Bedeutung: Falls Bedingung nicht bestätigt ist, wird das übergeprüfte Quellenobjekt<br />
(als nextObjektname bezeichnet) keine Fortsetzung des gegenwärtigen<br />
Quellenobjekts (als curObjektname bezeichnet).<br />
Metatyp Generalisierung: Dieser Metatyp dient der Vereinheitlichung von Quellentypen.<br />
Er stellt als einziger Metatyp keine Aggregation dar. Verschiedene Quellentypen<br />
werden auf einen Senkentyp abgebildet. Da es hier keine Aggregation gibt,<br />
braucht man keine Entscheidungsfunktion.
54 A ABSTRAKTIONSREGELN<br />
Primitive Objektklassen<br />
ObjektStrich<br />
Beschreibung<br />
Diese Objektklasse verwendet die AutoCAD Objektklasse „Line“.<br />
Attribute<br />
MathStrecke mStrecke; // Basislinie<br />
ObjektBogen<br />
Beschreibung<br />
Diese Objektklasse verwendet die AutoCAD Objektklasse „Kreis Bogen“.<br />
Attribute<br />
MathKurve mKurve; // Basiskurve<br />
MathStrecke mStrecke // Basislinie<br />
ObjektText<br />
Beschreibung<br />
Diese Objektklasse verwendet die AutoCAD Objektklasse „Text“.<br />
Attribute<br />
MathStrecke mStrecke; // Basislinie<br />
Text mText; // Inhalt<br />
Blockreferenz<br />
Beschreibung<br />
Diese Objektklasse verwendet das AutoCAD Objekt „Blockreferenz“.<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
StrichII<br />
Beschreibung<br />
Diese Objektklasse definiert eine Generalisierung aus Objektklasse „Strich“<br />
und Objektklasse „Bogen“. D.h. ein Objekt von beiden Klassen ist auch<br />
ein Objekt „StrichII“.
A.1 CAD-Modelle 55<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Objektklassen in dem Modell „Leitung“<br />
TextZeile<br />
Beschreibung<br />
Ein Objekt „TextZeile“ ist eine Kette von Objekten „Text“. Es wird aus<br />
mehreren nebeneinander auf derselben Linie stehenden Objekten „Text“<br />
gebildet.<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Text mText; // Inhalt<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für die Winkel<br />
zwischen den Basislinien von zwei Objekten der Klasse „ObjektText“,<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den Abstand<br />
zwischen zwei Objekten der Klasse „ObjektText“;<br />
Die Konstante Const AbstandGeraden definiert die maximale Toleranz für<br />
den Abstand zwischen zwei parallelen Linien (Basislinien von Objekten<br />
„ObjektText“);<br />
Die Variablen curWinkel, curAbstand, curAbstandGeraden definieren den<br />
entsprechenden Parameter von „curText“ und „testText“:<br />
if (curWinkel > Winkel) return continue;<br />
die Objekte stehen zueinander nicht parallel<br />
if(curAbstand > Abstand) return continue;<br />
die Objekte stehen zu weit voneinander entfernt<br />
if(curAbstandGeraden > AbstandGeraden) return continue;<br />
die Objekte stehen nicht auf derselben Linie
56 A ABSTRAKTIONSREGELN<br />
BeschriftungDistanz<br />
Beschreibung<br />
Das Objekt „BeschriftungDistanz“ stellt eine spezielle Beschriftung für<br />
ein Leitungsstück dar; Es wird von einem Objekt „TextZeile“ und zwei<br />
daneben stehenden Objekten „Strich“ (die beiden müssen miteinander verbunden<br />
sein) gebildet.<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Text mBeschriftung; // Beschriftung für Leitungsstück<br />
Entscheidungsfunktion<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den Abstand<br />
zwischen einem Objekt „Text“ und einem Objekt „Strich“;<br />
Die Funktion bool connected() überprüft, ob zwei nebeneinander stehende<br />
Objekte (z.B. zwei Striche) miteinander verbunden sind oder nicht;<br />
Die Funktion getY()->getInzidente(ListRef inzi, MathPunkt p)<br />
mit „Template Parameter“ liefert alle am Punkt p zusammentreffenden<br />
Objekte von Klasse „T “ (hier z.B. T = Strich) in eine Liste „inzi“ und die<br />
Funktion inzi.getNumber() liefert die Anzahl von Objekten:<br />
if (curAbstand > Abstand) return false;<br />
Striche liegen zu weit von Text;<br />
if ( !strich1.connected(strich2) ) return false;<br />
zwei Striche müssen miteinander verbunden sein;<br />
getY()->getInzidente(ListRef inzi1, MathPunkt strich1.mP1)<br />
getY()->getInzidente(ListRef inzi1, MathPunkt strich1.mP2)<br />
if ( inzi1.getNumber() > 2) return false;<br />
„strich1“ darf nur eine Fortsetzung „strich2“ haben;<br />
getY()->.getInzidente(ListRef inzi2, MathPunkt strich2.mP1)<br />
getY()->getInzidente(ListRef inzi2, MathPunkt strich2.mP2)<br />
if ( inzi2.getNumber() > 2) return false;<br />
„strich2“ darf nur eine Fortsetzung „strich1“ haben.
A.1 CAD-Modelle 57<br />
Beschriftung<br />
Beschreibung<br />
Die Objektklasse „Beschriftung“ definiert eine Generalisierung aus der<br />
Objektklasse „TextZeile“ und der Objektklasse „BeschriftungDistanz“. D.h.<br />
ein Objekt von beiden Klassen ist auch ein Objekt von „Beschriftung“.<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Text mBeschriftung; // Beschriftung für Leitungsstück<br />
Leitungsstück<br />
Beschreibung<br />
Ein Objekt „Leitungsstück“ ist ein ununterbrochener Linienverlauf von<br />
Verzweigung zu Verzweigung und wird durch ein rekursives Verfahren<br />
aus mehreren miteinander verbundenen Objekten „Strich“ gebildet. Unter<br />
Verzweigung versteht man hier einen Verbindugspunkt, an dem mehr als<br />
zwei Objekte „Strich“ zusammentreffen.<br />
Attribute<br />
MathPolyKurve mPoly; // eine Kette aus Objekten „Strich“<br />
Text mBeschriftung; // mögliche Beschriftung für dieses<br />
Leitungsstück<br />
Entscheidungsfunktion<br />
if (! Strich1.connected(Strich2)) continue;<br />
Strich1 und Strich2 sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt p)<br />
If (inzi.getNumber() > 2) continue;<br />
Mehr als zwei Striche sind an demselben Punkt miteinander verbunden;<br />
Hier gibt es eine Verzweigung.<br />
LeitungsstückBeschriftet<br />
Beschreibung<br />
Ein Objekt „LeitungsstückBeschriftet“ wird von einem Objekt „Leitungsstück“<br />
und einem daneben stehenden Objekt „Beschriftung“ gebildet.
58 A ABSTRAKTIONSREGELN<br />
Attribute<br />
MathPolyKurve mPoly; // alle getroffene Striche werden<br />
als eine Polylinie definiert;<br />
Text mBeschriftung; // Beschriftung für dieses Leitungsstück;<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für die Winkel<br />
zwischen der Basislinie des Objekts „Beschriftung“ und der Strecke<br />
von „bestSegment“;<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den Abstand<br />
zwischen der Basislinie des Objekts „Beschriftung“ und der Strecke<br />
des „bestSegment“:<br />
if( curWinkel > Winkel ) return false;<br />
Beschriftung muss fast parallel zu dem „bestSegment“ sein;<br />
if( curAbstand > Abstand ) return false;<br />
Beschriftung muss in der Nähe von dem „bestSegment“ sein.<br />
SchutzrohrSymbol<br />
Beschreibung<br />
Ein „SchutzRohrSymbol“ ist ein Rechteck mit Mittellinie. Es wird durch<br />
fünf miteinander verbundene Objekte „Strich“ erzeugt.<br />
Attribute<br />
MathStrecke textitmStrecke; // Basislinie;<br />
Entscheidungsfunktion<br />
enum Rollen {mitte, oben, unten, linksOben, rechtsOben, linksUnten, rechts-<br />
Unten}; // Indizes definieren Rollen der Strecken<br />
//erster Index (hier: mitte) definiert Umgebung<br />
// Die Relation, die am seltensten ist, sollte vorn stehen<br />
relationen->append(new RelationParallel(mitte, oben));<br />
relationen->append(new RelationParallel(mitte, unten));<br />
relationen->append(new RelationParallel(linksOben, rechtsOben));
A.1 CAD-Modelle 59<br />
relationen->append(new RelationParallel(linksOben, rechtsUnten));<br />
relationen->append(new RelationParallel(linksOben, linksUnten));<br />
relationen->append(new RelationAngleToLeft(mitte, rechtsOben));<br />
relationen->append(new RelationAngleToLeft(rechtsOben, oben));<br />
relationen->append(new RelationAngleToLeft(oben,linksOben));<br />
relationen->append(new RelationAngleToLeft(linksOben, mitte));<br />
relationen->append(new RelationAngleToLeft(mitte, linksUnten));<br />
relationen->append(new RelationAngleToLeft(linksUnten, unten));<br />
relationen->append(new RelationAngleToLeft(unten,rechtsUnten));<br />
relationen->append(new RelationAngleToLeft(rechtsUnten, mitte));<br />
Alle nötigen Relationen zwischen verschiedenen Quellobjekten (hier Objekten<br />
„Strich“) werden zuerst definiert, damit übergeprüft werden kann,<br />
ob eine bestimmte Pattern (hier ein „Schutzsymbol“) erzeugt wird.<br />
Schutzrohr<br />
Beschreibung<br />
Ein Objekt „Schutzrohr“ wird aus einem Objekt „SchutzrohrSymbol“ und<br />
einem nebenstehenden Objekt „Beschriftung“ gebildet.<br />
Attribute<br />
MathStrecke mStrecke; // Basislinie;<br />
Text mBeschriftung; // Beschriftung für das Schutzrohr;<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für die Winkel<br />
zwischen der Basislinie von „SchutzrohrSymbol“ und der Basislinie<br />
von „Beschriftung“;<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den Abstand<br />
zwischen der Basislinie von „SchutzrohrSymbol“ und der Basislinie<br />
von „Beschriftung“:<br />
if( curWinkel > Winkel ) return false;<br />
Beschriftung muss fast parallel zu dem „SchutzrohrSymbol“ sein;<br />
if( curAbstand > Abstand ) return false;<br />
Beschriftung muss in der Nähe von dem „SchutzrohrSymbol“ sein.
60 A ABSTRAKTIONSREGELN<br />
LeitungsstückGeneral<br />
Beschreibung<br />
Die Objektklasse „LeitungsstückGeneral“ definiert eine Generalisierung<br />
aus den Objektklassen „Leitungsstück“, „Leitungsstückbeschriftet“ und<br />
„Schutzrohr“. D.h. jedes Objekt von diesen drei Klassen ist auch ein Objekt<br />
„LeitungsstückGeneral“.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie;<br />
MathStrecke mStrecke; // Basislinie;<br />
Text mBeschriftung; // Beschriftung für das Schutzrohr.<br />
Materialwechsel<br />
Beschreibung<br />
Ein „Materialwechsel“ wird aus miteinander verbundenen Objekten „Strich“<br />
gebildet. An dem Verbindpunkt treffen auch zwei Objekte „Leitungsstück“<br />
zusammen.<br />
Attribute<br />
MathPunkt mPunkt; // Verbindpunkt;<br />
MathStrecke mStrecke; // Basislinie.<br />
Entscheidungsfunktion<br />
enum Rollen {oben, unten, links, rechts}; //erster Index definiert Umgebung<br />
// Relation, die am seltensten ist, sollte vorn stehen<br />
relationen->append(new RelationParallel(oben, unten));<br />
relationen->append(new RelationInzidenz(oben, unten));<br />
relationen->append(new RelationAngleToLeft(links, oben));<br />
relationen->append(new RelationAngleToLeft(oben, rechts));<br />
relationen->append(new RelationAngleToLeft(unten, links));<br />
relationen->append(new RelationAngleToLeft(rechts,unten));<br />
Alle nötige Relationen zwischen verschiedenen Quellobjekten (hier Objekten<br />
„Strich“) werden zuerst definiert, damit übergeprüft werden kann,<br />
ob ein bestimmtes Pattern (hier ein „Materialwechsel“) erzeugt wird.
A.1 CAD-Modelle 61<br />
Objektklassen im Modell „Bemaßung“<br />
Winkel<br />
Beschreibung<br />
Ein Objekt „Winkel“ wird aus zwei miteinander verbundenen Objekten<br />
„Strich“ gebildet.<br />
Attribute<br />
MathStrecke mSchenkel1;<br />
MathStrecke mSchenkel2;<br />
MathStrecke mStrecke; // Basislinie<br />
MathPunkt mScheitel; // Scheitelpunkt<br />
MathPunkt mWinkel; // Basiswinkel.<br />
Entscheidungsfunktion<br />
enum Rollen {a,b};<br />
relationen->append(new RelationInzidenz(a, b));<br />
Die Relation zwischen zwei Objekten „Strich“ ist definiert. Damit wird<br />
übergeprüft, ob die zwei ein bestimmtes Pattern (hier einen Winkel) erzeugen<br />
können.<br />
Spitze<br />
Beschreibung<br />
Ein Objekt „Spitze“ wird aus einem Objekt „Winkel“ und einem an seinem<br />
Scheitelpunkt mit ihm zusammentreffenden Objekt „Strich“ gebildet.<br />
Attribute<br />
MathStrecke mStrecke1, mStrecke2; // Basislinien von „Winkel“<br />
und „Strich“<br />
MathPunkt mPunkt1; // Verbindpunkt von „Winkel“<br />
und „Strich“, Scheitelpunkt<br />
MathPunkt mPunkt2; // der andere Basispunkt von<br />
„Strich“, Basispunkt<br />
MathWinkel mWinkel; // Basiswinkel von „Winkel“
62 A ABSTRAKTIONSREGELN<br />
Entscheidungsfunktion<br />
Eine Konstante Const WinkelToleranz definiert die Maximumsdifferenztoleranz<br />
verschiedenen Winkeln;<br />
Eine Konstante Const Abstand definiert die Maximumsabstandtoleranz<br />
verschiedenen Abständen;<br />
Definitionen verschiedener Variablen sind im untenstehenden Bild gegeben:<br />
if ( |tmpWinkel1-tmpWinkel2| > Winkel ) return false;<br />
// Beide Winkels müssen fast gleich sein;<br />
if( tmpAbs1>tmpAbs3 && | tmpAbs2+tmpAbs3-tmpAbs1|>Abstand )return<br />
false;<br />
if( tmpAbs1Abstand )return<br />
false;<br />
// Es wird übergeprüft, ob die Basislinie von „Strich“ zwischen den beiden<br />
Schenkellinien von „Winkel“ steht.<br />
tmpAbstand1<br />
tmpAbstand2<br />
tmpAbstand3<br />
tmpWinkel1<br />
tmpWinkel2<br />
PfeilTyp1<br />
Beschreibung<br />
Ein Objekt „PfeilTyp1“ wird aus einem Objekt „Spitze“ und einem an<br />
seinem Basispunkt getroffenen Objekt „Strich“ gebildet.<br />
Attribute<br />
MathStrecke mStrecke; // Basislinie von „Strich“<br />
MathPunkt mPunkt1; // Basispunkt1 von „Strich“, Basispunkt1<br />
MathPunkt mPunkt2; // Basispunkt2 von „Strich“, Basispunkt2
A.1 CAD-Modelle 63<br />
Entscheidungsfunktion<br />
Eine Konstante Const WinkelToleranz definiert die Maximumsdifferenztoleranz<br />
von verschiedenen Winkeln;<br />
Eine Konstante Const Abstand definiert die Maximumsabstandtoleranz<br />
von verschiedenen Abständen;<br />
Definitionen verschiedener Variablen sind im untenstehenden Bild gegeben:<br />
if ( |tmpWinkel1-tmpWinkel2| > Winkel ) return false;<br />
// Beide Winkels müssen fast gleich sein;<br />
if( tmpAbs1>tmpAbs3 && | tmpAbs2+tmpAbs3-tmpAbs1|>Abstand )return<br />
false;<br />
if( tmpAbs1Abstand )return<br />
false;<br />
// Es wird übergeprüft, ob die Basislinie von „Spitze“ zwischen den beiden<br />
Schenkellinien von „Winkel“ steht.<br />
tmpAbstand1<br />
tmpAbstand2<br />
tmpAbstand3<br />
tmpWinkel1<br />
tmpWinkel2<br />
PfeilTyp2<br />
Beschreibung<br />
Ein Objekt „Pfeil“ wird aus zwei Objekten „Spitze“ gebildet. Die Basislinien<br />
von beiden müssen fast auf derselben Linie stehen.<br />
Attribute<br />
MathPunkt mPunkt1; // Scheitelpunkt von „Spitze1“, Basispunkt1<br />
MathPunkt mPunkt2; // Scheitelpunkt von „Spitze2“, Basispunkt2<br />
MathStrecke mStrecke; // Verbindlinie aus mPunkt1 und mPunkt2,<br />
Basislinie
64 A ABSTRAKTIONSREGELN<br />
Entscheidungsfunktion<br />
Definitionen aller Variablen sind im untenstehenden Bild gegeben:<br />
if( absS1S1.winkel(absS2S2 > Winkel ) ||<br />
if( absS1S2.winkel(absS2S1) > Winkel) return false;<br />
// Die Basislinien von beiden „Spitze“ müssen auf einer Gerade stehen;<br />
if( absS2S2.länge()
A.1 CAD-Modelle 65<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für den Winkel<br />
zwischen der Basislinie von „PfeilTyp1“ und der Basislinie von „Text“;<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den<br />
Abstand zwischen der Basislinie von „PfeilTyp1“ und der Basislinie von<br />
„Text“:<br />
if( curWinkel > Winkel ) return false;<br />
Die Maßzahl muss fast parallel zu den Pfeilen sein;<br />
if( curAbstand > Abstand ) return false;<br />
Die Maßzahl muss in der Nähe von den Pfeilen sein.<br />
Bemaßung2<br />
Beschreibung<br />
Ein Objekt „Bemaßung1“ ist eine Zusammenfassung von einem Objekt<br />
„PfeilTyp2“ und einem danebenliegenden Objekt „Text“.<br />
Attribute<br />
MathPunkt mPunkt1; // Verbindpunkt1 von „PfeilTyp2“, Basispunkt1<br />
MathPunkt mPunkt2; // Verbindpunkt2 von „PfeilTyp2“, Basispunkt2<br />
MathStrecke mStrecke; // Basislinie von „PfeilTyp2“, Basislinie<br />
Text mText; // mText von „Text“, Maßzahl<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für den Winkel<br />
zwischen der Basislinie von „PfeilTyp2“ und der Basislinie von „Text“;<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den<br />
Abstand zwischen der Basislinie von „PfeilTyp2“ und der Basislinie von<br />
„Text“:<br />
if( curWinkel > Winkel ) return false;<br />
Die Maßzahl muss fast parallel zu den Pfeilen sein;<br />
if( curAbstand > Abstand ) return false;<br />
Die Maßzahl muss in der Nähe von den Pfeilen sein.
66 A ABSTRAKTIONSREGELN<br />
Zeichenstück<br />
Beschreibung<br />
Ein Objekt „Zeichenstück“ wird aus einem Objekt „Strich“ und einem<br />
danebenstehenden Objekt „Text“ gebildet.<br />
Attribute<br />
MathPunkt mPunkt1; // Basispunkt1 von „Strich“, Basispunkt1<br />
MathPunkt mPunkt2; // Basispunkt2 von „Strich“, Basispunkt2<br />
MathStrecke mStrecke; // Basislinie von „Strich“, Basislinie<br />
Text mText; // Basistext von „Text“, Maßzahl<br />
Entscheidungsfunktion<br />
Die Konstante Const Winkel definiert die maximale Toleranz für die Winkel<br />
zwischen der Basislinie von „Strich“ und der Basislinie von „Text“;<br />
Die Konstante Const Abstand definiert die maximale Toleranz für den Abstand<br />
zwischen der Basislinie von „Strich“ und der Basislinie von „Text“;<br />
if( |PI/2-curWinkel| > Winkel ) return false; // PI == 3.1416, 0≤curWinkel Abstand ) return false;<br />
Maßzahl und Maßlinie müssen in der Nähe voneinander gefunden werden.<br />
Zeichenreihe<br />
Beschreibung<br />
Ein Objekt „Zeichenreihe“ wird durch ein rekursives Verfahren von mehreren<br />
miteinander verbundenen Objekten „Zeichenstück“ zusammengesetzt.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie<br />
MathPunkt mStart, mEnde; // Anfang- bzw. Endpunkt von mPoly,<br />
Basispunkte<br />
Text mText; // Verbindtext von Maßzahlen aller<br />
Zeichenstücke, Maßzahl<br />
MathStrecke mStrecke; // Verbindlinie von mStart und<br />
mEnde, Basislinie
A.1 CAD-Modelle 67<br />
Entscheidungsfunktion<br />
Die Konstante Const WINKEL definiert die maximale Toleranz für den<br />
Winkel zwischen den Basislinien von zwei Objekten „Zeichenstück“;<br />
If( !curZeichenstück.connected(testZeichenstück) ) continue;<br />
// Das nächste Zeichenstück und das aktuelle müssen miteinander verbunden<br />
sein.<br />
if( curWinkel > WINKEL ) continue;<br />
// Die Basislinien der beiden Objekte „Zeichenstück“ müssen auf derselben<br />
Gerade stehen.<br />
Zeichenende<br />
Beschreibung<br />
Ein Objekt „Zeichenende“ wird aus einem Objekt „Text“ und zwei darunterstehenden<br />
Objekten „Strich“ gebildet; Die Basislinien von den beiden<br />
Objekten „Strich“ müssen parallel zur Basislinie von „Text“ sein.<br />
Attribute<br />
MathStrecke mStrecke; // Basislinie von „Strich“, Basislinie<br />
Text mText; // Basistext von „Text“, Maßzahl<br />
tmpP1<br />
tmpP2<br />
tmpP3<br />
tmpP4<br />
Entscheidungsfunktion<br />
Die Konstante Const WINKEL definiert die maximale Toleranz für den<br />
Winkel zwischen den Basislinien von zwei Objekten;<br />
Die Konstante Const ABSTAND definiert die maximale Toleranz für den<br />
Abstand zwischen den Basislinien von zwei Objekten;<br />
Die Variable curWinkel1 bezeichnet den Winkel zwischen der Basislinie<br />
von „Text“ und einem „Strich“; eine andere curWinkel2 bezeichnet den<br />
Winkel zwischen der Basislinie von „Text“ und einem anderen „Strich“;
68 A ABSTRAKTIONSREGELN<br />
Vier Punktvariablen werden im untenstehenden Bild definiert, damit man<br />
die geometrische Beziehung der beiden Unterstriche überprüfen kann.<br />
if( curWinkel1 > WINKEL || curWinkel2>WINKEL ) return false;<br />
Die Basislinien der beiden Objekte „Strich“ müssen fast parallel zur Basislinie<br />
des Objekts „Text“ sein;<br />
if( |abstand(tmpP1, tmpP3)-abstand(tmpP2,tmpP4)| > ABSTAND ) return<br />
false;<br />
Die beiden Objekte „Strich“ müssen in einem bestimmten Pattern, das wie<br />
im obenstehenden Bild gezeichnet ist, aufeinander stehen.<br />
Bemaßung4<br />
Beschreibung<br />
Ein Objekt „Bemaßung4“ wird aus einem Objekt „Zeichenreihe“ und einem<br />
danebenstehenden Objekt „Zeichnende“ gebildet.<br />
Attribute<br />
MathPunkt mPunkt1; // Basispunkt1 von „Zeichenreihe“, Basispunkt1<br />
MathPunkt mPunkt2; // Basispunkt2 von „Zeichenreihe“, Basispunkt2<br />
MathStrecke mStrecke; // Basislinie von „Zeichenreihe“, Basislinie<br />
Text mText; // Verbindtext der Basistext von „Zeichenreihe“<br />
und „Zeichenende“<br />
Entscheidungsfunktion<br />
Eine Konstante Const WINKEL definiert die maximale Toleranz für die<br />
Winkel zwischen den Basislinien von zwei Objekten;<br />
Eine Konstante Const ABSTAND definiert die maximale Toleranz für den<br />
Abstand zwischen den Basislinien von zwei Objekten;<br />
if( |PI/2-curWinkel| > WINKEL ) return false; // PI == 3.1416, 0≤curWinkel ABSTAND ) return false;<br />
Maßzahl und Maßlinie müssen in der Nähe voneinander gefunden werden.
A.1 CAD-Modelle 69<br />
Bemaßung3<br />
Beschreibung<br />
Ein Objekt „Bemaßung3“ wird aus einem Objekt „Strich“ und einem danebenstehenden<br />
Objekt „Text“ gebildet.<br />
Attribute<br />
MathPunkt mPunkt1; // Basispunkt1 von „Strich“, Basispunkt1<br />
MathPunkt mPunkt2; // Basispunkt2 von „Strich“, Basispunkt2<br />
MathStrecke mStrecke; // Basislinie von „Strich“, Basislinie<br />
Text mText; // Basistext von „Text“, Maßzahl<br />
Entscheidungsfunktion<br />
Eine Konstante Const WINKEL definiert die maximale Toleranz für den<br />
Winkel zwischen der Basislinie von „Strich“ und der Basislinie von „Text“;<br />
Eine Konstante Const ABSTAND definiert die maximale Toleranz für den<br />
Abstand zwischen der Basislinie von „Strich“ und der Basislinie von „Text“:<br />
if( curWinkel > Winkel ) return false;<br />
Maßzahl muss fast parallel zu der Maßlinie sein;<br />
if( curAbstand > Abstand ) return false;<br />
Maßzahl und Maßlinie müssen in der Nähe voneinander gefunden werden.<br />
Bemaßung<br />
Beschreibung<br />
Die Objektklasse „Bemaßung“ definiert eine Generalisierung aus den Objektklassen<br />
„Bemaßung1“, „Bemaßung2“, „Bemaßung3“ und „Bemaßung4“.<br />
D.h. jedes Objekt von diesen Klassen ist auch ein Objekt „Bemaßung“.<br />
Attribute<br />
MathPunkt mPunkt1; // Basispunkt<br />
MathPunkt mPunkt2; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Text mText; // Maßzahl
70 A ABSTRAKTIONSREGELN<br />
Objektklassen in dem Modell „Gebäude“<br />
GebäudeLeft<br />
Beschreibung<br />
Ein Objekt „GebäudeLeft“ wird als ein abgeschlossenes Polygon durch<br />
ein rekursives Verfahren im linksdrehenden Sinn aus mehreren miteinander<br />
verbundenen Objekten „StrichII“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Entscheidungsfunktion<br />
if (! testStrichII.connected(curStrichII)) continue;<br />
// nextStrichII und curStrichII sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt curStrichII.mP2)<br />
If (inzi.getNumber() > 2)<br />
nextStrichII = getNextLeft(inzi);<br />
Falls mehr als zwei Objekte „StrichII“ am Endpunkt des aktuellen Objekts<br />
„StrichII“ zusammentreffen, d.h. es mehrere mögliche Fortsetzungen für<br />
das aktuelle StrichII gibt, wird das erste Objekt von „StrichII“ im linksdrehenden<br />
Sinn als die Fortsetzung ausgewählt.<br />
GebäudeRight<br />
Beschreibung<br />
Ein Objekt „GebäudeRight“ wird als ein abgeschlossenes Polygon durch<br />
ein rekursives Verfahren im rechtsdrehenden Sinn aus mehreren miteinander<br />
verbundenen Objekten „StrichII“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Entscheidungsfunktion<br />
if (! nextStrichII.connected(curStrichII)) continue;<br />
// nextStrichII und curStrichII sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt curStrichII.mP2)
A.1 CAD-Modelle 71<br />
If (inzi.getNumber() > 2)<br />
nextStrichII = getNextRight(inzi);<br />
Falls mehr als zwei Objekte „StrichII“ am Endpunkt des aktuellen Objekts<br />
„StrichII“ zusammentreffen, d.h. es mehrere mögliche Fortsetzungen für<br />
das aktuelle StrichII gibt, wird das erste Objekt von „StrichII“ im rechtsdrehenden<br />
Sinn als Fortsetzung ausgewählt.<br />
GebäudeUNBS (unbeschriftet Gebäude)<br />
Beschreibung<br />
Die Objektklasse „GebäudeUNBS“ definiert eine Generalisierung aus den<br />
Objektklassen „GebäudeLeft“ und „GebäudeRight“. D.h. jedes Objekt von<br />
den beiden ist auch ein Objekt „GebäudeUNBS“.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
GebäudeBS (beschriftet Gebäude)<br />
Beschreibung<br />
Ein Objekt „GebäudeBS“ wird aus einem Objekt „GebäudeUNBS“ und<br />
einem darin angetroffenen Objekt „Text“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Text mLabel; // Basistext von „Text“, Gebäudenummer<br />
Entscheidungsfunktion<br />
if( !curGebäudeUNBS.umfang(curText) ) return false;<br />
Eine Hausnummer (ein Objekt von „Text“) muss innerhalb der Kontur<br />
eines Gebäudes sein.<br />
Gebäude<br />
Beschreibung<br />
Die Objektklasse „Gebäude“ definiert eine Generalisierung aus den Objektklassen<br />
„GebäudeUNBS“ und „GebäudeBS“. D.h. jedes Objekt der<br />
beiden ist auch ein Objekt „Gebäude“.
72 A ABSTRAKTIONSREGELN<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Text mLabel; // Gebäudenummer<br />
Objektklassen in dem Modell „Flurstück“ und „Blockreferenz“<br />
FSKante (Flurstück Kante)<br />
Beschreibung<br />
Ein Objekt „FSKante“ wird durch ein rekursives Verfahren aus mehreren<br />
nebeneinander stehenden Objekten „StrichII“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie<br />
Entscheidungsfunktion (ähnlich wie in der Klasse Leitungsstück)<br />
if (! Strich1.connected(Strich2)) continue;<br />
Strich1 und Strich2 sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt p)<br />
If (inzi.getNumber() > 2) continue;<br />
Mehr als zwei Striche treffen in demselben Punkt zusammen; Hier gibt es<br />
eine Verzweigung.<br />
FlurstückUNBS (unbeschriftet Flurstück)<br />
Beschreibung<br />
Ein Objekt „FlurstückUNBS“ wird durch ein rekursives Verfahren aus<br />
mehreren nebeneinanderstehenden Objekten „FSKante“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie<br />
Text mLabel; // Gebäudenummer<br />
Flurstück<br />
Beschreibung<br />
Ein Objekt „Flurstück“ wird aus einem Objekt „FlurstückUNBS“ und einem<br />
danebenstehenden Objekt „Text“ gebildet.
A.2 Rasterbild-Modelle 73<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie<br />
Text mLabel; // Basistext von „Text“, Flurnummer<br />
SchieberBR (Schieber Blockreferenz)<br />
Beschreibung<br />
Ein Objekt „SchieberBR“ ist ein Objekt „Blockreferenz“ mit einem vordefinierten<br />
Namen für das Symbol „Schieber“.<br />
Attribute<br />
MathPunkt mPunkt; // Schwerpunkt von Blockreferenz, Basispunkt<br />
WassertopfBR (Wassertopf Blockreferenz)<br />
Beschreibung<br />
Ein Objekt „WassertopfBR“ ist ein Objekt „Blockreferenz“ mit einem vordefinierten<br />
Namen für das Symbol „Wassertopf“.<br />
Attribute<br />
MathPunkt mPunkt; // Schwerpunkt von Blockreferenz, Basispunkt<br />
A.2 Rasterbild-Modelle<br />
ObjektVRegion<br />
Beschreibung<br />
Diese Objektklasse definiert eine Schnittstelle zwischen Vektor-Objekten<br />
und CAD-Objekten.<br />
Attribute<br />
Ref m_rCadObjekt; // Referenz zu den entsprechenden<br />
CAD-Objekten<br />
MathStrecke m_strecke; // Basislinie<br />
MathKoord m_breite; // Liniestärke<br />
ObjektVektor<br />
Beschreibung<br />
Diese Objektklasse ist eine primitive Klasse und wurde durch einen spezialen<br />
Metatyp-Algorithmus von der Klasse „ObjektVRegion“ entwickelt.
74 A ABSTRAKTIONSREGELN<br />
Attribute<br />
MathStrecke m_strecke; // Basislinie<br />
MathKoord m_breite; // Liniestärke<br />
ObjektVSymbol<br />
Beschreibung<br />
Diese Objektklasse ist eine primitive Klasse und wurde durch einen spezialen<br />
Metatyp-Algorithmus von der Klasse „ObjektVRegion“ entwickelt.<br />
Attribute<br />
MathPunkt> m_punkt; // Basispunkt<br />
MathStrecke m_strecke; // Basislinie<br />
MathWinkel m_winkel; // Basiswinkel<br />
Text m_text // Bedeutung dieses Objektes<br />
Beschrift<br />
Beschreibung<br />
Ein Objekt „Beschrift“ ist eine Kette von Objekten „VSymbol“. Es wird<br />
aus mehreren nebeneinander auf deselben Linie stehenden Objekten „VSymbol“<br />
gebildet.<br />
Attribute<br />
MathPunkt mPunkt; // Basispunkt<br />
MathStrecke mStrecke; // Basislinie<br />
Text mText; // Inhalt<br />
Entscheidungsfunktion<br />
Eine Konstante Const Winkel definiert die maximale Toleranz für die Winkel<br />
zwischen den Basislinien von zwei Objekten der Klasse „ObjektV-<br />
Symbol“,<br />
Eine Konstante Const Abstand definiert die maximale Toleranz für den<br />
Abstand zwischen zwei Objekten der Klasse „ObjektVSymbol“;<br />
Eine Konstante Const AbstandGeraden definiert die maximale Toleranz<br />
für den Abstand zwischen zwei parallelen Linien (Basislinien von Objekten<br />
„ObjektVSymbol“);<br />
Variablen curWinkel, curAbstand, curAbstandGeraden definieren die entsprechenden<br />
Parameter von „curVSymbol“ und „testVSymbol“:
A.2 Rasterbild-Modelle 75<br />
if (curWinkel > Winkel) return continue;<br />
die Objekte stehen zueinander nicht parallel<br />
if(curAbstand > Abstand) return continue;<br />
die Objekte stehen zu weit voneinander entfernt<br />
if(curAbstandGeraden > AbstandGeraden) return continue;<br />
die Objekte stehen nicht auf derselben Linie<br />
VLeitungsstück<br />
Beschreibung<br />
Ein Objekt „VLeitungsstück“ ist ein ununterbrochener Linienverlauf von<br />
Verzweigung zu Verzweigung und wird durch ein rekursives Verfahren aus<br />
mehreren miteinander verbundenen Objekten „Vektor“ gebildet. Unter der<br />
Verzweigung versteht man hier einen Verbindungspunkt, an dem mehr als<br />
zwei Objekte „Vektor“ zusammentreffen.<br />
Attribute<br />
MathPolyKurve mPoly; // eine Kette aus Objekten „Vektor“<br />
Entscheidungsfunktion<br />
if (! Vektor1.connected(Vektor2)) continue;<br />
Vektor1 und Vektor2 sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt p)<br />
If (inzi.getNumber() > 2) continue;<br />
Mehr als zwei Vektoren treffen in demselben Punkt zusammen; Hier gibt<br />
es eine Verzweigung.<br />
VLeitung<br />
Beschreibung<br />
Ein Objekt „VLeitung“ wird von einem Objekt „VLeitungsstück“ und einem<br />
danebenstehenden Objekt „Beschrift“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // alle sich treffenden Striche<br />
werden als eine Polylinie definiert;<br />
Text mBeschriftung; // Beschriftung für dies VLeitungsstück;
76 A ABSTRAKTIONSREGELN<br />
Entscheidungsfunktion<br />
Eine Konstante Const Winkel definiert die maximale Toleranz für den Winkel<br />
zwischen der Basislinie des Objekts „Beschrift“ und der Strecke von<br />
„bestSegment“;<br />
Eine Konstante Const Abstand definiert die maximale Toleranz für den<br />
Abstand zwischen der Basislinie des Objekts „Beschrift“ und der Strecke<br />
des „bestSegment“:<br />
if( curWinkel > Winkel ) return false;<br />
Die Beschriftung muss fast parallel zu dem „bestSegment“ sein;<br />
if( curAbstand > Abstand ) return false;<br />
Die Beschriftung muss in der Nähe von dem „bestSegment“ sein.<br />
Maßlinie<br />
Beschreibung<br />
Ein Objekt „Maßlinie“ ist ein ununterbrochener Linienverlauf von Verzweigung<br />
zu Verzweigung und wird durch ein rekursives Verfahren aus<br />
mehreren miteinander verbundenen Objekten „Vektor“ gebildet. Alle Vektoren<br />
müssen fast auf derselben Linie stehen. Unter Verzweigung versteht<br />
man hier einen Verbindungspunkt, in dem mehr als zwei Objekte „Vektor“<br />
zusammentreffen.<br />
Attribute<br />
MathPolyKurve mPoly; // eine Kette aus Objekten „Vektor“<br />
Entscheidungsfunktion<br />
if (! Vektor1.connected(Vektor2)) continue;<br />
Vektor1 und Vektor2 sind nicht miteinander verbunden<br />
if (Vektor1.winkel(Vektor2)>Winkel) continue;<br />
Vektor1 und Vektor2 müssen fast auf der selben Linie stehen<br />
getY()->getInzidente(ListRef inzi, MathPunkt p)<br />
If (inzi.getNumber() > 2) continue;<br />
Mehr als zwei Vektoren treffen in dem selben Punkt zusammen; Hier gibt<br />
es eine Verzweigung.
A.2 Rasterbild-Modelle 77<br />
Bemaßung<br />
Beschreibung<br />
Ein Objekt „Bemaßung“ wird aus einem Objekt „Maßlinie“ und einem<br />
danebenstehenden Objekt „Beschrift“ gebildet.<br />
Attribute<br />
MathPunkt mPunkt1; // Basispunkt1 von „Maßlinie“, Basispunkt1<br />
MathPunkt mPunkt2; // Basispunkt2 von „Maßlinie“, Basispunkt2<br />
MathStrecke mStrecke; // Basislinie von „Maßlinie“, Basislinie<br />
Text mText; // Basistext von „Beschrift“, Maßzahl<br />
Entscheidungsfunktion<br />
Eine Konstante Const WINKEL definiert die maximale Toleranz für den<br />
Winkel zwischen der Basislinie von „Maßlinie“ und der Basislinie von<br />
„Beschrift“;<br />
Eine Konstante Const ABSTAND definiert die maximale Toleranz für den<br />
Abstand zwischen der Basislinie von „Maßlinie“ und der Basislinie von<br />
„Beschrift“:<br />
if( curWinkel > Winkel ) return false;<br />
Die Maßzahl muss fast parallel zu der Maßlinie sein;<br />
if( curAbstand > Abstand ) return false;<br />
Maßzahl und Maßlinie müssen in der Nähe voneinander gefunden werden.<br />
VGebäudeLeft<br />
Beschreibung<br />
Ein Objekt „VGebäudeLeft“ wird als ein abgeschlosses Polygon durch ein<br />
rekursives Verfahren im linksdrehenden Sinn aus mehreren miteinander<br />
verbundenen Objekten „Vektor“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand
78 A ABSTRAKTIONSREGELN<br />
Entscheidungsfunktion<br />
if (! testVektor.connected(curVektor)) continue;<br />
// nextVektor und curVektor sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt curVektor.mP2)<br />
If (inzi.getNumber() > 2)<br />
nextVektor = getNextLeft(inzi);<br />
Falls mehr als zwei Objekte „Vektor“ am Endpunkt des aktuellen Objekts<br />
„Vektor“ angetroffen werden, d.h. es mehrere mögliche Fortsetzungen für<br />
den aktuellen Vektor gibt, wird das erste Objekt von „Vektor“ im linksdrehenden<br />
Sinn als Fortsetzung ausgewählt.<br />
VGebäudeRight<br />
Beschreibung<br />
Ein Objekt „VGebäudeRight“ wird als ein abgeschlossenes Polygon durch<br />
ein rekursives Verfahren im rechtsdrehenden Sinn aus mehreren miteinander<br />
verbundenen Objekten „Vektor“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Entscheidungsfunktion<br />
if (! nextVektor.connected(curVektor)) continue;<br />
// nextVektor und curVektor sind nicht miteinander verbunden<br />
getY()->getInzidente(ListRef inzi, MathPunkt curVektor.mP2)<br />
If (inzi.getNumber() > 2)<br />
nextVektor = getNextRight(inzi);<br />
Falls mehr als zwei Objekte „Vektor“ am Endpunkt des aktuellen Objekts<br />
„Vektor“ zusammentreffen, d.h. es mehrere mögliche Fortsetzungen für<br />
den aktuellen Vektor gibt, wird das erste Objekt von „Vektor“ im rechtsdrehenden<br />
Sinn als Fortsetzung ausgewählt.
A.2 Rasterbild-Modelle 79<br />
VGebäudeUNBS (unbeschriftet Gebäude)<br />
Beschreibung<br />
Die Objektklasse „VGebäudeUNBS“ definiert eine Generalisierung aus<br />
den Objektklassen „VGebäudeLeft“ und „VGebäudeRight“. D.h. jedes<br />
Objekt von den beiden ist auch ein Objekt „VGebäudeUNBS“.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
VGebäudeBS (beschriftet Gebäude)<br />
Beschreibung<br />
Ein Objekt „VGebäudeBS“ wird aus einem Objekt „VGebäudeUNBS“<br />
und einem darin angetroffenen Objekt „Beschrift“ gebildet.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Text mLabel; // Basistext von „Text“, Gebäudenummer<br />
Entscheidungsfunktion<br />
if( !curGebäudeUNBS.umfang(curText) ) return false;<br />
Die Hausnummer (ein Objekt von „Beschrift“) muss innerhalb der Kontur<br />
eines Gebäudes sein.<br />
VGebäude<br />
Beschreibung<br />
Die Objektklasse „VGebäude“ definiert eine Generalisierung aus den Objektklassen<br />
„VGebäudeUNBS“ und „VGebäudeBS“. D.h. jedes Objekt<br />
der beiden ist auch ein Objekt „VGebäude“.<br />
Attribute<br />
MathPolyKurve mPoly; // Basispolylinie, Gebäuderand<br />
Text mLabel; // Gebäudenummer
80 B DEFINITIONEN ALLER LAYOUT_KLASSEN IN DATENSAMMLER<br />
B<br />
Definitionen aller Layout_Klassen in Datensammler<br />
B.1 Definitionen für CAD-Daten<br />
Layout: Leitungsabschnitt<br />
Attribute:<br />
Durchmesser:<br />
Material:<br />
Layout: Schutzrohr<br />
Attribute:<br />
Ohne Attributedefinition<br />
Layout: Materialwechsel<br />
Attribute:<br />
Ohne Attributedefinition<br />
Top: Leitungsgeneral<br />
geometrische Länge<br />
Beschriftung<br />
Top: Leitungsgeneral<br />
Top: Leitungsgeneral<br />
Layout:GasNetz (eine Komposition von Leitungsabschnitte)<br />
Attribute:<br />
Ohne Attributedefinition<br />
Layout: Bemassung<br />
Attribute:<br />
Abstand:<br />
Masszahl:<br />
Richtigkeit:<br />
Top: Bemassung<br />
geometrische Länge<br />
Maßzahl<br />
bool Variable<br />
„TRUE“, wenn die Differenz der geometrischen Länge und Maßzahl in einer<br />
Differenztoleranz beschränkt wird; Die Differenztoleranz kann vom Benutzer<br />
selbst verändert werden (Siehe Anhang A: Handbuch für Benutzer).<br />
Anlegepunkt1:<br />
Anlegepuntk2:<br />
Layout: Gebaeude<br />
Attribute:<br />
Hausnummer<br />
Schwerpunkt<br />
Umfang:<br />
Fläche:<br />
Layout: Flurstueck<br />
Attribute:<br />
Flurstuecknummer<br />
Schwerpunkt<br />
Koordinate Parameter<br />
Koordinate Parameter<br />
Top: Gebaeude<br />
geometrische Umfang<br />
geometrische Fläche<br />
Top: Flurstueck
B.1 Definitionen für CAD-Daten 81<br />
Layout: Schieber<br />
Attribute:<br />
Schwerpunkt<br />
Layout: Wassertopf<br />
Attribute:<br />
Schwerpunkt<br />
Relationen Definition:<br />
Top: SchieberBR<br />
Top: WassertopfBR<br />
NetzHatAbschnitt: GasNetz→Leitungsabschnitt<br />
definiert eine Zugehörigkeit zwischen einem GasNetz und mehreren Leitungsabschnitten.<br />
Benachbart: Leitungsabschnitt→Leitungsabschnitt<br />
definiert eine Nachbarschaft zwischen zwei miteinander verbundenen Leitungsabschnitten.<br />
BegrenztDurch: Leitungsabschnitt→Materialwechsel<br />
definiert eine Nachbarschaft zwischen einem Leitungsabschnitt und einem<br />
Materialwechsel.<br />
Nachbar_BM_LAs: Bemassung→Leitungsabchnitt<br />
definiert eine Nachbarschaft zwischen einer Bemassung und dem entsprechenden<br />
vermessenen Leitungsabschnitt.<br />
Nachbar_BM_GB: Bemassung→Gebaeude<br />
definiert eine Nachbarschaft zwischen einer Bemassung und dem entsprechenden<br />
vermessenen Gebaeude.<br />
HausHatLeitung: Gebaeude→Leitungsabschnitt<br />
definiert eine Nachbarschaft zwischen einem Gebaeude und einem damit<br />
verbundenen Leitungsabschnitt.<br />
Einbauend_SB: Schieber→Leitungsabschnitt<br />
definiert eine Zugehörigkeit zwischen einem Schieber und dem entsprechenden<br />
Leitungsabschnitt: ein Schieber ist normalerweise ein Einbauteil<br />
von einer Leitung.
82 B DEFINITIONEN ALLER LAYOUT_KLASSEN IN DATENSAMMLER<br />
Einbauend_WT: Wassertopf→Leitungsabschnitt<br />
definiert eine Zugehörigkeit zwischen einem Wassertopf und dem entsprechenden<br />
Leitungsabschnitt: ein Wassertopf ist normalerweise ein Einbauteil<br />
von einer Leitung.<br />
B.2 Definitionen für Rasterbild-Daten<br />
Layout: VLeitung<br />
Attribute:<br />
Durchmesser:<br />
Material:<br />
Layout: VBemassung<br />
Attribute:<br />
Abstand:<br />
Masszahl:<br />
Richtigkeit:<br />
Top: VLeitung<br />
geometrische Länge<br />
Beschriftung<br />
Top: VBemassung<br />
geometrische Länge<br />
Maßzahl<br />
bool Variable<br />
„TRUE“, wenn die Differenz der geometrischen Länge und der Maßzahl in einer<br />
Differenztoleranz beschränkt wird; Die Differenztoleranz kann vom Benutzer<br />
selbst verändert werden (Siehe Anhang A: Handbuch für Benutzer).<br />
Anlegepunkt1:<br />
Anlegepuntk2:<br />
Layout: VGebaeude<br />
Attribute:<br />
Hausnummer<br />
Schwerpunkt<br />
Umfang:<br />
Fläche:<br />
Relationen Definition:<br />
Koordinate Parameter<br />
Koordinate Parameter<br />
Top: VGebaeude<br />
geometrischer Umfang<br />
geometrische Fläche<br />
Nachbar_BM_LAs: VBemassung→VLeitung<br />
definiert eine Nachbarschaft zwischen einer VBemassung und der entsprechenden<br />
vermessenen VLeitung.<br />
Nachbar_BM_GB: VBemassung→VGebaeude<br />
definiert eine Nachbarschaft zwischen einer VBemassung und dem entsprechenden<br />
vermessenen VGebaeude.
B.2 Definitionen für Rasterbild-Daten 83<br />
HausHatLeitung: VGebaeude→VLeitung<br />
definiert eine Nachbarschaft zwischen einem VGebaeude und einer damit<br />
verbundenen VLeitung.
84 C IMPLEMENTIERUNG DER VEKTORISIERUNG<br />
C<br />
Implementierung der Vektorisierung<br />
C.1 Einleitung<br />
Der Programmmodul für Vektorisierung von binären Rasterbildern ist aus Gründen der<br />
Modularisierung und Vereinfachung der Struktur des Gesamtsystems augenblicklich<br />
als ein eigenständiges Computerprogramm implementiert.<br />
Als Eingabe bekommt der Vektorisierungsmodul folgende Dateien, die vorher angelegt<br />
werden müssen:<br />
1. Die zu vektorisierende binäre Rasterbilddatei;<br />
2. Binäre Rasterbilddateien mit je einem Prototypsymbol als Inhalt (z.B. einfach<br />
aus der obigen Datei auskopieren);<br />
3. Textdatei mit Auskunft über die Aufsetzpunkte bzw. -winkel von einzelnen Prototypsymbolen<br />
bezüglich deren Koordinatenursprung (linke obere Bildecke) und<br />
deren zugelassene Toleranzen (Abweichungen in Pixeln) für den jeweiligen Konturvergleich.<br />
Die binären Rasterbilddateien können in einem der gängigen Graphikformate vorliegen:<br />
GIF, TIFF, PNG (sowie PPM, PGM, PBM).<br />
Beim Aufruf des Vektorisierungsprogramms muß die zu vektorisierende Rasterbilddatei,<br />
die Textdatei mit Infos und Parametern zu den Symbolprototypen sowie die<br />
„Irrelevanzgrenze“ in Pixeln für die Skelettierung angegeben werden. Daraufhin werden<br />
folgende Abarbeitungsschritte durchgeführt:<br />
1. Auf das zu vektorisierende Rasterbild wird Konturfindung angewendet, um alle<br />
dort vorkommenden Konturen zu erhalten;<br />
2. Mit jedem Prototypsymbol wird ausgeführt:<br />
(a) Auf das Prototypsymbol wird Konturfindung angewendet, um die notwendigen<br />
Prototypparameter zu gewinnen;<br />
(b) Mithilfe dieses Parametersatzes wird auf das zu vektorisierende Rasterbild<br />
Konturvergleich angewendet, um dort die Konturen festzustellen, die<br />
entsprechend der für das Symbol vorgegebenen Genauigkeit diesem ähnlich<br />
sind (diese Rasterbildkonturen werden u.U. auch mit anderen Prototypsymbolen<br />
„ähnlich“ sein!);<br />
3. Auf das zu vektorisierende Rasterbild wird Skelettierung, mit der vorgegebenen<br />
Irrelevanzgrenze, angewendet.
C.1 Einleitung 85<br />
Die Textdatei für die Beschreibung der Prototypsymbole, notwendig für den Vektorisierungsmodul,<br />
hat folgenden tabellarischen Aufbau. Eine Zeile entspricht einem<br />
Prototypsymbol. In den Spalten werden angegeben: 1. Dateinamenstamm der Rasterdatei<br />
mit diesem Prototyp als Inhalt; 2. Name des Symbols; 3,4. x,y-Koordinaten<br />
des (relativen) Aufsetzpunktes dieses Symbols in der Prototypdatei; 5. Aufsetzwinkel<br />
(Orientierung) des Symbols im Prototypbild; 6. zulässige Toleranz für den Konturvergleichsalgorithmus<br />
(in Pixeln). Mit #-Symbol beginnen Kommentarzeilen. Ein<br />
Beispiel dieser Datei:<br />
# Stamm Name X Y α max.-Pxl.-Abstand<br />
h2_EG “Buchstabe-E-Gross” 7 90 -23.0 2.6<br />
h2_CG “Buchstabe-C-Gross” 72 92 63.0 7.6<br />
h2_RG “Buchstabe-R-Gross” 9 78 -25.0 8.1<br />
h2_SG “Buchstabe-S-Gross” 11 74 -25.0 6.1<br />
h2_VG “Buchstabe-V-Gross” 77 93 69.0 7.1<br />
h2_2G “Ziffer-2-Gross” 17 77 -21.0 5.6<br />
h2_3G “Ziffer-3-Gross” 70 92 61.0 7.0<br />
h2_6G “Ziffer-6-Gross” 71 91 62.0 7.1<br />
h2_0g “Ziffer-0-gross” 62 71 64.0 7.3<br />
h2_1g “Ziffer-1-gross” 69 79 66.0 3.3<br />
h2_2g “Ziffer-2-gross” 64 84 64.0 4.6<br />
h2_5g “Ziffer-5-gross” 71 82 65.0 5.1<br />
h2_3k “Ziffer-3-klein” 65 73 67.0 4.6<br />
h2_4k “Ziffer-4-klein” 24 63 -20.0 2.5<br />
h2_7k “Ziffer-7-klein” 59 73 60.0 4.0<br />
h2_Eg “Buchstabe-E-gross” 71 82 64.0 3.5<br />
h2_Pg “Buchstabe-P-gross” 75 83 65.0 4.0<br />
h2_klg “Linksklammer-gross” 15 75 -23.0 6.0<br />
h2_krg “Rechtsklammer-gross” 15 75 -23.0 9.9<br />
Die Ergebnisse der Vektorisierung werden in eine Textdatei derart zusammengefaßt,<br />
daß diese Ergebnisdatei, sowie die ursprüngliche, zu vektorisierende binäre Rasterbilddatei<br />
später von dem Y-Interpretationssystem geladen und ausgewertet werden<br />
können (das Rasterbild dient der Anschaulichung der Vektorisierung bzw. deren Auswertung<br />
von Y).<br />
Somit enthält die Ergebnisdatei relative Randkonturen, Aufsetzpunkte und -winkel<br />
zu allen Prototypsymbolen sowie Auskunft über jede im Rasterbild „erkannte“ Kontur<br />
mit jeweiliger Auflistung der Symbolkandidaten sowie das Skelett des durch diese
86 C IMPLEMENTIERUNG DER VEKTORISIERUNG<br />
Kontur festgelegten Rasterbildgebietes. Schließlich wird in der Ergebnisdatei das Skelett<br />
von Rasterbildgebieten angegeben, wo keine von den Prototypen „gepaßt“ haben.<br />
Der Vektorisierungsmodul ist momentan sowohl unter UNIX, als auch in der Cyg-<br />
Win-Umgebung unter MS-Windows lauffähig.<br />
C.2 Beispiel<br />
Als Veranschaulichung betrachte man Ergebnisse der Vektorisierung eines Rasterbildes<br />
in Abbildung C.1. Die als Schriftzeichen erkannten Symbole sind jeweils am<br />
Abbildung C.1: Vektorisierungsergebnis.
C.2 Beispiel 87<br />
Fußpunkt durch einen Pfeil (als Aufsetzpunkt und -orientierung) gekennzeichnet. Der<br />
Symbolvergleichsalgorithmus ermittelt i.A. mehrere mögliche Aufsetzpunkte an einem<br />
Schriftzeichen: zum einen aus Symmetriegründen einiger Symbole (z.B. „I“, „O“,<br />
„X“, „H“, „S“, „Z“, „N“ oder „(“ bzw. „)“, usw.); zum anderen wird Dank der im<br />
Voraus festgelegten tolerierbaren Konturungenauigkeit oft ein und dasselbe Symbol<br />
bezüglich mehrerer beieinanderliegender Aufsetzpunkte und -orientierungen als mögliche<br />
Lösungen „erkannt“. (Ab einer gewissen Toleranzschwelle ist der Algorithmus<br />
nicht mehr in der Lage beispielsweise „5“ von „S“, „8“ von „B“ oder „3“ von „E“ zu<br />
trennen, bis hin, daß an jeder Stelle alle Symbole als mögliche „Lösungen“ erkannt<br />
werden.)<br />
Nicht als Schriftsymbole erkannte Zeichnungselemente wurden nur skelettiert und<br />
sind entsprechend durch Skelettvierecke mit dazugehörigen Mittellinien gekennzeichnet.<br />
Abbildung C.2: Prototypsymbole.<br />
Für die Beispielvektorisierung wurden als Prototypen Symbole verwendet wie in<br />
Abbildung C.2 dargestellt (sie wurden in einzelne Rasterdateien als Protoypbilder abgelegt).<br />
Anhand dieser Bilder wurde die Katalogdatei erstellt wie im Abschnitt C.1 tabellarisch<br />
angegeben. Für die Erstellung dieser Datei hat sich ein kleines Oberflächenprogramm<br />
(Abb. C.3) als sehr hilfreich erwiesen. Dies ermöglicht die Anzeige der<br />
einzelnen Symbolrasterdateien sowie das visuelle Festlegen der Aufsetzpunkte und<br />
-ausrichtungen. Über diese Oberfläche kann durch einen Knopfdruck die Vektorisierung<br />
durchgeführt werden: als Ergebnis dessen entsteht eine (ebenfalls Text-) Datei,<br />
die von Y geladen und ausgewertet werden kann.<br />
Die Vektorisierung des hier angegebenen etwas über 1000×1000 Pixel großen Rasterbildes<br />
dauerte auf einem INTEL 500-MHz Pentium Rechner in der Größenordnung<br />
von 90 Sekunden.
88 C IMPLEMENTIERUNG DER VEKTORISIERUNG<br />
Abbildung C.3: Programm für die Erstellung des Katalogs sowie Durchführung der<br />
Vektorisierung.
C.3 Schnittstelle: Vektorisierung → Y 89<br />
C.3 Schnittstelle: Vektorisierung → Y<br />
Die Datei mit den Ergebnissen der Vektorisierung für die Y-Auswertung hat folgenden<br />
Aufbau. In der angegebenen Schnittstellenbeschreibung zur Y sind geschweifte<br />
Klammern – {, } –, doppelte Hochkommas – “, ” – und Schriftsymbole zwischen ihnen<br />
in der Definition von „String“, sowie Zahlenziffern in „Zahl“ Terminalsymbole.<br />
Die Notation für „Symbolprototypen“ bedeutet, daß sie entweder aus Null, einer oder<br />
mehreren Instanzen von „Symbolprototyp“ besteht. „Vektorsymbole“ heißt ebenfalls,<br />
es muß mindestens eine Instanz (oder mehr) von „Vektorsymbol“ vorkommen. Analog<br />
besteht „Kontur“ mindestens aus vier (oder aus einer größeren geraden Zahl von)<br />
„Punkten“.<br />
YSchnittstellendokument := {Symbolprototypen, Vektorbild}<br />
Symbolprototypen := {. . . , Symbolprototyp}<br />
Symbolprototyp := {Name, Aufsetzpunkt, Aufsetzwinkel, Symbolgebiet}<br />
Symbolregion := {. . . , Symbolgebiet}<br />
Symbolgebiet := {Kontur, Symbolregion}<br />
Kontur := {Punkt, Punkt, Punkt, Punkt, . . . }<br />
Vektorbild := {Vektorsymbolregionen, Restskelett}<br />
Vektorsymbolregionen := {. . . , Vektorsymbolregion}<br />
Vektorsymbolregion := {Vektorsymbole, Skelett}<br />
Vektorsymbole := {Vektorsymbol, . . . }<br />
Vektorsymbol := {Name, Aufsetzpunkt, Aufsetzwinkel, Güte}<br />
Skelett := {Skelettausschnitt1D, . . . }<br />
Restskelett := {. . . , Skelettausschnitt1D}<br />
Skelettausschnitt1D := {Skelettteil, . . . }<br />
Skelettteil := {Endpunkt, Endpunkt}<br />
Endpunkt := {Punkt, Breite}<br />
Name := String<br />
Aufsetzpunkt := Punkt<br />
Aufsetzwinkel := Zahl<br />
Güte := Zahl<br />
Breite := Zahl<br />
Punkt := {X, Y}<br />
X := Zahl<br />
Y := Zahl<br />
String := “abcdefghijklmnopqrstuvwxyz. . . ”<br />
Zahl := ±0123456789. . . E±123. . .
90 LITERATUR<br />
Literatur<br />
[1] BRINGMANN, O.: Symbolische Interpretation technischer Zeichnungen. Dissertation,<br />
Technische Universität Dresden, 2002.<br />
[2] BRINGMANN, O. und T. WIERSCHIN: Softwaredesign des Ypsilon-Kerns. Techn.<br />
Bericht, kubit GmbH und TU Dresden, Institut für Künstliche Intelligenz, 01062<br />
Dresden, Mommsenstr. 13, 2001. Intern.<br />
[3] NEUMANN, P.: Studie: Aktiver Regionaler Geodaten-Pool (ARGPool). Techn.<br />
Bericht, TU Dresden, Institut für Künstliche Intelligenz, 01062 Dresden, Mommsenstr.<br />
13, 2000.