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


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

    以下是详细的代码解析:

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 接下来是创建模型文件的目录和文件名。
    string ModelDirectory = @"C:\CSiAPIexample";  //模型文件的目录
    string ModelName = "API_1-001.sdb";  //模型文件名
    string ModelPath = ModelDirectory + System.IO.Path.DirectorySeparatorChar + ModelName;  //模型文件完整路径
    
    • 1
    • 2
    • 3
    1. 然后,创建一个cOAPI对象mySapObject,它是与SAP2000应用程序交互的主要对象。
    cOAPI mySapObject = null;
    
    • 1
    1. 创建一个cHelper对象myHelper,它提供了一些辅助方法。
    cHelper myHelper;
    myHelper = new Helper();
    
    • 1
    • 2
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. 创建一个cSapModel对象mySapModel,它代表SAP2000的结构模型,大部分操作都是通过它进行的。
    cSapModel mySapModel;
    mySapModel = mySapObject.SapModel;
    
    • 1
    • 2
    1. 初始化模型,创建一个新的空模型。
    mySapModel.InitializeNewModel((eUnits.kip_in_F));
    mySapModel.File.NewBlank();
    
    • 1
    • 2
    1. 定义材料属性。
    mySapModel.PropMaterial.SetMaterial("CONC", eMatType.Concrete, -1, "", "");
    mySapModel.PropMaterial.SetMPIsotropic("CONC", 3600, 0.2, 0.0000055, 0);
    
    • 1
    • 2
    1. 定义截面属性。
    mySapModel.PropFrame.SetRectangle("R1", "CONC", 12, 12, -1, "", "");
    
    • 1
    1. 定义截面属性修正系数。
    double[] ModValue = new double[8];
    //...
    mySapModel.PropFrame.SetModifiers("R1", ref ModValue);
    
    • 1
    • 2
    • 3
    1. 切换单位制为kip-ft。
    mySapModel.SetPresentUnits(eUnits.kip_ft_F);
    
    • 1
    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
    • 2
    • 3
    • 4
    • 5
    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
    • 2
    • 3
    • 4
    • 5
    1. 刷新视图,更新缩放。
    mySapModel.View.RefreshView(0, false);
    
    • 1
    1. 添加荷载工况。
    mySapModel.LoadPatterns.Add("1", eLoadPatternType.Other, 1, true);
    mySapModel.LoadPatterns.Add("2", eLoadPatternType.Other, 0, true);
    //...
    
    • 1
    • 2
    • 3
    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
    • 2
    • 3
    1. 切换回kip-in单位制。
    mySapModel.SetPresentUnits(eUnits.kip_in_F);
    
    • 1
    1. 保存模型。
    mySapModel.File.Save(ModelPath);
    
    • 1
    1. 运行分析。
    mySapModel.Analyze.RunAnalysis();
    
    • 1
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 关闭SAP2000,释放资源。
    mySapObject.ApplicationExit(false);
    mySapModel = null;  
    mySapObject = null;
    
    • 1
    • 2
    • 3
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    • 创建模型
    • 定义材料
    • 截面属性
    • 创建结构对象
    • 指定荷载和约束条件
    • 运行分析
    • 提取结果
  • 相关阅读:
    记一次python 正则表达式
    鼠标不动了怎么办?3招解决问题!
    笨办法学python3
    八、PL/SQL 记录
    【LeetCode】螺旋矩阵&&旋转图像
    AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
    12、JavaWeb启程——分页查询的设计
    Windows中通过bat脚本修改系统默认日期与时间
    FP独立站该怎么运营?斗篷黑科技教您找对方法引流获客
    发现一款好用到爆的数据库工具,被惊艳到了
  • 原文地址:https://blog.csdn.net/hmywillstronger/article/details/136716067