指令巨集与脚本

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

编写指令巨集

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

特殊字符 在巨集里的意思

*
(星号)

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

!
(感叹号)

中止前一个指令。

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

_
(下划线)

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

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

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

-
(连字符)

避免弹出对话框。

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

'
(单引号)

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

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

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

/
(反斜线)

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

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

~
(波浪符)

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

;

(分号)

注解。

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

例如:

; 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

范例

画一个圆

这个指令巨集可以建立一个中心点座标 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. 点击执行
  3. 点击删除可以清除巨集编辑器里的所有文字。

附注

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 指令使指令巨集不在指令视窗显示提示与讯息。

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

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

工具列 功能表

不在工具列上。

工具功能表

Rhino 脚本 >

载入

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

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

步骤

  • 载入脚本文件对话框按说明打开说明文件。

更多 RhinoScript 在线说明请参考: http://developer.rhino3d.com/guides/rhinoscript/.

RunScript

工具列 功能表

不在工具列上。

工具功能表

Rhino 脚本 >

执行

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

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

步骤

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

EditScript

工具列 功能表

不在工具列上。

工具

Rhino 脚本 >

编辑

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

步骤

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

RunPythonScript

工具列 功能表

不在工具列上。

工具

Python Script >

执行

RunPythonScript 指令执行 Python 脚本。

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

-RunPythonScript

选项

ResetEngine

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

EditPythonScript

工具列 功能表

不在工具列上。

工具

Python Script >

编辑

EditPythonScript 指令编辑 Python 脚本。

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

 

 

 

Rhinoceros 6 © 2010-2017 Robert McNeel & Associates. 25-6月-2018