2010年3月28日 星期日

從DWG導入SKP的準備工作

作者:數碼阿叔
http://blog.sketchupbbs.com/space.php?uid=6670&do=blog&id=2553
緣起
有時數碼阿叔在論壇上看到有些朋友們提出在把DWG格式的2D圖形導入SketchUp以後,在建立模型階段出現了一些問題,歸納起來這些問題大致包括下面這些狀况:

封面的問題:在進行描邊封面的過程中某些地方總是封不了面、在意外的位置封了面、封面時總有些面粘來粘去或出現不該有的重叠面、無法分離內部的面等等。
模型大小的問題:明明建立的模型很簡單,也還沒貼材質,但是SKP文件變得非常大,感覺有點拖不動模型,影響到操作性。

圓弧問題:原先連接在圓和弧上的綫端點現在抓不到或抓到的位置不對,以致封不了面。
對於上述這些現象,說起來導入的DWG圖形本身要負很大的責任,這個DWG圖形是在SketchUp裏三維模型的定位基準,再怎麽說在導入SketchUp之前也要先把DWG圖形整理得正確和清爽才行。否則帶過去後患無窮。

關於在把DWG格式的2D圖形導入SketchUp之前如何清理圖形內容的問題,由於原始的DWG圖形可能很單純也可能比較複雜,數碼阿叔抽空寫了這篇比較完整的清理圖形過程。

從DWG導入SKP的準備工作


雖然SketchUp本身具備完整的建模功能,可以從無到有的完成整個三維模型。但由於SketchUp使用的座標系統不是AutoCAD的那種WCS絕對座標系統,在AutoCAD裏使用WCS座標系統是根據絕對座標值明確而直接的給圖形裏的各個"圖元" (Entity)定位。SketchUp所使用的是相對座標系統,所有的操作幾乎都是根據前一點的相對距離或角度進行定位,對於習慣於操作AutoCAD的使用者在初期概念設計階段或對既有圖形放樣會造成一定的不習慣。同時SketchUp對于圖層定義不像AutoCAD那麽嚴謹,在AutoCAD中每個圖元都隸屬於某個單一的圖層,新畫上一條綫,一定會落在"當前圖層" (Current layer)上,不同圖層上的圖元間不會相互干擾。

SketchUp對圖層的定義則鬆散得多,圖層主要的用途常用在視景管理上,即使也可以設置當前圖層,但是許多新圖元産生時(例如推拉)跟當前圖層也沒有必然的關係。對于比較複雜的建築圖,在基底平面上放樣的時候,SketchUp只要感應到能够圍合的區域又會自動産生封面粘來粘去,在這個階段的確難以提升工作效率。

該使用哪一種或哪幾種設計軟件完成設計工作,選擇權完全在于設計師自身,不在軟件發展商,設計師沒有必要忠心耿耿的死抱著某一個軟件跟它同生共死。別相信軟件發展商所說的『我們的軟件是XX設計唯一的解决方案(solution)』那種鬼話,世界上沒有完美的軟件,不論SketchUp、AutoCAD或其他軟件都各有其優勢也各有其不足。對於設計師來說不論什麽軟件都只是個設計工具,只要能提高設計的效率和品質,我們完全可以自由的把各種軟件組織在一起交互運用各取所長。因此在整個設計的進程中,有許多建築師和設計師會把從AutoCAD或其他CAD應用軟件所建立的二維圖形導入SketchUp用作建立三維設計模型的底圖。

對于我們準備導入SketchUp的DWG圖形,究其來源,可以區分爲下面幾種類型:
第一種類型:取得的建築資料本身就是原先已經完成的設計圖電子文件(DWG格式的圖形檔)。這些圖形可能是自己製作的,也可能是外來的。由于製圖習慣和作業水平的差异,這些圖形也幷不是專爲導入SketchUp所繪製,因此絕大多數躲不掉得先做許多清理工作。

第二種類型:利用AutoCAD進行設計初期的場地配置規劃、建築物量體分割放樣的概念平面作業,把由此産生的二維DWG圖形導入SketchUp,進行從概念設計到細部設計的三維模型化設計作業。

第三種類型:把AutoCAD做爲SketchUp的前置工具,爲了SketchUp建模的需要,利用AutoCAD製作全場地或部份建築物的二維圖形,導入SketchUp用做構建三維模型的底圖。
對於上述第二和第三種類型産生的DWG圖形幷不用太擔心,因爲這兩種類型本身有很明確的目標,就是爲了要用於SketchUp建立三維模型使用,製圖者在細節上相對的會比較小心和仔細,事實上在導入SketchUp之前需要做清理準備的工作也比較單純。

