How to get started with API - Import a template and run calculation 03
Primeros pasos
Recomendamos revisar el tutorial Cómo empezar con API - Conceptos básicos 01, que te enseña sobre la API y cómo configurar el entorno.
Archivo de conexión
Este ejemplo se basa en archivos creados dentro del tutorial Cómo empezar con API - Importación por lotes de combinaciones 02.
Por favor descarga los archivos tutorial 02 with loads.ideaCon y tutorial 02.contemp a tu PC.
Cliente Python
Nuevamente, ejecuta el "IdeaStatiCa.ConnectionRestApi.exe" en CMD dentro de la carpeta apropiada de IDEA StatiCa y abre la herramienta IDE de tu elección.
- Crea un nuevo archivo e importa los paquetes que habilitarán el uso del cálculo y el enlace con la URL localhost.
Código fuente:
## Importación del paquete 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 paquetes para visualización
import pandas as pd
## Enlace con baseUrl
import ideastatica_connection_api.connection_api_service_attacher as connection_api_service_attacher
- Configura el registro a través de la variable "baseUrl," que activará tu localhost. En el segundo paso, empareja la ruta absoluta de tu archivo IDEA StatiCa Connection.
## Configurar registro
baseUrl = "http://localhost:5000"
## Ruta absoluta a la carpeta con tu script python y módulo de conexión
project_file_path = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 03\tutorial 02 with loads.ideaCon"
print("Opening project ",project_file_path)
- Empareja el cliente con un servicio que ya esté ejecutándose. Usa el bloque try/except - dado que el bloque try genera un error, se ejecutará el bloque except. En la primera fase, es necesario abrir el proyecto y encontrar el ID del proyecto de tu proyecto, que es único para cada proyecto de IDEA StatiCa. Luego necesitamos todas las conexiones, almacenadas en nuestro archivo, ya que queremos aplicar la plantilla solo a la primera.Como siguiente paso, podremos leer el archivo de plantilla de mapeo predeterminado y agregar otro ensamblaje de perno (M20 8.8) a la base de datos MPRL.
# Crear un cliente conectado a un servicio que ya esté ejecutándose
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
try:
# Abrir proyecto
uploadRes = api_client.project.open_project_from_filepath(project_file_path)
activeProjectId = api_client.project.active_project_id
# Obtener lista de todas las conexiones en el proyecto
connections_in_project = api_client.connection.get_connections(activeProjectId)
# primera conexión en el proyecto
connection1 = connections_in_project[0]
# ConTemplateMappingGetParam | Datos de la plantilla para obtener mapeo predeterminado (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()
# obtener el mapeo predeterminado para la plantilla y conexión seleccionadas
default_mapping = api_client.template.get_default_template_mapping(api_client.project.active_project_id, connection1.id, templateParam)
print("Default mapping: ",default_mapping)
#agregar nuevo ensamblaje de perno a la base de datos 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)
- Si queremos asignar el nuevo ensamblaje de perno a la operación Placa a placa directamente, tenemos que ejecutar el comando BaseTemplateConversion() y agregarlo a la plantilla de mapeo..
# agregar nuevo ensamblaje de perno a la plantilla de mapeo
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 la plantilla modificada a la conexión
applyTemplateData = ideastatica_connection_api.ConTemplateApplyParam() # ConTemplateApplyParam | Plantilla 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)
# Establecer el nuevo ensamblaje de perno a las operaciones en el archivo ideaCon
commonProperties = ConOperationCommonProperties()
commonProperties.bolt_assembly_id = 2
api_client.operation.update_common_operation_properties(api_client.project.active_project_id, connection1.id,commonProperties)
- También podemos obtener los costos para la conexión
# Obtener los costos de la conexión con la plantilla aplicada
costs = api_client.connection.get_production_cost(api_client.project.active_project_id, connection1.id)
print("Costs: ",costs.total_estimated_cost)
- Como último paso, podemos ejecutar el cálculo, ver los resultados, almacenar el archivo bajo un nuevo nombre y ver los resultados
# Ejecutar análisis de tensión-deformación para la conexión
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])
#Crear nuevo archivo ideaCon y aplicar la plantilla
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)
Los resultados están bien.En el siguiente tutorial, nos enfocaremos en optimizar algunos de los componentes.
Descargas archivos adjuntos
- tutorial 02.contemp (CONTEMP, 194 kB)
- tutorial 03 - apply_a_template.py (PY, 5 kB)
- tutorial 03 with template.ideaCon (IDEACON, 59 kB)
- tutorial 02 with loads.ideaCon (IDEACON, 9 kB)