5. Modul DXFOUT - AutoCAD DXF schreiben

5.1. Allgemeines

Mit dem Modul DXFOUT können Objekte in eine AutoCAD DXF Datei geschrieben werden.

Der Modul DXFOUT wird mit:

|INCL \script\dxfout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

5.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

5.3. Parametermap DXFOUT_PARAM

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

Parameterreq/optBeschreibung
TEMPLATErName der Headerdatei. Für die Headerdatei muss ein DXF-File gemäss Autocad Version 10-14 Standard angegeben werden. Bemerkung: eine allfällig vorhandene ENTITIES Section wird ignoriert.
FILTER_LAYERSoDefiniert, ob nur die Layer aus der Headerdatei übertragen werden sollen, für die auch Objekte übertragen wurden (ON oder OFF). Per Default werden alle Layer übertragen.
FILTER_BLOCKSoDefiniert, ob nur die Blockdefinitionen aus der Headerdatei übertragen werden sollen, für die auch Objekte übertragen wurden (ON oder OFF). Per Default werden alle Blockdefinitionen übertragen
DEFAULT_LAYERoName eines Default-Layers. Definiert einen Default-Layer, der einem Element zugeordnet wird, falls der in der Konfiguration definierte Layer nicht existiert. Der Default-Layer muss in der Headerdatei existieren.
DEFAULT_BLOCKoName eines Default-Blocks. Definiert einen Default-Block, der einem Element zugeordnet wird, falls der in der Konfiguration definierte Block nicht existiert. Der Default-Block muss in der Headerdatei existieren.
CREATE_LAYERSoDefiniert ob ein Layer eines übertragenen Elementes im Header erzeugt werden sollen, falls der Layer nicht bereits in der Headerdatei vorhanden ist (ON oder OFF). Per Default werden keine Layer erzeugt.
HANDLESoFür jedes Objekt ein DXF Handle erzeugen (ON oder OFF).
DIMENSIONo2 oder 3. Definiert ob das DXF-File 2D oder 3D Geometrien enthalten soll. Wenn nicht definiert, kann das File 2D und 3D Geometrien enthalten.
UNDEFZoREAL. Definiert eine Z-Koordinate für Geometrien ohne Z-Koordinate.
DEBUGrON oder OFF, Default = OFF. Debugmodus ein oder aus.
STATISTICSrON oder OFF, Default = OFF. Objektstatistik am Ender der .log Datei anzeigen.
PRIORITYoON oder OFF, Default = OFF. Soll PRIORITY verarbeitet werden. Siehe auch Procedure DXFOUT_SET_PRIORITY1.

5.4. Objektmodell

Der Modul verlangt für jedes OUT-Objekt folgende Systemkomponenten:

Pro Objekttyp müssen ausserdem folgende Komonenten des OUT-Objekts gesetzt werden:

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

Objekttyp (s.a. unten).

OUT.LAYER(s)rDXF-Layer.
OUT.LTYPE(s) o

DXF-Linientyp.

OUT.COLOR(i) o

DXF-Farbe (0 .. 255).

OUT.THICKNESS(r) o

DXF-Thickness.

Zusätzliche Komponenten für OUT.TYPE = 'POINT'
Komponentereq/optBeschreibung
OUT.GEOM(p) r

Punktposition.

Zusätzliche Komponenten für OUT.TYPE = 'BLOCK'
Komponentereq/optBeschreibung
OUT.GEOM(p) r

Blockposition.

OUT.BLOCK(s) r

Blockname.

OUT.SCALE(r) o

Blockskalierungsfaktor.

OUT.ROT(r) o

Blockorientierung in Altgrad.

Zusätzliche Komponenten für OUT.TYPE = 'SHAPE'
Komponentereq/optBeschreibung
OUT.GEOM(p) rShapeposition.
OUT.SHAPE(s)rShapename.
OUT.SIZE(r)rShapegrösse.
OUT.ROT(r)rShapeorientierung in Altgrad.
Zusätzliche Komponenten für OUT.TYPE = 'CIRCLE'
Komponentereq/optBeschreibung
OUT.GEOM(p)r

Kreiszentrum.

OUT.RADIUS(r)rKreisradius.
Zusätzliche Komponenten für OUT.TYPE = 'TEXT'
Komponentereq/optBeschreibung
OUT.TXT(s)r

Textinhalt.

OUT.GEOM(p)r

Textposition.

OUT.HEIGHT(r)r

Texthöhe.

OUT.STYLE(s)r

Textfont.

OUT.JUST(p)r

Justierung. Mögliche Werte sind: LEFT, CENTER, RIGHT, MIDDLE.

OUT.SLANT(r)r

Textneigung in Altgrad.

OUT.XSCALE(r)r

Textskalierung entlang X-Achse.

OUT.ROT(r)rOrientierungswinkel in Altgrad.
Zusätzliche Komponenten für OUT.TYPE = 'LINE'
Komponentereq/optBeschreibung
OUT.GEOM(l)r

