指令巨集与脚本

几乎所有 Rhino 的指令都可以使用指令巨集执行,指令巨集可以由指令行输入、工具列按钮、快捷键、指令别名、以 ReadCommandFile 指令或将指令巨集以 Paste 指令粘贴至 Rhino 的指令行执行。

编写指令巨集

编写指令巨集就像是在指令行输入一连串的指令一样,指令巨集文字之间的空格或跳行代表按指令行按下 Enter 键。

Special characters

字符

在巨集里的意思

*
(asterisk)

可以连续执行指令,不用按 Enter 键重复启动指令。

!
(exclamation point)

中止前一个指令。

一个感叹号 (!) 后接着一个空格置于指令巨集的开头可以中止任何正在执行中的指令,放在其它位置可以中止指令巨集,必要时也可以放在指令巨集的结尾。

_
(underscore)

使用英文的指令、选项、选项值。

Rhino 有多种语言版本,非英文版本的指令、提示、指令选项、对话框、功能表....会翻译成不同的语言,英文指令、选项、选项值未加下划线可能无法在非英文的版本中正确执行。

为了让以英文编写的指令巨集可以在任何语言版本的 Rhino 执行,请务必在指令、选项、选项值之前加上下划线。

例如:以下的指令巨集在英文版的 Rhino 可以正确地执行:

Circle 3Point 0,0,0 1,1,0 0,3,0

但在法文版的 Rhino 无法执行,为了避免这个问题,必需将指令巨集修改如下:

Cercle 3Point 0,0,0 1,1,0 0,3,0
_Circle _3Point 0,0,0 1,1,0 0,3,0

为了使巨集能够在所有语言环境下执行,在指令和选项之前加上下划线。

减号 (-)
(hyphen)

避免弹出对话框。

Rhino 的所有指令几乎都可以在指令行以指令巨集执行,即使是会弹出对话框的指令也可以。在指令名称前加上连字符 (-) 可以抑制指令弹出对话框,改以指令行选项执行。

'
(apostrophe)

下一个执行的是可以嵌套执行的指令,所谓的嵌套执行是指一个指令执行中可以插入另外一个指令,插入的指令完成后再继续执行原来的指令。

视图、工作平面操作及物件锁点指令是可以嵌套执行的指令,建立几何图形的指令则不行。

单次使用的物件锁点及选取副物件过滤器本身就可以嵌套执行,不需要再加上单引号。

/
(backslash)

如果工具列按钮的指令巨集的第一个字节不是"!",而最后一个字节是"\",该指令巨集结束时不会自动输入 Enter,以便继续输入更多信息。

这个功能可以让您将工具列按钮当做荧幕上的数字键盘按钮,以不同的按钮连续输入数个数字,避免按下一个按钮后指令行就跳到下一行。

~
(tilde)

不显示指令选项,但指令巨集中设定的选项仍然可以正确执行。

;

(semicolon)

注解。

指令巨集中以分号开始的行并不是巨集的一部分,但可以让您在巨集里做注解。

例如:

; This is a test macro
_Circle 0,0,0 15
_Line 0,0,0 pause ;15,0,0
; Line 0,0,0 0,15,0
_Line 0,0,0 -15,0,0

范例

画一个圆

这个指令巨集可以建立一个中心点座标 5,5,半径 10 的圆:

! _-Circle 5,5 10

指令巨集中的空格就如同您在指令行输入时按下 Enter 键。

取消选取所有物件再执行 Move 指令

这个指令巨集可以确定在启动 Move 指令时没有任何物件被选取,在 Move 指令启动后会再要求选取要移动的物件。

! _SelNone _Move

建立一条通过数个点的曲线

这个指令巨集可以建立一些点物件,然后建立通过这些点物件的曲线。

! _SelAll _Points _Pause _Pause _Pause _Enter _Invert _CurveThroughPt _EnterEnd

这个指令巨集如何运行:

! _SelAll

取消正在执行中的指令,然后选取模型中的所有物件。

_Points

执行 Points 指令。

_Pause

_Pause

_Pause

等待指定三个点,建立三个点物件。

_Enter

模拟按下 Enter 键,结束建立点物件。

_Invert

反选选取集合,在这个指令巨集开始的时候已经选取了模型中的所有物件,反选以后只剩下新建立的点物件会处于选取状态下。

_CurveThroughPt

建立一条通过所有点物件的多重直线。

_EnterEnd

结束指令。

不使用对话框设定选项

! -_Rebuild _Pause _Points=10 _Degree=3 _Enter

选取一条曲线,然后执行这个指令巨集,所有选项由巨集设置,并不会弹出重建曲线对话框。

如何测试这个指令巨集

1. 选取整行指令巨集。
2. Ctrl + C 将指令巨集复制到剪贴板。
3. 切换到 Rhino 视窗,按 Ctrl + V 将指令码粘贴。

特殊指令巨集指令

Pause

暂停指令巨集等待使用者输入。

范例

! _Circle _Pause 50

这个指令巨集会要求您指定圆的中心点,然后继续完成指令,建立一个半径为 50 单位的圆。

Enter

在指令巨集中模拟按下 Enter 键。

这个指令并不会像平常的时候按下 Enter 键会重复执行上一个指令。

EnterEnd

结束指令。

SetRedrawOff

在指令巨集执行过程中暂停画面重绘。

SetRedrawOn

在使用 SetRedrawOff 指令之后再次打开画面重绘。

NoEcho

使指令巨集不在指令视窗显示提示与信息。

Echo

允许指令巨集在指令视窗显示提示与信息。

附注: 如果您不知道如何编写指令巨集,可以执行有连字号版本的指令,将指令历史视窗中的指令流程复制到指令巨集里。

ReadCommandFile

ReadCommandFile 指令从文本文件中读取指令巨集并执行。

