EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 650|回复: 0
打印 上一主题 下一主题

[资料] 如何移植 Arx/ Dbx 模块为 Crx/DBX 模块来支持 AutoCAD 易

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:28:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

为了支持多平台,AutoCAD实现了大分离,我们两年前已经介绍了这个概念,但是很多人对怎么实现大分离还是不甚了解。我们的Autodesk开发部Spiderman团队的吴忠写下了这篇教程,我只是负责发表一下,方便大家阅读。
附带有经典例子Polysamp的移植录像,在本文的最后提供了下载链接。

目录
1 概要
2 开发前提
3 Dbx/Arx 模块移植步骤
4 附录
Bundle 格式和简单说明
概要

AutoCAD只支持Dbx 和 Crx模块,不支持Arx 模块,第三方应用需要把他们的应用程序先拆分成Dbx/Crx/Arx模块或者Crx/Arx 模块
Dbx模块中一般是包含 database相关的,比如自定义实体。该模块会链接到acdb**.dll。Crx模块中一般是包含一些 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等等。

  1. asdkpolyui.bundle
  2. PackageContents.xml
  3. Contents
  4. Win32
  5. Asdkpolyobj.dbx
  6. asdkpolyui.crx
  7. Win64
  8. Asdkpolyobj.dbx
  9. asdkpolyui.crx
  10. PackageContents.xml的内容如下:
  11. <?xmlversion="1.0" encoding="utf-8" ?>
  12. <ApplicationPackageSchedmaVersion="1.0" ProductCode="{60E86427-9C47-4882-B3A5-
  13. 2D2ACC05FD75}"
  14. Name="Polysamp"NameEnu="Polysamp" NameDeu="PolySamp"
  15. Version="1.0"
  16. Description="CADRenSample packageXml" DescriptionEnu="Poly samp for CADRen"
  17. DescriptionDeu="CADRenSample packageXml"
  18. Author="WilliamWu"
  19. >
  20. <CompanyDetails
  21. Name="WilliamSoft"
  22. Phone="02138653768"
  23. Url="www.cadren.com"
  24. Email="zhong.wu@autodesk.com"
  25. />
  26. <Components>
  27. <RuntimeRequirementsOS="Win32|Win64" Platform="AutoCAD" SeriesMin="R18"
  28. SeriesMax="R18.2"/>
  29. <ComponentEntry
  30. AppName="AsdkPolyCAD"
  31. ModuleNameWin32="./Contents/Win32/asdkpolyui.crx"
  32. ModuleNameWin64="./Contents/Win64/asdkpolyui.crx"
  33. AppDescription="PolySample UI for CADRen"
  34. LoadOnAutoCADStartup="True"
  35. LoadOnCommandInvocation="True"
  36. >
  37. <CommandsGroupName="ASDK_POLYGON">
  38. <CommandGlobal="ASDK_POLY" Local="POLY" />
  39. <CommandGlobal="PPOLY" Local="PPOLY" />
  40. <CommandGlobal="ASDK_DRAGPOLY" Local="DRAGPOLY" />
  41. <CommandGlobal="ASDK_POLYEDIT" Local="POLYEDIT" />
  42. <CommandGlobal="ASDK_TRANSACT" Local="TRANSACT" />
  43. <CommandGlobal="ASDK_HILITPOLY" Local="HILITPOLY" />
  44. <CommandGlobal="ASDK_HILITSOLID" Local="HILITSOLID" />
  45. <CommandGlobal="ASDK_CREATEINSERT" Local="CREATEINSERT" />
  46. <CommandGlobal="ASDK_HILITINSERT" Local="HILITINSERT" />
  47. <CommandGlobal="ASDK_USEDRAGDATA" Local="USEDRAGDATA" />
  48. <CommandGlobal="ASDK_POLYCLEANUI" Local="POLYCLEANUI" />
  49. </Commands>
  50. </ComponentEntry>
  51. <ComponentEntry
  52. AppName="AsdkPolyCAD_DBX"
  53. ModuleNameWin32="./Contents/Win32/asdkpolyobj.dbx"
  54. ModuleNameWin64="./Contents/Win64/asdkpolyobj.dbx"
  55. AppDescription="CustomPoly Object"
  56. LoadOnAutoCADStartup="True"
  57. >
  58. </ComponentEntry>
  59. </Components>
  60. </ApplicationPackage>
复制代码
下载Polysamp移植录像

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-28 10:22

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表