AutoCAD 自定义实体在Navisworks中显示
这两天突然想到一个问题,
AutoCAD自定义实体(custom entity)在infraworks、Navisworks中能否显示?
由于自己对c++语言不熟,
ObjectARX也很少用,
所以自定义实体这部分很少用到,
想到前面这个问题之后,
就想试验一下,
在试验的过程遇到了诸多问题,
问题解决后,
才发现问题其实很简单,
但在解决之前,
感觉却不一样。
问题1:
dbx文件无法在遇到自定义实体时无法自动加载。
关于如何加载,
也可以参考objecarx SDK中的样例,
里面有完整的注册表文件和操作方法。
但对于其中应该注意的细节却很少涉及。
我就是因为没有注意其中的细节,
才遇到了无法自动加载的问题。
最终是在Edata的指导下,
看了他的文章后,
才找打了问题的根源。
在此对Edata表示感谢!
; ObjectEnabler registry section [HKEY_CURRENT_USER\SOFTWARE\Autodesk\ObjectDBX\R23.1\Applications\AsdkPolyOBJ2.0] "DESCRIPTION"="Object Enabler for the poly object" "LOADCTRLS"=dword:00000001 "LOADER"="c:\\ObjectARX\\samples\\entity\\polysamp\\debug\\asdkpolyobj.dbx"
什么细节没有注意到呢?
是应用程序的名称,
也就是[HKEY_CURRENT_USER\SOFTWARE\Autodesk\ObjectDBX\R23.1\Applications\AsdkPolyOBJ2.0]中的AsdkPolyOBJ2.0,
我自己写注册表文件时,
这个名称随便给了一个,
结果导致无法自动加载,
说是无法在自动加载也不完全正确,
当LOADCTRLS设置为2时,
当AutoCAD启动时,
dbx文件也能实现加载,
只是遇到自定定义实体时无法加载....
言归正传,
这个名称应该怎么确定呢?
答:应该跟ACRX_DXF_DEFINE_MEMBERS宏中的参数对应。
也就是下面代码中的倒数第4行AsdkPolyOBJ2.0
//*************************************************************************
// Code for the Class Body.
//*************************************************************************
ACRX_DXF_DEFINE_MEMBERS(AsdkPoly, AcDbCurve,
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
AcDbProxyEntity::kAllAllowedBits, POLYGON,
"AsdkPolyOBJ2.0\
|Product Desc: PolyCAD ARX App For Polygon Entity\
|Company: Autodesk,Inc.\
|WEB Address: www.autodesk.com");
如果项目是用objectarx wizard创建的,
这个应用程序名称应该是类似于MYZWDbxProjectAPP的,
有一个APP后缀,
由于多这个宏没有研究,
不知道这个后缀有什么用,
当我解决问题时,
注册表和代码是这样的:
问题2:将.h和.cpp文件由一个项目复制到另一个项目后导致无法编译的问题
之前的项目是使用vs2015编辑的,
使用的操作系统是win7,
这几天用的是win10+vs2019,
因为要不断的切换系统,
比较麻烦,
于是想着新建一个项目,
把相关的文件复制过来,
就是这个复制过程,
引入了新的问题。
这是在编译arx项目(不是dbx项目,dbx项目编译时没遇到问题)时遇到的问题,
虽然很少用C++项目,
但遇到这种问题应该是能在网络上搜索到答案的,
可惜现实很残酷,
网上能搜索到的答案都不能解决我的问题,
(原因很简单,是我的操作比较特殊——将源文件由一个项目复制到另一个项目)
在QQ群中请教,
还是在Edata的帮助下,
找到了问题的根源,
项目文件是由objectarx wizard创建的,
里面有跟项目相关的宏:
原来项目的名称跟新建项目的名称不一致,
直接将源文件复制到新项目中时,
这些宏虽然错了,
但编译时没有任何提示,
dbx项目能够顺利编译,
在编译arx项目时因为这里的错误而报错....
解决方法很简单,
将这里的宏改成与当前项目一致的即可,
之后arx项目顺利编译。
当dbx文件能自动加载时,
在navisworks加载具有自定义实体的dwg文件,
自定义实体也能显示出来。
为了备忘,
简单及记录一下!
能否在infraworks中显示还未知,
我电脑硬盘较小,
没有安装infraworks。