11. Modul IFCOUT - Industry Foundation Classes IFC schreiben

11.1. Allgemeines

Mit dem Modul können ICS Objekte nach IFC-Files - STEP Physical File (SPF) *.ifc - geschrieben werden.

Das Modul basiert auf dem IFC SDK der Open Design Alliance (ODA).

Der Modul wird mit:

|INCL \script\ODAIFCOUT.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

11.2. Parametermap IFCOUT_PARAM

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

Parameterreq/optBeschreibung
VERSIONoIFC2x3|IFC4. IFC Version des Outputfiles. Default ist IFC4 .
GEOM_ORIGINo<x>,<y>. Geometrie-Origin zu dem die Geometrien der Objekte relativ mit einem Offset geschrieben werden.
STROKEo<real>. Strokewert mit dem Kreisbögen in Liniensegmente aufgelöst werden.
STATISTICSoON oder OFF. Default OFF. Statistik anzeigen ein oder aus.

11.3. Objektmodell

Für das Schreiben mit dem Modul können im OUT-Objekt folgende Komponenten gesetzt werden:

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

IFC Class des Objektes. Ist die Klasse nicht definiert, wird eine Klasse IFCBUILDINGELEMENTPROXY geschrieben.

OUT.IFC_NAME(s) o

Name des Objektes.

OUT.IFC_TAG(s) o

Tag des Objektes.

OUT.IFC_GEOM(g,li,m) o

Geometrie des Objektes. (siehe unten)

OUT.IFC_PROFILE(s) o

CIRCLE|ELLIPSE|RECTANGLE. Profilname für die Geometrie des Objektes.

OUT.IFC_GEOM_LENGTH(r) o

Länge des Objektes. Mit Profil, die Länge des Profiles.

OUT.IFC_GEOM_WIDTH(r) o

Breite des Objektes. Mit Profil, die Breite des Profiles.

OUT.IFC_GEOM_HEIGHT(r) o

Höhe des Objektes. Mit Profil, die Höhe des Profiles.

OUT.IFC_GEOM_XSCALE(r)oDie Skalierung des Objektes in die x-Richtung.
OUT.IFC_GEOM_YSCALE(r)oDie Skalierung des Objektes in die y-Richtung.
OUT.IFC_GEOM_ZSCALE(r)oDie Skalierung des Objektes in die z-Richtung.
OUT.IFC_GEOM_XOFFSET(r)oEin Offset des Objektes in die x-Richtung.
OUT.IFC_GEOM_YOFFSET(r)oEin Offset des Objektes in die y-Richtung.
OUT.IFC_GEOM_ZOFFSET(r)oEin Offset des Objektes in die z-Richtung.
OUT.IFC_GEOM_ROTATION(r)oEin Drehwinkel des Objektes.
OUT.IFC_COLOR(s)oR/G/B . Farbe des Objektes. z.B. 125/233/52
OUT.IFC_BUILDINGELEMENTPROXYTYPE(s)oFile mit abolutem oder relativen Pfad mit einem Objekttype zum inkludieren im Output-File.
OUT.IFC_PROPERTYSETS(li)oListe von Propertysets des Objektes. Jedes Propertyset ist eine Map.
OUT.*(*)oWeitere Attribute zur IFC-Klasse, wie diese in der Beschreibung der IFC KLassen aufgeführt sind. Siehe zum Beispiel https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/
Inhalt für OUT.IFC_GEOM

OUT.IFC_GEOM kann folgendes beinhalten:

InhaltBeschreibung
OUT.IFC_GEOM (g) Eine einzelne Geometrie
OUT.IFC_GEOM (li of g) Eine Liste von Geometrien
OUT.IFC_GEOM (m) Eine Map mit den Geometrieattributen wie IFC_GEOM, IFC_GEOM_LENGTH, etc.
OUT.IFC_GEOM (li of m) Eine Liste von Maps mit den Geometrieattributen wie IFC_GEOM, IFC_GEOM_LENGTH, etc.

Mit einer Liste von Maps können unterschiedliche Geometrien in unterschiedlichen Ausprägungen für ein Objekt geschrieben werden. Zum Beispil bei einer Leitung: die Achse als Linien in einer bestimmten Farbe, das Profil als Körper in einer anderen Farbe.

Listenelemente für OUT.IFC_PROPERTYSETS

Beinhaltet eine Liste vom Maps mit den Properiysets.

Jede Map eines Propertysets beinhaltet einen Namen und eine Map mit den einzelnen Properites als Dupel Name/Wert.

Komponentereq/optBeschreibung
<m>.IFC_NAME(s)rName des Propertysets.
<m>.IFC_PROPERTYSINGLEVALUES(m)rMap mit den Propertysinglevalues des Propertysets. Jedes Propertysinglevalue mit Name und Wert in der Map.

11.4. Exportierte Prozeduren und Methoden

