Les liaisons Python IfcOpenShell commencent

Chose que tu veux faire

Comme le titre l'indique, IfcOpenShell est une bibliothèque open source qui peut analyser IFC, écrit à l'origine en C ++, mais a également des liaisons Python. Je vais. Parmi les outils IfcOpenShell, il y a IfcConvert, qui permet l'extraction de géométrie IFC. Diverses conversions de format telles que OBJ, IGES, DAE et STL sont possibles, et seules des formes spécifiques peuvent être extraites par GUID ou par nom. C'est généralement suffisant, mais lorsque vous essayez de faire beaucoup avec les informations d'attributs et les formes d'IFC, vous voudrez certainement jouer avec des données 3D telles que la géométrie et la topologie (bien que ce ne soit généralement pas le cas).

Dans ce cas, il est courant d'utiliser une bibliothèque (noyau CAD) appelée OpenCASCADE, qui est en fait incluse dans la bibliothèque. Cette bibliothèque est une bibliothèque open source établie de longue date utilisée pour FreeCAD etc., et semble fournir une fonction de modélisation 3D paramétrique.

À propos, les bibliothèques d'analyse IFC sont IFC ++ et xBIM Toolkit pour l'open source et [IFC Engine] pour les paiements. ](Http://www.ifcbrowser.com/) et apstex IFC Framework (certains sont gratuits).

Analyse IFC avec IfcOpenShell et dessin avec Python OCC

Préparation

En raison de la bibliothèque, nous préparerons un environnement Python 3.5. Dans mon cas, j'ai installé Anaconda et utilisé conda pour installer les bibliothèques requises. Il semble que le Python pris en charge soit jusqu'à 3,5, alors utilisez-le comme environnement et installez la version correspondante de la liaison Python d'OpenCASCADE pythonocc. Cela peut être un facteur de l'environnement réseau, cela échouera un peu, il peut donc être préférable de construire à partir du code source.

conda install -c conda-forge -c oce -c dlr-sc -c ifcopenshell ifcopenshell
conda install -c conda-forge -c dlr-sc -c pythonocc -c oce pythonocc-core==0.17.3

Préparez également un fichier IFC approprié. ifcOpenHouse est un bon choix.

Acquisition de forme depuis IFC

La géométrie IFC est décomposée en [ʻIfcRepresentationItem`] complexe (http://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ifcgeometryresource/lexical/ifcrepresentationitem.htm). Plus précisément, il comprend des expressions de forme, des styles et des expressions de texture tels que le modèle de surface (Tessellatiob, etc.) et le modèle solide (CGS, B-reps, balayage, etc.). IfcOpenShell cache cette complexité et la traduit dans toutes les représentations de frontières unifiées (B-reps). De plus, il génère également MESH pour le rendu.

À propos, la modélisation de forme réelle en BIM semble dépendre de ce qu'on appelle le «noyau», comme ASIC et Paradsolid. Des expressions complexes telles que des découpes et des ouvertures peuvent être facilement modélisées.

Obtenez MESH

Voici l'exemple le plus simple.

import ifcopenshell
from ifcopenshell import geom

def read_geom(ifc_path):
    ifc_file = ifcopenshell.open(ifc_path)
    settings = geom.settings()

    for ifc_entity in ifc_file.by_type("IfcWall"):
        shape = geom.create_shape(settings, ifc_entity)
        #Obtenez le maillage
        ios_vertices = shape.geometry.verts
        ios_edges = shape.geometry.edges
        ios_faces = shape.geometry.faces

        #Essayez d'imprimer normalement
        print(ios_vertices)
        print(ios_edges)
        print(ios_faces)

geom.setting () est une option de conversion qui, par défaut, produit un maillage de sommets, d'arêtes et de faces. Vous pouvez obtenir la forme de l'élément IFC indiqué par ifc_entry avec geom.create_shape (settings, ifc_entry). Les sommets sont des triplets composés de x, y, z, les arêtes les relient et la face se compose de trois sommets et arêtes.

Gérez directement les répétitions B.

Dans ce qui précède, nous avons obtenu la représentation de maillage qui peut être rendue directement, mais nous pouvons également obtenir la représentation de frontière B-reps (représentation de frontière) directement. Spécifiez les paramètres suivants dans geom.setting (). Dans ce qui suit, j'essaye de l'enregistrer dans un fichier.

settings = geom.settings()
settings.set(settings.USE_BREP_DATA, True)
occ_shape = shape.geometry.brep_data

# IfcOpenShell generate an Open Cascade BREP 
with open("IfcOpenShellSamples/brep_data", "w") as file:
    file.write(occ_shape)

Le format de sortie semble être Open Cascade BREP Format.

Dessinez en utilisant pythonOCC comme suit. Je trouve que la couleur est étrange, mais d'abord, c'est comme ça.

import ifcopenshell
from ifcopenshell import geom

# Specify to return pythonOCC shapes from ifcopenshell.geom.create_shape()
settings = geom.settings()
settings.set(settings.USE_PYTHON_OPENCASCADE, True)

# Initialize a graphical display window
occ_display = geom.utils.initialize_display()
ifc_file = ifcopenshell.open("ifcOpenHouse.ifc")


products = ifc_file.by_type("IfcProduct")
for product in products:
    if product.is_a("IfcOpeningElement"): continue
    if product.Representation:
        shape = geom.create_shape(settings, product).geometry
        display_shape = geom.utils.display_shape(shape)
        if product.is_a("IfcPlate"):
            # Plates are the transparent parts of the window assembly
            # in the IfcOpenHouse model
            geom.utils.set_shape_transparency(display_shape, 0.8)

#Il disparaîtra bientôt, alors bouclons ici
ifcopenshell.geom.utils.main_loop()

image.png

référence

  1. Using IfcOpenShell to parse IFC files with Python
  2. IfcOpenShell – Read geom as mesh
  3. IfcOpenShell – Read geom as brep

Recommended Posts

Les liaisons Python IfcOpenShell commencent
Commencez avec Python! ~ ② Grammaire ~
a commencé python
Commencez avec Python! ~ ① Construction de l'environnement ~
Lien pour commencer avec python
Comment démarrer avec Python
Démarrez avec Python avec Blender
J'ai commencé Python
Commençons avec TopCoder en Python (version 2020)
Comment les débutants en Python commencent avec Progete
[Blender x Python] Commençons avec Blender Python !!
Jeu à la main en Python (commençons avec AtCoder?)
Zubu amateur veut démarrer Python
[Cloud102] # 1 Premiers pas avec Python (première partie des premiers pas de Python)
Django 1.11 a démarré avec Python3.6
Démarrer Jupyter Notebook
1.1 Premiers pas avec Python
Premiers pas avec Python
[Python3] Obtenez la différence de date
Démarrez avec MicroPython
Obtenir la date en Python
Obtenez date avec python
Démarrez avec Mezzanine
Premiers pas avec Python
python Obtenir l'heure actuelle
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de démarrer avec le script python de blender_Partie 02
Obtenez des commentaires YouTube en Python
Introduction aux fonctions Python
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Obtenez la chronologie Twitter avec Python
Commencez avec influxDB + Grafana
Connaissances minimales pour démarrer avec le module de journalisation Python
Obtenez des données Youtube avec python
Premiers pas avec Python Django (1)
Lancez-vous avec Django! ~ Tutoriel ④ ~
Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Obtenir la taille du terminal en Python
[Python] Récupérez le mois précédent
Obtenir explicitement EOF en python
Obtenir l'ID de thread avec python
Python lancé par des programmeurs C
Introduction à Python Django (6)
[python] Obtenir le quotient et le surplus
Obtenez des stocks avec Python
Obtenez des notes Evernote en Python
python> Obtenir la sous-chaîne> imprimer le numéro de série [5:10] / imprimer le numéro de série [5: -1]
Obtenir le répertoire personnel avec python
Obtenir un événement de clavier avec python
(Python) Obtenir le montant de facturation AWS
Python --bitflyer Obtenir le contenu du chat
Premiers pas avec Python Django (5)
Obtenez des informations sur l'alambic avec Python
Python> dictionnaire> get ()> valeur facultative
Obtenez des synonymes japonais avec Python
Premiers pas avec le framework Python Django sur Mac OS X