經常會産生相當困擾的是上述第一種類型,由於這些圖形製圖的目標是爲了印出傳統的圖紙,幷不是專爲SketchUp建模所準備的,只要在列印出來的圖紙能看,有些地方可能就會便宜行事。根據經驗爲了要導入SketchUp常常得花很大的功夫去做整理準備的先期工作,然而爲了能在SketchUp裏節省大量放樣的時間,花費這些時間還是很值得的。

對于該怎麽著手把DWG圖形清理乾淨,我不想把它弄成檢查表這類的東西,由於DWG圖形的來源各有不同,需要清理的內容也各有不同。數碼阿叔根據最不利的第一種類型的外來圖型可能遇到的狀况,把完整的清理圖形工作列成十三個循序進行的步驟。雖然幷非對於所有的DWG圖形都用得到每一個清理步驟,使用者可以依循著這些順序檢查圖形。

檢查並清理圖形的建議步驟:


[步驟一]檢查圖形中當前的座標系統是否爲WCS "世界座標系統"
看看AutoCAD屏幕視窗左下角顯現的當前圖形座標系統圖標,如果不是WCS,就得把AutoCAD的座標系統從"使用者定義座標系統" (UCS)改回到"世界座標系統" (WCS)。

[步驟二] 開啓全部圖層(Layer)
進入"圖層管理器" (Layer Manager),把所有關閉(Off)、冷凍(Frozen)和鎖定(Locked)狀態的圖層全部打開,成爲可操作的"圖層" (Layer)。
這麽做的目的是把目前因爲被隱藏而看不到的圖元都顯現出來,幷且處於可操作狀態以利於清理圖面。

[步驟三] 執行Zoom Extent命令,把圖形的可見範圍放大到包含全部圖元的範圍
這是一個預先檢查的步驟,看看Zoom Extent以後,準備要載入SketchUp的圖形是不是剛剛好充滿了整個視窗。如果不是,表示圖形中還有不需要帶過去的圖元。在整個清理圖元的過程中可以重複在各個步驟裏使用Zoom Extent命令,檢驗主要模型範圍外還有沒有什麽東西。

[步驟四]删除圖形中不需要帶進SketchUp的"圖元" (Entity)
①清除圖形中游離的"點" (Point)
執行Pdmode命令把"點"(Point)的顯示模式改爲"3"。原先AutoCAD對于點的顯示模式既設的爲"0",在圖形上就是一個沒有大小的亮點,如果這個點剛好落在綫段上就看不見它存在。把點的顯示模式改爲3,AutoCAD會以一個相對尺度的"X"符號顯現點的位置。
由于在SketchUp視窗裏很不容易找到一個單獨點的位置,這種點圖元絕大多數在SketchUp裏用不到,把它們删除掉。執行Zoom Extent命令把圖形顯示範圍放大到顯現全部圖形,檢查畫面邊緣部位是否還有游離的點。
删除完了以後可以再度使用Pdmode命令把"點"(Point)的顯示模式改回到"0"。
②删除圖形中不需要帶進SketchUp的"圖元"

檢查一下凡是跟在SketchUp裏建模無關的綫段、輔助綫、座標軸綫、文字、數字、符號標記、尺寸標注、門窗、設備、家具、植栽、紋理(hatch)以及圖框等等都把它們一一删除掉。
執行Zoom Extent命令,把圖形的可見範圍放大到包含全部圖元的範圍。這個動作很重要,有的時候在製圖過程因爲操作失誤,剛從鍵盤打進去的字不見了或者複製的圖元不見了,通常我們不會很在意,頂多重做一次。可是AutoCAD不這麽想,它會很好心的把這些圖元放在遠遠的天邊。當你執行Zoom Extent命令以後,假如發現顯示器上原先充滿屏幕的圖形一下子縮成一小塊,那麽趕快在對角或對面邊緣處仔細找一找,看看有沒有一小段綫、一個點或者一個字藏在那裏,如果真的有那麽趕快把它删除掉吧。

[步驟五]處理"圖塊" (Block)
關于DWG圖形裏面的"圖塊" (Block)是否應該先炸開(Explode)以後再導入SketchUp,衆說紛紜。有人認爲保留圖塊對於以後在SketchUp裏封面比較容易,因此動輒建議一定要保留圖塊。數碼阿叔則認爲此事不可一概而論,必須看圖塊本身的內容而定,只能選擇性爲之。

