从DWG导入SKP后的封面问题
引自:http://www.sketchupbbs.com/forum.php?mod=viewthread&tid=31833
從DWG導入SKP后的封面問題
這一篇文章敘述的內容是承接前一篇『從DWG導入SKP的準備工作』的后續進度,前一篇文章是整個從DWG導入SKP的第一部份,其鏈接如下:
http://www.sketchupbbs.com/viewt ... &extra=page%3D1?
數碼阿叔在前一篇文章里敘述了把DWG導入SKP建模之前在AutoCAD里對圖形該做的準備和清理工作,本篇包含的是第二和第三部份。第二部份敘述的是導入過程中的注意事項,至于最重要的導入SKP以后的封面問題,數碼阿叔會放在文章的第三部份里敘述。
第二部份 從DWG導入SKP進行中
在把DWG圖形導入SKP的過程中有些得注意的事項:
[DWG圖形版本問題]
導入時如果出現『這不是有效的圖形文件…』這類的警示語致使導入失敗,這可能是你的DWG圖形版本問題。確認你的DWG圖形是SketchUp當前版本可以接受的格式。AutoCAD本身版本更新的速度很快,SketchUp可能跟不上。新版本DWG圖形格式經常會跟前個版本有差異,因此在導入前先把DWG圖形保存為AutoCAD 2004格式(這個DWG格式是保證SU6, SU7都可以順利導入的版本)。
[中文(雙位元字符)問題]
導入時如果出現『找不到圖形文件…』這類警示語致使導入失敗,第一種可能性是你的DWG圖形文件的命名或存放路徑所引致的問題。檢查你的DWG文件是不是用了中文命名,洋人為英語環境開發的軟件是基于單位元ASCII編碼寫出來的,在SketchUp里導入DWG的"載入器" (Importer)程式可能無法辨認文件名稱的雙位元中文字符,所以無法開啟DWG文件。因此遇上這個狀況,把DWG改成英文字符或數字命名就行了。
第二種可能性是你把DWG放在了中文命名的目錄下或者把DWG文件放在系統的桌面上。理由跟上述相同,SketchUp的Importer(載入器)程式無法辨認文件目錄或文件夾名稱的中文雙位元字符(桌面也算是中文目錄)。在這里要說一下,有些朋友喜歡把諸如DWG、SKP、ATL這些工作文件放在桌面上,認為空蕩蕩的系統桌面上放這些工作文件很方便,一目了然。但是這的確是個壞習慣,系統桌面通常是用來放置快速啟動應用軟件的快捷圖標,最好保持它功能的專一性。拿來存放DWG或SKP工作文件,哪天清理桌面文件時一不留神刪除了其他的快捷圖標,又會惹出一堆意外的麻煩來。檢查一下,如果你確有這種狀況,那麼建立一個以英數字命名的文件夾存放DWG圖形,從這個文件夾導入當可消除問題。
[漢化介面問題]
說到這里可能有的朋友會產生疑問,明明我安裝的是漢化版的SketchUp,為什麼不能導入中文命名的DWG圖形呢?這是一個必須說清楚的誤區,開啟SketchUp以后顯示在屏幕上的各種菜單命令都是中文字,只表示你的SketchUp具有漢化的命令名稱。漢化的來源有兩種,其一是Google官方正式發行的簡體中文版本,另一種是由一些熱心使用者自行處理的漢化補丁。
官方正式發行的中文版會利用UTF8編碼徹頭徹尾的支持雙位元中文字符,當然也就不存在上述Importer無法辨認中文的問題,可以順利導入中文命名、中文路徑的DWG文件。但是另一種利用漢化補丁進行漢化的就得注意了,所謂補丁就是說先得安裝英文版主軟件再執行漢化補丁進行漢化。如果漢化補丁的作者僅僅漢化了顯示命令的介面文字,那麼軟件本身骨子里就跟英文版無異,還是在單位元的ASCII編碼模式下工作,Importer無法辨認中文也就不足為奇了。當然如果漢化補丁的作者真正是個編程高手,在漢化過程中考慮周詳的把軟件里所有可能會應用到中文的部份都處理得當,也就不會發生導入導出時無法辨認中文的問題,對于在中文環境下的使用者才能真正受益。
[導入時圖形單位對應的問題]
解決了上述問題,導入DWG圖形的時候,還得留意DWG與SKP兩邊單位對應的問題。數碼阿叔講的是"對應"并不是"對等",在SketchUp的下拉菜單點取"文件" (File) > "導入" (Import)以后,彈出一個讓你選取文件的"打開" (Open)對話框,首先在下端文件類型欄里指定導入"ACAD files *.dwg/*.dxf"類型,從目錄里選取了準備要導入的那個DWG文件,接下來看看對話框右側有個"選項" (Options…)按鈕,按下它就會開啟另一個"Import AutoCAD DWG/DXF Options"對話框,看看Scale欄里的單位是否跟你那張DWG圖形單位相同(例如Milimeters, mm),只要這里設置得相同,導入的DWG圖形在大小比例上就不會出錯。
至于你在SKP模型里要使用哪一種單位,m, cm或mm都行,因為那是另外一回事,跟這里無關。在SKP模型上使用的單位是在SketchUp的"模型信息" (Model Info)里的"單位" (Units)面板上設置的,每個人的習慣不同,只要你愿意,大可以把mm單位的DWG導入m單位的SKP里進行建模。因而數碼阿叔說DWG與SKP兩邊圖形單位是"對應"而不是"對等"。
[DWG導入后變成群組問題]
我們把DWG導入SKP以后,在SKP模型文件里會出現二種情況:
其一,如果這個SKP是個剛剛新開的模型文件(看看視窗頂端的名稱應該是默認的Untitled.skp),里面空無一物,這時導入的DWG圖形還是會維持為一堆"松散"的線條。
其二,如果這個SKP是個既有的模型文件,里面原先就有模型存在(即使只有一條線),導入的DWG會自動結合成一個群組。這是SketchUp的一個貼心的設計,為的是讓你在導入以后能方便的在SKP里一次選取全部導入物件調整它們的位置或角度等等,不至于因為導入的一大堆線條混雜在既有模型里弄得不可收拾。因此如果你是把DWG導入一個既有模型里,那就得把它在模型上定位好之后再把群組炸開編輯建模。
曾經看到過有的教程里建議在把DWG導入SKP模型里之后,把它們單獨放在一個圖層上,制作成群組當成模型底圖使用,然后在這個底圖上描繪邊線、封面和建立模型。數碼阿叔則認為,描圖是上個世紀的老觀念了,電腦時代就得發揮電腦的效益。如果我們在導入前的準備工作做得充分徹底,直接應用導入的圖形進行封面建模才是正確的做法。
[SketchUp版本問題]
Google SketchUp當前的版本是7.0版,從7系列的下個更新版開始將會取消SketchUp 7.X (免費版)對DWG/DXF的導入功能,不再內建這個部份的Importer。只有SketchUp 7.X Pro (專業版)繼續支持導入DWG/DXF圖形的能力。如果您現在還在使用免費版,同時也打算亦步亦趨的追隨SketchUp的更新腳步,那麼就得換成SketchUp 7.X Pro專業版使用了。
第三部份 從DWG導入SKP后的封面問題
把DWG圖形導入SKP模型文件里了,成為一堆平鋪在紅綠平面上的黑色線條。這些都是未來模型上的邊線,但是此刻只有空洞洞的線條并沒有面(Face)存在。接下來就是得進行封面(Making face)的工作,封好了底層的面,從這些面開始進行拉伸經常是比較有效率的建模方式,也是最多人采用的方式。
[傳統的封面方法]
傳統的封面方法是利用畫線(Line)工具沿著邊線描繪,每描繪一條線段,SketchUp感應到線段附近產生了可以由線段首尾端點相接的閉合區域,就會產生一個面(face)填充在這個閉合區域里。逐筆描線封面的工作既辛苦又費時,也是個考驗操作者耐心和細心的差事,相對于后面建模階段的快速度,一筆一筆描邊封面的緩慢過程明顯的成為了效率上的瓶頸。所以…
[有效率的封面方法]
眼巴巴的望著屏幕上一大堆邊線,我想絕大多數的使用者心里都會這麼想:假如導入的時候SketchUp會自動產生所有的"面"那該多好(當然這是不可能的,SU沒那麼聰明)。即或不能自動產生面,那麼假如有個封面命令或按鈕什麼的,讓我們按一下就能一下子封好面,也是非常美的事情。這次可別說不可能,雖然SketchUp本身沒有自帶這個功能,倒還真有個插件能幫我們辦得到。這個Ruby插件是SMUSTARD公司發行的免費插件,名稱是Makefaces.rb,具體的操作方法會在后面有所說明。這個Makefaces.rb它能把選取范圍里所有檢測到能閉合的區域都給它們封上面,一次性的完成全部封面工作。這麼說只要擁有了這個插件,就能完美解決封面的問題,從此王子和公主過著幸福快樂的日子。
只要提到封面工作,一定有些人會嗤之以鼻,不就是那個封面插件嗎?誰都會用啊!不錯,Makefaces.rb操作起來很容易,對于小打小鬧的簡單圖形來說,一下子就封好了面,真是誰都會用。可是如果哪一天不巧弄了一個復雜的圖形進來封面,發現Makefaces.rb封出來面稀稀落落的像個花貓,如果不了解封面失敗的可能原因,那就只剩下抓耳撓腮干著急了。因此為了過上幸福快樂的日子,下面就告訴您封面失敗的可能原因和解決方法。
[且慢封面!先得解決歷史遺留問題]
即使封面插件很完美,但是我們導入的圖形未必很完美,圖形里有些線條間的銜接問題會直接影響到封面插件的運行。數碼阿叔在前一篇『從DWG導入SKP的準備工作』里曾經敘述到線段銜接相關的問題,就是導致應用插件封面會出問題的主要原因(即使手工封面也是一樣),我們來看看這些歷史遺留問題歸納出的四種狀況:
《狀況一》:曲線圓弧線段化的后果
DWG里的園、弧、曲線導入SKP后會線段化,變成許多連結在一起的直線段(segment),致使原先連接在它們上面其他的線段發生端點脫離的現象,無法形成預期的閉合區域,不閉合自然就無從封面。
《狀況二》:交叉而不相交
向量格式的DWG圖元有個"交叉" (cross)時不"相交" (intersect)的特性,例如說二個線段交叉處只是二個線段覆疊(overlap)在一起,并不存在著交叉點。由于二個交叉的線段導入SKP以后還是維持著"交叉"而不"相交"的特性,也就無法在預期的位置進行封面。
《狀況三》:線段的開放端(線頭)
由于DWG容許長短不同的二條線重疊在一起互不相干,短的線段未必在其端點處銜接了其它的線端點(你也未必會發現長線段上還躺著一個短線段),這就形成了線的開放端。或者原先DWG圖形里的某些線段并不是都連接在別的圖元端點上,原本就存在著開放端(線頭)。Makefaces.rb在執行封面中若遇到了某處存在著游離的線頭,就無法認定那里是閉合區域因而跳過那些區域不執行封面。因此模型邊線中存在的開放端會導致封面不完全。
《狀況四》:雜亂的掃瞄線
其實我們在工作中最怕遇上那種從圖紙經過掃瞄機轉換出來的地形等高線圖,看起來好像是一條線卻是好幾條長短不齊的線段重疊在一起,這種DWG圖形不先處理好遽爾導入SKP將會給封面工作平添無限的麻煩。
[解決問題的方法]
對于上述《狀況一》和《狀況二》的情況,有二種解決方法
在SketchUp里就地解決:
在SketchUp里運用另一個插件Intersect_Overlaps.rb把交叉而不相交的邊線打斷建立端點,由于這個同是SMUSTARD公司發行的插件不是免費的,網路上也搜尋不到免費的資源,因此在這里不多做說明,不日我會把這個插件的操作方法放在個人空間里,哪位朋友買到了如果不會使用可以去看看。
在AutoCAD里預先解決:
另外我們還有一個比較有效率的處理方式,是在把DWG導入SKP之前先在AutoCAD里運用一個名叫breakall.lsp程式,一次性把圖形中"大多數"交叉而不相交的圖元都在其交叉位置打斷,使得原先交叉(cross)的位置成為相交(intersect)的端點,消除以后在SketchUp里運用Makefaces.rb封面的障礙。
這里說"大多數"是因為這個breakall.lsp無法打斷圓和橢圓,這個breakall.lsp程式里呼叫一個xyp_lib.VLX通用函數集里的xyp-break執行交叉點打斷任務,在程式碼中雖然設置了對圓和橢圓也進行打斷,但是在把圓打斷第一點的時候,圓就成了一個360度的弧,違反了AutoCAD對弧的定義,致使AutoLISP解譯器發出無法建立360弧的警告信息而放棄打斷圓(橢圓亦同)。對于其他圖元諸如線(Line),自由曲線(SPLine), 多重線(Polyline), 弧(Arc)這些有交叉情況的圖元則統統可以打斷,整體來說還是瑕不掩瑜,是個好用的工具程式,至于圓和橢圓就只有找個不重要的位置先把它們剪開一小段先讓它們變成弧再執行打斷啦。
這個在AutoCAD里一次性打斷全部交叉處的工作,其執行的時機是在前一篇『從DWG導入SKP的準備工作』里的[步驟九]里面,打斷完成以后再導入SKP可以大量節省處理時間。
想要使用這個breakall.lsp程式的朋友可以在下面追風版主的帖子里下載:
http://www.sketchupbbs.com/viewt ... ght=%2B%D7%B7%B7%E7?
安裝方法:下載后解壓縮然后把breakall.lsp和xyp_lib.VLX復制到AutoCAD的安裝目錄下。
使用方法:在AutoCAD的命令提示號后面鍵入(load "breakall")按Enter鍵載入程式后,再次鍵入執行命令qingli就可以選取圖元進行一次性打斷交叉點的工作,注意滑鼠從左向右拉是框選,從右向左拉是全選。
由于原先這個breakall.lsp程式碼好像是拼湊起來的,每執行一次就會自動把xyp_lib.VLX載入一次。重復載入不是什麼好事情,數碼阿叔已經修正了這個程式,不日會把修正后的程式碼放在數碼阿叔個人空間里。
對于上述《狀況三》的解決方法
在SketchUp里面就地解決,可以執行StrayLines.rb插件找出模型里具有開放端的線段,這個插件同樣是SMUSTARD公司發行的免費插件。StrayLines.rb執行中有Label(標記), Select(選取), Delete(刪除) or Show(顯示)四個選項。
其中Label(標記)這個選項會在各個線段的開放端加上文字標簽。會把它們標記成從"1 of n"到"n of n" ( n是所發現開放端的總數,例如1 of 4, 2 of 4,…等等)。整個操作可以用一次UNDO命令回復操作前的狀態。在你執行了Label以后,并且你判斷某些線端本來應該相接但是實際上卻沒接在一起,你可以執行另一個ExtendCloseLines.rb插件在兩個沒連在一起的線端點之間自動畫一條線把它們真正連接起來。也可以運用另一個CloseOpens.rb插件自動封閉應該閉合的線段開口。把圖形里的線段都弄"清爽",這樣接下來你就可以放心的進行封面了。
對于上述《狀況四》的解決方法
在SketchUp里面可以說無解,把那些長短不齊重疊在一起的線段一一理清楚,花費大量的時間實在不值得,所以建議放棄導入的SKP回到AutoCAD里重新處理。
在AutoCAD里面把這些掃瞄出來雜亂的等高線單獨鎖在一個圖層上,然后在一個新圖層上另行描繪出一份等高線圖,然后刪除原先的雜亂線條,留下一份清潔的等高線圖。
如果等高線圖是來自測繪單位的電子圖形文檔,則幾乎每一圈等高線都不在Z=0的X-Y平面上。除非你為特定目的有意要把三維地形圖導入SKP里運用別的插件產生三維地形,否則就利用Flatten.lsp程式把所有等高線Z值歸零到X-Y平面上去。
第四部份??在SketchUp里使用的封面插件
解決了上述四種狀況里陳述的問題以后,再開始利用插件執行封面工作,當然成功率會比悶著頭一昧硬干要高得多。當然,吃燒餅沒有不掉芝麻的,百密總有一疏,導入的DWG圖形越復雜,發生問題的機率越高。有時導入了比較復雜圖形,執行封面以后發現一些零星問題,這時生米煮成了熟飯,再回到AutoCAD里重新處理再重新導入恐怕是不合效率的做法。對于這種情況我們還是可以在SketchUp里利用插件就地解決。下面列出封面插件與跟封面插件配套的插件:(注:里面有三個重要的插件不是免費取得的,如果您的米多,倒是可以買回來用,用些許銀子換取長期提升工作效率,還是值得的。)
Makefaces.rb 封面
ProgressBar.rb 進度條(必須跟Makefaces.rb同時安裝)
StrayLines.rb 找出線的游離端(線頭)
Intersect_Overlaps.rb 在線的交叉處產生交點(有點類似breakall.lsp的Ruby插件,$20.00)
CloseOpens.rb自動封閉應該閉合的線段開口,($20.00)
Flatten.rb 把模型構件的Z值歸零(有點類似Flatten.lsp或FLT.lsp的Ruby插件)
ExtendCloseLines.rb 自動找出并連接應該銜接而未銜接的線段,($20.00)?
上述Ruby插件都是SMUSTARD公司發行的插件,沒注明價格的就是免費的插件,需要的朋友可以到SMUSTARD官方網站下載。下載地址:
http://www.smutard.com/scripts/
[Makefaces.rb封面插件的操作]
Makefaces.rb?(v.1.400版),作者為Todd Burch。這個Makefaces.rb插件執行時會來回遍訪你的模型,在需要產生"面" (face)的位置產生面。
安裝方法:把Makefaces.rb復制到您SketchUp安裝目錄下的Plugins文件夾里。Makefaces加載時會呼叫另一個插件progressbar.rb,這個插件必須跟Makefaces同時安裝到Plugins文件夾里。
命令位置:在"工具" (Tool)下拉菜單里,命令名稱為"MakeFaces"。
操作方法:
①首先,如果您安裝的是v.1.400版,在執行之前,你可以不用先選取任何模型。或者你可以選取你模型的一部份,Makefaces將只針對那個選取部份執行。如果您安裝的是v.1.300版,那麼您必須先選取整個模型或部份模型。
②從"工具" (Tool)下拉菜單上點擊"MakeFaces",啟動封面命令。
③啟動命令后這個MakeFaces將執行封面工作。
④在執行封面過程中,在狀態列上有個"進度條" (progress bar)會顯示出進度。
⑤MakeFaces在執行完畢以后會報告封面的統計結果。
MakeFaces封面失敗的可能原因:
如果在執行了MakeFaces之后,你對結果感覺不滿意,覺得所有應該已經建立的面卻沒有產生。可能的原因如下:
①你的模型尺寸太小了,SketchUp不會建立小于1mm這種非常小的面。試試把模型"放大" (Scale)為10倍,然后再次執行封面插件。
②模型中可能存在著具有開放端的游離線段,因而中斷了正常產生面的程序。可以執行StrayLines.rb插件找找看是否在圖形里存在著這些型態的游離線段。
③有些線段可能并未圍成閉合的環圈。同樣去執行StrayLines插件找出未閉合的線頭。如果你也安裝了CloseOpens.rb插件,執行CloseOpens插件是最有可能自動封閉開口的做法。
④有些線段可能只是"交叉" (覆疊),但是不"相交" (intersect)。你可以藉由選取兩條交叉線其中的一條來確定這兩條線是否有交點,如果被選取線的高亮部份延伸跨越了另一條線,表示兩條線交叉處沒有端點。這幾乎都發生在從CAD導入的圖形里。要解決這個問題,可以執行IntersectOverlaps.rb插件,在所有線段交叉處都產生交點(端點),然后再次執行Makefaces。
⑤針對可能存在不共面(在同一個平面上)的情況,可以運用Tools > Utilities > Query Tool命令去檢查面的座標。快速的測試方法是畫一條對角線,如果畫了對角線以后就能自動封面,這一圈的線段很有可能不共面。可以使用Flatten.rb插件把模型構件的Z值歸零到X-Y平面上。
[StrayLines.rb尋找線段開放端插件的操作]
StrayLines.rb?(v.1.000版),作者為Todd Burch。
這是個用于對導入的CAD圖形評估有多少實施清理需求的一個杰出插件,對圖形里所有"具有開放端的線段"進行Label(標記)、Select(選取)、Delete(刪除)、Show Only(顯示)操作。
安裝方法:把StrayLines.rb復制到您SketchUp安裝目錄下的Plugins文件夾里。
命令位置:在"Plugins"下拉菜單里,命令名稱為"StrayLines"。
操作方法:
這個插件對"具有開放端的線段" (open-ended line segments)進行搜尋或處理工作。如果一條線的端點并未接觸到另一個實體(entity),接下來它就會被認定成一條"游離線" (stray line)。應用這個工具對游離線工作時有四個選項:
Label (標記),Select (選取),Delete (刪除),Show Only (顯示)
Label (標記)
這個選項會在各個線段的開放端加上文字標簽,讓你能在圖形里清楚看到開放端的位置和數目。這個標記功能會把開放端標記成從"1 of n"到"n of n" ( n是所發現開放端的總數,例如1 of 4, 2 of 4,…等等)。整個操作可以用一次UNDO命令回復操作前的狀態。在你執行了Label以后,并且你判斷某些線端本來應該相接但是實際上卻沒接在一起,你可以執行另一個ExtendCloseLines.rb插件在兩個沒連在一起的線端點之間自動畫一條線把它們真正連接起來。也可以運用另一個CloseOpens.rb插件自動封閉應該閉合的線段開口。
Select (選取)
這個選項僅掃描主動選取的范圍(或者如果不選取則為模型的目前范圍),如果以及當它發現具有開放端的線段時,會將其加進"當前選擇集" (current selection)里。
Delete (刪除)
在目前的活動范圍內的所有具有開放端的線段將被刪除。刪除的全部合并在運用一次單一的UNDO操作里撤消。
Show Only (顯示)
這個選項會發現所有的"具有開放端的線段" (open ended line segments,游離線)。接下來,如果發現了任何游離線,在當前的編輯范圍里的所有其他實體(entity)是被隱藏的。所有的隱藏可在一次單一的UNDO命令操作下撤消。
總結
以上是生活随笔為你收集整理的从DWG导入SKP后的封面问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为考试而准备1——无线WCDMA 网规精
- 下一篇: JAVA高并发编程