Utilisation de scripts Python
Commandes
BIMPYTHON
À propos de BIMPYTHON
La commande BIMPYTHON 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 interpréteur shell Python, donc les scripts doivent être préparés dans une application d'éditeur de texte ou de code.
Le langage de programmation Python, ainsi que ses bibliothèques standard, sont intégrés dans BricsCAD BIM, vous n'avez donc pas besoin de les installer séparément, sauf si vous avez des packages et des bibliothèques personnalisés que vous souhaitez utiliser dans vos scripts.
Plusieurs exemples de scripts Python sont disponibles dans le programme d'installation BricsCAD BIM.
Procédure : configuration d'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 :
importer des mathématiques importer matplotlib.pyplot en tant que plt
- Avec les bibliothèques souhaitées « appelées », l'étape suivante consiste à accéder à l'API afin d'interroger les éléments du modèle BricsCAD. Il s'agit de la plage d'objets bim et sert de point d'entrée au modèle.
Importer le current_model à partir du module bricscad :
depuis bricscad.bim import current_model
- Vous pouvez maintenant interroger le modèle avec ces exemples d'instructions.
# Affichez des informations sur les longueurs des murs dans les longueurs du modèle = [wall.prop('Length') for wall in current_model().filter(Type='Wall')] print(f'wall lengths. max: {max(longueurs)}, moyenne: {sum(longueurs)/len(longueurs)}')
# Créer une sélection et imprimer les objets current_model().filter(Type='Wall', IsExternal=True).select() pour mur dans 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 :
# Obtenez toutes les parties du toit dans la plage de 40 cm de tous les murs
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 :
# Filtrer les pièces de toit de plus de 50 unités de projet
def is_long(obj):
return obj.prop('Longueur') > 50
roof_parts.filter(is_long)
Vous pouvez également exporter et afficher des données dans différents formats :
# créer une liste de dictionnaires
wall_info = [
{ 'Handle': wall.get_property('Handle'),
« Longueur »: wall.get_property (« Longueur »),
'Height': wall.get_property('Height')
} pour mur dans current_model().filter(Type='Wall')]
# exporter vers .json
importer json
fichier = open('chemin/vers/fichier.json', 'w+')
file.write(json.dumps(wall_info, tiret=4))
fichier.close()
# tracer un histogramme
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écution du script Python
- Ouvrez un nouveau fichier ou un fichier BricsCAD dans lequel vous souhaitez exécuter un script Python.
- Entrez BIMPYTHON dans la ligne de commande, puis 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.
- Sauf si vous avez spécifié les données à exporter ou à afficher dans un programme externe en dehors de BricsCAD, BricsCAD signale la sortie dans la ligne de commande.
Référence
Classes et syntaxes
- 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 l'argument units : toute valeur d'unités sous forme d'unités ('Centimètres', 'Pieds', 'Parsecs' etc.) et ces abréviations : 'mm', 'cm, 'm', 'km', 'pi'.
- Options pour l'argument distance_mode : 'bbox_center', 'bbox', exact'.
- pièces()
- Renvoyer 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
Plies
associé.
- within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
-
- Renvoie les objets qui se trouvent à une distance inférieure à l'argument distance.
- Options pour les unités des arguments : voir distance_to.
- Options pour l'argument distance_mode : voir distance_to.
- ouvertures()
- Renvoie les ouvertures associées de cet objet.
- espaces()
- Renvoie les espaces associés de cet objet.
- bounding_elements()
- Renvoie les éléments de délimitation associés de cet objet (espace).
- select()
- Ajouter un objet à la sélection.
- désélectionner()
- Supprimer l'objet de la sélection.
- __eq__() et __hash__()
- Rend l'objet interopérable, par exemple python set ou dictionnaire.
- classebricscad.bim.Objects
- Définit la collection d'objets BIM BricsCAD
- bricscad.bim.list_properties (obj)
- Renvoie la liste des propriétés disponibles de l'ancienne entité ou couche.
- bricscad.bim.current_model()
- Renvoie les objets dans l'espace modèle du document actif.
- classe bricscad.bim.Plies
- Conteneur indexé et segmentable d'objets Couche
- classe bricscad.bim.Ply
- Objet pli individuel.