Utiliser des 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 : Configurer un script Python avec le module BIMPYTHON

  1. 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
  2. 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.

    Importez le current_model à partir du module bricscad :

    from bricscad.bim import current_model
  3. 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() 
# export to .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

  1. Ouvrez un nouveau fichier ou un fichier BricsCAD dans lequel vous souhaitez exécuter un script Python.
  2. Entrez BIMPYTHON dans la ligne de commande, puis appuyez sur Entrée.
  3. 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.


  4. 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'.
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 Plies associé.
within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
  • Renvoie les objets qui se trouvent à distance de l'argument distance.
  • Options pour les unités d'argument units : 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 l'objet de la sélection.
__eq__() et __hash__()
Rend l'objet interopérable, par exemple python set ou dictionnaire.
class bricscad.bim.Objects
Définit la collection d'objets BIM BricsCAD
filter( function )
Filtrage de cette plage avec un paramètre de fonction.
filter( **conditions )
Filtrage de cette plage avec des conditions données sous forme d'arguments de mots clés.
parts()
Renvoie les parties de tous les éléments de cette plage.
parents()
Renvoie les objets parents des éléments de cette plage.
within_distance( distance, unit='undefined', distance_mode='exact', search_range=bim_model )
Renvoie ces objets qui se trouvent à distance de n'importe quel objet de cette plage.
openings()
Renvoie les ouvertures associées de ces objets.
spaces()
Renvoie les espaces associés de ces objets.
bounding_elements()
Renvoie les éléments de délimitation associés de ces objets (espace).
select()
Ajoute des objets à la sélection.
deselect()
Supprime des objets de la sélection.
__len__ ()
Renvoie le nombre d'objets de cette plage.
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()
Renvoie les objets dans l'espace modèle du document actif.
class bricscad.bim.Plies
Conteneur indexé et segmentable d'objets Ply
__iter__()
__getitem__( index )
__getitem__( slice )
__len__()
class bricscad.bim.Ply
Objet de la couche individuelle.
get_property(prop_name)
Renvoie la valeur de propriété de l'objet Ply avec le nom donné.