怎么移植 Arx/ Dbx 模块为 Crx/DBX 模块来支持 AutoCAD 易(值得一看)

如何移植 Arx/ Dbx 模块为 Crx/DBX 模块来支持 AutoCAD 易(值得一看)

为了支持多平台,AutoCAD实现了大分离,我们两年前已经介绍了这个概念,但是很多人对怎么实现大分离还是不甚了解。我们开发部的吴忠写下了这篇教程,我只是负责发表一下,方便大家阅读。

附带有经典例子Polysamp的移植录像,在本文的最后提供了下载链接。

目录

1 概要

2 开发前提

3 Dbx/Arx 模块移植步骤

4 附录

Bundle 格式和简单说明

概要

AutoCAD 易只支持 Dbx Crx 模块,不支持Arx 模块,第三方应用需要把他们的应用程序先拆分成Dbx/Crx/Arx 模块或者Crx/Arx 模块

Dbx模块中一般是包含 database相关的,比如自定义实体。该模块会链接到 acdb**.dllCrx 模块中一般是包含一些 In-Canvas 相关的 UI,比如command 等等。当然,所有Dbx 中的内容也可以包含在Crx中。该模块会链接到 accore.dll

Arx

模块一般是包含一些 Out-Canvas相关的UI,比如 dialog,菜单等。该模块会链接到acad.exe。 同样的,所有Dbx,Crx中的内容也同样可以包含在 Arx模块中。但是如果第三方应用需要能被AutoCAD易支持,那么第三方应用需要把Out-Canvas UI相关的代码都拆分到 Arx 模块中,因为在 AutoCAD 易中,所有Out-Canvas UI 相关的内容都需要用JavaScript重新来实现。

开发前提

2013 版本的 ObjectArx

Dbx/Arx 模块移植步骤

1.

对于Dbx模块,我们不需要做任何处理。对于Arx模块,首先,需要更新工程文件中的 设置:把Target Extension ”.arx”改成”.crx”,添加accore.lib 模块作为Additional Dependencies,同时把acad.lib AdditionalDependencies 中删除。

2.

然后需要把原 Arx 模块中所有Out-Canvas UI 相关的内容都移植到一个新的Arx 模块中。 可以通过编译该工程来发现所有链接错误,然后把这些错误链接都移植到新的Arx模块 中(在 Polysamp 例子中,原 Arx 中有一些菜单相关的UI,这些都需要被移植到新的 Arx 模块 中,因为该例子只需要支持AutoCAD易,所以这些都被直接注释掉,详见polymnu.cpp文件。 对于只需要支持 AutoCAD易的应用,第三方也可以这样去快速处理)。

3.

利用 JavaScript 来重新改写Out-Canvas UI,Autodesk正在提供更多的支持使用户今后能 方便的重写这些 UI

4.

创建一个Bundle来描述您的模块,可以参考Ploysamp例子中的asdkpolyui.bundle。关于Bundle,可以查看附录中的简要描述。

5.

applicationboudle放在指定的目录下面folder(\\ProgramFiles\Autodesk\ApplicationPlugins或者 \\User RoamingFolder\Autodesk\ApplicationPlugins),AutoCAD易会自动搜索这两个目录下面的 bundle,并 且自动去加载它们。

附录

Bundle:

Bundle 格式和简单说明

Bundle 就是一个文件包,里面包含一些简单的文件结构。第三方开发可以按照自己意愿去创建任意的子文件夹,但是Xml文件 (PackageContents.xml)必须放在根目录下,而且文件夹必须以”.bundle”结尾。

下面是 Polysamp 的文件结构例子(蓝色是文件夹,黑色是文件),该例子非常简单,只描述了dbx crx 模块,后面我们还会加入UI 的部分,包括 cuix, icon 等等。

asdkpolyui.bundle

PackageContents.xml

Contents

Win32

Asdkpolyobj.dbx

asdkpolyui.crx

Win64

Asdkpolyobj.dbx

asdkpolyui.crx

PackageContents.xml的内容如下:

<?xmlversion="1.0" encoding="utf-8" ?>

<ApplicationPackageSchedmaVersion="1.0" ProductCode="{60E86427-9C47-4882-B3A5-

2D2ACC05FD75}"

Name="Polysamp"NameEnu="Polysamp" NameDeu="PolySamp"

Version="1.0"

Description="CADRenSample packageXml" DescriptionEnu="Poly samp for CADRen"

DescriptionDeu="CADRenSample packageXml"

Author="WilliamWu"

<CompanyDetails

Name="WilliamSoft"

Phone="02138653768"

Url="www.cadren.com"

Email="zhong.wu@autodesk.com"

/>

<Components>

<RuntimeRequirementsOS="Win32|Win64" Platform="AutoCAD" SeriesMin="R18"

SeriesMax="R18.2"/>

<ComponentEntry

AppName="AsdkPolyCAD"

ModuleNameWin32="./Contents/Win32/asdkpolyui.crx"

ModuleNameWin64="./Contents/Win64/asdkpolyui.crx"

AppDescription="PolySample UI for CADRen"

LoadOnAutoCADStartup="True"

LoadOnCommandInvocation="True"

<CommandsGroupName="ASDK_POLYGON">

<CommandGlobal="ASDK_POLY" Local="POLY" />

<CommandGlobal="PPOLY" Local="PPOLY" />

<CommandGlobal="ASDK_DRAGPOLY" Local="DRAGPOLY" />

<CommandGlobal="ASDK_POLYEDIT" Local="POLYEDIT" />

<CommandGlobal="ASDK_TRANSACT" Local="TRANSACT" />

<CommandGlobal="ASDK_HILITPOLY" Local="HILITPOLY" />

<CommandGlobal="ASDK_HILITSOLID" Local="HILITSOLID" />

<CommandGlobal="ASDK_CREATEINSERT" Local="CREATEINSERT" />

<CommandGlobal="ASDK_HILITINSERT" Local="HILITINSERT" />

<CommandGlobal="ASDK_USEDRAGDATA" Local="USEDRAGDATA" />

<CommandGlobal="ASDK_POLYCLEANUI" Local="POLYCLEANUI" />

</Commands>

</ComponentEntry>

<ComponentEntry

AppName="AsdkPolyCAD_DBX"

ModuleNameWin32="./Contents/Win32/asdkpolyobj.dbx"

ModuleNameWin64="./Contents/Win64/asdkpolyobj.dbx"

AppDescription="CustomPoly Object"

LoadOnAutoCADStartup="True"

</ComponentEntry>

</Components>

</ApplicationPackage>


下载Polysamp移植录像