ObjectArx-自定义对象-对象支持
1自定义对象-对象支持
对象支持器(.DBX 文件)允许绘图中的自定义对象具有比代理图形更智能的行为,即使在原始应用程序不存在的情况下也是如此。通过为自定义对象提供对象支持器,您确保您的客户可以协作处理图纸,而不必担心其他人是否能够操作这些图纸中的自定义对象。你的对象在现实中会表现得很聪明,在主流的应用程序。AutoCAD,DWG TrueView,以及Autodesk 3DSMax。
1.1ObjectDBX和对象支持器概述
ObjectDBX是ObjectArx的子集为自定义对象和实体所需。一个对象支持器定义自定义DWG或DXF数据库对象和实体使用使用ObjectArx SDK的ObjectDBX部分。
对象支持器使用.dbx扩展名,可以加载到任何RealDWG的主流应用程序,像AutoCAD,DWG TrueView,Autodesk VIZ, Autodesk Inventor,或者第三方的应用程序使用RealDWG SDK。对象支持器构建为使用包含自定义对象实例的dwg文件分发给任何人。Objectarx开发人员被鼓励将对象支持器用于自定义对象。RealDWG SDK,以前被称为ObjectDBX SDK,它是与objectarx单独授权的,允许开发人员编写可以在没有AutoCAD的情况下读写DWG和DXF文件的主机应用程序。RealDWG SDK
1.1.1 ObjectDBX 库
对象支持器包含允许自定义对象(几何、组件、非图形对象等)作为扩展或自定义对象在AutoCAD或其他主机应用程序中。实现这些对象的文件被赋予扩展名.DBX,它代表数据库扩展。dbx文件基本上是一个对象arx应用程序,它是用不带任何依赖AutoCAD特殊的API的方式编写的。
Object支持器(.DBX 文件)可能需要连接到以下库文件
- acdb17.lib
- AcDbMPolygon17.lib
- acge17.lib
- acgiapi.lib
- achapi17.lib
- acISMobj17.lib
- axdb17.lib
- rxapi.lib
- rxheap.lib
1.1.2 用户界面和数据库访问
ObjectDBX允许您为应用程序的数据库(Db)和用户界面(UI)部分编写单独的二进制文件。Arx文件包含UI组件的文件,并包含AutoCAD特有的代码,用于发出提示、显示对话框、修改菜单等.。DB组件文件(对象支持器)具有扩展名.DBX,包含非AutoCAD特定的代码,通过创建自定义对象、显示对象、转换对象等来实现自定义对象。如果您的应用程序分为用户界面和数据库部分,在没有提供用户界面的objectArx应用程序的情况下,您的自定义对象仍然将被正确地处理。
注意:如果自定义对象具有特定于AutoCAD的依赖关系(比如在AutoCAD系统变量上不存储在数据库中),你不能把代码在dbx文件对象。DB 代码同时需要在ARX文件中。在这种情况下,你可以把数据库和用户界面代码两ARX文件分开,或者你可以把用户界面和数据库的代码放在同一个ARX文件。
例如,假设您实现了一个名为“sink”的自定义对象,而要显示和修改sink的代码位于sink.dbx中,而提示用户输入sink创建值的代码是sink.arx。您的用户可以从AutoCAD加载sink.arx,并使用它(与自动加载的sink.dbx一起)在绘图中创建自定义接收器。稍后,任何其他主机应用程序(包括AutoCAD)都可以加载该绘图,如果用户拥有sink.dbx文件的副本,sink对象将正确显示,而不是作为代理。
警告:使用微软__declspec(dllimport) 连接指令要在objectArx和objectDBX模块之间共享一个头文件,可能会导致不必要的结果。
1.1.3 RealDWG主机应用程序
“主机应用程序”是一个在其代码中包含main()、Winmain()或 dllmain()函数的应用程序,它提供了objectdbx或objectarx模块需要的主机服务。
两种宿主应用程序可以利用ObjectDBX提供的接口。
第一种类型的主机应用AutoCAD和AutoCAD Autodesk产品,带或不带ObjectARX应用程序。
第二类是非AutoCAD主机应用程序。非AutoCAD主机应用程序无法加载ObjectARX应用程序,只能利用Objectdbx提供的特定接口。
1.2 开发对象支持器
一个对象支持器是一个ObjectDBX模块为自定义对象在代理状态时提供支持。对象支持器可以是应用程序用于自定义对象的相同的Objectdbx模块,也可以是不同的模块,例如,它具有有限的功能,例如图形显示、从绘图中读取以及保存到绘图功能。
通过向AutoCAD和其他主机应用程序提供实际对象,可以允许自定义对象参与标准操作。例如被选中或者被拖动,并且确保他们的图形保真度得到维护。通过命令、菜单选项和其他用户界面提供的专门功能将只适用于购买完整应用程序的用户。
对象支持器通常打包在自解压缩的档案中,并张贴在web上,以便可以通过活动增强器功能下载。这一技术使对象支持器在AutoCAD遇到自定义对象时在绘图文件中可用。通过微软MSI 安装程序对对象支持器发布。
1.命名你的对象支持器 AppNameOBJ.dbx
2.命名的MSI文件 AppNameOBJ.MSI
3.命名你的自解压文件 AppNameOBJ.exe
1.2.1 注册用于需求加载的对象支持器
对象支持器使用ObjectARX demand loading注册格式。
对象增强器的注册格式与Objectarx应用程序的注册格式有两种不同:
1.没有命令或组子项
2.注册在 SOFTWARE\Autodesk\ObjectDBX 的根节点
例子:为对象启用器编写需求加载键
void updateRegistry()
{// 为请求加载填充AcadAppInfo结构体AcadAppInfo appInfo;appInfo.setAppName("AsdkPolyObj2.0");// App Name// 获取dbx文件路径HMODULE hModule = GetModuleHandle("asdkpolyobj.dbx");char modulePath[512];DWORD pathLength = GetModuleFileName(hModule, modulePath, 512);if(pathLength)appInfo.setModuleName(modulePath);// ...and pass it inappInfo.setAppDesc("AsdkPolyObj version 2.0");appInfo.setLoadReason(AcadApp::LoadReasons(AcadApp::kOnProxyDetection |AcadApp::kOnLoadRequest));// 将appInfo写入注册表appInfo.writeToRes
}
最好使用安装程序进行应用程序注册。安装时间注册确保正确的申请注册。
ObjectArx-自定义对象-对象支持相关推荐
- C++自定义对象如何支持Range-based循环语法
自定义对象如何支持Range-based循环语法 至少实现以下两种语法: //返回第一个迭代子的位置 Iterator begin() //返回最后一个迭代子的下一个位置 Iterator end() ...
- GreenDao存储自定义类型对象解决方案(转)
最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...
- iOS 使用NSUserdefault 保存自定义的 对象
一:NSUserDefaults支持的数据格式有:NSNumber(Integer.Float.Double),NSString,NSData,NSArray,NSDictionary,BOOL类型: ...
- 自定义java对象转换工具类
背景 项目中经常有VO.PO.DTO等之间转换,由于apache工具类中BeanUtils.copyProperties及Json序列化反序列化方式转换性能比较低(阿里巴巴规范检查有提示不建议采用). ...
- Hibernate本地SQL结果集转换为自定义POJO对象
Hibernate如果用于单表的增删改查,其方便性不言而喻,但很多时候我们需要进行关联查询.这时候Hibernate可能不是太方便了.好在Hibernate提供了本地SQL,允许我们手写SQL语句. ...
- IE显示对象不支持此属性或方法 的解决方法
有时用IE打开某些网站,比如经常有朋友碰到的是在打开QQ空间时,在IE左下角的状态栏会显示"已完毕,但网页上有错误!",双击这个错误会看到提示是"找不到指定模块" ...
- FastJson自定义复杂对象序列化
总结: SerializeFilter是通过编程扩展的方式定制序列化.fastjson支持6种SerializeFilter,用于不同场景的定制序列化. PropertyPreFilter 根据Pro ...
- 关于IE内核浏览器使用 document.all.wb.ExecWB(x,x); 报错“找不到对象”,“不支持对象” 或 “对象不支持属性或方法”等问题的解决
如题, 之前项目中客户都默认使用IE浏览器,所以在文件打印时就使用了document.all.wb.ExecWB(.,.)的打印方法,该方法怎么使用此处不做赘论,网上大佬的相关方法太多了. 在使用时, ...
- linux结构体转qbytearray,QByteArray储存二进制数据(包括结构体,自定义QT对象)
因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类 //自定义person结构体 typede ...
最新文章
- 阿里、京东、快手、华为......他们是如何构建一个个推荐系统“帝国”的?
- StringBuffer与StringBuilder的区别
- tar打包和解压命令
- SqlServer安装出错解决办法
- java流与文件——文本输入输出
- typedef和#define的作用域问题
- 02构建之法第三章第四章及第五章阅读笔记
- 【安卓笔记】抽屉式布局----DrawerLayout
- 月薪2w的00后女财务,靠这套报表模板征服了老板
- 【CS231n_2017】1-Introduction to CNN for Visual Recognition
- centos6 ab性能测试web服务器
- GooFlow入门使用
- 大众点评优略点评。。
- java微信服务通知
- word尾注编辑参考文献
- 如何证明pi是无理数
- 台式计算机cpu允许温度,台式cpu温度多少正常呢?老司机科普一下CPU常见问题
- idea安装SVN插件并使用
- drupal 6初始安装,中文汉化 简明教程
- 性能测试工具kylinPET的国产化道路