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。