Geodateninterpretation

Geodateninterpretation Geodateninterpretation

computational.logic.org
von computational.logic.org Mehr von diesem Publisher
17.11.2013 Aufrufe

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

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!