Verwenden von Python-Skripten

Befehle

BIMPYTHON

Über BIMPYTHON

Der Befehl BIMPYTHON ermöglicht die Abfrage und Verwaltung von Daten aus einem Modell innerhalb von BricsCAD BIM, mit einem geeigneten .py Python-Skript.

Die Python-Skripte können so einfach sein wie das Abrufen von Mengen und zugehörigen Eigenschaften von Objekten und BIM-Objekten oder so aufwendig wie die Implementierung einer Reihe von Berechnungen auf der Grundlage der verfügbaren Modellparameter.

BricsCAD wird nicht mit Python Shell geliefert, daher müssen die Skripte in einer Text- oder Code-Editor-Anwendung vorbereitet werden.

Die Programmiersprache Python ist zusammen mit ihren Standardbibliotheken in BricsCAD BIM eingebettet, so dass Sie diese nicht separat installieren müssen, es sei denn, Sie haben eigene Pakete und Bibliotheken, die Sie in Ihren Skripten verwenden möchten.

Mehrere Python-Skriptbeispiele sind im BricsCAD BIM)-Installationsprogramm verfügbar.

Vorgehensweise: Erstellen eines Python-Skripts mit dem BIMPYTHON-Modul

  1. Bevor Sie Zugriff auf die API erhalten, importieren oder rufen Sie alle gewünschten Module auf, die Sie im Skript haben möchten.

    Wenn sie nicht Teil der Python-Standardbibliothek sind, stellen Sie sicher, dass sie zuvor separat installiert wurden.

    Sie können "importieren" für ein Standardmodul verwenden, z. B. Mathematik, und "importieren als" für ein externes Modul, z. B. Pyplot, das eine Sammlung von Funktionen im Matplotlib-Paket ist:

    import math  
    import matplotlib.pyplot as plt
  2. Wenn Ihre gewünschten Bibliotheken "aufgerufen" sind, besteht der nächste Schritt darin, Zugriff auf die API zu erhalten, um die Elemente innerhalb des BricsCAD-Modells abzufragen. Dies ist der Bereich der BIM-Objekte und dient als Einstiegspunkt in das Modell.

    Importieren Sie das aktuelle Modell aus dem Bricscad-Modul:

    from bricscad.bim import current_model
  3. Jetzt können Sie das Modell mit diesen Beispielanweisungen abfragen.
    # Informationen über die Längen von Wänden im Modell anzeigen 
    lengths = [wall.prop('Length') for wall in current_model().filter(Type='Wall')] 
    print(f'wall lengths. max: {max(lengths)}, avg: {sum(lengths)/len(lengths)}') 
    # Erstellen Sie eine Auswahl und drucken Sie die Objekte 
    current_model().filter(Type='Wall', IsExternal=True).select() 
    for wall in bim_model.filter(Type='Wall', IsExternal=True, Length=max(lengths)): 
        print(wall) 

Die Mapper der bricscad.bim.Objects sind verkettbar. Dies ist ein Beispiel, um die Teile des Daches zu erhalten, die sich in der Nähe einer Wand befinden:

# Holen Sie sich alle Teile des Daches in eine Reichweite von 40 cm von allen Wänden 
roof_parts = current_model().filter(Type='Roof').parts() 
roof_parts_close_to_wall = current_model().filter(Type='Wall').within_distance(40, 'cm', search_range=roof_parts) 

Während dies ein Beispiel für eine Funktionsanweisung zum Filtern ist:

# Dachteile filtern, die länger als 50 Projekteinheiten sind 
def is_long(obj):  
    return obj.prop('Length') > 50 
roof_parts.filter(is_long) 

Sie können Daten in verschiedenen Formaten exportieren und anzeigen:

# Erstellen Sie eine Wörterbuchliste 
wall_info = [ 
    {   'Handle': wall.get_property('Handle'), 
        'Length': wall.get_property('Length'), 
        'Height': wall.get_property('Height') 
    } for wall in current_model().filter(Type='Wall')] 
# Nach .json exportieren 
import json 
file = open('path/to/file.json', 'w+') 
file.write(json.dumps(wall_info, indent=4)) 
file.close() 
# Plotten eines Histogramms import 
matplotlib.pyplot as plt 
import pandas as pd 
df = pd.DataFrame(wall_info) 
df.hist(); 
plt.show() 
# Nach .csv exportieren 
df.to_csv(r'path/to/file.csv', index = False, header=True) 

