【SU建模辅助代码】序

共 3262字,需浏览 7分钟

 ·

2021-03-31 14:51

从这一篇开始,我会开始分享一些我自己使用的简易代码工具,我称之为“建模辅助代码”。具体来说,就是在 SketchUp 建模过程中,不依赖点选工具栏按键或者定义快捷键,而是通过控制台输入简单的代码触发实现的辅助功能。从表现上来看,是在预加载一些脚本的前提下,直接在 Ruby 控制台中输入指令,从而进行简易的方法调用过程。


以下是一个例子:


图中输入 Sel.ng 指令,表示在选区中排除所有群组图元(Group)。具体的实现以及其他类似的指令设计会在本系列之后的篇幅中陆续分享出来。而此篇作为该系列的序言,主要是想分享我个人对于这种控制方法的理解。




使用键盘快捷键相比于用鼠标点选工具效率要高很多,这是由于使用键盘操控时,手与键盘的相对位置是不变的,只要对键盘布局熟悉,就能够很轻松地按下具体的一两个键,很快速地完成特定功能的触发。如果是使用鼠标来点选工具,问题就会复杂很多。


使用鼠标点选可以说是分成了三步。第一步先在屏幕上找到鼠标,然后第二步根据鼠标指针的当前位置移动鼠标,之后第三步不断观察鼠标的位置直到鼠标位置正确再停止鼠标移动。整个过程需要眼睛与手腕的高度配合和注意力上的持续集中,这对于需要频繁切换的工具而言异常麻烦。因此一般情况下频繁调用的功能的快捷键绝大多数用户都是知道的,例如 Ctrl+A、 Ctrl+S、 Ctrl+C、 Ctrl+V 和 Ctrl+O 这些快捷键。


当屏幕分辨率越来越高、软件功能越来越丰富、菜单层级越来越深,使用鼠标来点选特定工具的做法就逐渐要消耗大量的精力了。因此出现了精心设计并推荐记忆的键盘快捷键。由于可以一手操作键盘,一手操作鼠标,这种操控方式结合合适的鼠标使用确实可以极大地提高效率。


快捷键方案①:单键或组合键

这种快捷键的特点是同时相应,无论是一个按键还是多个按键,都需要同时按下才会触发特定的功能。SketchUp、 Illustrator 和 Photoshop 这些软件都是这种操作方式。简单的快捷键诸如SU中的基本工具,复杂一些的到PS、AI中那些需要使用一个或多个第二功能键的组合快捷键均属于此类。


但是上述的快捷键方案,即使不考虑系统保留的特定组合键,也只有26×8=208个组合键(每个字母包括A、Ctrl+A、Alt+A、Shift+A、Alt+Shift+A、Ctrl+Shift+A、Alt+Ctrl+A、Ctrl+Shift+Alt+A八种方案);况且实际上远没有这么多有效键位。另外,多种功能名称可能具有相同的首字母,这导致有一些功能快捷键只能分配给其他符号。这就使得快捷键的直观性严重下降,导致很难记忆。于是出现了双字母键的快捷键方案。


快捷键方案②:双字母键

在 Revit 这个软件,使用OF两个键表示偏移工具。连续两个字母按键确定一个功能。这样只使用字母键盘、仅依次按下两个键,就可以最多触发26×26=676种功能,比第一种方案有更广阔的适应性,同时也避免了大跨度同时按键的困扰。不过由于字母数量固定是两个,这种双字母键也需要一个“取消”按键来清除本不想输入的字母。例如,可以用空格键调用选择工具,以达到重新输入字符的目的。因此双字母键并不是一套完全独立的快捷键方案。


而且这种方案过于死板,有一定的误触发可能。况且用WL代表Wall、用TR代表Trim、用OF代表Offset也有可能出现混淆的情况,毕竟有的快捷键是首尾字母,有的又是开头两位。


