[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用
如何讓AutoCAD畫圖(2D或3D)時更直覺更有效率,這一直是大部份AutoCAD使用者很困擾的問題。其原因不外乎是:
•對新手而言,操作指令不熟、不清楚AutoCAD有那些功能、…。
•對老手而言,即使已熟悉指令及功能但操作步驟煩雜(不夠直覺)、同一套圖說中常需大量手動維持各圖檔間之關係、…。
雖然AutoCAD每推出一個版本都有增加一些功能,但上述困擾依舊存在。這表示解決之道只有另外開發相關功能來達成,而這相關功能就是同步化程式。後面我會提出基於下列條件
•未使用“參數式製圖(幾何約束、標註約束)、動態圖塊、外部參考、圖紙集、腳本檔”。(註1、註2)
•所有作圖皆在模型空間。(註3)
以ObjectARX開發的同步化程式所作之一系列演示來和大家討論。
註1:我並未提到反應器,這表示會使用到反應器。在AutoCAD提供的反應器功能中有一些不錯用,適量使用反應器能有效提升效率,但大量使用有可能發生你想不到的問題。這些在後面會探討。
註2:之所以未使用那些AutoCAD所提供的功能,並不是它們不好而是不同領域需求不同,常常你會覺得那些功能無法讓你在作圖時一步到位。事實上,在了解AutoCAD的資料庫及多圖檔操作(跨圖檔)原理後,你的確可以在上述條件下作出符合需求的功能,最主要的是你會發現那樣的效率就是你一直在尋找的。
註3:在模型空間作圖的使用者還是居多數,偏偏AutoCAD有些功能只能在圖紙(配置)空間運作,這點實在是不夠友善。
以下是預計探討之目錄,內容部份會在這一兩天陸續貼出,期待大家的參與討論。
目錄
【一】、同步化程式在『AutoCAD外』之應用
(1)三款免費檔案同步化程式分享
(2)開啟圖面找不到大字體(SHX)檔之困擾
【二】、同步化程式在『AutoCAD內』之應用
(1)AutoCAD未提供自動儲存(AutoSave)功能給使用者
(2)外部參考與同步化程式之比較
【三】、AutoCAD之自定義實體
【四】、同步化程式在『建築/結構--自動化改圖』之應用
(1)結構篇
甲、結構建模
乙、淺談結構分析、設計
丙、結構自動化改圖
(2)建築篇
甲、建築建模 (這個部份目前抽不出時間整理,請見諒)
乙、建築自動化改圖
•對新手而言,操作指令不熟、不清楚AutoCAD有那些功能、…。
•對老手而言,即使已熟悉指令及功能但操作步驟煩雜(不夠直覺)、同一套圖說中常需大量手動維持各圖檔間之關係、…。
雖然AutoCAD每推出一個版本都有增加一些功能,但上述困擾依舊存在。這表示解決之道只有另外開發相關功能來達成,而這相關功能就是同步化程式。後面我會提出基於下列條件
•未使用“參數式製圖(幾何約束、標註約束)、動態圖塊、外部參考、圖紙集、腳本檔”。(註1、註2)
•所有作圖皆在模型空間。(註3)
以ObjectARX開發的同步化程式所作之一系列演示來和大家討論。
註1:我並未提到反應器,這表示會使用到反應器。在AutoCAD提供的反應器功能中有一些不錯用,適量使用反應器能有效提升效率,但大量使用有可能發生你想不到的問題。這些在後面會探討。
註2:之所以未使用那些AutoCAD所提供的功能,並不是它們不好而是不同領域需求不同,常常你會覺得那些功能無法讓你在作圖時一步到位。事實上,在了解AutoCAD的資料庫及多圖檔操作(跨圖檔)原理後,你的確可以在上述條件下作出符合需求的功能,最主要的是你會發現那樣的效率就是你一直在尋找的。
註3:在模型空間作圖的使用者還是居多數,偏偏AutoCAD有些功能只能在圖紙(配置)空間運作,這點實在是不夠友善。
以下是預計探討之目錄,內容部份會在這一兩天陸續貼出,期待大家的參與討論。
目錄
【一】、同步化程式在『AutoCAD外』之應用
(1)三款免費檔案同步化程式分享
(2)開啟圖面找不到大字體(SHX)檔之困擾
【二】、同步化程式在『AutoCAD內』之應用
(1)AutoCAD未提供自動儲存(AutoSave)功能給使用者
(2)外部參考與同步化程式之比較
【三】、AutoCAD之自定義實體
【四】、同步化程式在『建築/結構--自動化改圖』之應用
(1)結構篇
甲、結構建模
乙、淺談結構分析、設計
丙、結構自動化改圖
(2)建築篇
甲、建築建模 (這個部份目前抽不出時間整理,請見諒)
乙、建築自動化改圖
nobody- 初級會員
- 文章總數 : 32
年齡 : 49
來自 : 台北
職業 : 待業
愛好 : 電腦繪圖
個性 : 開朗
使用年資 : 新手初學
使用版本 : 新手初學
積分 : 3
經驗值 : 5100
威望值 : 116
回帖精華 : 1
注冊日期 : 2011-06-07
回復: [討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用
【一】、同步化程式在『AutoCAD外』之應用
(1) 三款免費檔案同步化程式分享
首先,要感謝ginse0727及shenhung兩位在『同步化免費軟體FreeFileSync分享』所分享的同步化程式。
以下是三款免費檔案同步化程式的官方下載點及教學:
•2BrightSparks SyncBackFree
下載 http://www.2brightsparks.com/download-syncback.html
教學http://download.ithome.com.tw/article/index/id/224
•Allway Sync
下載 http://allwaysync.com/zh-cht/download.html
教學 http://playpcesor.blogspot.com/2007/03/allway-sync-558.html
•Microsoft SyncToy
下載 http://www.microsoft.com/en-us/download/details.aspx?id=15155
教學 http://key.chtouch.com/ContentView.aspx?P=184
上述這些程式大家可以去測試比較它們的功能差異。
另外,如果你有興趣的話在MSDN的這個網頁『ReadDirectoryChangesW function』,你可以看到這個Windows API所提供的監控檔案變化的功能。為什麼我會談這個?如果你在AutoCAD內開啟主圖及底圖(外部參考),若你修改了底圖並存檔後,當你切換回主圖時AutoCAD會即時通知你底圖已有所修改,這部份沒問題。但是,你試試以下情形:關閉底圖,新開啟另一個AutoCAD再開啟底圖(此時你共開啟了兩個AutoCAD,每個AutoCAD各開啟一張圖檔而不是在同一個AutoCAD內開啟了兩張圖檔),修改底圖並存檔且關閉底圖(註4),切換回主圖後,此時你會發現AutoCAD未必會馬上通知你底圖已有所修改,即使你已將環境變數XNOTIFYTIME(非系統變數)設定為最小值1分鐘,這種情形發生的機率在我這邊測試結果約為3成(而有些延遲將近10分鐘),如果你認為就算有所延遲這段時間能修改的圖檔內容有限,那麼在看過後面會談到的『建築/結構--自動化改圖』或許你就不會再這麼想。
註4:會用此方式主要是要模擬以下情形--你只開啟主圖並且正在改圖,此時別人修改過底圖並傳圖給你。
(2) 開啟圖面找不到大字體(SHX)檔之困擾
在『Offset指令的演算法源碼』曾談到要解決找不到大字體(SHX)檔之困擾須分成兩部份,其中在直接開啟圖檔這部份就是在監控整個系統,一旦有AutoCAD被開啟即載入相關程序。同樣的方式也可用來處理上一節提及的現象:只要AutoCAD被開啟即載入監控檔案變化的程序,而且因為不是使用設定時間間隔的方式,所以當檔案一有變化便可即時通知。
【二】、同步化程式在『AutoCAD內』之應用
(1) AutoCAD未提供自動儲存(AutoSave)功能給使用者
如果你認為” AutoCAD有自動儲存(AutoSave)的功能啊,而且在「選項」對話方塊裏還可以設定自動儲存的檔案位置及時間間隔”,那麼你錯了。AutoSave這項功能是AutoCAD用來解決當機後的後續問題(不過似乎並不完美,因為並不是每次當機都能將檔案救回),它只有AutoCAD能使用而一般使用者無此權限,你可以在autodesk官方論壇搜索一下就會得到證實,而這也解釋了在『關於設定自動儲存』大家所談的問題。另外從副檔名也可看出端倪:AutoSave後的副檔名為sv$,但我們需要的是副檔名為bak的檔案。那麼是否有解決方法?
•如果不自己開發程式:
那就只能以手動方式存檔,不過可以搭配多圖檔標籤程式(如DrawingTabs及iDwgTab)之save all會比較方便。
•如果要自己開發程式:
程式必須包含以下兩部份
a. 計時器(Timer)。
依據設定的時間間隔通知AutoCAD儲存檔案。這部份屬於windows程式開發的範圍。
b. 多圖檔操作。
這部份有2種情形,假設我們開啟了兩張圖1.dwg(當前圖面)及2.dwg
第1種情形:1.dwg存檔後,切換至2.dwg(新的當前圖面)再存檔。
第2種情形:1.dwg存檔後,直接對2.dwg存檔(當前圖面依舊為1.dwg)。
上述iDwgTab屬第1種,DrawingTabs屬第2種。
現在你看以下這個演示:
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Autosavew](https://2img.net/r/ihimizer/img20/8924/autosavew.png)
自動儲存(AutoSave)演示 https://s289.photobucket.com/user/autocad88/media/autosave_zps7e0954a8.mp4.html
蘋果爸,不確定這樣貼演示影片是否恰當,若不當,可否幫忙改一下。(共有3支影片)
在這個演示中開啟了三張圖AutoSave1.dwg、AutoSave2.dwg、AutoSave3.dwg(至於那個縮到最小標示”專案.prj”的視窗你無須理會它),其中AutoSave3.dwg為獨立的一張圖,其他兩張圖則屬於專案內之圖檔。並且設定為在總共9秒的時間內每3秒會儲存AutoSave1.dwg及AutoSave2.dwg一次(AutoSave3.dwg因不為專案圖檔故設定為不儲存),你會看到副檔名為bak的檔案被建立。另外你還可以看到AutoSave1.dwg一直都是當前圖面,並不會為了儲存AutoSave2.dwg而改變當前圖面,這就是跨圖檔操作。而它的好處:
•切換圖面會造成重生(regen),這會降低效率(尤其是大的檔案)。
•跨圖檔操作讓你能在圖檔間作出符合需求的關聯,而有些需求外部參考做不到,這點在下一節『外部參考與同步化程式之比較』會作探討。
•通常一個專案都會有好幾張圖(甚至上百張),藉由跨圖檔操作你除了可以在已開啟的圖檔間作同步修改,還可以直接同步修改未開啟的圖檔,而這個修改動作可能造成其他未開啟或已開啟的圖檔也必須作同步修改。這些在後面的『建築/結構--自動化改圖』都會呈現出來。
•當你因改圖導致圖檔數目有所變化,此時更新每張圖的圖序(就是第幾張/共幾張)是非常煩人的工作,但跨圖檔操作因能讓你修改已開啟和未開啟的圖檔,由它來做這類工作是非常適合的。在後面的『建築/結構--自動化改圖』你將會看到在一套圖中插入兩張圖(不連續),但你不用手動去更新整套圖的圖序,因為它會幫你自動更新。
•當建築圖(或結構圖)有所修改,藉由整合AutoCAD資料庫與跨圖檔操作來作圖檔比對你可以容易獲知你的結構圖(或建築圖)有那些地方須修改。這在後面的『建築/結構--自動化改圖』你會看得到 。
另外,在演示中當時間為3秒及6秒時會對圖檔作儲存動作的這一步是實現自動儲存功能的關鍵,因AutoCAD基本上是一支單執行緒程式,自動儲存表示在計時過程中要作儲存動作,其實現原理就是利用計時器(Timer)。不過論壇裏以討論lisp為主,如果你有興趣,可以從網上找到一些以lisp寫的時鐘程式碼(註5),並試著加入儲存圖檔的功能看能否實現屬於自己的AutoSave,當然我想這個難度應該不低。
註5:以下是國外網友Elpanov Evgeniy所寫的一支lisp時鐘程式(蠻有創意的),大家試試。(執行命令clo,然後依提示去操作)
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Clob](https://2img.net/r/ihimizer/img835/7387/clob.png)
lisp下載: http://www.crocko.com/236EF298BA9D4BD095AE483E3533B33C/clo.LSP
(2)外部參考與同步化程式之比較
以下這個演示畫的是路燈底座:
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Xrefsync1](https://2img.net/r/ihimizer/img22/2312/xrefsync1.png)
外部參考與同步化程式之比較演示1 https://s289.photobucket.com/user/autocad88/media/xrefsync1_zpse1abc11f.mp4.html
演示裏左圖(Bolt1.dwg)、右圖(Bolt2.dwg)皆為螺栓,中圖(Base.dwg)為底座,且Bolt1.dwg為Base.dwg之外部參考。演示過程分為三部份:
a. 執行xs1命令。
你可以看到程式以動態拉伸的方式(未使用AutoCAD的幾何約束)改變螺栓(外部參考)直徑,當切換回底座圖(主圖)時螺栓會同步更新,這部份沒問題,但是螺栓孔大小(粉紅色虛線)並未同步更新,這不是外部參考的錯,因為那兩條虛線本來就不屬於外部參考,不過這會讓改圖很麻煩(萬一忘了改,而設計圖又已交給工廠加工,那…)。另外,若有上百張或上千張主圖都有螺栓孔大小要修改,你怎麼辦?用腳本檔?如果可行我只能說你很好運遇到單純的case。最後,如果從主圖要以現地編輯的方式去改外部參考,你必須先關閉外部參考才行。當多人協同作業時是有必要訂定這類的遊戲規則,若這些圖都是你在畫有必要這麼沒彈性?
b. 執行xs2命令。
你應該有注意到Bolt2.dwg的圖元較Bolt1.dwg多,為什麼?以螺母的側視圖及平面圖為例,二者指的是同一個物件所以會放在同一圖層,如果Bolt1.dwg也有螺母的平面圖那麼它也會在主圖出現,即使用局部開啟也是無效,這是外部參考的另一項限制。
你可以看到程式以動態拉伸的方式改變螺栓直徑,並且同步修改螺母孔徑、栓徑標示文字,修改完後底座圖即同步更新(含粉紅色虛線的螺栓孔也一併更新),如果是外部參考須切回主圖,作圖時少一個動作負擔就會減輕很多更何況這不只少一個動作。至於若有其他主圖(不論是否已開啟)要改當然也不是問題。
c. 執行xs3命令。
你可以看到程式以動態拉伸的方式改變底座圖的螺栓直徑,修改完後Bolt2.dwg裏相關圖元亦同步更新,即使有些圖元在底座圖是看不到也一樣可同步更新,這是外部參考做不到的。
最後,前面提過AutoCAD是一支單執行緒程式,那麼你看看以下這個另一版本的xs3命令演示(Bolt1.dwg就不用看了):
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Xrefsync2](https://2img.net/r/ihimizer/img692/5961/xrefsync2.png)
外部參考與同步化程式之比較演示2 https://s289.photobucket.com/user/autocad88/media/xrefsync2_zpsc3e9ed7a.mp4.html
(1) 三款免費檔案同步化程式分享
首先,要感謝ginse0727及shenhung兩位在『同步化免費軟體FreeFileSync分享』所分享的同步化程式。
以下是三款免費檔案同步化程式的官方下載點及教學:
•2BrightSparks SyncBackFree
下載 http://www.2brightsparks.com/download-syncback.html
教學http://download.ithome.com.tw/article/index/id/224
•Allway Sync
下載 http://allwaysync.com/zh-cht/download.html
教學 http://playpcesor.blogspot.com/2007/03/allway-sync-558.html
•Microsoft SyncToy
下載 http://www.microsoft.com/en-us/download/details.aspx?id=15155
教學 http://key.chtouch.com/ContentView.aspx?P=184
上述這些程式大家可以去測試比較它們的功能差異。
另外,如果你有興趣的話在MSDN的這個網頁『ReadDirectoryChangesW function』,你可以看到這個Windows API所提供的監控檔案變化的功能。為什麼我會談這個?如果你在AutoCAD內開啟主圖及底圖(外部參考),若你修改了底圖並存檔後,當你切換回主圖時AutoCAD會即時通知你底圖已有所修改,這部份沒問題。但是,你試試以下情形:關閉底圖,新開啟另一個AutoCAD再開啟底圖(此時你共開啟了兩個AutoCAD,每個AutoCAD各開啟一張圖檔而不是在同一個AutoCAD內開啟了兩張圖檔),修改底圖並存檔且關閉底圖(註4),切換回主圖後,此時你會發現AutoCAD未必會馬上通知你底圖已有所修改,即使你已將環境變數XNOTIFYTIME(非系統變數)設定為最小值1分鐘,這種情形發生的機率在我這邊測試結果約為3成(而有些延遲將近10分鐘),如果你認為就算有所延遲這段時間能修改的圖檔內容有限,那麼在看過後面會談到的『建築/結構--自動化改圖』或許你就不會再這麼想。
註4:會用此方式主要是要模擬以下情形--你只開啟主圖並且正在改圖,此時別人修改過底圖並傳圖給你。
(2) 開啟圖面找不到大字體(SHX)檔之困擾
在『Offset指令的演算法源碼』曾談到要解決找不到大字體(SHX)檔之困擾須分成兩部份,其中在直接開啟圖檔這部份就是在監控整個系統,一旦有AutoCAD被開啟即載入相關程序。同樣的方式也可用來處理上一節提及的現象:只要AutoCAD被開啟即載入監控檔案變化的程序,而且因為不是使用設定時間間隔的方式,所以當檔案一有變化便可即時通知。
【二】、同步化程式在『AutoCAD內』之應用
(1) AutoCAD未提供自動儲存(AutoSave)功能給使用者
如果你認為” AutoCAD有自動儲存(AutoSave)的功能啊,而且在「選項」對話方塊裏還可以設定自動儲存的檔案位置及時間間隔”,那麼你錯了。AutoSave這項功能是AutoCAD用來解決當機後的後續問題(不過似乎並不完美,因為並不是每次當機都能將檔案救回),它只有AutoCAD能使用而一般使用者無此權限,你可以在autodesk官方論壇搜索一下就會得到證實,而這也解釋了在『關於設定自動儲存』大家所談的問題。另外從副檔名也可看出端倪:AutoSave後的副檔名為sv$,但我們需要的是副檔名為bak的檔案。那麼是否有解決方法?
•如果不自己開發程式:
那就只能以手動方式存檔,不過可以搭配多圖檔標籤程式(如DrawingTabs及iDwgTab)之save all會比較方便。
•如果要自己開發程式:
程式必須包含以下兩部份
a. 計時器(Timer)。
依據設定的時間間隔通知AutoCAD儲存檔案。這部份屬於windows程式開發的範圍。
b. 多圖檔操作。
這部份有2種情形,假設我們開啟了兩張圖1.dwg(當前圖面)及2.dwg
第1種情形:1.dwg存檔後,切換至2.dwg(新的當前圖面)再存檔。
第2種情形:1.dwg存檔後,直接對2.dwg存檔(當前圖面依舊為1.dwg)。
上述iDwgTab屬第1種,DrawingTabs屬第2種。
現在你看以下這個演示:
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Autosavew](https://2img.net/r/ihimizer/img20/8924/autosavew.png)
自動儲存(AutoSave)演示 https://s289.photobucket.com/user/autocad88/media/autosave_zps7e0954a8.mp4.html
蘋果爸,不確定這樣貼演示影片是否恰當,若不當,可否幫忙改一下。(共有3支影片)
在這個演示中開啟了三張圖AutoSave1.dwg、AutoSave2.dwg、AutoSave3.dwg(至於那個縮到最小標示”專案.prj”的視窗你無須理會它),其中AutoSave3.dwg為獨立的一張圖,其他兩張圖則屬於專案內之圖檔。並且設定為在總共9秒的時間內每3秒會儲存AutoSave1.dwg及AutoSave2.dwg一次(AutoSave3.dwg因不為專案圖檔故設定為不儲存),你會看到副檔名為bak的檔案被建立。另外你還可以看到AutoSave1.dwg一直都是當前圖面,並不會為了儲存AutoSave2.dwg而改變當前圖面,這就是跨圖檔操作。而它的好處:
•切換圖面會造成重生(regen),這會降低效率(尤其是大的檔案)。
•跨圖檔操作讓你能在圖檔間作出符合需求的關聯,而有些需求外部參考做不到,這點在下一節『外部參考與同步化程式之比較』會作探討。
•通常一個專案都會有好幾張圖(甚至上百張),藉由跨圖檔操作你除了可以在已開啟的圖檔間作同步修改,還可以直接同步修改未開啟的圖檔,而這個修改動作可能造成其他未開啟或已開啟的圖檔也必須作同步修改。這些在後面的『建築/結構--自動化改圖』都會呈現出來。
•當你因改圖導致圖檔數目有所變化,此時更新每張圖的圖序(就是第幾張/共幾張)是非常煩人的工作,但跨圖檔操作因能讓你修改已開啟和未開啟的圖檔,由它來做這類工作是非常適合的。在後面的『建築/結構--自動化改圖』你將會看到在一套圖中插入兩張圖(不連續),但你不用手動去更新整套圖的圖序,因為它會幫你自動更新。
•當建築圖(或結構圖)有所修改,藉由整合AutoCAD資料庫與跨圖檔操作來作圖檔比對你可以容易獲知你的結構圖(或建築圖)有那些地方須修改。這在後面的『建築/結構--自動化改圖』你會看得到 。
另外,在演示中當時間為3秒及6秒時會對圖檔作儲存動作的這一步是實現自動儲存功能的關鍵,因AutoCAD基本上是一支單執行緒程式,自動儲存表示在計時過程中要作儲存動作,其實現原理就是利用計時器(Timer)。不過論壇裏以討論lisp為主,如果你有興趣,可以從網上找到一些以lisp寫的時鐘程式碼(註5),並試著加入儲存圖檔的功能看能否實現屬於自己的AutoSave,當然我想這個難度應該不低。
註5:以下是國外網友Elpanov Evgeniy所寫的一支lisp時鐘程式(蠻有創意的),大家試試。(執行命令clo,然後依提示去操作)
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Clob](https://2img.net/r/ihimizer/img835/7387/clob.png)
lisp下載: http://www.crocko.com/236EF298BA9D4BD095AE483E3533B33C/clo.LSP
(2)外部參考與同步化程式之比較
以下這個演示畫的是路燈底座:
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Xrefsync1](https://2img.net/r/ihimizer/img22/2312/xrefsync1.png)
外部參考與同步化程式之比較演示1 https://s289.photobucket.com/user/autocad88/media/xrefsync1_zpse1abc11f.mp4.html
演示裏左圖(Bolt1.dwg)、右圖(Bolt2.dwg)皆為螺栓,中圖(Base.dwg)為底座,且Bolt1.dwg為Base.dwg之外部參考。演示過程分為三部份:
a. 執行xs1命令。
你可以看到程式以動態拉伸的方式(未使用AutoCAD的幾何約束)改變螺栓(外部參考)直徑,當切換回底座圖(主圖)時螺栓會同步更新,這部份沒問題,但是螺栓孔大小(粉紅色虛線)並未同步更新,這不是外部參考的錯,因為那兩條虛線本來就不屬於外部參考,不過這會讓改圖很麻煩(萬一忘了改,而設計圖又已交給工廠加工,那…)。另外,若有上百張或上千張主圖都有螺栓孔大小要修改,你怎麼辦?用腳本檔?如果可行我只能說你很好運遇到單純的case。最後,如果從主圖要以現地編輯的方式去改外部參考,你必須先關閉外部參考才行。當多人協同作業時是有必要訂定這類的遊戲規則,若這些圖都是你在畫有必要這麼沒彈性?
b. 執行xs2命令。
你應該有注意到Bolt2.dwg的圖元較Bolt1.dwg多,為什麼?以螺母的側視圖及平面圖為例,二者指的是同一個物件所以會放在同一圖層,如果Bolt1.dwg也有螺母的平面圖那麼它也會在主圖出現,即使用局部開啟也是無效,這是外部參考的另一項限制。
你可以看到程式以動態拉伸的方式改變螺栓直徑,並且同步修改螺母孔徑、栓徑標示文字,修改完後底座圖即同步更新(含粉紅色虛線的螺栓孔也一併更新),如果是外部參考須切回主圖,作圖時少一個動作負擔就會減輕很多更何況這不只少一個動作。至於若有其他主圖(不論是否已開啟)要改當然也不是問題。
c. 執行xs3命令。
你可以看到程式以動態拉伸的方式改變底座圖的螺栓直徑,修改完後Bolt2.dwg裏相關圖元亦同步更新,即使有些圖元在底座圖是看不到也一樣可同步更新,這是外部參考做不到的。
最後,前面提過AutoCAD是一支單執行緒程式,那麼你看看以下這個另一版本的xs3命令演示(Bolt1.dwg就不用看了):
![[討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用 Xrefsync2](https://2img.net/r/ihimizer/img692/5961/xrefsync2.png)
外部參考與同步化程式之比較演示2 https://s289.photobucket.com/user/autocad88/media/xrefsync2_zpsc3e9ed7a.mp4.html
nobody- 初級會員
- 文章總數 : 32
年齡 : 49
來自 : 台北
職業 : 待業
愛好 : 電腦繪圖
個性 : 開朗
使用年資 : 新手初學
使用版本 : 新手初學
積分 : 3
經驗值 : 5100
威望值 : 116
回帖精華 : 1
注冊日期 : 2011-06-07
回復: [討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用
【三】、AutoCAD之自定義實體
在AutoCAD裏你看到的圖元都是AutoCAD內建的,這些圖元只有幾何意義沒有物理意義。譬如建築圖裏的矩形柱子,AutoCAD才不管該圖元是柱、樑或其他行業的任何物件,它就只是一個矩形的圖元。如果你要AutoCAD視該矩形圖元為柱子並且能包含所有你會用到的相關資料(如混凝土結構:混凝土強度、鋼筋支數及排列方式、…。如鋼骨結構:鋼材強度及型式、螺栓孔位置及種類、…),那就必須透過ObjectARX來定義該圖元是個(矩形)柱子(或你所從事行業的物件),這樣的物件就稱為自定義實體(Custom Entity)。事實上,除了對圖元定義其物理意義外,你還可以對某空間賦予你所從事行業的相關特性,如建築物裏的臥室通常不喜歡過樑、停車空間有最小淨高要求、…,因此在規劃設計時若有程式能監控這些空間是否與相關限制衝突,這將使設計過程更輕鬆更有效率。
AutoCAD的二次開發中只有ObjectARX能讓你做出自定義實體(Custom Entity),其他的程式語言(autoLISP/visualLISP、VBA、VB.NET、C#.NET及其他透過ActiveX呼叫ObjectARX API者(如Python))則不能。或許你在網上看過有人說AutoCAD.NET(VB.NET、C#.NET)的OverRule可以做出自定義實體,那是一種誤導,如果你有興趣,在autodesk官方論壇搜索一下Custom Entity爬過文後就會得到證實。
以下是一些自定義實體的應用:
•在『是否有方法可以將圖塊弄成不會出現在圖塊編輯清單中? 』greetingsfromtw提到
在AutoCAD裏反應器有兩種:永久反應器及臨時反應器。臨時反應器的特徵是在圖檔開啟後才載入至該圖檔,當圖檔關閉後則該反應器即消失,這表示臨時反應器不存在於圖檔內,也就是說你的電腦硬碟裏某個地方必須存在這個反應器的程式碼。永久反應器則存在於圖檔內,無需額外加載反應器程式碼。亦即圖檔開啟時,AutoCAD會自動載入相關程式碼。而要做出greetingsfromtw說的這種圖塊其核心方法為:自AcDbObject(非AcDbEntity) (註6)衍生一個自定義物件並將滑鼠雙擊有何行為的程式碼寫入、建立字典(AcDbDictionary)並加入上述自定義物件、將字典加入圖塊內。(現在你應該看的出來要做出這圖塊的方法就是ObjectARX。)
至於可以炸開該圖塊,我想或許是圖塊製作者手下留情,否則他大可從AcDbEntity下手並且改寫explode函式(應該說是subExplode函式),如此一來,即使你使用未公開的系統變數QAFLAGS搭配_explode指令也是束手無策。
註6:若是你對AutoCAD的資料庫有所接觸,那麼應該就不會對這些類別名稱感到陌生。
•在『有關設定的問題-是否有防止被他人COPY? 』adslwang提到
其實,如果你希望給客戶的圖只能看不能改,以目前來說只有自定義實體能達到需求。並不是它完全不能破解,而是難度高須投注大量時間精力才能解開,但相對地圖檔內容是否值得如此大費周章呢?
•在『請問有辦法輸出桿件的長度和孔距嗎? 』大家討論了一些可能的解決方法。可是該問題在『有辦法寫出像FrameCAD的軟體嗎? 』又出現了,看來問題沒那麼單純。
本章一開始說過AutoCAD的圖元只有幾何意義沒有物理意義,藉由自定義實體讓AutoCAD能將上述幾何圖元(1個矩形4個圓形,共5個圖元)看待成1個桿件(形狀為矩形且有4個圓形開孔) (註7),再依設計圖內各桿件之位置將其組成完整的骨架。在下一章的『結構建模』裏你會看到藉由ObjectARX快速定義相關圖元之物理意義,一棟建築物的3D構架圖(基礎、柱、樑)以有如施工動畫(依樓層順序由下往上)的形式顯示在AutoCAD內。
註7:這和將5個圖元作成1個圖塊是完全不同的。
•在建築/結構這個領域裏,當結構訂出樑柱尺寸後會將相關結構平面圖傳給建築,此時建築常將結構平面圖套入建築平面圖然後開始比對兩套圖在樑柱尺寸上是否有差異,沒有是最好,若有則須找出那些差異造成什麼影響—這是會消耗大量眼力、腦力、體力的一項辛苦工作。雖然autodesk有釋出官方版的圖檔比對工具『『Compare DWG』:圖檔比較程式(Autodesk官方版),用過後你會發現它還是有些限制:
a. 程式只相容於AutoCAD2013。
b. 無法比對外部參考。(不過可以比對含屬性之圖塊)
c. 只能比對同類型圖檔,如建築平面圖-建築平面圖、結構平面圖-結構平面圖。至於建築平面圖-結構平面圖的比對,二者因為要表達的重點不同所以兩張圖面本來就會有很多地方不同,但程式只單純從圖元的幾何意義去比對,其結果可想而知十之八九不盡人意,到頭來你還是得以人工方式再比對一次。
下一章的『建築自動化改圖』裏你會看到當結構圖的柱尺寸因故須加大時,透過定義好之圖元物理意義,建築圖能在比對過結構圖並進行干涉檢查後提醒設計者在那些欲加大尺寸之柱中有誰加大後會影響到窗戶。同時還可看到為了能以放大的方式來隨意查看比對結果所開發的『動態局部放大』--在模型空間裏無論滑鼠如何移動,游標位置之圖面皆可即時地放大顯示出來,而這也是以ObjectARX利用自定義實體搭配其他技巧做出來的。
在AutoCAD裏你看到的圖元都是AutoCAD內建的,這些圖元只有幾何意義沒有物理意義。譬如建築圖裏的矩形柱子,AutoCAD才不管該圖元是柱、樑或其他行業的任何物件,它就只是一個矩形的圖元。如果你要AutoCAD視該矩形圖元為柱子並且能包含所有你會用到的相關資料(如混凝土結構:混凝土強度、鋼筋支數及排列方式、…。如鋼骨結構:鋼材強度及型式、螺栓孔位置及種類、…),那就必須透過ObjectARX來定義該圖元是個(矩形)柱子(或你所從事行業的物件),這樣的物件就稱為自定義實體(Custom Entity)。事實上,除了對圖元定義其物理意義外,你還可以對某空間賦予你所從事行業的相關特性,如建築物裏的臥室通常不喜歡過樑、停車空間有最小淨高要求、…,因此在規劃設計時若有程式能監控這些空間是否與相關限制衝突,這將使設計過程更輕鬆更有效率。
AutoCAD的二次開發中只有ObjectARX能讓你做出自定義實體(Custom Entity),其他的程式語言(autoLISP/visualLISP、VBA、VB.NET、C#.NET及其他透過ActiveX呼叫ObjectARX API者(如Python))則不能。或許你在網上看過有人說AutoCAD.NET(VB.NET、C#.NET)的OverRule可以做出自定義實體,那是一種誤導,如果你有興趣,在autodesk官方論壇搜索一下Custom Entity爬過文後就會得到證實。
以下是一些自定義實體的應用:
•在『是否有方法可以將圖塊弄成不會出現在圖塊編輯清單中? 』greetingsfromtw提到
這是自定義物件(自定義實體的上層類別)的另類應用--永久反應器。greetingsfromtw 寫到:如題,小弟在一間公司待過時遇到一個cad檔案,非常奇怪,將它(圖中的咖啡色圖塊)連按兩下之後,按理說應該會出現在圖塊編輯清單之中,
但是不管怎麼找都找不到它,導致我無法編輯.當然是可以將之炸開再重新做成圖塊,但這招實在讓我感到很想學,真的好猛阿.
在AutoCAD裏反應器有兩種:永久反應器及臨時反應器。臨時反應器的特徵是在圖檔開啟後才載入至該圖檔,當圖檔關閉後則該反應器即消失,這表示臨時反應器不存在於圖檔內,也就是說你的電腦硬碟裏某個地方必須存在這個反應器的程式碼。永久反應器則存在於圖檔內,無需額外加載反應器程式碼。亦即圖檔開啟時,AutoCAD會自動載入相關程式碼。而要做出greetingsfromtw說的這種圖塊其核心方法為:自AcDbObject(非AcDbEntity) (註6)衍生一個自定義物件並將滑鼠雙擊有何行為的程式碼寫入、建立字典(AcDbDictionary)並加入上述自定義物件、將字典加入圖塊內。(現在你應該看的出來要做出這圖塊的方法就是ObjectARX。)
至於可以炸開該圖塊,我想或許是圖塊製作者手下留情,否則他大可從AcDbEntity下手並且改寫explode函式(應該說是subExplode函式),如此一來,即使你使用未公開的系統變數QAFLAGS搭配_explode指令也是束手無策。
註6:若是你對AutoCAD的資料庫有所接觸,那麼應該就不會對這些類別名稱感到陌生。
•在『有關設定的問題-是否有防止被他人COPY? 』adslwang提到
要打開圖檔後看不到圖元原理類似上述談到的,問題是這麼做意義何在?這樣的圖交給客戶後不會被抱怨嗎?至於鎖住圖層以致圖元無法修改的這個方法,網上可以看到:有人以lisp寫了永久反應器來鎖住圖層(可是客戶電腦裏必須有這支lisp)、有人則是以autocad.NET來寫永久反應器(可是客戶電腦裏必須有與程式相關的xml檔),那麼要是客戶只拷貝dwg檔不拷貝lisp檔或xml檔呢?所以若是要以鎖住圖層的方式來保護圖檔還是得用前面談到的原理。adslwang 寫到:
CAD可以做到打開圖檔後看不到圖元,這種方法我也很想知道.....
圖檔加密還需要用到其它程式嘛?在另存的時後就已經有提供一種加密的存檔性質.....
個人認為蘋果爸的方法就很好用,把整組圖型包在一起或者是使用LISP想分解都沒有那麼簡單
甚至連圖層都可以鎖住了說......即使對方拿到圖檔想拿其中一樣東西也沒有辦法.....
這是個人淺見.....或許換個方式也可以達到怕被盜拷的效果........
其實,如果你希望給客戶的圖只能看不能改,以目前來說只有自定義實體能達到需求。並不是它完全不能破解,而是難度高須投注大量時間精力才能解開,但相對地圖檔內容是否值得如此大費周章呢?
•在『請問有辦法輸出桿件的長度和孔距嗎? 』大家討論了一些可能的解決方法。可是該問題在『有辦法寫出像FrameCAD的軟體嗎? 』又出現了,看來問題沒那麼單純。
本章一開始說過AutoCAD的圖元只有幾何意義沒有物理意義,藉由自定義實體讓AutoCAD能將上述幾何圖元(1個矩形4個圓形,共5個圖元)看待成1個桿件(形狀為矩形且有4個圓形開孔) (註7),再依設計圖內各桿件之位置將其組成完整的骨架。在下一章的『結構建模』裏你會看到藉由ObjectARX快速定義相關圖元之物理意義,一棟建築物的3D構架圖(基礎、柱、樑)以有如施工動畫(依樓層順序由下往上)的形式顯示在AutoCAD內。
註7:這和將5個圖元作成1個圖塊是完全不同的。
•在建築/結構這個領域裏,當結構訂出樑柱尺寸後會將相關結構平面圖傳給建築,此時建築常將結構平面圖套入建築平面圖然後開始比對兩套圖在樑柱尺寸上是否有差異,沒有是最好,若有則須找出那些差異造成什麼影響—這是會消耗大量眼力、腦力、體力的一項辛苦工作。雖然autodesk有釋出官方版的圖檔比對工具『『Compare DWG』:圖檔比較程式(Autodesk官方版),用過後你會發現它還是有些限制:
a. 程式只相容於AutoCAD2013。
b. 無法比對外部參考。(不過可以比對含屬性之圖塊)
c. 只能比對同類型圖檔,如建築平面圖-建築平面圖、結構平面圖-結構平面圖。至於建築平面圖-結構平面圖的比對,二者因為要表達的重點不同所以兩張圖面本來就會有很多地方不同,但程式只單純從圖元的幾何意義去比對,其結果可想而知十之八九不盡人意,到頭來你還是得以人工方式再比對一次。
下一章的『建築自動化改圖』裏你會看到當結構圖的柱尺寸因故須加大時,透過定義好之圖元物理意義,建築圖能在比對過結構圖並進行干涉檢查後提醒設計者在那些欲加大尺寸之柱中有誰加大後會影響到窗戶。同時還可看到為了能以放大的方式來隨意查看比對結果所開發的『動態局部放大』--在模型空間裏無論滑鼠如何移動,游標位置之圖面皆可即時地放大顯示出來,而這也是以ObjectARX利用自定義實體搭配其他技巧做出來的。
nobody- 初級會員
- 文章總數 : 32
年齡 : 49
來自 : 台北
職業 : 待業
愛好 : 電腦繪圖
個性 : 開朗
使用年資 : 新手初學
使用版本 : 新手初學
積分 : 3
經驗值 : 5100
威望值 : 116
回帖精華 : 1
注冊日期 : 2011-06-07
回復: [討論]漫談同步化程式在『AutoCAD內、外』及『建築/結構--自動化改圖』之應用
nobody前輩您真的很有心,這篇文章我要花時間研究一下,感恩啦~
![害羞](/users/3215/23/55/09/smiles/84227.gif)
____________________________________________________________________________________
👉[訂購]AutoCAD圖塊大師課程(點我)👈
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章