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
- 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
- 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
- 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
- Abra um arquivo novo ou existente do BricsCAD onde você gostaria de executar um script Python.
- Digite BIMPYTHON na linha de comando e pressione Enter.
- 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.
- 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
- 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.
- class bricscad.bim.Ply
- Objeto subcamada individual.