4. Modul DGNOUT - Bentley Microstation DGN schreiben

4.1. Allgemeines

Mit dem Modul können ICS Objekte direkt in Microstation Designfiles geschrieben werden.

[Anmerkung]

Das analoge Modul MSOUT benötigt zum Schreiben von Designfiles das Produkt Microstation.

Der Modul wird mit:

|INCL \script\dgnout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

4.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

4.3. Parametermap DGNOUT_PARAM

Folgende Parameter können in der Map DGNOUT_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
CELL_FILEoZellbibliothek die verwendet wird. Obligatorisch wenn Zellen nach Microstation geschrieben werden.
CELL_SYMBOLOGYoON oder OFF. Default OFF. Definiert ,ob beim Schreiben von Zellen die Symbology der Zelle in der Zellbibliothek verwendet werden soll.
RSC_DIRoSTRING. Definiert den Pfad mit den Microstation-Resource-Files, wie zum Beispiel die Fonts. Wird benötigt um zusätzliche Informationen zu den Objekten verarbeiten zu können. Beispiel Fontname bei Texten.
DEBUGoON oder OFF. Default OFF. Debugmodus ein oder aus.
STATISTICSoON oder OFF. Default OFF. Statistik anzeigen ein oder aus.

4.4. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Je nach OUT-Type werden folgende zusätzlichen Komponenten verlangt.

Allgemeine Komponenten für jedes OUT-Objekt
Komponentereq/optBeschreibung
OUT.TYPE(s) r

Typ des Objekts.

OUT.LEVEL(i) r

Microstation Level-Nummer des Objekts.

OUT.COLOR(i)rMicrostation Color des Objekts.
OUT.WEIGHT(i)rMicrostation Weight des Objekts.
OUT.STYLE(i|s)rMicrostation Style-Nummer oder -Name des Objekts.
OUT.GGROUP(i)oMicrostation Graphische-Gruppe-Nummer des Objekts. Optional.
OUT.MODEL(s)oMicrostation Model des Objekts. Optional.
OUT.PRIORITY(i)oMicrostation Priorität des Objekts. Optional.
Zusätzliche Komponenten für OUT.TYPE = 'POINT'

Wird als Microstation Type LINE (3) geschrieben.

Komponentereq/optBeschreibung
OUT.GEOM(p)rPunkt-Geometrie des Objekts.
Zusätzliche Komponenten für OUT.TYPE = 'LINE'

Wird als Microstation Type LINE (3), LINESTRING (4), ARC (6) oder COMPLEX_LINESTRING (12) geschrieben. Hängt ab von der Anzahl Punkte und den Subtypes (Lines/Arcs) .

Komponentereq/optBeschreibung
OUT.GEOM(l)rLinie-Geometrie des Objekts.
Zusätzliche Komponenten für OUT.TYPE = 'AREA'

Wird als Microstation Type SHAPE (6) oder COMPLEX_SHAPE (14) geschrieben. Hängt ab von der Anzahl Punkte und den Subtypes (Lines/Arcs) .

Komponentereq/optBeschreibung
OUT.GEOM(a)rFlächen-Geometrie des Objekts.
Zusätzliche Komponenten für OUT.TYPE = 'FILLED_AREA'

Wird als Microstation Type SHAPE (6) oder COMPLEX_SHAPE (14) geschrieben. Hängt ab von der Anzahl Punkte und den Subtypes (Lines/Arcs) .

Komponentereq/optBeschreibung
OUT.GEOM(a)rFlächen-Geometrie des Objekts.
OUT.FILLCOLOR(i)rFüllfarbe des Objekts.
Zusätzliche Komponenten für OUT.TYPE = 'TEXT'

Wird als Microstation Type TEXT(17) geschrieben.

Komponentereq/optBeschreibung
OUT.GEOM(p)rPunkt-Geometrie des Objekts.
OUT.TXT(s)rText des Objekts. Bei Symbolen in der Regel 1 Character.
OUT.TW(r)rTextbreite des Objekts. (Microstation: tw=).
OUT.TH(r)rTexthöhe des Objekts. (Microstation: th=).
OUT.ROT(r)rRotation des Objekts.
OUT.FONT(i)rFont des Objekts. (Microstation: ft=). Bei TEXT ein Textfont. Bei SYMBOL ein Symbolfont.
OUT.JUST(s)rTextjustierung des Objekts. (Horizontal: L: Left, C:Center, R:Right; Vertikal: T:Top, C:Center, B:Bottom; Beispiel LC).
Zusätzliche Komponenten für OUT.TYPE = 'TEXT_NODE'

Wird als Microstation Type TEXT_NODE(7) geschrieben.

