建立巨集(Macros)基礎教學 (與Rhino指令一起的腳本)

介紹

在Rhino裡建立巨集可以一次執行很多任務,包括定義命令或是改善工作流程。

“腳本”這個詞有可能造成一些困惑。腳本被使用在描寫巨集以及編寫更多複雜的RhinoScript或是其他程式語言。

這兩樣其實非常不同。編寫“RhinoScript”功能或是其他程式語言比建立巨集更加複雜,而且需要更多有關程式語言的知識跟技巧。關於那一方面我們不在此討論。

這裡所說的“巨集”指的是在Rhino中將一連串Rhion指令及其選項串聯起來,變成一個自動執行的功能。這裡用的是最簡單的“腳本”,任何Rhino使用者都接觸得到,即便他們對程式語言並沒有很深的了解。 只要稍微懂得Rhino 指令還有結構,加上合乎邏輯的腦袋,還有一點實驗精神就可以完成了。

所需要的工具:

你的腦袋

Rhino的Help檔 - 是Rhino所有指令以及子選項的列表,也是你最重要的參考來源。

Rhino巨集編輯器(MacroEditor),可以讓使用者輕鬆使用或是調整巨集。

您曾經用過一兩個巨集

Rhino使用者可能不知道自己已經使用過巨集了。很多Rhino裡的指令已被寫成“巨集”,所以當您點選工具列上的按鈕或是從功能表單叫出某個指令,那就是一個已經設定好的“巨集”。現在,按下shift並在直線擠出上按右鍵。

這是一個簡單巨集的案例,只要用一個指令就可以設定好一連串的選項,所以不用每次用到此功能就要註明很多設定。ExtrudeCrv有幾個“預先設定的選項”的按鈕,Tapered, AlongCurve, ToPoint, Cap=Yes (solid) 等等。 查看ExtrudeCrv按鈕來檢視到底是如何布局的。

這有點像您在下指令的時候按或是輸入選項,一次一個。 事實上巨集不過就是這樣的東西而已,是一組指令重複序列,不建立巨集的話,您只能手動輸入一個個的指令。

一個單一指令的腳本選項可能與數據組合(比如座標或是其他數據資料)。 也可以將數個指令串聯在一起,就是把操縱或是建立物件的““事件”自動排序。

註:為何用下底線_? 下底線告訴Rhino,無論在任何語言環境下執行Rhino,接下來的指令是英文,這樣的巨集不管在何種語言環境下都可以使用。如果您已經在英文環境下作業,在不造成其他影響的情況下,可以消除下底線( _ )。 為什麼要用驚嘆號( ! )? 為安全起見,這可以取消前一個在運作的任何指令。

入門

假設你已經把一連串10 x 10 x 10的方塊底部放置在想要位置的中心,那個中心點可以經由滑鼠在想要的位置點一下,或是用鍵盤輸入座標來設定。

使用者可以使用立方體指令(角對角加高度),但在預設值裡,插入點將會被放置在立方體的第一個角。 要把插入點放在使用者想要的地方,使用立方體還有居中的指令會比較簡單。事實上這只是立方體指令加上居中的選項,所以在巨集裡,使用者需要啟動此功能。

開啟巨集編輯器,鍵入以下指令:

! _Box _Center 

這是立方體底下的巨集,底部居中
所有輸入(指令或是數據輸入),都必須要有一個空格隔開。

現在我們需要定位中心點。要完成這個任務,Rhino被告知暫時停止處理指令,直到使用者用滑鼠點選或是用鍵盤輸入座標。這是藉由”暫停“(Pause)命令來達成的。

! _Box _Center _Pause

只要輸入數據,就可以直接用指令來指定正方體的尺寸。 既然立方體居中選項需要一個立方體的角來做第二個輸入,我們就可以指定它的X, Y座標:

! _Box _Center _Pause r5,5

(為什麼要用”r“? 我們希望這個座標是最後一個選取的點,也就是立方體底部的中心。不然立方體的角永遠都會落在X5, Y5)

此時我們可以加入高度,在此案例中大概是原來的起點。

