if (build == true)
{
// 连接到正在运行的 SAP2000
// 使用 COM 接口获取 SAP2000 的 API 对象
cOAPI mySapObject = (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
// 获取 SAP2000 模型对象
cSapModel mySapModel = mySapObject.SapModel;
// 获取所有框架单元的总数
int numberFrames = 0; // 存储框架单元的总数
string[] frameNames = null; // 存储所有框架单元的名称
// 调用 SAP2000 API 的 GetNameList 函数获取框架单元的总数和名称
int ret = mySapModel.FrameObj.GetNameList(ref numberFrames, ref frameNames);
// 声明温度荷载列表
List<double> _temp = new List<double>(); // 存储每个框架单元的温度荷载值
// 遍历所有单元
for (int i = 0; i < numberFrames; i++)
{
// 获取当前框架单元的名称
string frameName = frameNames[i];
// 获取当前框架单元的温度荷载
int NumberItems = 0; // 存储当前框架单元的荷载数量
string[] FrameName = new string[0]; // 存储当前框架单元的名称
string[] LoadPat = new string[0]; // 存储荷载工况的名称
int[] MyType = new int[0]; // 存储荷载类型
double[] Val = new double[0]; // 存储荷载值
string[] PatternName = new string[0]; // 存储荷载工况的名称
// 调用 SAP2000 API 的 GetLoadTemperature 函数获取当前框架单元的温度荷载信息
ret = mySapModel.FrameObj.GetLoadTemperature(frameName, ref NumberItems, ref FrameName, ref LoadPat, ref MyType, ref Val, ref PatternName);
// 检查是否为 "PRE-F" 工况下的温度荷载
bool hasTempLoad = false; // 标记是否找到 "PRE-F" 工况下的温度荷载
for (int j = 0; j < NumberItems; j++)
{
// 如果找到 "PRE-F" 工况下的温度荷载
if (LoadPat[j] == "PRE-F" && MyType[j] == 1)
{
_temp.Add(Val[j]); // 将温度荷载值添加到列表中
hasTempLoad = true; // 标记已找到温度荷载
break; // 跳出循环,因为每个框架单元只能有一个温度荷载
}
}
// 如果没有找到 "PRE-F" 工况下的温度荷载,则添加0
if (!hasTempLoad)
{
_temp.Add(0); // 为当前框架单元添加0作为温度荷载值
}
}
// 将温度荷载列表赋值给输出参数 TempLoads
TempLoads = _temp; // 将获取到的温度荷载列表赋值给 Grasshopper 组件的输出参数
}
SAP2000中该工况下的温度荷载
grasshopper中该工况下的荷载