Komponentereq/optBeschreibung
OUT.GEOM(p)rPunkt-Geometrie des Objekts.
OUT.TXT(s)rText 1. Zeile des Objekts.
OUT.TXT2(s)oText 2. Zeile des Objekts.
OUT.TXT<n>(s)oText n. Zeile des Objekts.
OUT.TW(r)rTextbreite des Objekts. (Microstation: tw=).
OUT.TH(r)rTexthöhe des Objekts. (Microstation: th=).
OUT.ROT(r)rRotation des Objekts.
OUT.FONT(i)rFont des Objekts. (Microstation: ft=).
OUT.JUST(s)rTextjustierung des Objekts. (Horizontal: L: Left, C:Center, R:Right; Vertikal: T:Top, C:Center, B:Bottom; Beispiel LC).
OUT.LINESPACING(r)rLinespacing des Objekts. (Microstation: ls=).
Zusätzliche Komponenten für OUT.TYPE = 'CELL'

Wird als Microstation Type CELL (2) geschrieben. Falls es sich bei der Zelle um eine Point-Zelle handelt, werden die OUT-Komponenten LEVEL, COLOR, WEIGHT, STYLE berücksichtigt. Bei einer Graphic-Zelle werden diese Komponenten nicht berücksichtigt.

Komponentereq/optBeschreibung
OUT.GEOM(p)rPunkt-Geometrie des Objekts.
OUT.CELL(s)rZellnamen des Objektes. Die Zellbibliothek mit der Zelldefinition muss im Microstation-Designfile attached sein.
OUT.ROT(r)rRotation des Objekts.
OUT.SCALE(r)rSkalierung des Objektes.
OUT.FILLCELL(b)oTRUE|FALSE. Wenn TRUE werden gefüllte Flächen einer Zelledefinition gefüllt übertragen. Wenn FALSE werden gefüllten Flächen einer Zelledefinition nicht gefüllt übertragen.
OUT.CELL_BACKGROUNDCOLOR_KEEP(b)oTRUE|FALSE. Wenn TRUE wird die Color von Elementen einer Zelledefinition nicht verändert, wenn die Color der Backgroundcolor entspricht. Wenn FALSE wird die Color von Elementen einer Zelledefinition geändert.
[Anmerkung]

Die Zelle muss in der attached Celllibrary existieren.

Zusätzliche Komponenten für OUT.TYPE = 'SHARED_CELL'

Wird als Microstation Type SHARED_CELL (35) geschrieben. Falls es sich bei der Zelle um eine Point-Zelle handelt, werden die OUT-Komponenten LEVEL, COLOR, WEIGHT, STYLE berücksichtigt. Bei einer Graphic-Zelle werden diese Komponenten nicht berücksichtigt.

Komponentereq/optBeschreibung
OUT.GEOM(p)rPunkt-Geometrie des Objekts.
OUT.CELL(s)rZellnamen des Objektes. Die Zelldefinition der Shared Cell muss im Microstationfile definiert sein.
OUT.ROT(r)rRotation des Objekts.
OUT.SCALE(r)rSkalierung des Objektes.
[Anmerkung]

Die Shared Cell Definition zu einer Shared Cell wird wie folgt verarbeitet:

  1. Existiert die Shared Cell Definition bereits, wird nichts verändert.

  2. Existiert die Shared Cell Definition nicht und ist die Cell in der attached Celllibrary enthalten, wird die Shared Cell Definition aus der Cell in der Celllibrary erzeugt.

  3. Existiert die Shared Cell Definition nicht und ist die Cell nicht in der attached Celllibrary enthalten, wird die Shared Cell aus den Geometrien in IN.XGEOM erzeugt, falls vorhanden

4.5. Maps für Signaturen

Den Prozeduren DGNOUT_WRITE_* müssen die Namen von Signaturen übergeben werden. Eine Signatur ist eine Zusammenfassung bestimmter graphischer Eigenschaften (z.B. Level oder Farbe) unter einem Namen. Die Signaturnamen werden in den nachfolgenden Maps der .cfg Datei definiert:

MAP LINE_SYMBOLOGY
   ...
   <symbology>     => <style>,<level>,<color>,<weight>
   ...
END_MAP

MAP TEXT_SYMBOLOGY
   ...
   <symbology>     => <font>,<level>,<color>,<weight>,<tw>,<th>
   ...
END_MAP

MAP SYMBOL_SYMBOLOGY
   ...
   <symbology>     => <font>,<code>,<level>,<color>,<weight>,<scale>
   ...
END_MAP

MAP CELL_SYMBOLOGY
   ...
   <symbology>     => <cell>,<scale>
   ...
END_MAP

Die einzelnen Parameter haben folgende Bedeutung:

<symbology>

Name der definierten Signatur.

<style>

Microstation-Linecode.

<level>

Microstation-Level.

<color>

Microstation-Color.

<weight>

Microstation-Weight.

<font>

Microstation-Font.

<tw>

Microstation-Text-Width.