我們經常從一些外來的DWG圖形文件中發現,嵌附在裏面的圖塊亂七八糟的什麽都有,甚至于還會有整張平面圖在裏面,AutoCAD很好心,凡是用過的圖塊它都會保留在這個圖形的數據庫裏,如果不做清理而讓這些圖塊跟著DWG圖形一股腦兒的帶進SketchUp裏面,就有可能發生前面所說的,很簡單的小模型還沒貼材質的時候SKP就膨脹到幾十兆。SketchUp會接受這些圖塊,但是在SketchUp裏却不可能用上這些2D圖塊,何苦爲難自己呢?

假如圖塊裏包含有不共面的圖元(entity),導入SketchUp以後勢必增加封面工作的困擾。幷且應用那個讓Z值歸零的AutoLISP程式FLATTEN.lsp也無法對圖塊(Block)做壓平的工作,因此數碼阿叔還是建議把圖形裏的圖塊炸開(Explode)。

[步驟六]處理綫型(Linetype),確認均爲連續綫型
我們把CAD圖形導入SketchUp的目的是爲了建模,原先在AutoCAD圖形裏如果使用了虛綫、點綫等等這些不連續的綫段,到了SketchUp裏就變得完全無用。因此得先把這些不連續的綫型更改爲連續(Continue)綫型。
具體的操作方法:使用Chprop > linetype命令把那些不連續的綫型改變成連續的綫型。

[步驟七]檢查圖形單位(Unit)和精確度(Precision)
檢查DWG圖形的圖形單位是否跟日後在SketchUp裏面建模使用的圖形單位相同,如果兩者不相同的話,在這裏先對DWG圖形的圖形單位作調整,例如把DWG上英制(不是沒有可能)改爲十進位公制,比較合乎我們的使用習慣。其實幷不是一定得弄成毫米對毫米,像數碼阿叔自己的習慣就是在DWG裏使用毫米(mm)而在SKP裏使用米(m)爲單位,導入時單位轉換幷沒有任何不便或誤差。

有一件容易被使用者忽略的就是DWG圖形中所設置的長度與角度精確度問題,許多人使用附加在AutoCAD上的所謂建築專業軟件製圖,這些軟件爲了尺寸標注和製圖的便利,多半會自動設置毫米(mm)單位幷且把長度與角度的精確度(Precision,指小數位數)設置爲個位(不顯示小數點後面的尾數),使用Distance命令量測兩點距離時顯現的距離爲不帶小數的整數值。對於二維圖紙固然很方便,但是對于準備要導入SketchUp建立模型而言,就很容易造成認知上的誤差,不利於日後做模型的比例縮放和旋轉方位。例如說在精確度默認爲個位數的15長度值,真正的長度可能爲15.0535…或15.3953…,所以說15和15.0000可能是不同的長度。

因此我們在DWG裏先把圖形單位裏長度與角度的精確度設置成0.000,目的是確認場地和建築物的正確尺度,做爲日後在SketchUp裏建模時比例縮放和旋轉方位的有效參考。

[步驟八]處理圖元的高程(Elevation),使全部圖元都落在X-Y平面上
爲了方便在SketchUp裏建模,先檢查一下圖形裏所有的圖元是否都在Z=0的高程位置。如果因爲原先製圖時不小心或者其他軟件自動産生圖形時弄出一些不在X-Y平面上的圖元(其Z值不等于0),導入SketchUp以後由于這些綫不共平面,直接會造成在SketchUp裏這個部分無法封面。因此在AutoCAD裏事先把它們的Z值歸零都放在X-Y平面上,對於後續在SketchUp裏建模封面工作有很大的幫助。

具體的做法是運用一個AutoLISP程式FLATTEN.lsp一次性的把圖形中所有圖元的Z值歸零。這個FLATTEN.lsp程式完全是英文介面,數碼阿叔已經把程式的操作方法和原始碼放在博客日志裏。另外我們SketchUpBBS論壇裏有個漢化介面的FLT.lsp,需要使用的話可以自行搜索下載。

FLATTEN.lsp載入AutoCAD裏必須在WCS座標系統下執行,把幾乎"所有"圖元的Z值歸零,目的是使所有圖元都落在X-Y平面上,成爲名副其實的二維圖形。但是FLATTEN無法處理圖塊(Block)裏的圖元,如果圖塊裏有些圖元的Z值不爲0,執行FLATTEN是無法將其歸零的。因此在[步驟五]裏我建議把圖形裏的圖塊炸開,使得FLATTEN能順利的把這些圖元的Z值歸零。

