【C#】【SAP2000】OAPI文档案例详解

本文详细描述了如何通过SAP2000API创建结构模型,设置材料、截面和荷载,执行分析,并将结果与手算值进行比较的过程。
摘要由CSDN通过智能技术生成

创建一个简单的结构模型,运行分析,提取结果,并将结果与手算值进行比较。

以下是详细的代码解析:

  1. 开头部分是一些using语句,引用了必要的命名空间,特别是SAP2000v1, 它包含了SAP2000 API的类和方法。

  2. 在Main方法中,首先定义了一些变量,用于控制是启动一个新的SAP2000实例还是附加到一个已有的实例,以及SAP2000程序的路径。

bool AttachToInstance;  //是否附加到一个已有实例
AttachToInstance = false;

bool SpecifyPath;  //是否指定SAP2000程序路径
SpecifyPath = false;

string ProgramPath;  //SAP2000程序路径
ProgramPath = @"C:\Program Files\Computers and Structures\SAP2000 22\SAP2000.exe";
  1. 接下来是创建模型文件的目录和文件名。
string ModelDirectory = @"C:\CSiAPIexample";  //模型文件的目录
string ModelName = "API_1-001.sdb";  //模型文件名
string ModelPath = ModelDirectory + System.IO.Path.DirectorySeparatorChar + ModelName;  //模型文件完整路径
  1. 然后,创建一个cOAPI对象mySapObject,它是与SAP2000应用程序交互的主要对象。
cOAPI mySapObject = null;
  1. 创建一个cHelper对象myHelper,它提供了一些辅助方法。
cHelper myHelper;
myHelper = new Helper();
  1. 根据AttachToInstance的值,决定是附加到一个已有的SAP2000实例,还是启动一个新的实例。如果是启动新实例,那么还要根据SpecifyPath的值决定是使用指定的路径还是使用默认的安装路径。
if (AttachToInstance)
{
    //附加到一个已运行的SAP2000实例
    mySapObject = myHelper.GetObject("CSI.SAP2000.API.SapObject");
}
else
{
    if (SpecifyPath)
    {
        //从指定路径启动一个新的SAP2000实例
        mySapObject = myHelper.CreateObject(ProgramPath);
    }
    else
    {
        //从默认安装路径启动一个新的SAP2000实例
        mySapObject = myHelper.CreateObjectProgID("CSI.SAP2000.API.SapObject");
    }
    //启动SAP2000应用程序
    mySapObject.ApplicationStart();
}
  1. 创建一个cSapModel对象mySapModel,它代表SAP2000的结构模型,大部分操作都是通过它进行的。
cSapModel mySapModel;
mySapModel = mySapObject.SapModel;
  1. 初始化模型,创建一个新的空模型。
mySapModel.InitializeNewModel((eUnits.kip_in_F));
mySapModel.File.NewBlank();
  1. 定义材料属性。
mySapModel.PropMaterial.SetMaterial("CONC", eMatType.Concrete, -1, "", "");
mySapModel.PropMaterial.SetMPIsotropic("CONC", 3600, 0.2, 0.0000055, 0);
  1. 定义截面属性。
mySapModel.PropFrame.SetRectangle("R1", "CONC", 12, 12, -1, "", "");
  1. 定义截面属性修正系数。
double[] ModValue = new double[8];
//...
mySapModel.PropFrame.SetModifiers("R1", ref ModValue);
  1. 切换单位制为kip-ft。
mySapModel.SetPresentUnits(eUnits.kip_ft_F);
  1. 添加框架单元。
string[] FrameName = new string[3];
//...
mySapModel.FrameObj.AddByCoord(0, 0, 0, 0, 0, 10, ref temp_string1, "R1", "1", "Global");
mySapModel.FrameObj.AddByCoord(0, 0, 10, 8, 0, 16, ref temp_string1, "R1", "2", "Global"); 
mySapModel.FrameObj.AddByCoord(-4, 0, 10, 0, 0, 10, ref temp_string1, "R1", "3", "Global");
  1. 指定节点约束。
string[] PointName = new string[2];
bool[] Restraint = new bool[6];
//...
mySapModel.PointObj.SetRestraint(PointName[0], ref Restraint, 0);
mySapModel.PointObj.SetRestraint(PointName[1], ref Restraint, 0);
  1. 刷新视图,更新缩放。
mySapModel.View.RefreshView(0, false);
  1. 添加荷载工况。
mySapModel.LoadPatterns.Add("1", eLoadPatternType.Other, 1, true);
mySapModel.LoadPatterns.Add("2", eLoadPatternType.Other, 0, true);
//...
  1. 指定各个荷载工况下的荷载。
mySapModel.PointObj.SetLoadForce(PointName[0], "2", ref PointLoadValue, false, "Global", 0);
mySapModel.FrameObj.SetLoadDistributed(FrameName[2], "2", 1, 10, 0, 1, 1.8, 1.8, "Global", false, false, 0);  
//...
  1. 切换回kip-in单位制。
mySapModel.SetPresentUnits(eUnits.kip_in_F);
  1. 保存模型。
mySapModel.File.Save(ModelPath);
  1. 运行分析。
mySapModel.Analyze.RunAnalysis();
  1. 提取各个荷载工况下的分析结果。
double[] SapResult = new double[7]; 
for (i = 0; i <= 6; i++)
{
    mySapModel.Results.Setup.DeselectAllCasesAndCombosForOutput();
    mySapModel.Results.Setup.SetCaseSelectedForOutput(System.Convert.ToString(i + 1), true);
    if (i <= 3)
    {
        mySapModel.Results.JointDispl(PointName[1], eItemTypeElm.ObjectElm, ref NumberResults, //...);
    }
    else
    {
        mySapModel.Results.JointDispl(PointName[0], eItemTypeElm.ObjectElm, ref NumberResults, //...);
    }              
}
  1. 关闭SAP2000,释放资源。
mySapObject.ApplicationExit(false);
mySapModel = null;  
mySapObject = null;
  1. 将SAP2000的分析结果与预设的独立计算结果进行对比,计算误差百分比,并输出对比结果。
double[] IndResult = new double[7];
//... 
for (i = 0; i <= 6; i++)
{
    PercentDiff[i] = (SapResult[i] / IndResult[i]) - 1;
    //...
}

string msg = "";
msg = msg + "LC 
 Sap2000 
 Independent
 
 %Diff\r\n";
for (i = 0; i <= 5; i++) 
{
    msg = msg + string.Format("{0:0}", i + 1) + "
    " + SapResultString[i] + "
   " + IndResultString[i] + "
      
 " + PercentDiffString[i] + "\r\n";
}
//...
Console.WriteLine(msg);

涵盖了SAP2000 API的许多基本功能,如

  • 创建模型
  • 定义材料
  • 截面属性
  • 创建结构对象
  • 指定荷载和约束条件
  • 运行分析
  • 提取结果
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmywillstronger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值