Bentley ORD(openroads designer) 二次开发(BIM)第三节 创建一个简单的项目

每一个程序员在刚开始学习一门语言或一门技术的时候,时常会碰到“HelloWorld!”这个例子。这种模式会带领你去用最简洁的方式,去实现最简单的功能。本教程也不例外,我们也是用这种最简洁的方式尽快上手ORD二次开发。

        本章讲分三个部分:第一部分带领大家在Visual Studio中创建一个动态链接库;第二部分带领大家去注册一个key-in命令;第三部分比较简单,带领大家去配置一个能被ORD自动加载的动态库。

一 、创建Addin工程并进行配置

       通过这个步骤我们将给大家介绍一下怎么一步步在Visual Studio 2015中建立项目文件,进行项目文件的配置,并配置批处理文件(.bat)和编译文件(.mke), 从而创建出能被ORD加载的动态库文件。

1. 创建Addin

        在VS2015的项目创建模板中选取:Templates->Visual C#->Class Library。项目名称设置为“Lesson1”,.Net Framework选择4.6.1(如果创建项目时没有设置.net框架的版本,可在下图所示的项目配置中设置),路径设置在ORD SDK安装目录(笔者的安装目录为:C:\Program Files\Bentley\OpenRoadsDesignerCONNECTSDK\)下的examples文件夹中。

2.  配置项目文件

        ⑴、如上图所示,在已创建的Addin项目文件所在目录下,用文本编辑器(如: Notepad++)打开Lesson1.csproj。.csproj是C#的工程文件,其中记录了与工程有关的相关信息,例如包含的文件,程序的版本,所生成的文件的类型和位置的信息等。

      ⑵、 在PropertyGroup节点下添加<ReferencePath>$(ORD)</ReferencePath>。其中$(ORD)代表的是ORD的安装路径。

      我们在下图所示的位置添加“<OutputPath>$(ORD)\mdlapps</OutputPath>”,目的是把Debug和Release版的动态库(.dll)文件输出路径设置为ORD安装目录下的mdlapps文件夹下。

     ⑶、添加引用

       添加引用的方式如上图所示。最简洁的方式是在SDK的示例文件夹下打开ManagedSDKExample项目,打开.csproj项目文件复制所有的引用项到新项目的配置文件中。我们看到的一部分引用的程序集是ORD程序的,另外一部分是MicroStation平台的。如下图所示,注意引用的程序集不能漏掉ustation.dll,不然会有编译错误。

3. 设置启动批处理文件openSln.bat

        这时我们直接去编译“Lesson1”项目文件,会有编译错误,提示引用的程序集不存在,那是因为我们的“Lesson1”项目并不能识别“$(ORD)”。

        这时候我们需要复制一个其它项目中的openSln.bat 文件拷贝到本项目.sln目录下,并修改为下图所示:

        我们需要通过运行OpenRoads Designer CONNECT Edition SDK 的批处理文件,来启动刚刚创建的项目。

       在黑窗体里运行前面创建的openSln.bat 来启动VS。这样的话,我们的Lesson1”项目就可以编译通过了。

 4. 配置mke文件

       我们编译程序还可以使用MKE文件,这样的话我们在上一步骤的黑窗口中直接键入“bmake”或“bmake Lesson1.mke” 就可以执行编译操作了。我们看到mke文件的好处是:不需要在Visual Studio执行编译命令,我们也可以执行Lesson1的编译操作。编写mke文本的内容,我们同样可以从示例中的ManagedSDKExample例子中复制“ManagedSDKExample.mke”文件,改为“Lesson1.mke”,并按照上图修改对应处的名称为“Lesson1”就可以了。

二、 添加入口类和KEY-IN命令

       前面还是一个空的项目,下面我们需要把程序的内容填充起来。我们需要编写与动态库入口和命令相关的代码了。

       首先,我们新建入口类“Lesson1”,继承于 Bentley.MstnPlatformNET.AddIn。添加特性[Bentley.MstnPlatformNET.AddInAttribute(MdlTaskID = “Lesson1")],并重载Run函数。如下图所示:

       另外,我们在Visual Studio项目中新建一个CommandTable.xml文件(注意:文件名必须为“CommandTable.xml”,不然不能加载命令)。

       接下来做以下设置:

    • 设置文件属性为embedded resource

    • 在项目的属性文件中添加<LogicalName>CommandTable.xml</LogicalName>

    CommandTable.xml的具体内容如下图所示:

    对命令表xml格式的文件说明如下:

在commandtable.xml文件中我们首先声明了xml文件的一般属性

<?xml version="1.0" encoding="utf-8" ?>

然后再定义key-in命令树标签

<KeyinTree xmlns="http://www.bentley.com/schemas/1.0/MicroStation/AddIn/KeyinTree.xsd">

以上都是固定格式,不需要更改。

根节点采用<RootKeyinTable > </RootKeyinTable>标签,并给该标签的ID属性赋值"root",

在RootKeyinTable 标签里面,我们要定义在MS的KEY-IN窗口输入的内容了,即用

<Keyword ></Keyword>标签来定义。

CommandClass属性表示命令类型,MS程序支持的有Placement、Viewing、Fence、Parameters、Locks、MacroCommand、Manipulation等,一般选择MacroCommand命令类型。CommandWord属性表示用户在MS的key-in窗口输入的名称。SubtableRef 属性表示该命令的子节点的标签ID属性。一般在 RootKeyinTable 标签中以上三个属性都要定义,此外如果有子命令的话,还需要在RootKeyinTable 里定义<Options />标签,并且把该标签的Required 属性设置为"true"。

    下面我们需要写弹出HelloWorld对话框了的函数了。我们在项目中新建一个Keyin.cs文件,具体内容如下:

     因为我们在CommandTable.xml文件在我们通过<KeyinHandler Keyin="Lesson1 HELLOWORLD" Function="Lesson1.Keyin.HelloWorld"/>把 “Lesson1 HELLOWORLD”命令子节点和HelloWorld静态函数绑定, 那么这个程序编译后就可以执行相应命令了。

     执行编译,我们可以直接在Visual Studio中自己编译,如下图所示在命令行中进行。编译完成以后我们可以在ORD安装目录下的mdlapps文件夹中看到Lesson1.dll文件。

    在ORD中我们可以通过“mdl load”命令把编译后的Lesson1.dll文件加载到ORD中,如下图所示:

     这时我们输入“Key-in”命令,弹出命令输入对话框,我们可以键入“Lesson1 HELLOWORLD”。

    这时就会弹出如下图所示的“HelloWorld”对话框。

     如果我们要调试运行我的Lesson1程序,可以如下图所示设置Lesson1项目的外部启动程序为ORD的可执行程序“OpenRoadsDesigner.exe”。

三、 加载配置

          如果我们不想每次都通过“mdl load”命令去加载Lesson1.dll,我们可以通过配置文件.cfg的加载方式,让ORD程序每次启动的时候都去加载Lesson1.dll文件。我们可以把下面的文本复制到新建Lesson1.cfg文件中,并保存在ORD目录下的..\config\appl\文件中。

#PLEASE DO NOT USE FIRST LINE OF CONFIG FILE. IT WILL BE IGNORED.

CIF_ADDIN_DIR = $(MSDIR) mdlapps/

MS_LIBRARY_PATH > $(CIF_ADDIN_DIR)

MS_ADDINPATH > $(CIF_ADDIN_DIR)

MS_ADDIN_DEPENDENCYPATH > $(CIF_ADDIN_DIR)

MS_DGNAPPS > $(CIF_ADDIN_DIR)Lesson1.dll

本章代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值