! _Box _Center _Pause r5,5 10

由於並沒有進一步輸入的需要,巨集到此完成,正方體也完成。請注意因為我們希望正方體的長寬相等,有另外一種可能性是直接按Enter,而不是最後輸入的”10“。

! _Box _Center _Pause r5,5 _Enter

現在巨集運作中,而且您也挺滿意的。製作一個新的工具列按紐 並且將巨集貼進去,再給它一個好認的名字,比如“10 x 10 x 10 bottom centered box”。 只要巨集被執行過一次,以後只要按右鍵,就會自動執行,而無須每次點擊按鈕。

較複雜的巨集

有些指令可以叫出有許多選擇的對話框,這通常會讓巨集停止,等到使用者點選所需選項才會繼續運作。 既然使用者希望能夠自動完成巨集所執行的任務,那麼可以用-(破折號)來跳過之前出現的對話框。 使用者用腳本寫入選項,巨集就會自動運作完成。有些指令有好幾層的子選項,如果你想要知道有哪些,在指令欄鍵入指令加上-(破折號),點擊選項就可以查看。

放樣兩個開放曲線

如果你想要重複放樣兩個開放的曲線來組成一個曲面。用Loft指令的話,你還是需要點選一些對話框。如果使用-Loft,就可以避開對話框,效率也比較好。來看看以下的例子。

_-Loft
_Pause
_Type=_Normal
_Simplify=_None
_Closed=_No
_Enter

要注意的是該命令暫停時,您挑選所需的曲線後,立即就會執行。如果這個暫停被拿掉,當您尚未挑選曲線時,巨集也不會繼續進行。 如果您事先選擇了曲線,那麼這個暫停將自動被忽略。接下來這個指令會繼續設置您指定的所有選項,並且完成曲面。 試試看用兩個開放曲線,不管是事先或是之後才選取。 嘗試修改其中一個或是多個選項,比如Closed=Yes或是Simplify=Rebuild (對於這一點您必須加上 Rebuild=20 或是其他數值。)

修改以作為封閉曲線使用

現在試試看兩個封閉曲線。 您將會碰到問題,為何? 關於封閉曲線,放樣(Loft)需要使用者輸入接縫的位置, 在執行巨集時必須被指定在正確排序。所以您可以從之前自動跳出的選項中挑選接縫值(在子選項),也可以在螢幕上調整。不管用哪個方法,您都需要對巨集做出修改。

在適當的地方加入暫停,讓使用者能有足夠的時間檢查並對螢幕上的接縫作出調整。

_-Loft
_Pause
_Pause  <--
_Type=_Normal
_Simplify=_None
_Closed=_No
_Enter

以Enter替代暫停(Pause)指令,表示Rhino會跳過這些預設值的接縫。

_-Loft
_Pause
_Enter  <--
_Type=_Normal
_Simplify=_None
_Closed=_No
_Enter

或者可以進入接縫子選項來指定另一個放樣接縫選項。

_-Loft
_Pause
_Natural  <--
_Enter    <--
_Type=_Normal
_Simplify=_None
_Closed=_No
_Enter

(Enter是用來離開”接縫“選項層,再回到放樣選項層)

很可惜的是,因為需要輸入額外的接縫選項,同樣的巨集並沒有辦法在開放或是關閉的曲線上正常運作。這是巨集系統和一些Rhino指令寫入的限制。

利用巨集來快速設定介面選項

巨集也可以自動設定不同GUI和文件內容選項,而無須進入選項對話框。我用以下的方式來設定自己想要的彩線網格方式。(注意-_DocumentProperties前面的- 破折號)

-_DocumentProperties
_Mesh _Custom
_MaxAngle=0 _AspectRatio=0
_MinEdgeLength=0 _MaxEdgeLength=0
_MaxEdgeSrf=0.01 _GridQuads=16
_Refine=Yes _JaggedSeams=No
_SimplePlanes=No
_Enter
_Enter

為何最後要兩個Enter?