Liniengeometrie. Falls die übergebene Linie aus mehren Linien bzw. Keisbogenstücken besteht, wird die Liniengeometrie automatisch in Linien und Kreisbögen aufgelöst.

Zusätzliche Komponenten für OUT.TYPE = 'POLYLINE'
Komponentereq/optBeschreibung
OUT.GEOM(l,a)r

Linien- oder Flächengeometrie. Falls eine Flächengeometrie übergeben wird, werden geschlossene Polylines für jeden Rand der Fläche (inkl. Inseln) geschrieben.

Zusätzliche Komponenten für OUT.TYPE = 'BLOCKDEF'
Komponentereq/optBeschreibung
OUT.XGEOM(L) r

Liste von Geometrien für den Block.

OUT.BLOCK(s) r

Blockname.

OUT.GEOM(p) o

Punktgeometrie. Wenn definiert werden die Geometrien in OUT.XGEOM um diesen Vektor nach 0.0/0.0 verschoben.

OUT.SCALE(r) o

Blockskalierungsfaktor. Wenn definiert werden die Geometrien in OUT.XGEOM auf den Skalierfakor 1.0 skaliert.

OUT.ROT(r) o

Blockorientierung in Altgrad. Wenn definiert werden die Geometrien in OUT.XGEOM auf die Rotation 0.0 rotiert.

5.5. Maps für Signaturen

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

MAP POINT_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>
   ...
END_MAP

MAP BLOCK_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>,
                  <block>,<scale>
   ...
END_MAP

MAP SHAPE_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>,
                  <shape>,<size>
   ...
END_MAP

MAP TEXT_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>,
                  <style>,<height>,<xscale>,<slant>
   ...
END_MAP

MAP LINE_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>
   ...
END_MAP

MAP POLYLINE_SYMBOLOGY
   ...
   <symbology> => <layer>,<ltype>,<color>,<thickness>,
                  <width>,<pgroup>,<priority>
   ...
END_MAP

Die einzelnen Parameter haben folgende Bedeutung:

<symbology>

Name der definierten Signatur.

<layer>

DXF-Layer.

<ltype>

Liniensignatur, z.B. DOTTED.

<color>

DXF-Farbwert (0 .. 255).

<thickness>

DXF-Thickness (3D Linienhöhe).

<block>

Blockname.

<scale>

Blockskalierungsfaktor.

<shape>

Shapename.

<size>

Shapeskalierungsfaktor.

<style>

Textfont, z.B. STANDARD.

<height>

Texthöhe in Benutzereinheiten.

<xscale>

Textskalierung in Textrichtung.

<slant>

Textneigungswinkel.

<width>

Linienbreite.

<pgroup>

Prioritätsgruppe. Optional für Polylines. Polylines innerhalb einer Gruppe <pgroup> und mit gleicher Geometrie werden über die <priority> eliminiert.

<priority>

Priorittätswert. Optional für Polylines. Innerhalb einer Gruppe <pgroup> eliminiert eine Polyline mit der <priority> = n eine identische Polyline mit der <priority> <= n.

5.6. DXF Templates

Mit dem Parameter DXFOUT_PARAM.TEMPLATE muss ein DXF-Template definiert werden, dass folgende Inhalt aufweisen muss.

SECTION HEADER
   - Header section mit allen benötigten Definition
   - im Format DXF Version 10-14

SECTION TABLES
   TABLE LTYPE
      - alle verwendeten Linestyles
   TABLE LAYER
      - alle verwendeten Layers
      - mit DXFOUT_PARAM.CREATE_LAYERS => ON können nicht definierte Layers auch erzeugt werden
   TABLE STYLE
      - alle verwendeten Styles (Fonts)

SECTION BLOCKS
      - alle verwendeten Blocks    

In der Section Header ist insbesondere darauf zu achten, dass der Wert des Keywords HANDLING auf 0 gesetzt ist.

  9
$HANDLING
 70
0  <--- !!!

Ein solches DXF-Template kann wie folgt erstellt werden:

  1. Erzeugen Sie mit AutoCAD ein neues DWG-File.

  2. Definieren Sie mit AutoCAD alle benötigen Eelemente wie Layers und Blocks.

  3. Speichern Sie das File mit AutoCAD als DXF Version 14 ab.

  4. Editieren Sie das DXF File bei Bedarf (z.B. Anpassung Keyword HANDLING).

5.7. Exportierte Prozeduren und Methoden

ProzedurDXFOUT_OPEN ! [s file][]
BeschreibungÖffnet den DXFOUT Modul auf der Outputdei <file>. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'c:\test.dxf' DXFOUT_OPEN
ProzedurDXFOUT_WRITE_CIRCLE3 ! p position, r radius, s linesymbology
Beschreibung

Schreibt einen Kreis in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_CIRCLE3,IN.Geometrie,3.0,LS1
ProzedurDXFOUT_WRITE_POINT2 ! p position, s pointsymbology
Beschreibung

Schreibt einen Punkt in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_POINT2,IN.Geometrie,PS1
ProzedurDXFOUT_WRITE_SHAPE3 ! p position, r rotation, s shapesymbology
Beschreibung

