Utilisation de scripts Python

Commandeso

BIMPYTHON

À propos de 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

  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. Une fois que les bibliothèques sont sollicité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() 
# 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

  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 Couches 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.
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.
classe 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 {0}, 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.
classe bricscad.bim.Plies
Conteneur indexé et découpable d'objets Ply.
__iter__()
__getitem__( index )
__getitem__( slice )
__len__()
classe bricscad.bim.Ply
Objet de la couche individuelle.
get_property(prop_name)
Renvoie la valeur de la propriété de l'objet Ply avec le nom donné.