IfcOpenShell-Python-Bindungen werden gestartet

Was du machen willst

Wie der Titel schon sagt, ist IfcOpenShell eine Open-Source-Bibliothek, die IFC analysieren kann, ursprünglich in C ++ geschrieben, aber auch über Python-Bindungen verfügt. Ich werde. Unter den IfcOpenShell-Werkzeugen befindet sich IfcConvert, das die Extraktion der IFC-Geometrie ermöglicht. Verschiedene Formatkonvertierungen wie OBJ, IGES, DAE und STL sind möglich, und nur bestimmte Formen können nach GUID oder Name extrahiert werden. Dies ist im Allgemeinen ausreichend, aber wenn Sie versuchen, viel mit den Attributinformationen und -formen von IFC zu tun, sollten Sie auf jeden Fall mit 3D-Daten wie Geometrie und Topologie herumspielen (obwohl dies normalerweise nicht der Fall ist).

In diesem Fall wird häufig eine Bibliothek (CAD-Kernel) namens OpenCASCADE verwendet, die tatsächlich in der Bibliothek enthalten ist. Diese Bibliothek ist eine seit langem etablierte Open-Source-Bibliothek, die für FreeCAD usw. verwendet wird, und scheint eine parametrische 3D-Modellierungsfunktion bereitzustellen.

IFC-Analysebibliotheken sind übrigens IFC ++ und xBIM Toolkit für Open Source und [IFC Engine] für kostenpflichtige. ](Http://www.ifcbrowser.com/) und apstex IFC Framework (einige sind kostenlos).

IFC-Analyse mit IfcOpenShell und Zeichnen mit Python OCC

Vorbereitung

Aufgrund der Bibliothek werden wir eine Python 3.5-Umgebung vorbereiten. In meinem Fall habe ich Anaconda installiert und mit conda die erforderlichen Bibliotheken installiert. Es scheint, dass das unterstützte Python bis zu 3.5 ist. Verwenden Sie es also als Umgebung und installieren Sie die entsprechende Version von OpenCASCADEs Python-Bindung pythonocc. Es kann ein Faktor der Netzwerkumgebung sein, es wird ziemlich oft fehlschlagen, daher ist es möglicherweise besser, aus dem Quellcode zu erstellen.

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

Bereiten Sie außerdem eine entsprechende IFC-Datei vor. ifcOpenHouse ist eine gute Wahl.

Formerkennung von IFC

Die IFC-Geometrie ist in komplexe [IfcRepresentationItem] unterteilt (http://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ifcgeometryresource/lexical/ifcrepresentationitem.htm). Insbesondere Formausdrücke, Stile, Texturausdrücke usw. wie Oberflächenmodell (Tessellatiob usw.) und Volumenmodell (CGS, B-Wiederholungen, Sweep usw.). IfcOpenShell verbirgt diese Komplexität und übersetzt sie in alle einheitlichen Grenzdarstellungen (B-Wiederholungen). Darüber hinaus wird MESH zum Rendern generiert.

Übrigens scheint die tatsächliche Formmodellierung in BIM von dem sogenannten "Kernel" wie ASIC und Paradsolid abzuhängen. Komplexe Ausdrücke wie Ausschnitte und Öffnungen können einfach modelliert werden.

Holen Sie sich MESH

Unten finden Sie das einfachste Beispiel.

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)
        #Holen Sie sich das Netz
        ios_vertices = shape.geometry.verts
        ios_edges = shape.geometry.edges
        ios_faces = shape.geometry.faces

        #Versuchen Sie, normal zu drucken
        print(ios_vertices)
        print(ios_edges)
        print(ios_faces)

geom.setting () ist eine Konvertierungsoption, die standardmäßig ein Netz aus Scheitelpunkten, Kanten und Flächen erzeugt. Sie können die Form des durch ifc_entry angegebenen IFC-Elements mit geom.create_shape (settings, ifc_entry) abrufen. Die Eckpunkte sind Drillinge, die aus x, y, z bestehen, die Grate verbinden sie, und die Fläche besteht aus drei Eckpunkten und Graten.

Behandeln Sie B-Wiederholungen direkt.

Oben haben wir die Netzdarstellung erhalten, die direkt gerendert werden kann, aber wir können auch die Grenzdarstellung B-Wiederholungen (Grenzdarstellung) direkt erhalten. Geben Sie die folgenden Parameter in geom.setting () an. Im Folgenden versuche ich, es in einer Datei zu speichern.

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)

Das Ausgabeformat scheint [Open Cascade BREP Format] zu sein (https://www.opencascade.com/doc/occt-6.7.0/overview/html/occt_brep_format.html).

Zeichnen Sie mit pythonOCC wie folgt. Ich finde die Farbe seltsam, aber vor allem ist es so.

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)

#Es wird bald verschwinden, also lasst uns hier eine Schleife machen
ifcopenshell.geom.utils.main_loop()

image.png

Referenz

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

Recommended Posts

IfcOpenShell-Python-Bindungen werden gestartet
Beginnen Sie mit Python! ~ ② Grammatik ~
Python gestartet
Beginnen Sie mit Python! ~ ① Umweltbau ~
Link, um mit Python zu beginnen
Erste Schritte mit Python
Beginnen Sie mit Python mit Blender
Ich habe Python gestartet
Beginnen wir mit TopCoder in Python (Version 2020)
Wie Python-Anfänger mit Progete beginnen
[Blender x Python] Beginnen wir mit Blender Python !!
Python-Handspiel (Beginnen wir mit AtCoder?)
Zubu Amateur will Python starten
[Cloud102] # 1 Erste Schritte mit Python (Teil 1 Python Erste Schritte)
Django 1.11 wurde mit Python3.6 gestartet
Starten Sie Jupyter Notebook
1.1 Erste Schritte mit Python
Erste Schritte mit Python
[Python3] Ermittelt die Datumsdifferenz
Beginnen Sie mit MicroPython
Holen Sie sich Datum in Python
Holen Sie sich ein Date mit Python
Beginnen Sie mit Mezzanine
Erste Schritte mit Python
Python Aktuelle Zeit abrufen
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Holen Sie sich YouTube-Kommentare in Python
Einführung in Python-Funktionen
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Holen Sie sich Twitter-Timeline mit Python
Beginnen Sie mit influxDB + Grafana
Mindestkenntnisse, um mit dem Python-Protokollierungsmodul zu beginnen
Holen Sie sich Youtube-Daten mit Python
Erste Schritte mit Python Django (1)
Fangen Sie mit Django an! ~ Tutorial ④ ~
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Holen Sie sich die Terminalgröße in Python
[Python] Holen Sie sich den Vormonat
Holen Sie sich explizit EOF in Python
Holen Sie sich die Thread-ID mit Python
Python wurde von C-Programmierern gestartet
Einführung in Python Django (6)
[Python] Quotient und Überschuss erhalten
Holen Sie sich Lager mit Python
Holen Sie sich Evernote-Notizen in Python
Python> Teilzeichenfolge abrufen> Seriennummer drucken [5:10] / Seriennummer drucken [5: -1]
Holen Sie sich das Home-Verzeichnis mit Python
Holen Sie sich Tastaturereignis mit Python
(Python) AWS-Rechnungsbetrag abrufen
Python --bitflyer Chat-Inhalte abrufen
Erste Schritte mit Python Django (5)
Holen Sie sich Alembic-Informationen mit Python
Python> Wörterbuch> get ()> optionaler Wert
Holen Sie sich japanische Synonyme mit Python
Erste Schritte mit dem Python-Framework Django unter Mac OS X.