IFC 4.3.2.20241204 (IFC4X3_ADD2) under development

Annex E
(informative)

Examples

E.3.2 - Csg Primitive

Example overview

The examples demonstrate the use of various geometric shape representation types to express a simple geometric form of a building element proxy. All example files uses the same basic structure of the data set and only differ in the geometric representation items used to define the same shape (a block of 1m x 1m x 2m).

The basic structure provided with the sample IFC files include:

  • the basic context of the data set provided by IfcProject and referenced entities:
  • the basic spatial structure of the project provided by a single IfcBuilding with referenced entities:
    • IfcLocalPlacement to create the local object coordinate system of the building being the parant coordinate system for all objects contained within the building;
    • IfcRelAggregates to link the IfcBuilding to the IfcProject as the uppermost item of the project spatial structure,
  • the proxy element having a shape representation provided by a single IfcBuildingElementProxy with referenced entities:
    • IfcLocalPlacement to create the local object coordinate system of the proxy relative to the object coordinate system of the building;
    • IfcProductDefinitionShape to define the geometry within the local object coordinate system.
basic_shape_fig-1.png 8,1 KB
Figure E.A — Basic shape of the proxy being a block

The same block geometry can be expressed using different 3D models. The example IFC files introduce the swept solid model, surface model, boundary representation model, constructive solid geometry model and the tesselated surface model.

 The block geometry can be expressed using the constructive solid geometry model, expressing it as a CSG primitive.

basic_shape_csg-1.png
Figure E.B shows the block geometry represented by an CSG primitive.

IFC-SPF source

ISO-10303-21;
HEADER;
/* NOTE a valid model view name has to be asserted, replacing 'notYetAssigned' ----------------- */
FILE_DESCRIPTION(
    ( 'ViewDefinition [notYetAssigned]'
     ,'Comment [manual creation of example file]'
	)
	,'2;1');
/* NOTE standard header information according to ISO 10303-21 ---------------------------------- */
FILE_NAME(
	'csg-primitive.ifc',
	'2012-06-15T18:00:00',
	('redacted'),
	('redacted'),
	'redacted',
	'redacted',
	'reference file created for the IFC4 specification');
FILE_SCHEMA(('IFC4X3_DEV_7e95fe8'));
ENDSEC;

DATA;
/* --------------------------------------------------------------------------------------------- */
/* general entities required for all IFC data sets, defining the context for the exchange ------ */
#100= IFCPROJECT('0xScRe4drECQ4DMSqUjd6d',#110,'proxy with CSG',$,$,$,$,(#201),#301);

/* single owner history sufficient if not otherwise required by the view definition ------------ */
/* provides the person and application creating the data set, and the time it is created ------- */
#110= IFCOWNERHISTORY(#111,#115,$,.ADDED.,1320688800,$,$,1320688800);
#111= IFCPERSONANDORGANIZATION(#112,#113,$);
#112= IFCPERSON($,'redacted','redacted',$,$,$,$,$);
#113= IFCORGANIZATION($,'redacted',$,$,$);
#115= IFCAPPLICATION(#113,'redacted','redacted','redacted');

/* each IFC data set containing geometry has to define a geometric representation context ------ */
/* the attribute 'ContextType' has to be 'Model' for 3D model geometry ------------------------- */
#201= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#210,$);
/* the attribute 'ContextIdentifier' has to be 'Body' for the main 3D shape representation ----- */
#202= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#201,$,.MODEL_VIEW.,$);
#210= IFCAXIS2PLACEMENT3D(#901,$,$);

/* each IFC data set containing geometry has to define at absolute minimum length and angle ---- */
/* here length is milli metre as SI unit, and plane angle is 'degree' as non SI unit ----------- */
#301= IFCUNITASSIGNMENT((#311,#312));
#311= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#312= IFCCONVERSIONBASEDUNIT(#313,.PLANEANGLEUNIT.,'degree',#314);
#313= IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#314= IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293),#315);
#315= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);

/* each IFC data set containing elements in a building context has to include a building ------- */
/* at absolute minimum (could have a site and stories as well) --------------------------------- */
#500= IFCBUILDING('2FCZDorxHDT8NI01kdXi8P',$,'Test Building',$,$,#511,$,$,.ELEMENT.,$,$,$);
/* if the building is the uppermost spatial structure element it defines the absolut position -- */
#511= IFCLOCALPLACEMENT($,#512);
/* no rotation - z and x axes set to '$' are therefore identical to "world coordinate system" -- */ 
#512= IFCAXIS2PLACEMENT3D(#901,$,$);
/* if the building is the uppermost spatial structure element it is assigned to the project ---- */
#519= IFCRELAGGREGATES('2YBqaV_8L15eWJ9DA1sGmT',$,$,$,#100,(#500));

/* shared coordinates - it is permissible to share common instances to reduce file size -------- */
#901= IFCCARTESIANPOINT((0.,0.,0.));
#902= IFCDIRECTION((1.,0.,0.));
#903= IFCDIRECTION((0.,1.,0.));
#904= IFCDIRECTION((0.,0.,1.)); 
#905= IFCDIRECTION((-1.,0.,0.));
#906= IFCDIRECTION((0.,-1.,0.));
#907= IFCDIRECTION((0.,0.,-1.));

/* --------------------------------------------------------------------------------------------- */
/* proxy element with CSG shape representation, assigned to the building ----------------------- */
#1000= IFCBUILDINGELEMENTPROXY('1kTvXnbbzCWw8lcMd1dR4o',$,'P-1','sample CSG',$,#1001,#1010,$,$);
/* proxy element placement relative to the building -------------------------------------------- */
#1001= IFCLOCALPLACEMENT(#511,#1002);
/* set local placement to 1 meter on x-axis, and 0 on y, and 0 on z axes ----------------------- */
/* no rotation - z and x axes set to '$' are therefore identical to those of building ---------- */ 
#1002= IFCAXIS2PLACEMENT3D(#1003,$,$);
#1003= IFCCARTESIANPOINT((1000.,0.,0.));
/* proxy element shape representation ---------------------------------------------------------- */
#1010= IFCPRODUCTDEFINITIONSHAPE($,$,(#1020));
/* a single shape representation of type 'CSG' is included ------------------------------------- */
#1020= IFCSHAPEREPRESENTATION(#202,'Body','CSG',(#1021));
/* CSG representation consisting of a single primitive  ---------------------------------------- */
/* box, 1m width, 1m depth, 2m height ---------------------------------------------------------- */
#1021= IFCCSGSOLID(#1022);
#1022= IFCBLOCK(#1023,1000.,1000.,2000.);
#1023= IFCAXIS2PLACEMENT3D(#1024,$,$);
#1024= IFCCARTESIANPOINT((-500.,-500.,0.));

/* proxy element assigned to the building ------------------------------------------------------ */
#10000=IFCRELCONTAINEDINSPATIALSTRUCTURE('2TnxZkTXT08eDuMuhUUFNy',$,'Physical model',$,(#1000),#500);

ENDSEC;
END-ISO-10303-21;

Edit on Github


Is this page difficult to understand? Let us know!