ProzedurIFCOUT_OPEN ! [s output][]
BeschreibungÖffnet das IFC-File <output> und initialisiert den Modul. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'c:\temp\test.ifc' IFCOUT_OPEN
ProzedurIFCOUT_WRITE_OBJECT0 ! [][]
BeschreibungSchreibt ein Objekt in das Outputfile. Das OUT-Objekt muss gemäss dem Objektmodell vorbereitet sein. Die id des Objektes wird in IFCOUT_VAR.IFC_OBJECT_ID abgelegt..
Beispiel
&OUT MAPCLEAR

'IFCBUILDINGELEMENTPROXY'  => OUT.IFC_CLASS
IN.Geometrie               => OUT.IFC_GEOM
'255/0/0'                  => OUT.IFC_COLOR

IFCOUT_WRITE_OBJECT

DISPLAY IFCOUT_VAR.IFC_OBJECT_ID
ProzedurIFCOUT_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
IFCOUT_CLOSE
ProzedurIFCOUT_SET_DIMENSION2 ! r length, r width
Beschreibung

Setzt OUT.IFC_GEOM_LENGTH , OUT.IFC_GEOM_WIDTH

Beispiel

Anwendung mit SET_PARAM .

2.0 SET_PARAM
1.5 SET_PARAM
IFCOUT_SET_DIMENSION2

Anwendung in einer Rule.

MAP INOUT
  :
  I1,<topic>,<table> => ...,IFCOUT_SET_DIMENSION2,2.0,1.5,...
  :
END_MAP

Weitere Methoden mit analoger Anwendung:

ProzedurIFCOUT_SET_HEIGHT1 ! r height
ProzedurIFCOUT_SET_ROTATION1 ! r rotation
ProzedurIFCOUT_SET_GEOMETRY1 ! g geometry
ProzedurIFCOUT_SET_SCALE3 ! r xscale, r yscale, z zscale
ProzedurIFCOUT_SET_OFFSET3 ! r xoffset, r yoffset, z zoffset
ProzedurIFCOUT_SET_COLOR1 ! s rgb-color
ProzedurIFCOUT_SET_PROFILE1 ! s profile
ProzedurIFCOUT_SET_IFCBUILDINGELEMENTPROXYTYPE1 ! s ifc-file

Weitere Methoden zur Anwendung in Scripts.

ProzedurIFCOUT_WRITE_CLASS ! [m *o] [i id]
Beschreibung

Schreibt ein Objekt. Das Objekt muss enstprechend dem Objektmodell im o-Objekt gesetzt werden. Die id des Objektes wird zurückgeliefert.

Beispiel
&OUT IFCOUT_WRITE_CLASS => VAR.IFC_ID
ProzedurIFCOUT_WRITE_IFCRELAGGREGATES ! [s RelatingObject, s RelatedObjects] []
Beschreibung

Schreibt ein Objekt der Klasse IFCRELAGGREGATES für die Beziehung von Objekten.

Beispiel
'15' '16,17,18' IFCOUT_WRITE_IFCRELAGGREGATES
ProzedurIFCOUT_WRITE_IFCPROPERTYSET ! [s RelatedObjects] []
Beschreibung

Schreibt zu Objekte Propertysets der Klasse IFCPROPERTYSET mit Values der Klasse IFCPROPERTYSINGLEVALUE. Die Propertysets müssen gemäss dem Objektmodell im OUT-Objekt gesetzt werden.

Beispiel
'15' IFCOUT_WRITE_IFCPROPERTYSET

11.5. Skriptbeispiel

Beispiel ohne Datenbankanbindung.

! Diese ICS Konfiguration kopiert einige von il2in.mod
! gelesenen Objekte mit odaifcout.mod in eine ifc-Datei.

|LICENSE \license\iltools.lic

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

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

MAP IL2IN_PARAM
   LOG_TABLE       => ON
   TRACE           => OFF
   STATISTICS      => ON
   VALUE_CHECK     => OFF
   MODELS          => XTF
   MODEL_NAME      => OFF
   FORCE_COMPILE   => OFF
END_MAP

MAP IFCOUT_PARAM
   STATISTICS   => ON
END_MAP

MAP INPUT_SOURCES
   I1 => IL2IN,OPT.input
END_MAP

MAP INOUT
   I1                => IN.CLASS
   I1,LKPunkt        => P,CIRCLE,D,1.0,1.0,H,1.0,G,IN.SymbolPos,IFCOUT_WRITE_OBJECT0
   I1,LKLinie        => D,1.0,1.0,H,1.0,G,IN.Linie,IFCOUT_WRITE_OBJECT0
   I1,LKFlaeche      => H,1.0,G,IN.Flaeche,IFCOUT_WRITE_OBJECT0
   I1,*              => OFF
END_MAP

MAP MACRO
   P => IFCOUT_SET_PROFILE1
   D => IFCOUT_SET_DIMENSION2
   H => IFCOUT_SET_HEIGHT1
   G => IFCOUT_SET_GEOMETRY1
END_MAP

|INCL \script\il2in.mod
|INCL \script\odaifcout.mod
|INCL \script\run1.prg