指令巨集与脚本

几乎所有 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
_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

::
(双冒号)

嵌套图层由图层名称之间的双冒号表示 - "::"。使用 -Layer 指令,在图层 Layer 01 下添加图层的巨集这样写:

! _-Layer New "Layer 01:: New Layer" Enter

#
# (井号)

启用以下指令的历史记录。

例如: #ArcBlend

%
(百分号)

停用以下指令的历史记录。

例如: %ArcBlend

!&

(感叹号+)

在指令会话中禁用历史记录锁定RH-56397

例如: !&_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

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

如何测试这个指令巨集

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

Pause

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

范例:

! _Circle _Pause 50

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

MultiPause

在多选物件的时候停止脚本的执行,例如只执行 Join、Polyline 以及 FilletEdge 的时候。

Enter

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

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

EnterEnd

结束指令。

SetRedrawOff

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

SetRedrawOn

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

NoEcho

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

Echo

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

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

MacroEditor

MacroEditor 指令打开编写或测试指令巨集的编辑视窗。

巨集编辑器

步骤

  1. 巨集编辑器面板中输入指令和选项。

  2. 点击 按钮测试巨集。

工具列

运行

运行整个巨集,或运行巨集中的高亮部分。

删除

清除编辑框。

快显菜单

剪切

复制所选文本到剪贴板并删除该文本。

复制

复制所选文本到剪贴板。

粘贴

将存储在剪贴板中的文本插入到光标位置。

ReadCommandFile

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

步骤

  • 打开文本文件对话框选取要读取的文件。
    文件的属性会被复制到指令行,就像您在指令行输入一连串的指令一样。

附注

范例

将以下的指令巨集范例复制到文本文件里,然后使用 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 指令使指令巨集不在指令视窗显示提示与讯息。

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

NoEcho 或 _NoEcho 必须是巨集中的第一个单词才能正常工作,所有的东西,包括感叹号,都应该用一个空格隔开。

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

关闭

在一个脚本中使用 Close 指令关闭一个 Rhino 模型。

  • 该指令需要文件的路径才能执行关闭,否则将不起任何作用。 RH-55865

Python脚本的例子:

导入 Rhino

将 scriptcontext 导入 sc

Rhino.RhinoApp.RunScript("Close "+sc.doc.Path+" Enter", False)

Exit

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

进入指令行选项

  • 在指令名称前面加上横线 -Exit。
指令行选项

 

 

取消

 

Pause

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

范例

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

! _Circle _Pause 50

MultiPause

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

范例

执行巨集组合多个物件。

! _Join _MultiPause

Run

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

步骤

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

SetRedrawOff

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

要再次打开画面重绘

SetRedrawOn

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

要再次关闭画面重绘

脚本

RhinoScript 是用来执行脚本的插件程序,通过脚本可以实现使用循环运算、变量、文件浏览、查询等。

相关指令:

基本的操作步骤

  1. 编写一个脚本函数。
    RhinoScript 的文件扩展名为 .rvb.
  2. 执行LoadScript 指令将脚本载入到内存。
  3. 执行 RunScript 指令执行该脚本中的函数。

将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。

更多脚本的说明

  • 从 Rhino 的说明功能表选择插件程序,再选择 RhinoScript

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

LoadScript

LoadScript 指令从硬盘中读取脚本文件,将其载入到脚本解释器并等待执行。

将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。

步骤

  • 载入脚本文件对话框,点击新增按钮。

RunScript

RunScript 指令执行先前载入的脚本。

将 .rvb 文件拖放到 Rhino 视窗可以自动载入并执行脚本。

步骤

  • 执行脚本子程序对话框打开说明文件。

EditScript

EditScript 指令 打开 RhinoScript 文件的编辑程序。

步骤

  • 编辑脚本对话框中点击说明功能表。

RunPythonScript

RunPythonScript 指令执行 Python 脚本。

更多Rhino.Python 在线说明请参考: http://developer.rhino3d.com/guides/rhinopython/

-RunPythonScript

选项

ResetEngine

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

EditPythonScript

EditPythonScript 指令编辑 Python 脚本。

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