第一步
我们建议先阅读教程 如何开始使用 API - 基础知识 01,该教程将介绍 API 的基本概念及环境配置方法。
Connection 文件
本示例基于教程 如何开始使用 API - 批量导入荷载组合 02 中创建的文件。
请将文件 tutorial 02 with loads.ideaCon 和 tutorial 02.contemp 下载到您的电脑。
Python 客户端
同样,在 CMD 中于正确的 IDEA StatiCa 文件夹内运行"IdeaStatiCa.ConnectionRestApi.exe",并打开您选择的 IDE 工具。

- 创建一个新文件并 导入所需的包,这些包将启用计算功能并与本地主机 URL 建立连接。
源代码:
## 导入 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
#导入可视化包
import pandas as pd
## 与 baseUrl 建立连接
import ideastatica_connection_api.connection_api_service_attacher as connection_api_service_attacher

- 通过变量"baseUrl"配置日志记录,该变量将调用您的本地主机。第二步,配置您的 IDEA StatiCa Connection 文件的绝对路径。
## 配置日志记录
baseUrl = "http://localhost:5000"
## Python 脚本和 Connection 模块所在文件夹的绝对路径
project_file_path = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 03\tutorial 02 with loads.ideaCon"
print("Opening project ",project_file_path)

- 将客户端与已运行的服务配对。使用 try/except 块——当 try 块引发错误时,将执行 except 块。第一阶段需要打开项目并找到项目 ID,该 ID 对每个 IDEA StatiCa 项目是唯一的。然后需要获取文件中存储的所有节点,因为我们只想将模板应用于第一个节点。下一步,可以读取默认映射模板文件,并向 MPRL 数据库添加新的螺栓组件 (M20 8.8)。
# 创建连接到已运行服务的客户端
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
try:
# 打开项目
uploadRes = api_client.project.open_project_from_filepath(project_file_path)
activeProjectId = api_client.project.active_project_id
# 获取项目中所有节点的列表
connections_in_project = api_client.connection.get_connections(activeProjectId)
# 项目中的第一个节点
connection1 = connections_in_project[0]
# ConTemplateMappingGetParam | 用于获取默认映射的模板数据(可选)
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()
# 获取所选模板和节点的默认映射
default_mapping = api_client.template.get_default_template_mapping(api_client.project.active_project_id, connection1.id, templateParam)
print("Default mapping: ",default_mapping)
#向 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)

- 如果要将新的螺栓组件直接分配给板与板操作,需要运行命令 BaseTemplateConversion() 并将其添加到映射模板中。
# 向映射模板添加新的螺栓组件
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)
# 将修改后的模板应用于节点
applyTemplateData = ideastatica_connection_api.ConTemplateApplyParam() # ConTemplateApplyParam | 要应用的模板(可选)
applyTemplateData.connection_template = templateParam.template
applyTemplateData.mapping = default_mapping
applyTemplateResult = api_client.template.apply_template(api_client.project.active_project_id, connection1.id, applyTemplateData)
# 将新的螺栓组件设置到 ideaCon 文件中的操作
commonProperties = ConOperationCommonProperties()
commonProperties.bolt_assembly_id = 2
api_client.operation.update_common_operation_properties(api_client.project.active_project_id, connection1.id, commonProperties)

- 我们还可以获取节点的费用
# 获取应用模板后节点的费用
costs = api_client.connection.get_production_cost(api_client.project.active_project_id, connection1.id)
print("Costs: ",costs.total_estimated_cost)

- 最后一步,我们可以运行计算、查看结果、以新名称保存文件并查看计算结果
# 对节点运行应力-应变分析
con1_cbfem_results1 = api_client.calculation.calculate(api_client.project.active_project_id, [connection1.id])
results = api_client.calculation.get_results(api_client.project.active_project_id, [connection1.id])
CheckResSummary = pd.DataFrame(results[0].check_res_summary)
print("Results summary: \n",CheckResSummary[1])
#创建新的 ideaCon 文件并应用模板
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)


计算结果正常。在后续教程中,我们将重点介绍如何优化部分组件。