<th>

Microstation-Text-Height.

<code>

Microstation-Symbol-Character als Dezimalwert.

<scale>

Microstation-Skalierung.

<cell>

Microstation-Cellname.

4.6. Map für Textjustierung

Das Modul verfügt über eine Map, die die Abbildung der INTERLIS-Textjustierung - HALIGNMENT,VALIGNMENT zur Microstation-Textjustification beinhaltet. Diese Map sieht wie folgt aus.

MAP DGNOUT_ALI_TO_JUST
   0,0 => LT 
   0,1 => LT 
   0,2 => LC
   0,3 => LB
   0,4 => LB
   1,0 => CT
   1,1 => CT
   1,2 => CC
   1,3 => CB
   1,4 => CB
   2,0 => RT
   2,1 => RT
   2,2 => RC
   2,3 => RB
   2,4 => RB
   DEFAULT => CC
END_MAP

Diese Map kann in einer Konfiguration wie folgt angewendet werden.

IN.NamHAli , IN.NamVAli DGNOUT_ALI_TO_JUST => OUT.JUST

4.7. Exportierte Prozeduren und Methoden

ProzedurDGNOUT_OPEN ! [s output][]
BeschreibungÖffnet das Designfile <output> und initialisiert den Modul. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'' DGNOUT_OPEN
ProzedurDGNOUT_WRITE_OBJECT ! [][]
BeschreibungSchreibt ein Objekt in das Designfile. Das OUT-Objekt muss gemäss dem Objektmodell vorbereitet sein.
Beispiel
&OUT MAPCLEAR
'POINT'      => OUT.TYPE
1            => OUT.LEVEL
2            => OUT.COLOR
3            => OUT.WEIGHT
4            => OUT.STYLE
IN.Geometrie => OUT.GEOM

DGNOUT_WRITE_OBJECT
ProzedurDGNOUT_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
DGNOUT_CLOSE
ProzedurDGNOUT_WRITE_POINT2 ! p point, s symbology
Beschreibung

Schreibt einen Punkt in das Designfile. Die Signatur muss in der Map LINE_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP LINE_SYMBOLOGY
   !SYMBOLOGY      => STYLE,LEVEL,COLOR,WEIGHT
   SYMB1 => 0,1,1,0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_POINT2

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_WRITE_POINT2,IN.Geometrie,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_LINE2 ! l line, s symbology
Beschreibung

Schreibt eine Linie in das Designfile. Die Signatur muss in der Map LINE_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP LINE_SYMBOLOGY
   !SYMBOLOGY      => STYLE,LEVEL,COLOR,WEIGHT
   SYMB1 => 0,1,1,0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_LINE2

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Einzelobjekte,Linienelement => DGNOUT_WRITE_LINESTRING2,...
                                     ...IN.Geometrie,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_AREA2 ! a area, s symbology
Beschreibung

Schreibt eine Fläche in das Designfile. Die Signatur muss in der Map LINE_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP LINE_SYMBOLOGY
   !SYMBOLOGY      => STYLE,LEVEL,COLOR,WEIGHT
   SYMB1 => 0,1,1,0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_AREA2

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Einzelobjekte,Flaechenelement => DGNOUT_WRITE_AREA2,...
                                       ...IN.Geometrie,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_FILLED_AREA2 ! a area, s symbology
Beschreibung

Schreibt eine gefüllte Fläche in das Designfile. Die Signatur muss in der Map LINE_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP LINE_SYMBOLOGY
   !SYMBOLOGY      => STYLE,LEVEL,COLOR,WEIGHT
   SYMB1 => 0,1,1,0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_FILLED_AREA2

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Einzelobjekte,Flaechenelement => DGNOUT_WRITE_FILLED_AREA2,...
                                       ...IN.Geometrie,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_TEXT6 ! s text, p position, r rotation, i HAli, i VAli, s symbology
Beschreibung

Schreibt einen Text in das Designfile. Die Signatur muss in der Map TEXT_SYMBOLOGY definiert sein. Die Procedure wird kann auch für das Schreiben von Symbolen verwendet.

Beispiel

Definition Symbology.

MAP TEXT_SYMBOLOGY
   !SYMBOLOGY  => FONT,LEVEL,COLOR,WEIGHT,TW,TH
   SYMB1 => 0,1,1,0,1.0,1.0
END_MAP

Anwendung mit SET_PARAM .

IN.Name SET_PARAM
IN.NamePos SET_PARAM
IN.NameOri SET_PARAM
IN.NameHAli SET_PARAM
IN.NameVAli SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_TEXT6

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Einzelobjekte,Objektname => DGNOUT_WRITE_TEXT6,...
                                  ...IN.Name,IN.NamPos,...
                                  ...IN.NamOri,IN.NamHAli,...
                                  ...IN.NamVAli,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_CELL3 ! p position, r rotation, s symbology
