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" 工况下的温度荷载,则添加0if (!hasTempLoad){_temp.Add(0); // 为当前框架单元添加0作为温度荷载值}}// 将温度荷载列表赋值给输出参数 TempLoadsTempLoads = _temp; // 将获取到的温度荷载列表赋值给 Grasshopper 组件的输出参数
}
SAP2000中该工况下的温度荷载
grasshopper中该工况下的荷载