Für weitere Informationen über die BricsCAD-API und ihre verschiedenen Klassen lesen Sie bitte das Kapitel über die API weiter unten.

Vorgehensweise: Ausführen des Python-Skripts

  1. Öffnen Sie eine neue Datei oder eine BricsCAD-Datei, in der Sie ein Python-Skript ausführen möchten.
  2. Geben Sie BIMPYTHON in die Befehlszeile ein und drücken Sie die Eingabetaste.
  3. Es wird ein Dialog angezeigt, in dem Sie nur eine Python-Skriptdatei (*.py) auswählen können. Wählen Sie sie aus, und klicken Sie auf Öffnen, um die Datei auszuführen.


  4. Sofern Sie nicht angegeben haben, dass die Daten in einem externen Programm außerhalb von BricsCAD exportiert oder angezeigt werden sollen, meldet BricsCAD die Ausgabe in der Befehlszeile.

Referenz

Klassen und Syntaxen

get_property(prop_name)
Gibt den Eigenschaftswert des Objekts mit dem angegebenen Namen zurück.
set_property(prop_name, value)
Legt einen Wert für den Eigenschaftsnamen (prop_name) fest.
distance_to( other_obj, units='mm', distance_mode='exact' )
  • Berechnen Sie die Entfernung zwischen zwei Objekten.
  • Optionen für Argument units: jeder Einheitswert gemäß INSUNITS-Variable ('Zentimeter', 'Fuß', 'Parsec' usw.) und diese Abkürzungen: 'mm', 'cm, 'm', 'km', 'ft'.
  • Optionen für Argument distance_mode: 'bbox_center', 'bbox', exact'.
parts()
Gibt die Unterelemente dieses Objekts zurück.
parent()
Das Gegenteil von parts(), gibt das übergeordnete Objekt dieses Unterelements zurück.
plies()
Gibt das zugeordnete iterierbare Objekt Plies zurück.
within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
  • Gibt die Objekte zurück, die sich innerhalb des Abstands des Arguments distance befinden.
  • Optionen für Argument units: sehen Sie distance_to.
  • Optionen für Argument distance_mode: sehen Sie distance_to.
openings()
Gibt die zugehörigen Öffnungen dieses Objekts zurück.
spaces()
Gibt die zugeordneten Bereiche dieses Objekts zurück.
bounding_elements()
Gibt die zugehörigen Begrenzungselemente dieses (Bereich-) Objekts zurück.
select()
Objekt zur Auswahl hinzufügen.
deselect()
Objekt aus Auswahl entfernen.
__eq__() and __hash__()
Macht Object interoperabel mit z. B. Python-Satz oder Wörterbuch.
class bricscad.bim.Objects
Definiert die Sammlung von BricsCAD BIM-Objekten
filter( function )
Filtern dieses Bereichs mit einem Funktionsparameter.
filter( **conditions )
Filtern dieses Bereichs mit Bedingungen, die als Schlüsselwortargumente angegeben sind.
parts()
Gibt die Teile aller Elemente in diesem Bereich zurück.
parents()
Gibt die übergeordneten Objekte von Elementen in diesem Bereich zurück.
within_distance( distance, unit='undefined', distance_mode='exact', search_range=bim_model )
Gibt die Objekte zurück, die sich innerhalb des angegebenen Abstands zu jedem Objekt in diesem Bereich befinden.
openings()
Gibt die zugehörigen Öffnungen dieser Objekte zurück.
spaces()
Gibt die zugeordneten Bereiche dieser Objekte zurück.
bounding_elements()
Gibt die zugehörigen Begrenzungselemente dieser (Bereich-) Objekte zurück.
select()
Fügt der Auswahl Objekte hinzu.
deselect()
Entfernt Objekte aus der Auswahl.
__len__ ()
Gibt die Anzahl der Objekte in diesem Bereich zurück.
bricscad.bim.list_properties(obj)
Gibt die Liste der verfügbaren Eigenschaften der übergebenen Entität oder Schicht zurück.
bricscad.bim.current_model()
Gibt die Objekte im Modellbereich des aktiven Dokuments zurück.
class bricscad.bim.Plies
Indexierter, aufteilbarer Container mit Ply-Objekten.
__iter__()
__getitem__( index )
__getitem__( slice )
__len__()
class bricscad.bim.Ply
Einzelnes Schicht-Objekt.
get_property(prop_name)
Gibt den Eigenschaftswert des Objekts Ply mit dem angegebenen Namen zurück.