Beschreibung

Schreibt eine Zellen in das Designfile. Die Signatur muss in der Map CELL_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP CELL_SYMBOLOGY
   !SYMBOLOGY      => CELL,SCALE
   SYMB1 => 097041,1.0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
0.0 SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_CELL3

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_WRITE_CELL3,...
                       ...IN.Geometrie,0.0,SYMB1
END_MAP
ProzedurDGNOUT_WRITE_SHARED_CELL3 ! p position, r rotation, s symbology
Beschreibung

Schreibt eine Zelle in das Designfile. Die Signatur muss in der Map CELL_SYMBOLOGY definiert sein.

Beispiel

Definition Symbology.

MAP CELL_SYMBOLOGY
   !SYMBOLOGY      => CELL,SCALE
   SYMB1 => 097041,1.0
END_MAP

Anwendung mit SET_PARAM .

IN.Geometrie SET_PARAM
0.0 SET_PARAM
'SYMB1' SET_PARAM
DGNOUT_WRITE_SHARED_CELL3

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_WRITE_SHARED_CELL3,...
                       ...IN.Geometrie,0.0,SYMB1
END_MAP
ProzedurDGNOUT_SET_MODEL1 ! s model
Beschreibung

Setzt global OUT.MODEL für Objekte, siehe auch Objektmodell

Beispiel

Anwendung mit SET_PARAM .

'MyModel' SET_PARAM
DGNOUT_SET_MODEL1

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_SET_MODEL1,MyModel,...
END_MAP
ProzedurDGNOUT_SET_PRIORITY1 ! i priority
Beschreibung

Setzt global OUT.PRIORITY für Objekte, siehe auch Objektmodell

Beispiel

Anwendung mit SET_PARAM .

100 SET_PARAM
DGNOUT_SET_PRIORITY1

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_SET_PRIORITY1,100,...
END_MAP
ProzedurDGNOUT_SET_FILLCELL1 ! b TRUE|FALSE
Beschreibung

Setzt global OUT.FILLCELL für Zellen, siehe auch Objektmodell für OUT.TYP = 'CELL'

Beispiel

Anwendung mit SET_PARAM .

TRUE SET_PARAM
DGNOUT_SET_FILLCELL1

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_SET_FILLCELL1,TRUE,...
END_MAP
ProzedurDGNOUT_SET_CELL_BACKGROUNDCOLOR_KEEP1 ! b TRUE|FALSE
Beschreibung

Setzt global OUT.CELL_BACKGROUNDCOLOR_KEEP1 für Zellen, siehe auch Objektmodell für OUT.TYP = 'CELL'

Beispiel

Anwendung mit SET_PARAM .

TRUE SET_PARAM
DGNOUT_SET_CELL_BACKGROUNDCOLOR_KEEP1

Anwendung in einer Rule.

MAP INOUT
   I1 => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP => DGNOUT_SET_CELL_BACKGROUNDCOLOR_KEEP1,TRUE,...
END_MAP

4.8. Skriptbeispiel

Beispiel ohne Datenbankanbindung.

! Diese ICS Konfiguration kopiert einige von ilin.mod
! gelesenen Objekte mit dgnout.mod in eine DGN-Datei.
! Eine Datenbankanbindung wird nicht berücksichtigt.

|LICENSE \license\iltools.lic

MAP USER_INPUT1
   DIALOG => FILE
   MESSAGE => 'Enter .itf Input File'
   FILE_FILTER => itf
   FILE_EXISTS => TRUE
   OPT => input
END_MAP

MAP USER_INPUT2
   DIALOG => FILE
   MESSAGE => 'Enter .dgn Output File'
   FILE_FILTER => dgn
   FILE_EXISTS => FALSE
   OPT => output
END_MAP

MAP ILIN_PARAM
   INTERLIS_DEF  => \models\Grunddatensatz.ili
   STATISTICS    => ON
END_MAP

MAP DGNOUT_PARAM
   STATISTICS       => ON
END_MAP

MAP LINE_SYMBOLOGY
   !SYMBOLOGY      => STYLE,LEVEL,COLOR,WEIGHT
   SYMB1 => 0,1,1,0
END_MAP

MAP INPUT_SOURCES
   I1 => ILIN,OPT.input
END_MAP

MAP INOUT
   I1                                     => IN.TOPIC,IN.TABLE
   I1,Bodenbedeckung,BoFlaeche_Geometrie  => DGNOUT_WRITE_LINE2,IN.GEOM,SYMB1
   I1,Bodenbedeckung,BoFlaeche            => DGNOUT_WRITE_POINT2,IN.Geometrie,SYMB1
   I1,*                                   => OFF
END_MAP

|INCL \script\ilin.mod
|INCL \script\dgnout.mod
|INCL \script\run1.prg