This shows you the differences between two versions of the page.
zh-tw:rhino:basicmacros [2015/09/14] |
zh-tw:rhino:basicmacros [2020/08/14] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | |||
+ | |||
+ | ======建立巨集(Macros)基礎教學 (與Rhino指令一起的腳本)====== | ||
+ | |||
+ | =====介紹===== | ||
+ | |||
+ | 在Rhino裡建立巨集可以一次執行很多任務,包括定義命令或是改善工作流程。 | ||
+ | |||
+ | " | ||
+ | |||
+ | 這兩樣其實非常不同。編寫" | ||
+ | |||
+ | 這裡所說的" | ||
+ | |||
+ | |||
+ | =====所需要的工具:===== | ||
+ | 你的腦袋 | ||
+ | |||
+ | Rhino的Help檔 - 是Rhino所有指令以及子選項的列表,也是你最重要的參考來源。 | ||
+ | |||
+ | Rhino**巨集編輯器(MacroEditor)**,可以讓使用者輕鬆使用或是調整巨集。 | ||
+ | |||
+ | =====您曾經用過一兩個巨集===== | ||
+ | Rhino使用者可能不知道自己已經使用過巨集了。很多Rhino裡的指令已被寫成" | ||
+ | {{: | ||
+ | |||
+ | |||
+ | 這是一個簡單巨集的案例,只要用一個指令就可以設定好一連串的選項,所以不用每次用到此功能就要註明很多設定。**ExtrudeCrv**有幾個" | ||
+ | 查看**ExtrudeCrv**按鈕來檢視到底是如何布局的。 | ||
+ | |||
+ | 這有點像您在下指令的時候按或是輸入選項,一次一個。 事實上巨集不過就是這樣的東西而已,是一組指令重複序列,不建立巨集的話,您只能手動輸入一個個的指令。 | ||
+ | |||
+ | 一個單一指令的腳本選項可能與數據組合(比如座標或是其他數據資料)。 | ||
+ | 也可以將數個指令串聯在一起,就是把操縱或是建立物件的"" | ||
+ | |||
+ | > **註:**// | ||
+ | 為什麼要用驚嘆號( ! )? 為安全起見,這可以取消前一個在運作的任何指令。// | ||
+ | |||
+ | ====入門==== | ||
+ | |||
+ | 假設你已經把一連串10 x 10 x 10的方塊底部放置在想要位置的中心,那個中心點可以經由滑鼠在想要的位置點一下,或是用鍵盤輸入座標來設定。 | ||
+ | |||
+ | 使用者可以使用立方體指令(角對角加高度),但在預設值裡,插入點將會被放置在立方體的第一個角。 要把插入點放在使用者想要的地方,使用立方體還有居中的指令會比較簡單。事實上這只是立方體指令加上居中的選項,所以在巨集裡,使用者需要啟動此功能。 | ||
+ | |||
+ | 開啟**巨集編輯器**,鍵入以下指令: | ||
+ | |||
+ | ! _Box _Center | ||
+ | // | ||
+ | 所有輸入(指令或是數據輸入),都必須要有一個空格隔開。 | ||
+ | |||
+ | 現在我們需要定位中心點。要完成這個任務,Rhino被告知暫時停止處理指令,直到使用者用滑鼠點選或是用鍵盤輸入座標。這是藉由" | ||
+ | |||
+ | ! _Box _Center _Pause | ||
+ | 只要輸入數據,就可以直接用指令來指定正方體的尺寸。 既然立方體居中選項需要一個立方體的角來做第二個輸入,我們就可以指定它的X, | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 | ||
+ | (為什麼要用" | ||
+ | |||
+ | 此時我們可以加入高度,在此案例中大概是原來的起點。 | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 10 | ||
+ | 由於並沒有進一步輸入的需要,巨集到此完成,正方體也完成。請注意因為我們希望正方體的長寬相等,有另外一種可能性是直接按Enter,而不是最後輸入的" | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 _Enter | ||
+ | 現在巨集運作中,而且您也挺滿意的。[[zh-tw: | ||
+ | 只要巨集被執行過一次,以後只要按右鍵,就會自動執行,而無須每次點擊按鈕。 | ||
+ | |||
+ | ======較複雜的巨集====== | ||
+ | |||
+ | 有些指令可以叫出有許多選擇的對話框,這通常會讓巨集停止,等到使用者點選所需選項才會繼續運作。 既然使用者希望能夠自動完成巨集所執行的任務,那麼可以用-(破折號)來跳過之前出現的對話框。 使用者用腳本寫入選項,巨集就會自動運作完成。有些指令有好幾層的子選項,如果你想要知道有哪些,在指令欄鍵入指令加上-(破折號),點擊選項就可以查看。 | ||
+ | |||
+ | =====放樣兩個開放曲線===== | ||
+ | 如果你想要重複放樣兩個// | ||
+ | |||
+ | < | ||
+ | _-Loft | ||
+ | _Pause | ||
+ | _Type=_Normal | ||
+ | _Simplify=_None | ||
+ | _Closed=_No | ||
+ | _Enter | ||
+ | </ | ||
+ | |||
+ | 要注意的是該命令暫停時,您挑選所需的曲線後,立即就會執行。如果這個暫停被拿掉,當您尚未挑選曲線時,巨集也不會繼續進行。 如果您事先選擇了曲線,那麼這個暫停將自動被忽略。接下來這個指令會繼續設置您指定的所有選項,並且完成曲面。 試試看用兩個開放曲線,不管是事先或是之後才選取。 嘗試修改其中一個或是多個選項,比如//// | ||
+ | |||
+ | =====修改以作為封閉曲線使用===== | ||
+ | 現在試試看兩個封閉曲線。 您將會碰到問題,為何? | ||
+ | 關於封閉曲線,放樣(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是用來離開" | ||
+ | |||
+ | // | ||
+ | |||
+ | |||
+ | ======利用巨集來快速設定介面選項====== | ||
+ | |||
+ | 巨集也可以自動設定不同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來離開此指令。 | ||
+ | |||
+ | 或者,不管之前進入了多少個子層,最後使用一個驚嘆號" | ||
+ | |||
+ | 以上腳本只是將滑鼠游標開啟或關閉,但如果您需要一個一直開啟或是一直關閉的滑鼠游標,請參考以下腳本: | ||
+ | |||
+ | 滑鼠游標永遠開啟: | ||
+ | < | ||
+ | -_Options _Appearance _Visibility | ||
+ | _Crosshairs=_Show ! | ||
+ | </ | ||
+ | 滑鼠游標永遠關閉: | ||
+ | < | ||
+ | -_Options _Appearance _Visibility | ||
+ | _Crosshairs=_Hide ! | ||
+ | </ | ||
+ | 請注意這裡的" | ||
+ | |||
+ | 謝謝你,Jeff。 | ||
+ | |||
+ | ======其他編寫巨集有用的工具與指令====== | ||
+ | |||
+ | 有一些小技巧可以用來編寫更複雜的巨集。其一是不同篩選器的識別,尤其是**SelLast**,這個指令選取最後一個建立/ | ||
+ | **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/ | ||
+ | 別擔心,只要鍵入Setredrawon,螢幕就會恢復原狀。 | ||
+ | |||
+ | **// | ||
+ | |||
+ | 請注意已命名的群組還有各種指令的使用,**NoEcho**暫時停止對於指令的回報,與Setredrawoff/ | ||
+ | 當然不用**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 | ||
+ | |||
+ | </ | ||
+ | ==請自由增加或編輯本教學== | ||
+ | 教學仍在編輯中 | ||