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

  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 :

    importer des mathématiques 
    importer matplotlib.pyplot en tant que 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.

    Importer le current_model à partir du module bricscad :

    depuis bricscad.bim import current_model
  3. 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

  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'.
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
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.
pièces()
Renvoie les parties de tous les éléments de cette plage.
parents()
Renvoyer 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.
ouvertures()
Renvoie les ouvertures associées de ces objets.
espaces()
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.
désélectionner()
Supprime des objets de la sélection.
__len__ ()
Renvoit 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 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
__iter__()
__getitem__( index )
__getitem__( slice )
__len__()
classe bricscad.bim.Ply
Objet pli individuel.
get_property(prop_name)
Renvoie la valeur de propriété de l'objet Couche avec le nom donné.