[步驟九]處理曲綫、圓、弧與交叉綫
AutoCAD裏的圖元使用的是向量格式,所謂向量格式指的是以屬性描述圖元的記錄方式,聽起來似乎很玄,關于綫、圓、弧的叙述式,舉個例子說,綫(line)包括起點和終點座標(x, y, z)、以及綫的向量。弧包含了起點和終點座標(x, y, z)、弧的園心座標(x, y, z)。園就更簡單了只包含園心座標和半徑。但是不會紀錄在圖形裏有哪些圖元跟它交叉,例如兩條任意交叉的綫段,只有AutoCAD的Osnap抓點功能能以交叉點(intersection)模式算出這二個圖元同時通過(X-Y平面)某個座標點位置因而顯示出抓點靶框來。如果我們關閉了Osnap抓點功能,那就別想精確的從這個交叉位置再做出什麽來。

囉囉嗦嗦的講這些交叉綫做什麽,爲的是兩條交叉綫段導入SketchUp以後還是兩條獨立的交叉綫段,導入時SketchUp也不會對交叉位置做任何標記和認知那裏有個交叉點,描邊封面的過程中通過SketchUp的snap抓點功能感應到那裏有個交叉位置顯現一個綠點,必須等到你在綠點處按下滑鼠讓描邊的邊綫在那裏建立一個端點,當SketchUp感應到附近能由端點連接綫段形成能閉合區域以後,就會自動産生封面的動作。由此可以推想,在導入的底圖上如果存在著許多交叉綫,封面過程中出現意外的封面範圍或重叠面也就不足爲奇了。在整理DWG圖形的時候該不該處理圖形裏的交叉綫,把它們打斷成爲端點連接。不好說,使用者自己拿主意吧!

圓和弧是另一個問題,前面說過DWG圖形是向量格式,如果以圓周或弧段上的某處爲起點畫一條綫,這條綫同樣跟圓或弧不發生關係,只能說那個綫端點跟園周某處有相同的座標值(爲了方便說明我們稱它爲端點A)。導入SketchUp以後問題就來了,我們得知道SketchUp裏的綫是沒有曲綫的,看到的不論圓、弧、曲綫都是由相互連接的直綫段組成,我們稱爲"段落" (segment),導入時SketchUp會默認的給每個圓和弧設置24個段落,意即原先DWG裏的圓變成由24段直綫連在一起(有點類似AutoCAD的多重綫)。這時問題就來了,原先落在圓周上的直綫端點A因爲圓周和弧的改變必然會脫離原先在圓周和弧上的位置,要不變成了交叉要不就成了完全脫離狀態。

由於必須要把視景連續放得很大才能看清楚這種接觸點的差异,通常在描邊封面時只會感覺這個位置明明點了下去却老是封不了面,就是圓弧曲綫被SketchUp段落化所造成的後果。該怎麽辦?在SketchUp裏說起來無解,只能像綉花那樣一點一滴慢工細活的去修補或重新連綫。但是知道會有這種後果,在AutoCAD裏倒是可以未雨綢繆去避免它,其一是儘量別把綫的端點放在圓周或弧段上,其二是別畫什麽切綫之類的,真有需要的話到了SketchUp裏面再補畫這些綫。

第三個問題是比較傷感情的,也多發生在前述第一種類型的外來圖形文件中,按照製圖規定平面圖上柱子、剪力墻是要塗黑的,目的是好跟砌塊能有所區別,因此DWG圖形裏柱子和剪力墻得弄成不透明,正規的方法是先畫出墻柱斷面輪廓綫,再應用Solid或Pline命令把輪廓綫內塗滿。但是我曾經不止一次在把出自一些設計單位的平面圖上墻柱塗滿的部份删除以後,訝然發現柱子沒有了、剪力墻也不見了,經仔細檢查以後發現原來這些被Pline多重綫塗滿的部份底下根本沒有畫出墻柱的輪廓綫。尤有甚者,被塗滿遮蔽住的下面原本該跟墻柱銜接的墻綫長長短短亂七八糟。金絮其外敗絮其中,看得令人搖頭,仿佛又回到上個世紀拿著鉛筆人力製圖的年代,我們有些設計師對專業的輕忽態度和對製圖的不到位著實該好好檢討。當然我們不能一根竹竿打翻一船人,還是有許多設計單位的圖形畫得中規中矩。我在這裏提出來的目的是要告訴大家在把DWG圖形導入SketchUp之前的準備階段中,一定要考慮到可能會遇上這種現象。如果運氣不好真的撞上了,那麽趁早把那些該有的墻柱輪廓綫、沒接在一起的墻綫、投影綫都一一修整清楚。

