Utiliser des scripts Python
Commandes
BIMPYTHON
BIMPYTHON
La commande BIMPYTHON vous permet d'interroger et de gérer les données d'un modèle dans BricsCAD BIM, avec un fichier .py de script Python approprié.
Les scripts Python peuvent être aussi simples que d'obtenir des quantités et des propriétés associées d'objets et d'entités BIM, ou aussi élaborés que d'implémenter une série de calculs basés sur les paramètres de modèle disponibles.
BricsCAD n'est pas livré avec un shell Python, les scripts doivent donc être préparés dans un éditeur de texte ou de code.
Le langage de programmation Python, ainsi que ses bibliothèques standard, sont intégrés à BricsCAD BIM. Il n'est donc pas nécessaire de les installer séparément, à moins que vous ne disposiez de paquets et de bibliothèques personnalisés que vous souhaitez utiliser dans vos scripts.
Plusieurs exemples de scripts Python sont disponibles dans le programme d'installation de BricsCAD BIM.
Procédure : Configurer un script Python avec le module BIMPYTHON
- Avant d'accéder à l'API, importez ou « appelez » les modules souhaités dans le script.
S'ils ne font pas partie de la bibliothèque Python Standard, assurez-vous qu'ils ont été installés séparément au préalable.
Vous pouvez « importer » un module standard, tel que mathématique et « importer en tant que » un module externe, par exemple Pyplot, qui est un ensemble de fonctions dans le package Matplotlib :
import math import matplotlib.pyplot as plt - Après avoir appelées les bibliothèques de votre choix, l'étape suivante consiste à accéder à l'API afin d'interroger les éléments du modèle BricsCAD. C'est la gamme d'objets BIM et elle sert de point d'entrée au modèle.
Importez le current_model à partir du module bricscad :
from bricscad.bim import current_model - Vous pouvez maintenant interroger le modèle avec ces exemples d'instructions.
# 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)
Les mappeurs des bricscad.bim.Objects peuvent être chaînés. Voici un exemple pour obtenir les parties du toit proches d'un mur :
# 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)
Alors qu'il s'agit d'un exemple d'instruction de fonction à filtrer :
# Filter roof parts longer than 50 project units
def is_long(obj):
return obj.prop('Length') > 50
roof_parts.filter(is_long)
Vous pouvez également exporter et afficher des données dans différents formats :
# 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()
# exporter vers .csv
df.to_csv(r'path/to/file.csv', index = False, header=True)
Pour plus d'informations sur l'API BricsCAD et ses différentes classes, veuillez consulter le chapitre API ci-dessous.
Procédure : Exécuter un script Python
- Ouvrez un fichier BricsCAD nouveau ou existant sur lequel vous voulez exécuter un script Python.
- Entrez BIMPYTHON dans la ligne de commande et appuyez sur Entrée.
- Une boîte de dialogue s'affiche où vous pouvez uniquement sélectionner un fichier de script Python (*.py). Sélectionnez-le et cliquez sur Ouvrir pour exécuter le fichier.

- À moins que vous n'ayez spécifié les données à exporter ou afficher dans un programme externe extérieur BricsCAD, BricsCAD rapporte la sortie en ligne de commande.
Référence
Classes et syntaxes d'API
- get_property(prop_name)
- Renvoie la valeur de propriété de l'objet avec le nom donné.
- set_property(prop_name, value)
- Définit une valeur pour le nom de la propriété (prop_name).
- distance_to( other_obj, units='mm', distance_mode='exact' )
-
- Calcule la distance entre deux objets.
- Options pour les unités d'argument : toutes les unités de valeur forment des insunits (« Centimètres », « Pieds », « Parsecs », etc.) et les abréviations « mm », « cm », « m », « km » et « ft ».
- Options pour l'argument distance_mode : 'bbox_center', 'bbox', exact'.
- parts()
- Renvoie les sous-éléments de cet objet.
- parent()
- L'inverse de parts() renvoie l'objet parent de ce sous-élément.
- plies()
- Renvoie l'objet itérable
Couchesassocié.
- within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
-
- Retourne les objets compris dans la distance de l'argument.
- Options pour les unités des arguments : voir distance_to.
- Options pour l'argument distance_mode : voir distance_to.
- openings()
- Renvoie les ouvertures associées de cet objet.
- spaces()
- Renvoie les espaces associés de cet objet.
- bounding_elements()
- Renvoie les éléments de délimitation associés de cet objet (espace).
- select()
- Ajoute un objet à la sélection.
- deselect()
- Supprime un objet de la sélection.
- __eq__() et __hash__()
- Rend l'objet interopérable, par exemple, avec un jeu ou un dictionnaire Python.
- classe bricscad.bim.Objects
- Définit la collection des objets BricsCAD BIM
- bricscad.bim.list_properties (obj)
- Renvoie la liste des propriétés disponibles de l'ancienne entité ou de la couche.
- bricscad.bim.current_model()
- Retourne les objets dans l'espace modèle du document actif.
- class bricscad.bim.Plies
- Conteneur indexé et découpable d'objets Couche :
- classe bricscad.bim.Ply
- Objet de la couche individuelle.