还可以依靠功能之间的逻辑关系进行操作和记忆,这需要用到菜单的结构设计。借助系统保留的菜单键 Alt,可以以一种特殊的方式来调用菜单中的部分功能。例如在 SketchUp 中依次按下:Alt键 → F键 → E键 → 数字键2,就可以将当前视图导出二维图像。这是因为菜单中某些特定的项目有默认的字母快捷键。而很多软件都有 File > Export 的菜单设置,而且一般都会设置相同的字母快捷键。因此,对于大部分软件,使用类似于“Alt键 → F键 → E键”的快捷键都可以触发导出的功能。


快捷键方案③:菜单快捷键

这种快捷键与设计菜单时的逻辑一脉相承,在某些情况下很方便。但是由于一个菜单中可能存在未分配字母的项目,又或者有占用相同字母的多个项目,这种快捷键并不能广泛适用。


菜单栏快捷键的好处是,只要菜单层级设计的够深,逻辑结构足够清晰,就可以很好地覆盖尽可能多的功能,这也就意味着快捷键组合的长度可以是不确定的和可延伸的。但是菜单设计本身就是为了服务与鼠标操作,过深的菜单对于鼠标操作并不友好,不能因为菜单快捷键而将菜单变成文件夹。所以更好的做法是直接使用一个不固定长度的字符串来表示一个功能,在确认确认输入字符串后,根据这个字符串识别具体的功能。于是,命令式快捷键呼之欲出。


快捷键方案④:命令式

以 AutoCAD 为典型的命令式快捷键就避免了固定长度字母串的问题,统一使用回车键作为命令的确认键,然后根据输入的字符串匹配最有可能的功能。例如输入“o”或者输入“offset”都会触发偏移工具。这种快捷键的调用方式就能极大地支持海量的工具。另外 AutoCAD 中可以直接使用回车键重复上一个动作,很大程度上避免了输入过多字母的一些情况。




回到 SketchUp 的辅助功能操控上, SU 自带的快捷键是采取的是第一种方案,这是因为 SU 本身的设计是走简约路线的,不需要过多的工具。而如果现在需要个性化地加入更多符合自己操作特点的辅助工具,纯粹使用工具条的形式可能会导致工具条过多,鼠标搜寻一个具体功能将会需要很久的时间,耗费大量注意力。因此可以结合 Ruby 控制台来实现类似于 AutoCAD 这样的“命令式”快捷键功能。并且由于是 ruby 代码,它还可以更加自由,可以用更抽象的功能来涵盖更广阔的适用场景。


例如开头的例子: Sel.ng。它是一个额外定义的功能(Ruby中的方法)。而在设计中,它的一般形式是 Sel-Sketchup::Group 或者 Sel-Sel::G。如果不加载预先设计好的脚本,它就需要在控制台中执行以下的代码:

sels=Sketchup.active_model.selectionsels.remove(sels.grep Sketchup::Group)


而如果说需要排除所有的剖切面图元,则需要输入 Sel - Sketchup:: SectionPlane 或者 Sel - Sel:: SP。如果说确实需要非常频繁地使用这个“排除剖切面图元”的方法,也可以单独在脚本中增加以下代码:

module Sel  def Sel.nsp    Sel-Sketchup::SelectionPlane  endend


这样,就可以使用 Sel.nsp 这样的指令来执行这个功能,这样就相当于是实现自己定义和修改“命令式”快捷键了。


由此可见,这种辅助代码的形式,和 AutoCAD 的命令非常相似,并且在语法上更加动态自由。一个指令就是模块中的一个方法,新建一个方法就会新增一个指令。而指令所执行的内容也是由 ruby 代码确定的,代码通过方法预留的参数进行一些个性化设置,必要时甚至可以带块参数。这就好像越复杂的、使用频率越低的功能,可以接受越复杂的快捷键一样,而使用这种“辅助代码”的好处在于,我们不需要去记对应哪几个字母和哪个功能有关,只需要知道自己编写的辅助脚本的逻辑和 ruby 的基础语法,就可以在预先准备下,尽可能快速地的完成尽可能多的复杂工作。




本文编号:SU-2021-04

浏览 77
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报