Usar scripts Python

Comandos

BIMPYTHON

Sobre o BIMPYTHON

O comando BIMPYTHON permite pesquisar e gerenciar dados de um modelo em BricsCAD BIM, com um script *.py adequado em Python.

Os scripts Python podem ser tão simples quanto obter quantidades e propriedades associadas de objetos e entidades BIM, ou ser tão elaborados quanto implementar uma série de cálculos com base nos parâmetros disponíveis do modelo.

O BricsCAD não inclui uma interface (Shell) Python, portanto, os scripts precisam ser preparados em um arquivo texto ou numa aplicação para edição de código.

A Linguagem de Programação Python - Python Programming Language, juntamente com suas bibliotecas padrão, está incorporada no BricsCAD BIM, portanto não há necessidade de instalá-las separadamente, a menos que você tenha pacotes personalizados e bibliotecas de seu uso, que deseja utilizar em seus scripts.

Vários exemplos de scripts Python estão disponíveis no instalador do BricsCAD BIM.

Procedimento: configurar um script Python com o módulo BIMPYTHON

  1. Antes de obter acesso à API, importe ou 'call' (chame) os módulos desejados que você deseja ter no script.

    Se eles não fazem parte da biblioteca Python Standard, certifique-se de que eles foram instalados separadamente de antemão.

    Você pode "importar" um módulo padrão, como matemática e "importar como" um externo, como por exemplo Pyplot, que é uma coleção de funções no pacote Matplotlib:

    importar math 
    import matplotlib.pyplot como plt
  2. Com as bibliotecas desejadas "chamadas", o próximo passo é obter acesso à API para consultar os elementos dentro do modelo do BricsCAD. Esta é a faixa de objetos Bim, e serve como um ponto de entrada para o modelo.

    Importar o current_model do módulo bricscad:

    from bricscad.bim import current_model
  3. Agora, você pode consultar o modelo com essas instruções de exemplo.
    # 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) 

Os mapeadores do The mappers of the bricscad.bim.Objects são encadeáveis. Este é um exemplo para obter as partes do telhado que estão perto de uma parede:

# 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) 

Onde este é um exemplo de uma instrução de função para filtrar:

# Filter roof parts longer than 50 project units 
def is_long(obj):  
    return obj.prop('Length') > 50 
roof_parts.filter(is_long) 

Você também pode exportar e mostrar dados em vários formatos:

# 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) 

Para obter mais informação sobre a API do BricsCAD e suas várias classes, visite o capítulo da API abaixo.

Procedimento: Executar o script Python

  1. Abra um arquivo novo ou existente do BricsCAD onde você gostaria de executar um script Python.
  2. Digite BIMPYTHON na linha de comando e pressione Enter.
  3. Uma caixa de diálogo é exibida onde você só pode selecionar um arquivo de script Python (*.py). Selecione-o e clique em Abrir para executar o arquivo.


  4. A menos que você tenha especificado os dados a ser exportados ou exibidos em um programa externo fora do BricsCAD, o BricsCAD reporta a saída na linha de Comando.

Referência

Classes e sintaxes

get_property(prop_name)
Retorna o valor da propriedade do Objeto com o nome fornecido.
set_property(prop_name, value)
Define um valor para o nome da propriedade (prop_name).
distance_to( other_obj, units='mm', distance_mode='exact' )
  • Calcula a distância entre dois Objetos.
  • Options for argument units: any units value form insunits ('Centimeters', 'Feet', 'Parsecs' etc.) and these abbreviations: 'mm', 'cm, 'm', 'km', 'ft'.
  • Options for argument distance_mode: 'bbox_center', 'bbox', exact'.
parts()
Retorna os sub-elementos desse objeto.
parent()
The opposite of parts(), returns the parent object of this sub-element.
plies()
Retorna o objeto iterável Subcamadas associado.
within_distance( distance, unit='mm', distance_mode='exact', search_range=bim_model )
  • Retorna os objetos que estão dentro do argumento distância.
  • Opções para argumento units: consulte distance_to.
  • Opções para argumento distance_mode: veja distance_to.
openings()
Retorna as aberturas associadas desse objeto.
spaces()
Retorna os espaços associados desse objeto.
bounding_elements()
Retorna os elementos delimitadores associados desse objeto (espaço).
select()
Adicionar Objeto à seleção.
deselect()
Remover Objeto da seleção.
__eq__() and __hash__()
Torna o Objeto interoperável com ex. python set oi dicionário.
class bricscad.bim.Objects
Define a coleção de objetos BIM do BricsCAD
filter( function )
Filtrar esse intervalo com um parâmetro de função.
filter( **conditions )
Filtrar esse intervalo com condições dadas como argumentos de palavra-chave.
parts()
Retorne as partes de todos os elementos desse intervalo.
parents()
Retorna os objetos pais dos elementos nesse intervalo.
within_distance( distance, unit='undefined', distance_mode='exact', search_range=bim_model )
Retorna aqueles objetos que estão a uma distância de qualquer objeto nesse intervalo.
openings()
Retorna as aberturas associadas a esses objetos.
spaces()
Retorna os espaços associados desses objetos.
bounding_elements()
Retorna os elementos delimitadores associados desses objetos (espaciais).
select()
Adicionar Objetos à seleção.
deselect()
Remove Objetos da seleção.
__len__ ()
Retorna o número de Objetos neste intervalo.
bricscad.bim.list_properties(obj)
Retorna a lista de propriedades disponíveis da entidade passada ou subcamada.
bricscad.bim.current_model()
Retorna os objetos no Model Space do documento ativo.
class bricscad.bim.Plies
Contêiner indexado e fatiável de objetos Subcamada.
__iter__()
__getitem__( index )
__getitem__( slice )
__len__()
class bricscad.bim.Ply
Objeto subcamada individual.
get_property(prop_name)
Retorna o valor da propriedade do objeto Subcamada com o nome fornecido.