[步驟十]整理幷精簡"圖層" (Layer)
把圖形從AutoCAD導入SketchUp時,圖層會跟著導入變成爲SketchUp的圖層。如果在DWG圖形裏圖層用得很多,導入後讓SketchUp憑空多了一大堆圖層,對于後續在SketchUp裏建立模型幷沒有什麽好處。由于SketchUp對圖層定義非常鬆散,不像AutoCAD會嚴格的在現行圖層(Current layer)上工作,建模過程中很難保持圖層的齊一性,通常我們會在建模到了一個段落以後調整模型中各個構件的所屬圖層,爲的是可以用圖層做爲這些模型構件的可視性開關,利於場景操控。

因此把一大堆圖層從AutoCAD帶進SketchUp幷沒有實質性的必要性,通常會全選圖形以後,運用Chprop > layer命令把整個圖形都改變到某個單一圖層上,或者乾脆放在"0"圖層(Layer 0,浮動圖層)上面。剩下這些多餘的圖層則清理掉(見步驟十二)。

[步驟十一]調整北向方位和座標原點
在AutoCAD的製圖作業中爲了製圖方便和效率,通常會把矩形建築物的長短向放在平行XY軸方向,使得真正的地理北向可能幷不在平行Y軸的方向。如果就這樣導入SketchUp,SketchUp會以初始綠軸對齊DWG的Y軸方向,致使模型的北向相對于真正的地理北向發生偏差,連帶使得陰影方位角跟著産生誤差,雖然在SketchUp裏可以重設北向角度,但是輸入方位角度分秒幷不那麽方便,因此在AutoCAD裏就把北向方位校正才是正確的做法。

具體的操作方法不難:選取整個圖形,根據地理北向與Y軸間的角度差把圖形"旋轉" (Rotate)到跟Y軸平行北向的方位。(意即Y軸對齊北向)

另外得注意的就是"座標原點" (Origin)的問題,AutoCAD的WCS是絕對座標系統,圖形的每一個圖元都從座標原點(0, 0, 0)起算來計算其相對位置。如果圖形距離座標原點很遠,等到導入SketchUp以後,SketchUp會把DWG的座標原點對應到SketchUp的"初始座標原點" (建立一個新的skp模型檔的時候,最初紅綠藍軸的交叉點),結果會使得在視景中看不到導入的圖形,必須執行SU的Zoom Extent把視景擴大到包含整個模型才看得到導入的模型。因此在這個階段最好的方式便是在AutoCAD中把圖形的左下角"移動" (Move)到座標原點上,就能有效的避免導入後找不到模型的現象。

具體的作法:選取整個圖形,啓動Move命令,以圖形的左下角做爲起始點,從鍵盤輸入"0, 0, 0"做爲第二點,這麽做可以把圖形搬到座標原點處,利於導入SketchUp以後的處理。

[步驟十二]清理圖形數據庫(Purge All)
這是最重要的步驟,爲圖形瘦身减肥。AutoCAD的DWG圖形裏有一個看不見的"數據庫" (database),數據庫裏嵌裝著全部圖形信息,包含了在這個圖形裏"曾經使用過"(used)的圖塊、綫形、紋理、文字、圖層、尺寸類型…等等,所謂"曾經使用過"的意思是即使我們現在的圖形中已經把這些東西給删除掉了,可是這些東西還是留存在數據庫裏,占了相當大的內存量。有的時候明明圖形很簡單,導入SketchUp以後Skp模型陡然變得很大,不用說就是在導入時把一些"幽靈"夾帶了進去。因此我們必須在這裏把圖形數據庫清理一番,去蕪存菁。

具體的操作方法:執行AutoCAD的"清除全部" (Purge All)命令,會跳出一個對話框視窗,上面列出所有可以進行清除的項目列表,凡是列出的項目前端有個加號(+)的項目表示這個項目裏包含了曾經使用過而現在不再用到的東西(可以清除的項目),按清除按鈕執行清理數據庫(database)的工作。需要注意的是,有些不再參考到的圖塊被清除了以後,原先圖塊所屬或包含的圖層、字型、綫型、紋理…等等才會浮現出來等待下一次清理,因此這個"清除全部" (Purge All)命令應該重複執行三到四次,等到各項目前端的加號都消失了爲止,這時圖形數據庫也被精簡到最小的狀態。

[步驟十三]保存DWG文件
對這一個步驟不必多做解釋了。使用"另存爲"(Save as)命令吧,保存成一個乾淨的新圖形文件。

對于把DWG導入SKP過程中可能遇到的問題以及在SKP裏封面的種種問題,請看數碼阿叔下一篇教程:『從DWG導入SKP後的封面問題』

創用CC授權條款

文章數碼阿叔/柏基建築師原創作品,以創用CC 姓名標示-非商業性-禁止改作 3.0 Unported 授權條款釋出。