步骤

4 打开文本文件对话框选取要读取的文件。

文件的属性会被复制到指令行,就像您在指令行输入一连串的指令一样。

Notes

建立指令文件时可以使用 Enter 指令代表按下 Enter 键。
如果您需要经常读取一个指令文件,可以将 ReadCommandFile 指令及指令文件的名称做为工具列按钮里的巨集。例如:

-ReadCommandFile myfile.txt

如果文件名称中有空格,必需在文件名称前后加上双引号。例如:

-ReadCommandFile "my file.txt"

范例

将以下的指令巨集范例复制到文本文件里,然后使用 ReadCommandFile 指令读取该文字档,一次建立数条曲线。

! _interpcrv

23,5,0

23,2,5,0

23.7,5.2,1

_Enter

_interpcrv

26.1,4.9,1.1

26.8,4.9,1.0

27.1,4.8,0.9

_Enter

……

Echo

Echo 指令允许指令巨集在指令视窗显示提示与信息。

要关闭指令提示信息请使用 NoEcho 指令。

NoEcho

NoEcho 指令使指令巨集不在指令视窗显示提示与讯息。

4 要打开指令提示信息请使用 Echo 指令。

Enter

Enter 指令的功能就如同按下 Enter 键,可以在指令巨集或工具列按钮的巨集中使用。

范例

这个指令巨集让您以指定三个点的方式设定工作平面:

'_CPlane _3Point

_Pause _Pause _Pause _Enter

附注: 这里的 Enter 指令并不会像平常的时候按下 Enter 键会重复执行上一个指令。

EnterEnd

EnterEnd 指令的功能就如同按下 Enter 键,可以在指令巨集或工具列按钮的巨集中使用。

EnterEnd 用在有许多层提示的指令时非常有效,例如:-Options 与 -DocumentProperties 指令,当您已经设置了需要的选项后,如果用 Enter 指令,需要输入非常多的 Enter,如果使用 EnterEnd,不管位于哪一层提示,都可以直接结束指令。举例:

! _-DocumentProperties _Mesh _Custom _MaxEdgeSrf .01

像这个指令巨集必需在结尾加上两个 Enter 指令才能结束,使用 EnterEnd 指令只要加上一个即可直接结束。

范例

! _-DocumentProperties _Mesh _Custom _MaxEdgeSrf .01 _EnterEnd

Exit

Exit 指令用于关闭当前的 Rhino 窗口。

Pause

范例

这个指令巨集会要求您指定圆的中心点,然后继续完成指令,建立一个半径为 50 单位的圆。

! _Circle _Pause 50

Pause 指令暂停指令巨集等待使用者输入。

Run

Run 指令从 Rhino 里执行外部的程序。

步骤

4 输入要执行的文件名称及路径。

SetRedrawOff

SetRedrawOff 指令在指令巨集执行过程中关闭画面重绘。

要再次打开画面重绘

4 请使用 SetRedrawOn 指令。

SetRedrawOn

SetRedrawOn 指令在指令巨集执行过程中打开画面重绘。

要再次关闭画面重绘

4 请使用 SetRedrawOff 指令。

RunPythonScript

RunPythonScript 指令执行 Python 脚本。

更多Rhino.Python 在线说明请参考: http://www.rhino3d.com/5/rhinoscript/index.html.

-RunPythonScript

Options

ResetEngine

强制重新实例化 Python 引擎,此功能在同时跨越多个文件写入与测试时很有效。

EditPythonScript

EditPythonScript 指令编辑 Python 脚本。

更多与 Rhino 相关的脚本信息请参考:http://wiki.mcneel.com/developer/python

SetUserText

SetUserText 指令附加文字信息到物件。

附加的资讯会以类似 Windows 注册表的数值名称/数值数据方式的储存。

GetUserText 指令可以读取附加到物件的文字信息,.NET 插件程序与 VisualBasic Script 也可以写入这些文字信息。

.NET 和 VisualBasic Script 可以很容易地存取附加的文字信息。

范例

Text key = Weight

Text = Kilograms

步骤

1. 选取物件。
2. 输入文本数据索引。
3. 输入文本。

移除文本索引

1. 选取物件。
2. 输入文本数据索引。
3. 输入 "" (双引号)。

Options

附加至

物件

附加文本信息到物件的几何信息。

如果附加的文字信息和几何信息有关可以附加到几何信息。例如:一个圆的半径信息必需附加到几何信息,因为附加的半径信息在圆以控制点编辑或转换成 NURBS 曲线之后半径信息就无效了。

属性

附加文字信息到物件的属性。

如果附加的文字信息是较高阶的属性信息 (例如:颜色) 则应该被附加到物件的属性,属性信息在物件以控制点编辑、修剪、复制...之后并不会遗失。

GetUserText

GetUserText 指令读取 SetUserText 指令附加到物件的文字信息,.NET 外挂程序与 VisualBasic Script 也可以读取这些信息。

步骤

1. 选取一个物件。
2. 输入索引或按 Enter 读取所有的索引。

SetDocumentUserText

SetDocumentUserText 指令将文字信息附加到 Rhino 的 3dm 文件。

附加的资讯会以类似 Windows 注册表的数值名称/数值数据方式的储存。

GetDocumentUserText 指令可以读取附加到物件的文字信息,.NET 插件程序与 VisualBasic Script 也可以写入这些文字信息。

.NET 和 VisualBasic Script 可以很容易地存取附加的文字信息。

步骤

1. 输入文本数据索引。
2. 输入文本。

GetDocumentUserText

GetDocumentUserText 指令读取 SetDocumentUserText 指令附加的信息,.NET 插件程序与 VisualBasic Script 也可以读取这些信息。

步骤

4 输入索引或按 Enter 读取所有的索引。