SAP2000 API入门指南(二) OAPI插件开发
ycf888
ycf888 Lv.2
2009年04月01日 13:18:19
来自于SAP2000
只看楼主

在入门指南(一)中,给大家介绍了从外部程序调用SAP2000进行自动建模、分析、输出的例子。本文介绍另外一种应用方法,可以在SAP2000的“Tools”菜单下增加一个菜单项,点击菜单项后可执行特定的功能,即所谓的“Plug in”。 每个插件实质上是一个dll。在C#中,用“类库”项目来生成此dll,公开一个cPlugin类,并在类中公开main方法,该方法的原型必须是:public void Main(ref Sap2000.cSapModel SapModel, ref Sap2000.cSapPlugin ISapPlugin);

在入门指南(一)中,给大家介绍了从外部程序调用SAP2000进行自动建模、分析、输出的例子。本文介绍另外一种应用方法,可以在SAP2000的“Tools”菜单下增加一个菜单项,点击菜单项后可执行特定的功能,即所谓的“Plug in”。



每个插件实质上是一个dll。在C#中,用“类库”项目来生成此dll,公开一个cPlugin类,并在类中公开main方法,该方法的原型必须是:

public void Main(ref Sap2000.cSapModel SapModel, ref Sap2000.cSapPlugin ISapPlugin);



下面我们通过一个例子来说明如何开发插件。在这个例子中,我们实现一个显示所选的对象的数目的简单功能,即让用户首先在SAP2000中选择对象,然后点击插件所对应的菜单项,插件会报告用户已选择的对象的数量。



开发环境:

SAP2000 V12.0.2 正式版(学习版不具备API开发的功能)

Microsoft Visual Studio 2008, C#



开发步骤:

1. 建立项目。启动VS2008,建立一个Windows C# 类库项目,如下图:


1_project.png


2. 建立代码框架

VS自动生成了代码文件class1.cs,并创建了如下代码:

namespace ObjectCount
{
public class Class1
{
}
}



将类名“Class1”改为“cPlugin”,并添加main函数,修改后的全部代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ObjectCount
{
public class cPlugin
{
public void Main(ref Sap2000.cSapModel SapModel, ref Sap2000.cSapPlugin ISapPlugin)
{
int NumberItems = 0;
Array ObjectTypes = null;
Array ObjectNames = null;
SapModel.SelectObj.GetSelected(ref NumberItems, ref ObjectTypes, ref ObjectNames);
MessageBox.Show(string.Format("共选择了{0}个对象.", NumberItems));
ISapPlugin.Finish(0);
}
}
}


执行插件时,SAP2000会调用cPlugin类的Main函数,因此我们的类库必须要有cPlugin类和Main函数,并且Main函数的原型必须是这样的。



3. 引用SAP2000 API

以上代码是不能编译通过的,我们还要引用SAP2000 API。选菜单“项目/添加引用”,如下图:

2_addRef.png

在弹出的“添加引用”对话框中,选“浏览”标签,选中SAP2000目录下的SAP2000.exe文件,如下图。

3_addRefDialog.png

按“确定”按钮。VS2008生成了对SAP2000 API的引用。



4. 引用System.Windows.Forms

由于我们要显示一个结果对话框,需要引用DotNet的System.Windows.Forms. 操作方法是:选菜单“项目/添加引用”,选中“NET”标签,再选中System.Windows.Forms,如下图:

4_ref.png

按确定按钮。



5. 编译成COM组件

添加对SAP2000 API的引用和System.Windows.Forms的引用后,程序就可以编译通过了,但必须要编译成COM组件,才能真正成为SAP2000的插件。选菜单“项目/ObjectCount属性”,如下图所示。

5_property.png

在属性页面中选择“生成”标签,再勾选“为COM互操作注册”,如下图:

6_property_sheet.png

在VS2008的解决方案管理器中,打开项目的Properties节点下的AssemblyInfo.cs,如下图所示。

7_assemblyInfo.png

找到[assembly: ComVisible(false)]语句,将false改为true,这样就成为可见的COM组件了。



6. 生成

选菜单“生成/生成解决方案”,如下图所示:

8_build.png

VS2008将生成此dll,并自动将此COM组件注册。



7. 添加到SAP2000的菜单中

运行SAP2000,选菜单“Tools”->“Add/Show Plug Ins...”,如下图:

9_tools_menu.png

在弹出的“External Plug In Data”对话框中,在“Plug In Name”栏输入“ObjectCount”,在“Menu Text”栏输入“统计选择数量”,然后按“Add”按钮,如下图:

a_plugin.png

添加成功后,列表中会多一行,如下图所示:

b_addok.png

按“OK”按钮。再选菜单“Tools”,可以看到多了一个菜单项“统计选择数量”,如下图:

c_tools_menu_added.png



8. 运行插件

点选刚添加的菜单项“统计选择数量”,程序显示“Plug In Warning”对话框,如下图:

d_warning.png

按“Yes”按钮。程序显示结果对话框,如下图:

e_0.PNG



由于我们没有选择任何对象,所以输出结果为0. 在SAP2000中创建一些构件,然后选中这些构件,再执行此插件,就可以显示选中的构件的数量。



小结

SAP2000的插件开发非常灵活,为SAP2000的前后处理软件的开发提供了强大的支持。

[ 本帖最后由 ycf888 于 2009-4-1 13:29 编辑 ]

1_project.png


2_addRef.png


3_addRefDialog.png


4_ref.png


5_property.png


6_property_sheet.png


7_assemblyInfo.png


8_build.png


9_tools_menu.png


a_plugin.png


b_addok.png


c_tools_menu_added.png


d_warning.png


e_0.PNG

免费打赏
liuchaoshan
2009年04月06日 16:09:25
2楼
:call: 感谢分享!!!!!:call: :call: :call:
回复
xiangyuputao
2009年06月04日 16:43:23
3楼
谢谢分享,学习一下了,刚刚开始学。呵呵
回复
jxncxuqi
2009年06月26日 15:39:51
4楼
谢分享,学习一下了,刚刚开始学。呵呵
回复
雪下大了
2010年06月09日 10:23:15
5楼
:victory:
回复
fyhhh9999
2010年07月25日 12:12:56
6楼
谢谢楼主的无私奉献,这个对我有很大的用处,再次感谢
回复
faithlg
2010年07月28日 18:09:30
7楼
楼主好人,再次感谢
回复
suhong1984
2010年08月19日 21:17:02
8楼
好资料,谢谢,下载学习下
回复

相关推荐

APP内打开