Schreibt eine DXF-Shape Symbol in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_SHAPE3,IN.Geometrie,30.0,SS1
ProzedurDXFOUT_WRITE_BLOCK3 ! p position, r rotation, s blocksymbology
Beschreibung

Schreibt eine DXF-Block Symbol in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_BLOCK3,IN.Geometrie,30.0,BS1
ProzedurDXFOUT_WRITE_ATTRIB7 ! s tag, s txt, p pos, r rotation, i hali, i vali, s textsymbology
Beschreibung

Schreibt ein DXF-Attribute in die aktuelle Outputdatei. Ein DXF-Attribute kann nur direkt nach einem DXF-Block geschrieben werden. Das Schreiben eines DXF-Attributes wird nicht im DXF-Konfigurationseditor untestützt. Damit trotzdem DXF-Attribute mit dem DXF-Konfigurationseditor geschrieben werden können, muss in die Konfiguration \script\il2dxf.out inkludiert werden. Ein DXF-Attribut wir dann wie folgt geschrieben: Mit der Prozedur ATTRIBTAG1,<Tag> wird der Tag des DXF-Attributes gesetzt. Danach wird mit DXFOUT_WRITE_TEXT6 ein DXF-Text geschrieben. Ist der <Tag> gesetzt, schreibt DXFOUT_WRITE_TEXT6 ein DXF-Attribut anstatt einem DXF-Text.

Beispiel
... => DXFOUT_WRITE_ATTRIB7,'message','hello',IN.Geometrie,30.0,1,2,TS1
ProzedurDXFOUT_WRITE_TEXT6 ! s txt, p pos, r rotation, i hali, i vali, s textsymbology
Beschreibung

Schreibt einen DXF-Text in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_TEXT6,'hello',IN.Geometrie,30.0,1,2,TS1
ProzedurDXFOUT_WRITE_LINE2 ! l geometry, s linesymbology
Beschreibung

Schreibt einen DXF-Linie in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_LINE2,IN.GEOM,LS1
ProzedurDXFOUT_WRITE_POLYLINE2 ! l geometry, s polylinesymbology
Beschreibung

Schreibt einen DXF-Linie in die aktuelle Outputdatei.

Beispiel
... => DXFOUT_WRITE_LINE2,IN.GEOM,LS1
ProzedurDXFOUT_SET_PRIORITY1 ! i priority
Beschreibung

Es kann eine Priorität gesetzt werden, mit der die nachfolgenden Elemente in das Output-File geschrieben werden. Die Priorität bestimmt die Reihenfolge in der die Elemente in das Output-File geschrieben werden. Ein Element mit einer höheren Priorität wird nach einem Element mit einer tieferen Priorität in das Output-File geschrieben. Ein später geschriebenes Element wird über einem früher geschriebenen Element dargestellt.

Nur wirksam wenn auch DXFOUT_PARAM.PRIORITY => ON gesetzt ist.

Beispiel
... => DXFOUT_SET_PRIORITY1,10,DXFOUT_WRITE_LINE2,IN.GEOM,LS1
... => DXFOUT_SET_PRIORITY1,20,DXFOUT_WRITE_LINE2,IN.GEOM,LS2
ProzedurDXFOUT_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
DXFOUT_CLOSE
ProzedurDXFOUT_CREATE_BLOCK ! [][]
BeschreibungSpezial Prozedur zur Kreation eine Blocks. Kreiert eine Block-Definition im Outpufile. Für die Prozedur muss das OUT-Objekt gemäss dem Objektmodell für den Typ BLOCKDEF aufbereitet werden.
Beispiel
DXFOUT_CREATE_BLOCK

5.8. Skriptbeispiel

! Diese ICS Konfiguration kopiert alle von DXFIN
! gelesenen Objekte mit DXFOUT in in eine .dxf Datei.

|LICENSE \license\iltools.lic

MAP USER_INPUT1
   DIALOG => FILE ! FILE | FILES | DIRECTORY | STRING | ODBC
   MESSAGE => 'Enter .DXF Input File'
   FILE_FILTER => itf
   FILE_EXISTS => TRUE
   OPT => input
END_MAP

MAP USER_INPUT2
   DIALOG => DIRECTORY ! FILE | FILES | DIRECTORY | STRING | ODBC
   MESSAGE => 'Enter .DXF Output Directory'
   OPT => output
END_MAP

MAP DXFIN_PARAM
   STATISTICS => ON
   DEBUG      => OFF
END_MAP

MAP DXFOUT_PARAM
   STATISTICS => ON
   DEBUG      => OFF
END_MAP

MAP INPUT_SOURCES
   I1 => DXFIN,OPT.input
END_MAP

MAP INOUT
   I1 => COPY_INOUT0
END_MAP

|INCL \script\ilin.mod
|INCL \script\ilout.mod

PROCEDURE COPY_INOUT0
   ! copy IN map
   &IN &OUT MAPCOPY
   DXFOUT_WRITE_OBJECT
END_PROCEDURE

|INCL \script\run1.prg