csharp
if (build == true)
{
// 连接到正在运行的 SAP2000
cOAPI mySapObject = (cOAPI) System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
cSapModel mySapModel = mySapObject.SapModel;
// 获取所有框架单元的总数
int numberFrames = 0;
string[] frameNames = null;
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];
ret = mySapModel.FrameObj.GetLoadTemperature(frameName, ref NumberItems, ref FrameName, ref LoadPat, ref MyType, ref Val, ref PatternName);
// 检查是否为 "PRE-F" 工况下的温度荷载
bool hasTempLoad = false;
for (int j = 0; j < NumberItems; j++)
{
if (LoadPat[j] == "PRE-F" && MyType[j] == 1)
{
// 修改温度荷载为指定值 (例如 300)
double newTempLoad = 500;
ret = mySapModel.FrameObj.SetLoadTemperature(frameName, "PRE-F", 1, newTempLoad, "", true, eItemType.Objects);
_temp.Add(newTempLoad);
hasTempLoad = true;
break;
}
}
// 如果没有 "PRE-F" 工况下的温度荷载,则添加0
if (!hasTempLoad)
{
_temp.Add(0);
}
}
// 将温度荷载列表赋值给输出参数 TempLoads
TempLoads = _temp;
}
在检查到指定单元存在 "PRE-F" 工况下的温度荷载时,使用 SetLoadTemperature 函数将温度荷载修改为指定值 (这里以 300 为例)。
SetLoadTemperature 函数的参数说明如下:
frameName: 框架单元的名称
"PRE-F": 荷载工况的名称
1: 温度荷载的类型 (1 表示温度)
newTempLoad: 新的温度荷载值 (这里设置为 300)
"": 温度荷载沿框架单元的分布模式 (空字符串表示均匀分布)
true: 是否替换之前的温度荷载
eItemType.Objects: 应用温度荷载的对象类型 (这里是单个框架单元对象)
这里假设已经在 SAP2000 模型中定义了名为 "PRE-F" 的荷载工况。如果使用的是其他名称的荷载工况,相应地修改代码中的 LoadPat[j] == "PRE-F" 条件。
修改后的代码将遍历所有框架单元,并将指定单元在 "PRE-F" 工况下的温度荷载修改为指定值 (这里是 300)。
修改后的温度荷载值将被添加到 _temp 列表中,并最终赋值给输出参数 TempLoads。