1 概述
去年底Midas API开始内测,我一直在学习中。国产结构软件(如PK、YJK等)更早推出。由于Midas Gen在复杂结构分析方面更有优势,因此受到了很多关注。国内还没正式发布,估计也快了,正版用户可以找当地销售申请内测。
”
”
本文以官方文档为基础进行了简单的测试。在此之前,我们可以看到MIDAS API所有产品线都可以通过Rest API的JSON数据来贯通,类似于CSI的CSIAPI打通了SAP2000、ETABS、SAFE等系列产品。从下图的MIDAS全家桶API布局图,通过Rest API输出JSON进行数据交互,实现模型与更多软件互联互通;Rest API支持更多的语言: C#、Python、C++、JAVA、VBA、JS...所有可以读写JSON格式数据的语言均支持;而且数据可以基于网络传输,方便在PC端或移动端以及服务器端来调用Midas系列软件,并且可以实现多人协同建模;由于Json是自然语言,后续利用大模型进行训练,也可以实现智能建模。
以上图片来自于官网地址:https://midas-support.atlassian.net/wiki/spaces/MAW/pages
”
”
我们不需要了解复杂的Rest API,只需要知道可以通过POST/GET/PUT/DELETE来传输json格式数据即可。
2 JSON入门
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一种子集。JSON数据类型是一种结构化的数据格式,通常用于表示对象和数组。JSON数据类型有以下几种:
-
对象(Object):对象是一个无序的集合,由键值对组成。键是字符串,值可以是任意JSON数据类型。对象的键值对之间使用逗号分隔,整个对象使用花括号
{}
包裹。{
"name": "John",
"age": 30,
"city": "New York"
} -
数组(Array):数组是一个有序的列表,其中的元素可以是任意JSON数据类型。数组的元素之间使用逗号分隔,整个数组使用方括号
[]
包裹。["apple", "banana", "orange"]
-
字符串(String):字符串是一串Unicode字符序列,使用双引号
""
包裹。"Hello, World!"
-
数字(Number):数字可以是整数或浮点数,不使用引号包裹。
42
-
布尔值(Boolean):布尔值表示真或假,使用
true
或false
表示。true
-
空值(Null):空值表示不存在的值,使用
null
表示。null
JSON数据类型可以嵌套使用,例如,可以在对象中嵌套数组,或者在数组中嵌套对象。JSON数据类型的灵活性和易于阅读的特点使其成为一种常用的数据交换格式。
官方文档对创建节点、梁单元、板单元、有详细介绍。可以通过POST来与Midas Gen程序来通信。
下面是节点、梁、板单元、实体单元json格式。
■ 节点json格式
{
"Assign": {
"1": {
"X": -1,
"Y": -1,
"Z": -1
},
"2": {
"X": -2,
"Y": -2,
"Z": -2
},
"3": {
"X": -3,
"Y": -3,
"Z": -3
}
}
}
■ 梁单元json格式
{
"Assign": {
"198": {
"TYPE": "BEAM",
"MATL": 1,
"SECT": 1,
"NODE": [
30,
74
],
"ANGLE": 0
}
}
}
■ 板单元json格式
{
"Assign": {
"161": {
"TYPE": "PLATE",
"MATL": 1,
"SECT": 1,
"NODE": [
74,
70,
26,
],
"ANGLE": 0,
"STYPE": 1
}
}
}
■ 实体单元json格式
{
"Assign": {
"200": {
"TYPE": "SOLID",
"MATL": 1,
"SECT": 0,
"NODE": [
1,
7,
31,
2,
79,
85,
109,
80
]
}
}
}
3 API创建节点C#代码
这里介绍采用C#创建一个简单框架节点和单元的例子,更多属性大家可以进一步研究。
需要使用到C#的Newtonsoft.Json库,可以使用NuGet安装这个包。
引用如下库:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Runtime.CompilerServices;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Newtonsoft.Json.Linq;
❏ 定义一个Node的类 :
class Node
{
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }
}
❏创建节点的函数 :
static async Task postNode()
{
//如果是midas civil,仅需把gen改为civil
string ulr = "https://api-beta.midasit.cn:443/gen";
//这个key在界面的工具点击Connect API, Copy
string APIKey =
"your key number";
//定义Assign字典,json键值对,Assign是创建节点和单元的key,具体属性Node是值
Dictionary<int, Node> Assign = new Dictionary<int, Node>();
Assign.Add(1, new Node { X = 0, Y = 0, Z = 0 });
Assign.Add(2, new Node { X = 0, Y = 0, Z = 3 });
Assign.Add(3, new Node { X = 3, Y = 0, Z = 3 });
Assign.Add(4, new Node { X = 3, Y = 0, Z = 0 });
var result = new { Assign };
//将字典Assign序列化
string json = JsonConvert.SerializeObject(result);
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("MAPI-Key", APIKey);
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(ulr + "/db/node", content);
string responseContent = await response.Content.ReadAsStringAsync();
}
}
❏实现效果 :
4 API创建单元C#代码
❏ 定义一个BeamData的类 :
class BeamData
{
public string TYPE { get; set; }
public int MATL { get; set; }
public int SECT { get; set; }
public List<int> NODE { get; set; }
public int ANGLE { get; set; }
}
❏创建梁单元的函数 :
static async Task postNode()
{
//如果是midas civil,仅需把gen改为civil
string ulr = "https://api-beta.midasit.cn:443/gen";
//这个key在界面的工具点击Connect API
string APIKey =
"your key number";
//定义Assign字典,json键值对,Assign是创建节点和单元的key,具体属性BeamData是值
Dictionary<int, BeamData> Assign = new Dictionary<int, BeamData>();
//定义梁数据,实际可以通过grasshopper插件参数化来实现
//支撑或复杂曲面构件的beta角ANGLE可以通过参数化插件求解
BeamData element1 = new BeamData
{
TYPE = "BEAM",
MATL = 1,
SECT = 1,
NODE = new List<int> { 1, 2 },
ANGLE = 0,
};
BeamData element2 = new BeamData
{
TYPE = "BEAM",
MATL = 1,
SECT = 1,
NODE = new List<int> { 2, 3 },
ANGLE = 0,
};
BeamData element3 = new BeamData
{
TYPE = "BEAM",
MATL = 1,
SECT = 1,
NODE = new List<int> { 3, 4 },
ANGLE = 0,
};
Assign.Add(1, element1);
Assign.Add(2, element2);
Assign.Add(3, element3);
var result = new { Assign };
string json = JsonConvert.SerializeObject(result);
using (HttpClient client1 = new HttpClient())
{
client1.DefaultRequestHeaders.Add("MAPI-Key", APIKey);
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response1 = await client1.PostAsync(ulr + "/db/elem", content);
string responseContent1 = await response1.Content.ReadAsStringAsync();
}
}
❏实现效果 :
5 写在最后
生命的意义在于折腾,全网微信公众号第一篇关于MIDAS API就介绍到这里了,下次再用真实模型测试下运行效率及其他好玩的东西。这里给读者们道个歉,最近做什么都没太多精力,且阅读量再写下一篇吧。全部代码开源在www.structurevspoem上,点击下面阅读原文可以找到。
相关文章介绍
建筑|结构 |超限| 参数化|优化|编程|AIGC|仿真| 算法 |诗词|
”
”
WeChat &Tel:13902941216
Email:idealzeng@qq.com
website:www.structurevspoem.com
欢迎各种形式的合作与交流,祝好!”
”