Como começar com a API - Importar um modelo e executar cálculo 03

This article is also available in:
Translated by AI from English
Neste tutorial, irá aprender como importar um modelo, fazer algumas alterações nas definições predefinidas e obter resultados juntamente com os custos.

Primeiros passos

Recomendamos que siga o tutorial Como começar com a API - Básicos 01, que lhe ensina sobre a API e como configurar o ambiente.

Ficheiro de ligação 

Este exemplo baseia-se em ficheiros criados no tutorial Como começar com a API - Importação em lote de combinações 02

Por favor, descarregue os ficheiros tutorial 02 with loads.ideaCon e tutorial 02.contemp para o seu PC.

Cliente Python

Novamente, execute o "IdeaStatiCa.ConnectionRestApi.exe" no CMD dentro da pasta apropriada do IDEA StatiCa e abra a ferramenta IDE da sua escolha.

inline image in article
  • Crie um novo ficheiro e importe os pacotes que permitirão o uso do cálculo e a ligação com o URL localhost. 

Código fonte:

## Importação do pacote API
import ideastatica_connection_api
from ideastatica_connection_api.models.base_template_conversion import BaseTemplateConversion
from ideastatica_connection_api.models.con_mprl_element import ConMprlElement
from ideastatica_connection_api.models.con_operation_common_properties import ConOperationCommonProperties

#Importar pacotes para visualização
import pandas as pd

## Ligação com baseUrl
import ideastatica_connection_api.connection_api_service_attacher as connection_api_service_attacher

inline image in article
  • Configure o registo através da variável "baseUrl", que irá aceder ao seu localhost. No segundo passo, emparelhe o caminho absoluto do seu ficheiro IDEA StatiCa Connection.

## Configurar registo
baseUrl = "http://localhost:5000"

## Caminho absoluto para a pasta com o seu script python e módulo de ligação
project_file_path = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 03\tutorial 02 with loads.ideaCon"
print("Opening project ",project_file_path)

inline image in article
  • Emparelhe o cliente com um serviço já em execução. Use o bloco try/except - uma vez que o bloco try gera um erro, o bloco except será executado. Na primeira fase, é necessário abrir o projeto e encontrar o ID do projeto do seu projeto, que é único para cada projeto IDEA StatiCa. Depois precisamos de todas as ligações armazenadas no nosso ficheiro, pois queremos aplicar o modelo apenas à primeira.Como próximo passo, podemos ler o ficheiro de modelo de mapeamento predefinido e adicionar outro conjunto de parafusos (M20 8.8) à base de dados MPRL.

# Criar um cliente ligado a um serviço já em execução
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
    try:
        # Abrir projeto
        uploadRes = api_client.project.open_project_from_filepath(project_file_path)
        activeProjectId = api_client.project.active_project_id      
        # Obter lista de todas as ligações no projeto
        connections_in_project = api_client.connection.get_connections(activeProjectId)

        # primeira ligação no projeto
        connection1 = connections_in_project[0]      

        # ConTemplateMappingGetParam | Dados do modelo para obter mapeamento predefinido (opcional)
      templateParam =  ideastatica_connection_api.ConTemplateMappingGetParam() 

        #template_file_name
        template_file_name = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 03\tutorial 02.contemp"        

        with open(template_file_name, 'r', encoding='utf-16') as file:
            templateParam.template = file.read()

        # obter o mapeamento predefinido para o modelo e ligação selecionados  
        default_mapping = api_client.template.get_default_template_mapping(api_client.project.active_project_id, connection1.id, templateParam)
        print("Default mapping: ",default_mapping)        

        #adicionar novo conjunto de parafusos à base de dados MPRL
       mprlElement = ConMprlElement()
        print(mprlElement)
        mprlElement.mprl_name = "M20 8.8"
        api_client.material.add_bolt_assembly(activeProjectId, mprlElement)
        print("New bolt assembly added", mprlElement.mprl_name)
        boltsInProject = api_client.material.get_bolt_assemblies(activeProjectId) 

inline image in article
  • Se quisermos atribuir o novo conjunto de parafusos à operação Placa para placa diretamente, temos de executar o comando BaseTemplateConversion() e adicioná-lo ao modelo de mapeamento.

       # adicionar novo conjunto de parafusos ao modelo de mapeamento       
      boltConversion = BaseTemplateConversion()
       boltConversion.original_value = 'M16 8.8'
       boltConversion.original_template_id = '1'
       boltConversion.new_value =  'M20 8.8'
       boltConversion.description = 'Bolt Assembly'
       boltConversion.new_template_id = '2'     

       default_mapping.conversions.append(boltConversion)
      print("New mapping: ", default_mapping)       

       # Aplicar o modelo alterado à ligação
       applyTemplateData =  ideastatica_connection_api.ConTemplateApplyParam() # ConTemplateApplyParam |       Modelo a aplicar (opcional)
        applyTemplateData.connection_template = templateParam.template
        applyTemplateData.mapping = default_mapping
        applyTemplateResult = api_client.template.apply_template(api_client.project.active_project_id, connection1.id, applyTemplateData)

        # Definir o novo conjunto de parafusos para as operações no ficheiro ideaCon
       commonProperties = ConOperationCommonProperties()
        commonProperties.bolt_assembly_id = 2

        api_client.operation.update_common_operation_properties(api_client.project.active_project_id, connection1.id,commonProperties)

inline image in article
  • Também podemos obter os custos para a ligação

       # Obter os custos da ligação com o modelo aplicado
        costs = api_client.connection.get_production_cost(api_client.project.active_project_id, connection1.id)
        print("Costs: ",costs.total_estimated_cost)

inline image in article
  • Como último passo, podemos executar o cálculo, ver os resultados, armazenar o ficheiro com um novo nome e ver os resultados

        # Executar análise tensão-deformação para a ligação
        con1_cbfem_results1 = api_client.calculation.calculate(api_client.project.active_project_id, calcParams)
        results = api_client.calculation.get_results(api_client.project.active_project_id, calcParams)
        CheckResSummary = pd.DataFrame(results[0].check_res_summary)
        print("Results summary: \n",CheckResSummary[1])

        #Criar novo ficheiro ideaCon e aplicar o modelo
        updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 03\tutorial 03 with template.ideaCon'
        api_client.project.download_project(api_client.project.active_project_id, updated_file_name )
        print("New project with template ",updated_file_name)

    except Exception as e:
        print("Operation failed : %s\n" % e)

inline image in article
inline image in article

Os resultados estão OK.No tutorial seguinte, iremos focar-nos na otimização de alguns dos componentes.

Attached Downloads