周丁丁
(博興縣公用事業(yè)服務(wù)中心,濱州 256500)
當(dāng)今,在風(fēng)景園林學(xué)科中,不管以圖片的方式還是其他多媒體(如虛擬現(xiàn)實(shí))的方式展示設(shè)計(jì)方案,三維模型的制作一般都是必不可少的環(huán)節(jié)。在三維模型的制作中,Trimble SketchUp(文中簡(jiǎn)稱SketchUp)彌補(bǔ)了項(xiàng)目可視化的不足,以“人人可操作的3D軟件”的優(yōu)勢(shì)得到了從業(yè)者廣泛的應(yīng)用。
園林植物是風(fēng)景園林的重要組成部分,對(duì)于三維模型中園林植物的制作,在SketchUp中通常是運(yùn)用以下兩種方法:
(1)將樹制作成SketchUp中的組件,再將這個(gè)組件通過復(fù)制或者類似復(fù)制的陣列操作來實(shí)現(xiàn)。
(2)通過SketchUp與其他軟件的文件交換,通常是在AutoCAD中將樹制作成一個(gè)塊,并將這個(gè)塊通過復(fù)制或者陣列再導(dǎo)入SketchUp中,將這個(gè)塊(SketchUp跟AutoCAD的文件交換中,將AutoCAD中的塊轉(zhuǎn)化為SketchUp中的組件)通過SketchUp中的組件替換功能實(shí)現(xiàn)。
這兩種方法中,其他的樹其底層都是通過對(duì)同一棵樹的復(fù)制來繪制的,所以形成的結(jié)果就是同一種樹的大小和角度都是相同的(見圖1),這顯然是不符合自然規(guī)律的。
圖1 所有的樹都同樣大小
如果保持這樣的結(jié)果,將使三維模型和后期以三維模型為基礎(chǔ)生成的其他文件看起來很不自然。為了讓三維模型看起來更自然,就需要挨個(gè)調(diào)整每一棵樹的大小,由于園林中的樹通常很多(尤其是綠化占主要內(nèi)容的項(xiàng)目),而且SketchUp本身自帶的縮放或旋轉(zhuǎn)工具效率不高,所以這就意味著較大的工作量和較低的工作效率。
為了使運(yùn)用SketchUp制作的三維模型更加自然,提高勞動(dòng)效率,降低勞動(dòng)強(qiáng)度,本文開發(fā)了一款SketchUp插件,其可以一次性地按照用戶設(shè)定的縮放和旋轉(zhuǎn)邊界,以組件的原點(diǎn)為基準(zhǔn)對(duì)所選組件實(shí)現(xiàn)批量隨機(jī)縮放,從而解決上述的問題,使模型看起來更自然。
插件運(yùn)用Ruby語言開發(fā),Ruby也是SketchUp命令的底層語言。
插件通過each方法遍歷用戶選擇的每一個(gè)組件,并使其以原點(diǎn)為原點(diǎn)進(jìn)行縮放/旋轉(zhuǎn):
為方便用戶的使用,插件在算法中過濾掉了用戶選擇的圖元中的其它元素,使得縮放/旋轉(zhuǎn)變換只對(duì)組件起作用:
為了在用戶填反最大值/最小值的情況下也能變換,插件采用自動(dòng)將用戶實(shí)際填入的值中大的作為最大值,小的作為最小值的處理方案(但仍會(huì)提示用戶檢查是否有其他錯(cuò)誤):
#不管用戶如何填寫,最大值總是取大的,最小值總是取小的。
經(jīng)測(cè)試,插件適合以下操作系統(tǒng)版本和SketchUp版本的任意組合。
操作系統(tǒng)版本:Windows7、Windows10
SketchUp版本:SketchUp8、SketchUp2013-2021
在硬件方面,SketchUp8及以上版本的硬件都滿足插件的運(yùn)行需求。
插件的名稱為“隨機(jī)縮放/旋轉(zhuǎn)”,通過Random_Scale_and_Rotation.rbz的rbz文件提供。
在SketchUp中,依次點(diǎn)擊菜單欄擴(kuò)展程序管理器→安裝擴(kuò)展程序→根據(jù)用戶的存儲(chǔ)位置找到程序→打開即可將插件安裝到SketchUp中(見圖2)。
圖2 插件的安裝方法
插件安裝后位于工具欄中,默認(rèn)是隱藏的,使用時(shí)依次點(diǎn)擊視圖→工具欄→找到隨機(jī)縮放/旋轉(zhuǎn)并將前面復(fù)選框中的√勾選(或者在任意工具欄的空白處右擊,在彈出的菜單中找到隨機(jī)縮放/旋轉(zhuǎn)勾選)即可顯示插件。插件的圖標(biāo)為兩棵樹。
當(dāng)用戶的選擇集中不包含組件時(shí),圖標(biāo)是不可用狀態(tài)(grey),當(dāng)用戶的選擇集中包含組件時(shí),插件即自動(dòng)激活(enable)。用戶點(diǎn)擊插件圖標(biāo),即可實(shí)現(xiàn)對(duì)所選組件的隨機(jī)縮放/旋轉(zhuǎn)。
用戶點(diǎn)擊圖標(biāo),即彈出輸入縮放/旋轉(zhuǎn)邊界輸入框,讓用戶輸入縮放/旋轉(zhuǎn)的邊界,縮放比例以百分比為單位,旋轉(zhuǎn)角度以角度為單位,默認(rèn)縮放比例為80%~120%,旋轉(zhuǎn)角度為0°~360°(見圖3)。
圖3 用戶可在輸入框中輸入縮放/旋轉(zhuǎn)上下界
用戶輸入數(shù)值后點(diǎn)擊確定按鈕,即按照輸入的數(shù)值隨機(jī)縮放/旋轉(zhuǎn)用戶選擇的組件(見圖4)。
圖4 樹隨機(jī)批量縮放/旋轉(zhuǎn)效果
插件的第1個(gè)易用性在于插件在進(jìn)行隨機(jī)縮放/旋轉(zhuǎn)的過程中過濾掉了用戶選擇集中的其他圖元,只對(duì)組件起作用,由于SketchUp的選擇工具本身比較難用,這樣就避免了用戶誤將其它圖元選擇入選擇集時(shí)產(chǎn)生誤操作的情況。如在圖中,若用戶的選擇集中還包含了后邊的建筑、花池、草地、路,它們分別是SketchUp中的組、面、線圖元——但都不是組件圖元,插件并不對(duì)它們起作用,而只對(duì)組件圖元樹進(jìn)行如圖4所示的隨機(jī)旋轉(zhuǎn)或/和縮放。
需要注意的是,插件是忽略角度的周期性的,即插件認(rèn)為10°跟370°是不同的角度,所以用戶的旋轉(zhuǎn)角度界限輸入為0°~10°和0°~370°時(shí)的效果是不同的,前者只能讓組件在0°~10°之間產(chǎn)生一個(gè)微小的隨機(jī)旋轉(zhuǎn),后者則能產(chǎn)生超過一個(gè)圓周的隨機(jī)旋轉(zhuǎn)。
另外,根據(jù)SketchUp的算法,旋轉(zhuǎn)只對(duì)沒有勾選“總是朝向相機(jī)”選項(xiàng)的組件起作用,對(duì)于勾選了“總是朝向相機(jī)”的組件,不管怎么旋轉(zhuǎn),總是紅原點(diǎn)藍(lán)這個(gè)平面面向用戶(見圖5)。這不是插件的缺陷,而是SketchUp默認(rèn)的算法,這也是符合日常行為邏輯的,如一個(gè)圖片制成的面片樹組件,我們總是希望這個(gè)圖片面向著我們,這樣看起來才像棵樹,如果這個(gè)面轉(zhuǎn)了,它就是一條線了(轉(zhuǎn)90°的時(shí)候就只剩下一條線),這是我們所不希望的結(jié)果。
圖5 旋轉(zhuǎn)命令對(duì)勾選了“總是朝向相機(jī)”的組件不起作用
圖4中的樹就是一種總是朝向相機(jī)的組件,所以隨機(jī)旋轉(zhuǎn)在圖4中并不起作用,圖6中的樹并不總是朝向相機(jī),所以隨機(jī)旋轉(zhuǎn)對(duì)圖6是起作用的。
圖6 旋轉(zhuǎn)命令對(duì)沒有勾選“總是朝向相機(jī)”的組件起作用
若用戶錯(cuò)誤地將縮放/旋轉(zhuǎn)的最小值和最大值寫反了——即用戶將最大值(最小值)填寫成了最小值(最大值),插件會(huì)向用戶提示并根據(jù)用戶的選擇執(zhí)行忽略或者修改錯(cuò)誤,這是插件的第2個(gè)易用性。
當(dāng)用戶將最大值和最小值填反時(shí),插件會(huì)彈出消息框,提示用戶填反了,并詢問用戶是否忽略錯(cuò)誤,將用戶填寫的實(shí)際數(shù)值中的最大值和最小值作為最大值和最小值進(jìn)行隨機(jī)縮放/旋轉(zhuǎn),若用戶選擇是,插件將忽略用戶的錯(cuò)誤,自動(dòng)按照用戶實(shí)際填寫數(shù)值中的最大值(最小值)作為縮放/旋轉(zhuǎn)邊界進(jìn)行運(yùn)算。若用戶選擇否,則返回輸入框界面,讓用戶修改數(shù)值后提交。
插件的退出:插件可以在輸入框界面點(diǎn)擊關(guān)閉或者取消退出。
插件可幫助實(shí)現(xiàn)園林三維模型的自然開發(fā),但顯而易見,其是針對(duì)SketchUp組件圖元的一項(xiàng)操作,所以,它適合有組件此類變換需求的任何行業(yè),如舞臺(tái)場(chǎng)景、游戲設(shè)計(jì)、工業(yè)設(shè)計(jì)、建筑設(shè)計(jì)等。另外,對(duì)于當(dāng)前的計(jì)算機(jī)系統(tǒng)或者編程語言,是不能產(chǎn)生真正意義的隨機(jī)序列的,所以同樣,插件對(duì)樹的隨機(jī)調(diào)整并不是真正意義上的隨機(jī)——這并不是插件的缺陷,而是當(dāng)前信息技術(shù)和計(jì)算機(jī)的發(fā)展水平。但顯然,即使如此,對(duì)于我們關(guān)注視覺效果的三維模型來說已經(jīng)足夠了。