因為在-_DocumentProperties之下我們進入了兩層,第一層是網格,第二層是網格的自訂子層。第一個Enter用來離開子層並且回到主層,第二個Enter用來離開指令。有些腳本可能需要三個Enter。 以下是Jeff LaSor關閉或開啟滑鼠游標的腳本。

要開啟或關閉滑鼠游標,您必須將以下步驟鍵入按鈕設定:

  -_Options _Appearance _Visibility
  _Crosshairs _Enter _Enter _Enter

請注意每個指令選項名字。在腳本裡面指定這些指令,就像使用滑鼠點選。 同樣也請注意三個enter的輸入。 在本案例,每個指令能帶領使用者進入下一層指令選項,也就是說您需要一個Enter指令來回到上一層。既然這個腳本進入了三個子層,所以也需要3個Enter來離開此指令。

或者,不管之前進入了多少個子層,最後使用一個驚嘆號”!“ 就可以馬上回到原來的地方。註:如果您想要繼續使用此巨集,千萬不要用驚嘆號”!“,而是用Enter,否則此巨集將永遠停在”!“處,然後關閉。

以上腳本只是將滑鼠游標開啟或關閉,但如果您需要一個一直開啟或是一直關閉的滑鼠游標,請參考以下腳本:

滑鼠游標永遠開啟:

  -_Options _Appearance _Visibility
  _Crosshairs=_Show !

滑鼠游標永遠關閉:

  -_Options _Appearance _Visibility
  _Crosshairs=_Hide !

請注意這裡的”!“,參考上述提醒過的重點。 也請注意無論選項設定值為何,可以用 '=' 直接定。滑鼠游標有兩種可能的選項,”Show“和”Hide“,

謝謝你,Jeff。

其他編寫巨集有用的工具與指令

有一些小技巧可以用來編寫更複雜的巨集。其一是不同篩選器的識別,尤其是SelLast,這個指令選取最後一個建立/轉換的物件。SelPrev,是選取前一個輸入的物件。 SelNone則是取消選取所有的物件。 也可以命名多個物件,將它們選為一組,然後命名這個群組。 之後再用這些名字叫出此物件/群組。

Select
SelLast
SelPrev
SelNone
SetObjectName
SetGroupName
SelGroup
SelName
Group
Ungroup

設置單一物件名稱

  _Properties _Pause _Object _Name
  [輸入物件名稱] _Enter _Enter

取消單一物件名稱,但不刪除此物件

  _Properties _Pause _Object _Name
  “ “ _Enter _Enter (quote space quote for the name)

案例

請閱讀以下巨集:

_Select _Pause _Setredrawoff
_BoundingBox _World _Enter
_Selnone _Sellast
_OffsetSrf _Solid _Pause
_Delete _Sellast
_BoundingBox _World _Enter
_Delete _Setredrawon

此腳本建立一個偏移值邊框方塊圍繞的物件,此偏移值由使用者輸入。The Setredrawoff/on stop/restart 會停止或重新啟動螢幕更新,執行之後可以消除畫面閃爍,並且加速處理。但是要小心,如果在Setredrawon之前中止指令,您會以為Rhino當機,因為螢幕不再更新。 別擔心,只要鍵入Setredrawon,螢幕就會恢復原狀。

最後一個案例:以下巨集建立一個在2D平面或是文字物件上的中心點。這個巨集預設使用者與文字在同樣的視圖上,那麼此物件是2D平面的。

請注意已命名的群組還有各種指令的使用,NoEcho暫時停止對於指令的回報,與Setredrawoff/on共同使用,可以讓巨集運作時不閃爍,也不會有過多的指令回報。 當然不用NoEcho也是可以運作的。

_Select _Pause _Noecho _Setredrawoff
_Group _Enter _SetGroupName TexTemp
_BoundingBox _CPlane _Enter
_SelNone _SelLast _PlanarSrf
_SelPrev _Delete _SelLast
_AreaCentroid _Delete
_Sellast _SelGroup TexTemp
_Ungroup _Group _Setredrawon
請自由增加或編輯本教學

教學仍在編輯中