欢迎来到我的博客
Civil 3D开发与应用,欢迎加入QQ群:484124761
AutoCAD开发,欢迎加入QQ群:193522571

AutoCAD 自定义实体在Navisworks中显示

这两天突然想到一个问题,

AutoCAD自定义实体(custom entity)在infraworks、Navisworks中能否显示?

由于自己对c++语言不熟,

ObjectARX也很少用,

所以自定义实体这部分很少用到,

想到前面这个问题之后,

就想试验一下,

在试验的过程遇到了诸多问题,

问题解决后,

才发现问题其实很简单,

但在解决之前,

感觉却不一样。

问题1:

dbx文件无法在遇到自定义实体时无法自动加载。

关于如何加载,

可以看一下Edata文章

也可以参考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。

 

posted @ 2022-05-31 15:48  david96007  阅读(290)  评论(0编辑  收藏  举报