您現在的位置是:首頁 > 旅遊
Rhino外掛開發:RhinoScript指令碼教程(1)
指令碼開發用什麼語言
▲
2004
年
11
月,
RhinoScipt
生成的古建築模型
月底的
Rhino/Grasshopper
要開班了
,
忽然有點感慨。曾經寫過無數的
Rhino
指令碼
,
程式碼量遠超
CorelDraw
外掛
,
年輕時的狂熱自己都感動。不敢說是否
Rhino
國內第一人,前
5
總是排得進去的,因為那時連一個可以交流的夥伴都找不到。孤獨地開始,孤獨地前行。
以下的幾期教程是
2007
年寫的,是一本書的一部分,書是跟國防工業出版社籤的一部教程,後來各種忙,書也沒能寫完,很對不起國防工業。如果時間夠用,我還是希望能把這個教程寫完,即使有信心學它的設計師沒幾個。這算是給自己一個交代吧。再說,大量的舊貨也該整理一下放出來交給用得著的人了。有些程式碼由於
Rhino
系統升級和內部函式的變化已經無法正常運行了,也準備花點時間重新修訂一下。
Rhino外掛開發:Rhino指令碼教程(1)
第1章 Hello World!
指令碼語言是一種程式語言。
與
VB
、
VC++
等大型程式語言相比,指令碼語言編寫的程式一般不是可以獨立執行的
exe
可執行檔案,而只能依附與某一軟體平臺,在該軟體的環境下執行。因此,多數指令碼語言是為某一軟體量身定做的。
指令碼語言面向的物件大多是軟體的使用者而不是專業的軟體開發人員,因此程式結構簡單,大多是文字檔案,不需要編譯即可直接執行。有些指令碼甚至也不做語法檢查,執行到有錯誤的地方才停下來,如
AutoCAD
的指令碼
AutoLisp
。
對
3D
造型軟體來說,指令碼語言的用途在於拓展軟體的造型功能,實現一些複雜的或有規律的形態設計任務,或完成一些靠選單按鈕和滑鼠操作難以實現的建模任務。舉例來說,指令碼可以完成的任務有下面一些:
1)做
100
個球體,讓他們成螺旋狀排列;
2)做
100
個大小形狀都隨機的杯子;
3)在水中投入三個石子,泛起干涉漣漪,做出這個波紋曲面;
4)做一個藤編的花籃,每一根藤條都要做出來;
5)從
。txt
或
。xls
文件中獲取出點座標資料,並用於曲面造型;
……
Rhino
的指令碼語言稱為
Rhino
,它的語法格式與
VB
完全相同。
Rhino
內部為該指令碼語言設定了若干函式
(如
Rhino 4。0
是
724
個函式
)用以完成各種
3D
造型任務。本書假設讀者對程式設計沒有任何經驗,因此例項和解釋都從最基礎的開始。如果有讀者已經是程式設計高手,這些粗淺的解釋可以略過不看了。
為
了對
Rhino
指令碼的
使用方法有一個大致的瞭解,我們寫個程式來執行一個著名的任務。這個程式只有一行:
MsgBox “HelloWorld!”
這個只有一行的程式代替
Rhino
問候人類世界,方式是彈出一個對話方塊,顯示一句話:
Hello World
!。
這個程式執行後在
Rhino
的介面上出現一個對話方塊:
我們將在下節圍繞這句友好的問候做一些更細緻的工作。
我們先把這行字儲存起來。為了讓
Rhino
知道這行字是一條指令,還是有些必要的情況需要注意的:
1)引號必須是英文引號,因為
Rhino
不認識任何中文字元,包括中文標點,但引號裡面的內容可以是任何語言;
2)儲存為副檔名為
。rvb
的文字檔案,因為
Rhino
只執行這種格式的指令。
現在我們把這個程式在
Rhino
中執行一次,來認識一下
Rhino
執行
rvb
指令碼的過程。
執行
指令碼
程式的操作命令在
Rhino
的
Tools
選單
下的
Rhino
子選單中
:
▼
Rhino
程式
的起動選單
rvb
指令碼
的操作命令有
3
個
:
載入程式
(
Load
),
執行程式
(
Run
)
和編輯程式
(
Edit
)
。
Load
命令可以載入一個
rvb
程式
,
執行後彈出如圖
所示的
對話方塊。
載入一段
rvb
程式的操作順序如下:
1)點
Add
按鈕從標準檔案列表框中選擇副檔名為
。rvb
的檔案,確定後文件的全路徑顯示在左側列表框中,如圖
所示
。可以反覆使用
Add
按鈕新增多個
。rvb
檔案。
2)
點選選擇所要載入的
rvb
檔案,按
Load
按鈕載入。載入後加載對話方塊消失,
Rhino
開始執行該
rvb
檔案中的程式。我們這個程式
執行後在螢幕上顯示前面所示的訊息框。
Remove
按鈕可以從檔案列表中刪除選中的
rvb
檔案
——
只是從左邊框裡刪除,檔案仍然存在。
Edit
按鈕可以開啟選中的
rvb
檔案並進行編輯。
Close
按鈕關閉對話方塊。
Run
命令可以執行
rvb
指令碼中定義的子過程,執行後彈出如下對話方塊:
▼
Run
命令介面
我們這個只有一行的程式裡沒有定義任何子過程,因此左邊框裡是空的。子過程的定義方法後面會詳細提到。
Edit
命令可以開啟
rvb
檔案進行編輯,並隨時執行。執行
Edit
命令後彈出如下對話方塊。
▼
Edit
命令介面
Merge
按鈕可以從檔案列表中
選擇
rvb
檔案並將程式內容插入到左側編輯框中當前游標位置,當編輯框為空時相當於開啟一個新檔案。按
Merge
按鈕並選擇我們的程式檔案,可以在左邊看到我們寫過的程式,如圖所示。
VB
和
Rhino
內部定義好的命令(稱為
“
保留字
”
,程式設計的時候不能使用這些保留字為變數名)用藍色顯示
出,我們可以在這裡修改我們的程式。
▼
用
Edit
命令編輯
HelloWorld
程式
Save
按鈕儲存當前編輯的
rvb
檔案。
Run
按鈕執行當前編輯框中的
rvb
檔案,其作用相當於
Load
按鈕。
右下方的圖釘圖示按下後可以在執行當前檔案時保持編輯框為開啟狀態,否則按下
Run
按鈕後編輯框消失。
rvb
程式是一個文字檔案,因此用
ASCII
碼文字檔案編輯器就可以編寫了,如
Windows
自帶的記事本。記事本對於編寫
RVB
程式並不是一個很好的工具,這裡作者推薦的一個文字編輯軟體是
EditPlus
。
EditPlus
中有
VB
模板,使用該模板編寫
RVB
程式可以得到清晰的介面顯示,各種保留字都顯示以不同的色彩,非常方便:
▼
EditPlus
編輯介面
為了進一步鞏固剛剛建立起來的信心,我們再來編寫一個
同
HelloWorld
一樣簡單的程式,這次要讓
Rhino
建立一個球體。
Rhino。AddSphereArray(0,0,0), 5。0
把上面這行程式儲存
Ex1-2Ball。rvb
,用執行
Ex1-1HelloWorld。rvb
同樣的方法執行一遍,會發現在座標原點位置出現了一個球體。
我們來看看這行簡單的程式如何做到這點的。這行程式有三段:
第一段
Rhino。AddSphere
是函式名,它告訴
Rhino
我們要建立一個球體;
第二段
Array(0,0,0)
和第三段
5。0
稱為引數,它們告訴
Rhino
我們要建立一個什麼樣的球體:
Array(0,0,0)
表示球心座標,
5。0
表示球的半徑;引數之間用英文逗號隔開。
如果想建一個不同大小的球,只要把
5。0
改一下就行了
——
注意,半徑必須大於零。
可能我們的讀者還覺得不過癮:要是能夠隨心所欲的建立大小不一的球而不用每次都改程式就好了。實現這個功能的程式也只有一行:
Rhino。AddSphereArray(0,0,0), Rhino。RealBox (“
輸入球體半徑
”, 5。0 )
執行這個程式,會彈出一個對話方塊:
在程式中我們用
Rhino。RealBox (“
輸入球體半徑
”, 5。0 )
代替了半徑值
5。0
。
Rhino。RealBox
和
Rhino。AddSphere
一樣是一個函式,其作用就是彈出一個對話方塊,然後把使用者輸入的數值告訴函式
Rhino。AddSphere
。這個函式有兩個引數,“輸入球體半徑”表示顯示在對話方塊上的提示文字,
5。0
表示預設的半徑值。這個函式的返回值就是使用者的輸入,如果使用者沒有輸入,則返回預設值。點選
OK
後,在座標原點位置會出現一個以使用者輸入值為半徑的球體。
相信到這裡有些人已經開始雄心萬丈了,既然能隨心所欲的建立球體,那麼建立一輛汽車應該方式也差不多。
是這樣。
這個只有一行的程式具備了一個外掛模組的基本功能:使用者資料的輸入和造型系統的響應。大型外掛的功能也不過是更多的輸入資料和更復雜的系統響應而已,比如輸入姿態引數構造一個人體模型。我們將在後面的章節中逐步講解如何讓這個只有一行的程式發展成一個功能豐富的外掛。
這裡還有一個不太如意的地方:每次都從選單進入我們的程式顯然太麻煩了,而且也不夠酷,要是能在介面上擁有一個按鈕就好了。現在我們就專為這個程式建一個按鈕放在介面上。這個工作與程式設計無關,但顯然是大家都有興趣知道的。
從
Tools
選單下的
Toolbar Layout
項進入工具條設定介面:
▼
工具條設定介面
▼
建立新工具條
用
Toolbar
選單下的
new
命令建一個新的工具條,設定工具條的名字和大小,如上圖。按“確定”生成工具條,新工具條的名稱顯示在工具條列表框裡,現在它可以像所有的其他工具條一樣使用了。新工具條只有一個按鈕,如果想增加按鈕,在工具條列表中右擊新工具條,從彈出選單中選擇“
Add Button
”。
關閉工具條介面,把新工具條拖動到你想要他呆的位置。現在工具條上的按鈕是空白的,點選也不會有任何反應。現在我們給工具按鈕設定任務。
按住
Shift
鍵點選按鈕,出現如圖所示介面:
▼
按鈕設定介面
一個按鈕可以設定兩個指令,分別用左鍵和右鍵操作,左右鍵的指令分別寫在下方兩個框內。這個按鈕我們只設置一個質量,寫作左邊框裡,用滑鼠左鍵操作,指令如下:
-Load “F:RhinoPublishExamplesEx1-3Ball。rvb”
Load
是
Rhino
的命令,在執行指令碼程式的時候可以看到它顯示在命令列中。前面的短橫線(減號)表示執行
Load
命令但是不彈出對話方塊。因為彈出對話方塊就必須透過使用者響應關掉它才能進行下一步動作,這是我們不希望的,我們要讓後面的工作自動進行。實際上,這個短橫線對所有的
Rhino
命令都起作用,可以自己試一下。命令前面加上這個短橫線後,對話方塊中所有的選項都以字元的形式出現在命令列中。
Load
後面引號中的字元是我們剛編好的程式名和全路徑。注意,引號中不能有任何空格,因為空格會被當作回車鍵來處理,空格後面的字元全部忽略。
中部兩個輸入框是左右鍵的命令提示,即滑鼠從按鈕上滑過時顯示的按鈕功能提示。左上方是為這個按鈕設定下拉工具條,從列表框中選擇要顯示的下拉工具條即可。
左上方的兩個按鈕是為工具條設定影象,可以自己畫按鈕圖案,也可以選擇一幅點陣圖來載入:
▼
設定按鈕圖案
點選“確定”,按鈕設定完畢。
▼
這排按鈕是古建築外掛,我做的
“
HelloWorld
”幾乎是任何一個與程式設計打交道的人最先接觸的任務,相信我們對
Rhino
能幹什麼已經有了初步的概念,即使你從來沒有編寫過一行程式。
First thing the first先講到這裡,看幾個圖增強下信心,這是我的學生碩士論文裡的圖。
▼
Rhino
生成的籃子
▼
籃子結構細節
▼
Rhino生成的檯燈及其細節
推薦文章
- 《海王》傑森莫瑪成新晉男神 竟也很“少女心”
踏足娛樂圈走上“狂野之路” 高強度訓練成就性感身材在影片中,傑森·莫瑪最引人注目的就是一身性感的肌肉與魁梧身材,他甩著長髮、半裸紋身、皮褲的狂野造型一亮相就瞬間點燃了觀眾的熱情,所詮釋的另類超級英雄令觀眾大開眼界...
- 秦剛:歡樂海岸如何使城市客廳成為文化引力場?(連載十五)
灃東華僑城文旅融合示範區的文旅娛樂、商業商務板塊由歡樂海岸、歡樂谷、創想中心及城市廣場等公共空間組成,歡樂海岸包括曲水灣商業街+酒店群+Mall購物中心+公寓+辦公...
- 地漏怎麼選?地漏的三個組成部分都有什麼作用?
長條地漏都是要用超薄的自封內芯的,因為為了美觀,都會把地漏的位置改到牆邊...