1. 程式人生 > 其它 >AutoCAD 自定義實體在Navisworks中顯示

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。