Korzystanie ze skryptów Python
Polecenia
BIMPYTHON
O BIMPYTHON
Polecenie BIMPYTHON umożliwia wysyłanie zapytań i zarządzanie danymi z modelu w ramach BricsCAD BIM, z odpowiednim .py Skrypt Python.
Skrypty Python mogą być tak proste, jak uzyskiwanie ilości i powiązanych właściwości obiektów i jednostek BIM, lub tak skomplikowane, jak implementacja serii obliczeń w oparciu o dostępne parametry modelu.
BricsCAD nie jest dostarczana z Python Shell, więc skrypty musiałyby być przygotowywane w aplikacji tekstowej lub edytorze kodu.
Język programowania Python, wraz z jego standardowymi bibliotekami, jest wbudowany w BricsCAD BIM, więc nie ma potrzeby instalowania ich osobno, chyba że masz niestandardowe pakiety i biblioteki, których chcesz używać w swoich skryptach.
Kilka przykładów skryptów Python jest dostępnych w instalatorze BricsCAD BIM.
Procedura: konfiguracja skryptu Python z modułem BIMPYTHON
- Przed uzyskaniem dostępu do API zaimportuj lub "wywołaj" dowolne moduły, które chcesz mieć w skrypcie.
Jeśli nie są one częścią standardowej biblioteki Pythona, upewnij się, że zostały wcześniej zainstalowane osobno.
Możesz "zaimportować" standardowy moduł, taki jak math i "zaimportować jako" zewnętrzny, na przykład Pyplot, który jest zbiorem funkcji w pakiecie Matplotlib:
import math import matplotlib.pyplot as plt
- Mając wybrane biblioteki "o nazwie", następnym krokiem jest uzyskanie dostępu do API w celu zapytania o elementy w modelu BricsCAD. Jest to zakres obiektów bim i służy jako punkt wejścia do modelu.
Zaimportuj current_model z modułu bricscad:
from bricscad.bim import current_model
- Teraz możesz zapytać o model za pomocą tych przykładowych instrukcji.
# Display info about the lengths of walls in the model lengths = [wall.prop('Length') for wall in current_model().filter(Type='Wall')] print(f'wall lengths. max: {max(lengths)}, avg: {sum(lengths)/len(lengths)}")
# Create a selection and print the objects current_model().filter(Type='Wall', IsExternal=True).select() for wall in bim_model.filter(Type='Wall', IsExternal=True, Length=max(lengths)): print(wall)
Mappery bricscad.bim.Objects są łańcuchowe. Jest to przykład części dachu znajdujących się blisko ściany:
# Get all parts of roof within 40cm range of all walls
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)
Natomiast jest to przykład instrukcji funkcji do filtrowania:
# Filter roof parts longer than 50 project units
def is_long(obj):
return obj.prop('Length') > 50
roof_parts.filter(is_long)
Można także eksportować i wyświetlać dane w różnych formatach:
# create a dictionary list
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')]
# export to .json
import json
file = open('path/to/file.json', 'w+')
file.write(json.dumps(wall_info, indent=4))
file.close()
# plotting a histogram
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(wall_info)
df.hist();
plt.show()
# export to .csv
df.to_csv(r'path/to/file.csv', index = False, header=True)
Aby uzyskać więcej informacji na temat interfejsu API BricsCAD i jego różnych klas, odwiedź poniższy rozdział API.
Procedura: wykonanie skryptu Python
- Otwórz nowy lub plik BricsCAD, w którym chcesz uruchomić skrypt Python.
- Wpisz BIMPYTHON w wierszu poleceń i naciśnij Enter.
- Zostanie wyświetlone okno dialogowe, w którym można wybrać tylko plik skryptu w języku Python (* .py). Wybierz go i kliknij Otwórz, aby uruchomić plik.
- O ile nie określono danych do wyeksportowania lub wyświetlenia w zewnętrznym programie poza BricsCAD, BricsCAD zgłasza dane wyjściowe w wierszu poleceń.
Odniesienie
Klasy i składnie
- get_property(prop_name)
- Zwraca wartość właściwości obiektu o podanej nazwie.
- set_property(prop_name, value)
- Ustawia wartość dla nazwy właściwości (prop_name).
- distance_to( other_obj, units='mm', distance_mode='exact' )
-
- Oblicz odległość między dwoma obiektami.
- Opcje dla argumentu jednostki: dowolna wartość jednostki w postaci insunits ('Centymetry', 'Stopy', 'Parseki' itp.) oraz następujące skróty: 'mm', 'cm, 'm', 'km', 'ft'.
- Opcje dla argumentu distance_mode: 'bbox_center', 'bbox', exact'.
- parts()
- Zwraca podelementy tego obiektu.
- źRódło
- Przeciwieństwo funkcji parts(), zwraca obiekt nadrzędny tego podelementu.
- Warstwa (y)
- Zwraca powiązany obiekt iterowalny
Warstwy
.
- within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
-
- Zwraca obiekty, które znajdują się w odległości argumentu distance.
- Opcje jednostek argumentów: see distance_to.
- Opcje dla argumentu distance_mode: see distance_to.
- Otwarcie(a)
- Zwraca powiązane otwarcia tego obiektu.
- Obszar(y)
- Zwraca powiązane przestrzenie tego obiektu.
- bounding_elements()
- Zwraca powiązane elementy ograniczające tego obiektu (przestrzeni).
- wybierz()
- Dodaj obiekt do wyboru.
- Odznacz
- Usuń obiekt z zaznaczenia.
- __eq__() i __hash__()
- Sprawia, że Object jest interoperacyjny z np. python set lub słownik.
- class bricscad.bim.Objects
- Definiuje kolekcję obiektów BricsCAD BIM
- bricscad.bim.list_properties(obj)
- Zwraca listę dostępnych właściwości przekazanego podmiotu lub warstwy.
- bricscad.bim.current_model()
- Zwraca obiekty w przestrzeni modelu aktywnego dokumentu.
- class bricscad.bim.Plies
- Indeksowany, podzielny kontener obiektów Warstw.
- class bricscad.bim.Ply
- Pojedynczy obiekt warstwowy.