This shows you the differences between two versions of the page.
zh:rhino:basicmacros [2015/12/21] |
zh:rhino:basicmacros [2020/08/14] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | |||
+ | |||
+ | ======建立巨集(Macros)基础教学 (与Rhino指令一起的脚本)====== | ||
+ | |||
+ | =====介绍===== | ||
+ | |||
+ | 在Rhino里建立巨集可以一次执行很多任务,包括定义命令或是改善工作流程。 | ||
+ | |||
+ | " | ||
+ | |||
+ | 这两样其实非常不同。编写" | ||
+ | |||
+ | 这里所说的" | ||
+ | |||
+ | |||
+ | =====所需要的工具:===== | ||
+ | 你的脑袋 | ||
+ | |||
+ | Rhino的Help档 - 是Rhino所有指令以及子选项的列表,也是你最重要的参考来源。 | ||
+ | |||
+ | Rhino**巨集编辑器(MacroEditor)**,可以让使用者轻松使用或是调整巨集。 | ||
+ | |||
+ | =====您曾经用过一两个巨集===== | ||
+ | Rhino使用者可能不知道自己已经使用过巨集了。很多Rhino里的指令已被写成" | ||
+ | {{: | ||
+ | |||
+ | |||
+ | 这是一个简单巨集的案例,只要用一个指令就可以设定好一连串的选项,所以不用每次用到此功能就要注明很多设定。**ExtrudeCrv**有几个" | ||
+ | 查看**ExtrudeCrv**按钮来检视到底是如何布局的。 | ||
+ | |||
+ | 这有点像您在下指令的时候按或是输入选项,一次一个。 事实上巨集不过就是这样的东西而已,是一组指令重复序列,不建立巨集的话,您只能手动输入一个个的指令。 | ||
+ | |||
+ | 一个单一指令的脚本选项可能与数据组合(比如坐标或是其他数据资料)。 | ||
+ | 也可以将数个指令串联在一起,就是把操纵或是建立物件的"" | ||
+ | |||
+ | > **注:**// | ||
+ | 为什么要用惊叹号( ! )? 为安全起见,这可以取消前一个在运作的任何指令。// | ||
+ | |||
+ | ====入门==== | ||
+ | |||
+ | 假设你已经把一连串10 x 10 x 10的方块底部放置在想要位置的中心,那个中心点可以经由鼠标在想要的位置点一下,或是用键盘输入坐标来设定。 | ||
+ | |||
+ | 使用者可以使用立方体指令(角对角加高度),但在预设值里,插入点将会被放置在立方体的第一个角。 要把插入点放在使用者想要的地方,使用立方体还有居中的指令会比较简单。事实上这只是立方体指令加上居中的选项,所以在巨集里,使用者需要启动此功能。 | ||
+ | |||
+ | 开启**巨集编辑器**,键入以下指令: | ||
+ | |||
+ | ! _Box _Center | ||
+ | // | ||
+ | 所有输入(指令或是数据输入),都必须要有一个空格隔开。 | ||
+ | |||
+ | 现在我们需要定位中心点。要完成这个任务,Rhino被告知暂时停止处理指令,直到使用者用鼠标点选或是用键盘输入坐标。这是藉由" | ||
+ | |||
+ | ! _Box _Center _Pause | ||
+ | 只要输入数据,就可以直接用指令来指定正方体的尺寸。 既然立方体居中选项需要一个立方体的角来做第二个输入,我们就可以指定它的X, | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 | ||
+ | (为什么要用" | ||
+ | |||
+ | 此时我们可以加入高度,在此案例中大概是原来的起点。 | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 10 | ||
+ | 由于并没有进一步输入的需要,巨集到此完成,正方体也完成。请注意因为我们希望正方体的长宽相等,有另外一种可能性是直接按Enter,而不是最后输入的" | ||
+ | |||
+ | ! _Box _Center _Pause r5,5 _Enter | ||
+ | 现在巨集运作中,而且您也挺满意的。[[zh: | ||
+ | 只要巨集被执行过一次,以后只要按右键,就会自动执行,而无须每次点击按钮。 | ||
+ | |||
+ | ======较复杂的巨集====== | ||
+ | |||
+ | 有些指令可以叫出有许多选择的对话框,这通常会让巨集停止,等到使用者点选所需选项才会继续运作。 既然使用者希望能够自动完成巨集所执行的任务,那么可以用-(破折号)来跳过之前出现的对话框。 使用者用脚本写入选项,巨集就会自动运作完成。有些指令有好几层的子选项,如果你想要知道有哪些,在指令栏键入指令加上-(破折号),点击选项就可以查看。 | ||
+ | |||
+ | =====放样两个开放曲线===== | ||
+ | 如果你想要重复放样两个// | ||
+ | |||
+ | < | ||
+ | _-Loft | ||
+ | _Pause | ||
+ | _Type=_Normal | ||
+ | _Simplify=_None | ||
+ | _Closed=_No | ||
+ | _Enter | ||
+ | </ | ||
+ | |||
+ | 要注意的是该命令暂停时,您挑选所需的曲线后,立即就会执行。如果这个暂停被拿掉,当您尚未挑选曲线时,巨集也不会继续进行。 如果您事先选择了曲线,那么这个暂停将自动被忽略。接下来这个指令会继续设置您指定的所有选项,并且完成曲面。 试试看用两个开放曲线,不管是事先或是之后才选取。 尝试修改其中一个或是多个选项,比如//// | ||
+ | |||
+ | =====修改以作为封闭曲线使用===== | ||
+ | 现在试试看两个封闭曲线。 您将会碰到问题,为何? | ||
+ | 关于封闭曲线,放样(Loft)需要使用者输入接缝的位置, 在执行巨集时必须被指定在正确排序。所以您可以从之前自动跳出的选项中挑选接缝值(在子选项),也可以在荧幕上调整。不管用哪个方法,您都需要对巨集做出修改。 | ||
+ | |||
+ | 在适当的地方加入暂停,让使用者能有足够的时间检查并对荧幕上的接缝作出调整。 | ||
+ | |||
+ | < | ||
+ | _-Loft | ||
+ | _Pause | ||
+ | _Pause | ||
+ | _Type=_Normal | ||
+ | _Simplify=_None | ||
+ | _Closed=_No | ||
+ | _Enter | ||
+ | </ | ||
+ | |||
+ | 以Enter替代暂停(Pause)指令,表示Rhino会跳过这些预设值的接缝。 | ||
+ | |||
+ | < | ||
+ | _-Loft | ||
+ | _Pause | ||
+ | _Enter | ||
+ | _Type=_Normal | ||
+ | _Simplify=_None | ||
+ | _Closed=_No | ||
+ | _Enter | ||
+ | </ | ||
+ | 或者可以进入接缝子选项来指定另一个放样接缝选项。 | ||
+ | |||
+ | < | ||
+ | _-Loft | ||
+ | _Pause | ||
+ | _Natural | ||
+ | _Enter | ||
+ | _Type=_Normal | ||
+ | _Simplify=_None | ||
+ | _Closed=_No | ||
+ | _Enter | ||
+ | </ | ||
+ | (Enter是用来离开" | ||
+ | |||
+ | // | ||
+ | |||
+ | |||
+ | ======利用巨集来快速设定界面选项====== | ||
+ | |||
+ | 巨集也可以自动设定不同GUI和文件内容选项,而无须进入选项对话框。我用以下的方式来设定自己想要的彩线网格方式。(注意-_DocumentProperties前面的- 破折号) | ||
+ | |||
+ | < | ||
+ | -_DocumentProperties | ||
+ | _Mesh _Custom | ||
+ | _MaxAngle=0 _AspectRatio=0 | ||
+ | _MinEdgeLength=0 _MaxEdgeLength=0 | ||
+ | _MaxEdgeSrf=0.01 _GridQuads=16 | ||
+ | _Refine=Yes _JaggedSeams=No | ||
+ | _SimplePlanes=No | ||
+ | _Enter | ||
+ | _Enter | ||
+ | </ | ||
+ | 为何最后要两个Enter? | ||
+ | |||
+ | 因为在-_DocumentProperties之下我们进入了两层,第一层是网格,第二层是网格的自订子层。第一个Enter用来离开子层并且回到主层,第二个Enter用来离开指令。有些脚本可能需要三个Enter。 | ||
+ | 以下是Jeff LaSor关闭或开启鼠标游标的脚本。 | ||
+ | |||
+ | 要开启或关闭鼠标游标,您必须将以下步骤键入按钮设定: | ||
+ | < | ||
+ | -_Options _Appearance _Visibility | ||
+ | _Crosshairs _Enter _Enter _Enter | ||
+ | </ | ||
+ | 请注意每个指令选项名字。在脚本里面指定这些指令,就像使用鼠标点选。 | ||
+ | 同样也请注意三个enter的输入。 | ||
+ | 在本案例,每个指令能带领使用者进入下一层指令选项,也就是说您需要一个Enter指令来回到上一层。既然这个脚本进入了三个子层,所以也需要3个Enter来离开此指令。 | ||
+ | |||
+ | 或者,不管之前进入了多少个子层,最后使用一个惊叹号" | ||
+ | |||
+ | 以上脚本只是将鼠标游标开启或关闭,但如果您需要一个一直开启或是一直关闭的鼠标游标,请参考以下脚本: | ||
+ | |||
+ | 鼠标游标永远开启: | ||
+ | < | ||
+ | -_Options _Appearance _Visibility | ||
+ | _Crosshairs=_Show ! | ||
+ | </ | ||
+ | 鼠标游标永远关闭: | ||
+ | < | ||
+ | -_Options _Appearance _Visibility | ||
+ | _Crosshairs=_Hide ! | ||
+ | </ | ||
+ | 请注意这里的" | ||
+ | |||
+ | 谢谢你,Jeff。 | ||
+ | |||
+ | ======其他编写巨集有用的工具与指令====== | ||
+ | |||
+ | 有一些小技巧可以用来编写更复杂的巨集。其一是不同筛选器的识别,尤其是**SelLast**,这个指令选取最后一个建立/ | ||
+ | **SelNone**则是取消选取所有的物件。 | ||
+ | 也可以命名多个物件,将它们选为一组,然后命名这个群组。 | ||
+ | 之后再用这些名字叫出此物件/ | ||
+ | |||
+ | < | ||
+ | Select | ||
+ | SelLast | ||
+ | SelPrev | ||
+ | SelNone | ||
+ | SetObjectName | ||
+ | SetGroupName | ||
+ | SelGroup | ||
+ | SelName | ||
+ | Group | ||
+ | Ungroup | ||
+ | </ | ||
+ | 设置单一物件名称 | ||
+ | < | ||
+ | _Properties _Pause _Object _Name | ||
+ | [输入物件名称] _Enter _Enter | ||
+ | </ | ||
+ | 取消单一物件名称,但不删除此物件 | ||
+ | < | ||
+ | _Properties _Pause _Object _Name | ||
+ | “ “ _Enter _Enter (quote space quote for the name) | ||
+ | </ | ||
+ | =====案例===== | ||
+ | 请阅读以下巨集: | ||
+ | |||
+ | < | ||
+ | _Select _Pause _Setredrawoff | ||
+ | _BoundingBox _World _Enter | ||
+ | _Selnone _Sellast | ||
+ | _OffsetSrf _Solid _Pause | ||
+ | _Delete _Sellast | ||
+ | _BoundingBox _World _Enter | ||
+ | _Delete _Setredrawon | ||
+ | </ | ||
+ | 此脚本建立一个偏移值边框方块围绕的物件,此偏移值由使用者输入。The Setredrawoff/ | ||
+ | 别担心,只要键入Setredrawon,荧幕就会恢复原状。 | ||
+ | |||
+ | **// | ||
+ | |||
+ | 请注意已命名的群组还有各种指令的使用,**NoEcho**暂时停止对于指令的回报,与Setredrawoff/ | ||
+ | 当然不用**NoEcho**也是可以运作的。 | ||
+ | |||
+ | < | ||
+ | _Select _Pause _Noecho _Setredrawoff | ||
+ | _Group _Enter _SetGroupName TexTemp | ||
+ | _BoundingBox _CPlane _Enter | ||
+ | _SelNone _SelLast _PlanarSrf | ||
+ | _SelPrev _Delete _SelLast | ||
+ | _AreaCentroid _Delete | ||
+ | _Sellast _SelGroup TexTemp | ||
+ | _Ungroup _Group _Setredrawon | ||
+ | |||
+ | </ | ||
+ | ==请自由增加或编辑本教学== | ||
+ | 教学仍在编辑中 | ||