指令巨集与脚本
几乎所有 Rhino 的指令都可以使用指令巨集执行,指令巨集可以由指令行输入、工具列按钮、快捷键、指令别名、以 ReadCommandFile 指令或将指令巨集以 Paste 指令粘贴至 Rhino 的指令行执行。
编写指令巨集
编写指令巨集就像在指令行中输入指令序列一样。
|
特殊字符 |
在巨集里的意思 |
|
(空格) |
巨集里的空格字符的作用类似于按下 Enter 键。 在编写包含空格的名称(或文本字符串)时,需要将其括在双引号中,以避免破坏指令序列。 例如: _-SelName "Table 01" ✔ _-SelName Table 01 ✘ |
|
* |
可以连续执行指令,不用按 Enter 键重复启动指令。 |
|
! |
中止前一个指令。 指令巨集以感叹号 (!) 开头可以中止任何正在执行中的指令,放在其它位置可以中止指令巨集,必要时也可以放在指令巨集的结尾。 |
|
- |
避免弹出对话框。 Rhino 的所有指令几乎都可以在指令行以指令巨集执行,即使是会弹出对话框的指令也可以。在指令名称前加上连字符 (-) 可以抑制指令弹出对话框,改以指令行选项执行。一些指令 (例如 DevLoft) 的选项只能在指令行中可用。 |
|
_ |
使用英文运行的指令和选项。 Rhino 有多种语言版本,不同语言版本中的指令和选项的翻译也不同,为了巨集可以在任意语言版本的 Rhino 运行,我们建议用英文编写巨集,并且在每个指令和选项之前加上下划线。 例如: Cerchio 3Punti 0,0,0 1,1,0 0,3,0 ❗ 这个巨集只在 Rhino 的意大利版本中有效。
_Circle _3Point 0,0,0 1,1,0 0,3,0 ✔ 这个巨集在 Rhino 的任意版本中都有效。
|
|
' |
下一个执行的是可以嵌套执行的指令,所谓的嵌套执行是指一个指令执行中可以插入另外一个指令,插入的指令完成后再继续执行原来的指令。 视图、工作平面操作及物件锁点指令是可以嵌套执行的指令,建立几何图形的指令则不行。 单次使用的物件锁点及选取副物件过滤器本身就可以嵌套执行,不需要再加上单引号。 |
|
\ |
如果工具列按钮巨集的最后一个字符是 "\", 则该巨集无需在指令的最后执行 Enter 操作即可完成指令操作。 例如: 创建一个对应巨集 "5\" 的工具列按钮。单击该按钮将在指令行中输入数字5,不需要其它操作就完成巨集设定。这个功能可以用来创建一个工具列,工具列中的按钮分别代表屏幕上的数字键盘按钮。
|
|
~ |
不显示指令选项,但指令巨集中设定的选项仍然可以正确执行。 |
|
; (分号) |
注解。 指令巨集中以分号开始的行并不是巨集的一部分,但可以让您在巨集里做注解。 例如: ; This is a test macro |
| :: (双冒号) |
嵌套图层由图层名称之间的双冒号表示 - "::"。使用 -Layer 指令,在图层 Layer 01 下添加图层的巨集这样写: ! _-Layer New "Layer 01:: New Layer" Enter |
| # # (井号) |
启用以下指令的历史记录。 例如: #ArcBlend |
| % (百分号) |
停用以下指令的历史记录。 例如: %ArcBlend |
|
(感叹号+) |
在指令会话中禁用历史记录锁定。 例如: !&_Delete 和 !&_Join |
范例
画一个圆
这个指令巨集可以建立一个中心点座标 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
选取一条曲线,然后执行这个指令巨集,所有选项由巨集设置,并不会弹出重建曲线对话框。
特殊指令巨集指令
|
Pause |
暂停指令巨集等待使用者输入。 范例: ! _Circle _Pause 50 这个指令巨集会要求您指定圆的中心点,然后继续完成指令,建立一个半径为 50 单位的圆。 |
|
MultiPause |
在多选物件的时候停止脚本的执行,例如只执行 Join、Polyline 以及 FilletEdge 的时候。 |
|
Enter |
在指令巨集中模拟按下 Enter 键。 这个指令并不会像平常的时候按下 Enter 键会重复执行上一个指令。 |
|
EnterEnd |
结束指令。 |
|
SetRedrawOff |
在指令巨集执行过程中暂停画面重绘。 |
|
SetRedrawOn |
在使用 SetRedrawOff 指令之后再次打开画面重绘。 |
|
NoEcho |
使指令巨集不在指令视窗显示提示与信息。 |
|
Echo |
允许指令巨集在指令视窗显示提示与信息。 |
如果您不知道如何编写指令巨集,可以执行有连字号版本的指令,将指令历史视窗中的指令流程复制到指令巨集里。
| 工具列 | 功能表 |
|---|---|
|
|
工具 指令 > 巨集编辑器 窗口 面板 > 巨集编辑器 |
MacroEditor 指令打开编写或测试指令巨集的编辑视窗。
巨集编辑器
步骤
-
在巨集编辑器面板中输入指令和选项。
-
点击
按钮测试这个巨集。
工具列
运行
运行整个巨集,或运行巨集中的高亮部分。
删除
清除编辑框。
快显菜单
剪切
复制所选文本到剪贴板并删除该文本。
复制
复制所选文本到剪贴板。
粘贴
将存储在剪贴板中的文本插入到光标位置。
| 工具列 | 功能表 |
|---|---|
|
|
工具 指令 > 从文件读取 |
ReadCommandFile 指令从文本文件中读取指令巨集并执行。
步骤
- 在打开文本文件对话框选取要读取的文件。
文件的属性会被复制到指令行,就像您在指令行输入一连串的指令一样。
附注
- 建立指令文件时可以使用 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
……
| 工具列 | 功能表 |
|---|---|
|
|
|
NoEcho 指令使指令巨集不在指令视窗显示提示与讯息。
- 要打开指令提示信息请使用 Echo 指令。
NoEcho 或 _NoEcho 必须是巨集中的第一个单词才能正常工作,所有的东西,包括感叹号,都应该用一个空格隔开。
| 工具列 | 功能表 |
|---|---|
|
|
|
Enter 指令的功能就如同按下 Enter 键,可以在指令巨集或工具列按钮的巨集中使用。
范例
这个指令巨集让您以指定三个点的方式设定工作平面:
'_CPlane _3Point
_Pause _Pause _Pause _Enter
这里的 Enter 指令并不会像平常的时候按下 Enter 键会重复执行上一个指令。
| 工具列 | 功能表 |
|---|---|
|
|
|
EnterEnd 指令的功能就如同按下 Enter 键,可以在指令巨集或工具列按钮的巨集中使用。
EnterEnd 用在有许多层提示的指令时非常有效,例如:-Options 与 -DocumentProperties 指令,当您已经设置了需要的选项后,如果用 Enter 指令,需要输入非常多的 Enter,如果使用 EnterEnd,不管位于哪一层提示,都可以直接结束指令。举例:
! _-DocumentProperties _Mesh _Custom _MaxEdgeSrf .01
像这个指令巨集必需在结尾加上两个 Enter 指令才能结束,使用 EnterEnd 指令只要加上一个即可直接结束。
范例
! _-DocumentProperties _Mesh _Custom _MaxEdgeSrf .01 _EnterEnd
|
工具列 |
功能表 |
快捷键 |
|---|---|---|
|
|
文件 结束 |
Ctrl (CMD) + Q |
Exit 指令用于关闭当前的 Rhino 窗口。
进入指令行选项
- 在指令名称前面加上横线 -Exit。
| 指令行选项 | |
|---|---|
|
是 |
|
|
否 |
|
|
取消 |
|
| 工具列 | 功能表 |
|---|---|
|
|
|
Pause 指令暂停指令巨集等待使用者输入。
范例
这个指令巨集会要求您指定圆的中心点,然后继续完成指令,建立一个半径为 50 单位的圆。
! _Circle _Pause 50
脚本
RhinoScript 是用来执行脚本的插件程序,通过脚本可以实现使用循环运算、变量、文件浏览、查询等。
相关指令:
基本的操作步骤
- 编写一个脚本函数。
RhinoScript 的文件扩展名为 .rvb. - 执行LoadScript 指令将脚本载入到内存。
- 执行 RunScript 指令执行该脚本中的函数。
将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。
更多脚本的说明
- 从 Rhino 的说明功能表选择插件程序,再选择 RhinoScript。
更多与 Rhino 相关的脚本信息请参考:http://wiki.mcneel.com/rhino/basicmacros.
| 工具列 | 功能表 |
|---|---|
|
|
工具功能表 Rhino 脚本 > 载入 |
LoadScript 指令从硬盘中读取脚本文件,将其载入到脚本解释器并等待执行。
将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。
步骤
- 在载入脚本文件对话框,点击新增按钮。
-
可编写脚本指令,-LoadScript,支持要加载的 rvb 文件路径中的 Windows 环境变量。
-
更多 RhinoScript 在线说明请参考:
| 工具列 | 功能表 |
|---|---|
|
|
工具功能表 Rhino 脚本 > 执行 |
RunScript 指令执行先前载入的脚本。
将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。
步骤
- 在执行脚本子程序对话框打开说明文件。
| 工具列 | 功能表 |
|---|---|
|
工具 RhinoScript > 编辑 |
EditScript 指令 打开 RhinoScript 文件的编辑程序。
步骤
- 在Rhino 脚本编辑器对话框中,点击说明按钮。
|
工具列 |
功能表 |
|---|---|
|
|
RunPythonScript 指令执行 Python 脚本。
更多 Rhino.Python 在线说明请参考:http://developer.rhino3d.com/guides/rhinopython。
-RunPythonScript
选项
ResetEngine
强制重新实例化 Python 引擎,此功能在同时跨越多个文件写入与测试时很有效。
|
工具列 |
功能表 |
|---|---|
|
|
EditPythonScript 指令编辑 Python 脚本。
有关 Rhino 专用脚本的更多信息,参见: http://developer.rhino3d.com/guides/rhinopython。
|
工具列 |
功能表 |
|---|---|
|
|
工具 脚本 > 编辑 |
ScriptEditor 指令可打开用于 Python 和 C# 编程的脚本编辑器窗口。
指令行选项
运行脚本化指令 -ScriptEditor 可访问指令行选项。
编辑
打开脚本编辑器窗口。
运行
执行一个脚本文件。
使用巨集运行脚本文件
有多种方式可以指定脚本文件的路径。
-
使用完整文件路径:
_-ScriptEditor _Run "D:\My Files\My Script.py"
-
在路径中使用环境变量:
_-ScriptEditor _Run "%USERPROFILE%\Documents\My Script.py"
此巨集将在文档文件夹中运行 "My Script.py" 文件。
在 Windows 指令提示下运行 "Set" 指令可列出所有环境变量。
-
在 Rhino 选项 > 文件搜索路径中设置的文件夹中搜索该文件:
_-ScriptEditor _Run "My Script.py"
打开
在脚本编辑器窗口中加载一个脚本文件。
