Ce blog est la troisième partie d’une série de blogs sur l'écriture d'un IFC sous format texte en s'appuyant sur le schéma IFC4. Précédemment, nous avons écrit un modèle IFC où nous avons défini un projet avec une hiérarchie spatiale (voir partie 1), puis ajouté un élément physique (un mur) et défini une géométrie simple (voir partie 2).
Dans cette partie, nous aborderons l’enrichissement sémantique de notre mur, en lui attribuant un matériau, des quantités, des propriétés et une classification.
Matériau
Comme vous l’avez peut-être remarqué, le matériau d’un élément physique n’est pas défini au niveau des attributs, mais plutôt déclaré comme une entité indépendante IfcMaterial, et associé via la relation IfcRelAssociatesMaterial à un objet physique (instance) ou à un type.
IFCMATERIAL(Name,?Description,?Category)
Name : Nom du matériau
?Description : Définition du matériau en termes plus descriptifs, donnés par les attributs Name ou Category.
?Category : Définition de la catégorie du matériau, en termes plus généraux que ceux donnés par l’attribut Name.
Pour ajouter le matériau, nous ajouterons la ligne suivante au fichier :
#41=IFCMATERIAL('CONCRETE',$,$);
L’IFC prend en charge les constructions de matériaux multicouches via IfcMaterialLayerSet.
Pour associer le matériau au mur, nous utiliserons l’entité IfcRelAssociatesMaterial.
Le graphique ci-dessous illustre les connexions.
IFCRELASSOCIATESMATERIAL(GlobalId,?OwnerHistory,?Name,?Description,?RelatedObjects,?RelatingMaterial)
… Voir définitions précédentes.
?RelatedObjects : Peut pointer vers divers types d’entités, mais dans notre cas, cible les éléments physiques auxquels le matériau doit être associé.
?RelatingMaterial : Le matériau à associer à l’élément physique.
#42=IFCRELASSOCIATESMATERIAL('2p34bAc255juYWkQtA_Slu',$,$,$,(#39),#41);
Quantités
Les quantités sont des ensembles de mesures dérivées d’éléments physiques (IfcWall, IfcDoor…) ou spatiaux (IfcBuilding, IfcSpace).
Comme pour les matériaux, les quantités sont associées aux éléments physiques via une entité relationnelle.
Dans notre exemple, nous mettrons en œuvre des quantités issues des ensembles de quantités “standards” définis dans le schéma IFC4 (voir la liste complète ici).
Puisque nous traitons d’un mur dans cette démonstration, nous utiliserons certaines des quantités de Qto_WallBaseQuantities.
Le graphique ci-dessous illustre les entités et connexions nécessaires pour attribuer des valeurs de quantité à un élément IFC.
Les quantités individuelles sont définies à l’aide de IfcQuantityLength, IfcQuantityArea, IfcQuantityVolume …
Prenons l’exemple de IfcQuantityLength, à travers lequel nous définirons la Longueur du mur. La géométrie du mur a été définie dans la partie 2.
IFCQUANTITYLENGTH(Name,?Description,?Unit,CountValue,?Formula)
Name : Nom de la quantité.
?Description : Explication supplémentaire éventuellement donnée à la quantité.
?Unit : Attribution optionnelle d’une unité. Si aucune unité n’est spécifiée, l’unité du projet est utilisée.
CountValue : Valeur de la quantité.
?Formula : Formule utilisée pour calculer la quantité, à titre informatif uniquement.
#59=IFCQUANTITYLENGTH('Length',$,$,5.,$);
Les autres quantités peuvent être écrites de manière similaire :
#60=IFCQUANTITYLENGTH('Width',$,$,0.1,$);#61=IFCQUANTITYLENGTH('Height',$,$,3.,$);#62=IFCQUANTITYAREA('GrossSideArea',$,$,15.,$);#63=IFCQUANTITYVOLUME('GrossVolume',$,$,1.5,$);
Avant d’être attachées à un élément, les quantités individuelles sont regroupées dans un ensemble de quantités à l’aide de IfcElementQuantity.
#64=IFCELEMENTQUANTITY('0O422jvHHRKwhHTKmWGIrF',$,'Qto_WallBaseQuantities',$,$,(#59,#60,#61,#62,#63));
L’entité relationnelle IfcRelDefinesByProperties permet d’attribuer des ensembles de propriétés et de quantités aux éléments.
#65=IFCRELDEFINESBYPROPERTIES('30VwLSROT8iOd7aMTx0Nhs',$,$,$,(#39),#64);
Propriétés
Les propriétés peuvent être attribuées de manière similaire aux quantités, selon le graphique ci-dessous.
Dans notre cas, les propriétés sont attribuées sous forme de valeurs uniques IfcPropertySingleValue. Cependant, d’autres types de valeurs complexes sont pris en charge par la norme IFC.
Nous ajouterons des propriétés issues du groupe de propriétés standardisées Pset_WallCommon
#66=IFCPROPERTYSET('0O422jvHHRKwhHTKmWGIGH',$,'Pset_WallCommon',$,(#67,#68));#67=IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.T.),$);#68=IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$);#69=IFCRELDEFINESBYPROPERTIES('30VwLSROT8iOd7aMTx0NPM',$,$,$,(#39),#66);
Nous ajouterons également un ensemble de propriétés personnalisé avec des propriétés personnalisées.
#70=IFCPROPERTYSET('2RKwhHTKmWGIGH0O422jvG',$,'Custom_Pset',$,(#71,#72,#73));#71=IFCPROPERTYSINGLEVALUE('Property#1',$,IFCTEXT('value#1'),$);#72=IFCPROPERTYSINGLEVALUE('Property#2',$,IFCBOOLEAN(.T.),$);#73=IFCPROPERTYSINGLEVALUE('Property#3',$,IFCLENGTHMEASURE(12.),$);#74=IFCRELDEFINESBYPROPERTIES('1d7aMTx0NPM30VwLSRNT8i',$,$,$,(#39),#70);
Classifications
Dans l’IFC, une classification est utilisée pour organiser les objets en classes ou catégories selon un objectif commun ou en fonction de leurs caractéristiques communes.
Le graphique ci-dessous illustre une façon d'associer une classification à un mur.
IfcCalssification identifie le système ou la source de classification auquel une référence de classification fait référence.
IfcClassification(?Source,?Edition,?EditionDate,Name,?Description,?Location,?ReferenceTokens)
?Source : Source (ou éditeur) de cette classification
?Edition : Édition ou version du système de classification
?EditionDate : Date à laquelle l’édition de la classification est devenue valide.
Name : Nom ou étiquette par lequel la classification est normalement connue.
?Description : Additional description provided for the classification
?Location : Identifiant ou localisateur de ressource (URI, URN ou URL) pour la classification.
?ReferenceTokens : Délimiteurs utilisés pour marquer les limites des sous-chaînes dans une référence de classification.
Dans notre exemple, nous allons classer le mur en utilisant le système Uniformat II.
#75=IFCCLASSIFICATION('ASTM',$,$,'UNIFORMAT II',$, $, $);
IfcClassificationReference est une référence dans un système ou une source de classification (voir IfcClassification) pour une clé de classification spécifique.
IfcClassificationReference(?Location,?Identification,?Name,?ReferencedSource,?Description,?Sort)
?Location : Lien URI direct vers le système ou la source de classification pour lier la clé de classification.
?Identification : Clé spécifique pour les références aux éléments de classification := B2010.
?Name : Désignation interprétable par l’utilisateur d’une notation de classification.
?ReferencedSource : Système ou source de classification référencé.
?Description : Description de la référence de classification à titre informatif.
?Sort : Identifiant optionnel pour trier l’ensemble des références de classification dans la source référencée := $.
#76=IFCCLASSIFICATIONREFERENCE($,'B2010', 'Exterior Walls', #75,$ , $);
L'ajout de la ligne ci-dessus conclu l’écriture de notre modèle l’IFC.
Validation
buildingSMART International met à disposition un service de validation en ligne et libre d'accès. Cette plateforme permet de tester la conformité technique (syntaxe, schéma) et normative des fichiers IFC.
Ci-après le résultat de la version finale du fichier (voir fichiers joints pour le télécharger)
