---
## 1.1 宏
Rhinoceros基于命令行界面。這意味著僅使用鍵盤就可以控制它。鍵入命令,程序會執行。自鼠標問世以來,理所當然有人認為完全基于命令行的用戶界面很原始。在命令行界面需要輸入:
```
Line 0,0,0 10,0,0
```
而在圖形界面你可以點擊Line按鈕,然后在視窗中定義直線的起點和終點。因為圖形界面太方便了,很多人完全沒有使用命令行界面。這個問題很容易引起爭議;有些人是命令行狂熱愛好者,有些人只使用工具條和菜單。程序員在這個方面沒有爭議,他們都執著于命令行。編程讓鼠標達到某一坐標,然后模擬點擊,并沒有什么用,只是看起來很傻而已。程序員的交互方式是向Rhino輸入文本,期望程序返回文本。
Rhino編程的最低形式是使用宏。我并無意冒犯那些靠寫宏為生的朋友,但是這并不阻礙宏是一種很原始的自動處理方法這個事實。在宏這個主題上我會稍停一下,一部分原因是我們要做到知己知彼,另一部分原因是在后面需要使用Python模擬宏的運行。
宏是給Rhino去執行的有序命令的集合。本頁前面的命令*_Line*是一個很簡單的宏。假設你的工作是打開幾個Rhino文件,每個文件從點0,0,0到10,0,0添加一條線,然后保存文件,每分鐘輸入6次命令'_Line w0,0,0 w10,0,0'可能很快就會讓你累趴。宏可以取代那些你用手輸入的任務,而不是用腦的那些。宏不是太智能,也不能對它自己造出來的東西做出反應。在這個方面上宏更像一個交通協管員的角色。下面是一個更復雜的宏的例子:
```
_SelNone
_Polygon _NumSides=6 w0,0,0 w10,0,0
_SelLast
-_Properties _Object _Name RailPolygon _Enter _Enter
_SelNone
_Polygon _NumSides=6 w10,0,0 w12,0,0
_SelLast
_Rotate3D w0,0,0 w10,0,0 90
-_Properties _Object _Name ProfilePolygon _Enter _Enter
_SelNone
-_Sweep1 -_SelName RailPolygon -_SelName ProfilePolygon _Enter _Enter _Closed=Yes Enter
```
<div style="float: left; width: 500px; text-align:left;padding: 5px;">
<p>上面的例子會創建一個六角環。它有用,但就是不那么靈活。你可以手動一條一條輸入以上命令至命令行,或者把命令賦予到按鈕上。甚至可以直接復制粘貼以上代碼至Rhino。<br><br>
在這里提一下,在每個命令前放下劃線的原因是Rhino本地化。使用下劃線會強制Rhino識別下劃線后的命令為英文,而不是意大利或日本或者設置里的自定義地點。建議總是使用下劃線強制使用英文命令,這樣才能保證你的代碼在所有的Rhino程序里正確運行。
</p></div>
<div style="float: right;width: 300px;padding: 5px;">
<img src="https://gitee.com/al666ex/RhinoPython101/raw/master/images/hexagonaltorus.svg" width="400" ></div>
<div style="color:white;clear:both;text-align:center;padding:1px;"></div>
在命令 *_Properties* 和 *_Sweep1* 前面的連字符'-'用來跳過對話框。如果取消連字符會導致代碼在命令行運行的方式改變。
對于宏的復雜度并沒有限制,在宏里可以無限制的添加命令,但是有些宏本身特性導致的限制是永遠無法克服的。
## 1.2 腳本
基于宏的限制導致了腳本的開發。腳本是介于宏和真(編譯)程序和插件之間的一種語言。與宏不同,腳本可以進行數學運算、判斷變量條件、對環境進行反應和與用戶進行交互。與真正的程序相比,腳本在運行前又不需要提前編譯。Rhino內置了標準的微軟VB腳本語言和Python語言。本入門介紹Python,以及如何在Rhino內使用其功能。
腳本語言是純文本文件,每次執行一行命令。但是有趣的地方來了:與宏不同,腳本能控制接下來執行哪一行命令。這個流程控制使腳本能跳過某些命令,或者重復執行命令。流程控制是通過“條件判斷”實現的,在享受流程控制的好處之前,我們必須熟悉Python的語言規則。
語言規則通常叫語法,語法指示什么是非法和什么是合法:
1. "這里沒有蘋果派。" ? 合法
2. "沒有這里蘋果派。" ? 非法
3. "這里,沒有蘋果派" ? 合法
4. "這里沒有リンゴ派。" ? 非法
以上是中文語法檢查的一個例子。第1和3行是正常的中文,其他2個是非法的。然而,錯誤也分三六九等。沒有人會誤解第2行,因為僅僅有個詞序錯了。但是第4行就有點難了,因為插入了一個外來語言。
聰明的人類可能能理解所有4行,但是智障電腦不行。
對高級程序員或初學者來說,Python都是一個不錯的語言。它語法系統簡單粗暴,功能不失強大,面向對象加持,而且還有龐大基數的用戶自建庫。同時,因為Rhino Python同時提供Windows和Mac版,同樣的程序在兩個平臺都可以運行!暫時不要太興奮-后面會一一解釋。
## 1.3 運行腳本
在Rhino里運行腳本有很多方式,每種方式各有優劣。可以保存腳本為文件,當你想要運行時讓Rhino載入。也可以使用內置的腳本編輯器,直接從編輯器運行。最后一個可選的運行方式是把腳本鏈接到工具行按鈕,這種方式編輯困難,但是分發方便。
本書使用內置編輯器。運行簡單腳本最好的方式。為了能使用內置編輯器,在命令行鍵入 *_EditPythonScript*,輸入你的腳本,按運行按鈕:
<div align=center><img src="https://gitee.com/al666ex/RhinoPython101/raw/master/images/primer-editscriptdialog-python.png" width="75%"></div>
本入門所有代碼可直接復制粘貼至 *_EditPythonScript* 對話框。
---
## 下一步
現在你基本了解了什么是腳本語言,查看章節[Python Essentials](https://gitee.com/al666ex/developer-rhino3d-com/blob/master/_guide_topics/rhinopython/primer-101/2-python-essentials.md) 深入學習Python語言。