SketchUp插件开发(十二)画墙工具——调整墙尺寸

在上一篇中,我们可以在鼠标点击的任意位置创建出一堵带窗洞的墙来,但是我们创建的墙都是一模一样的。在实际应用的,我们往往需要不同厚度、不同高度、不同长度的墙,如果要用我们的工具绘制出来就需要调整创建时的数据,也就是各种偏移、推拉等的数据。所以我们可以把这些数据定义成一个变量,根据交互来调整这些变量,以创建出来各种不同的墙。在本篇中,我们通过对话框来调整创建墙的数据。

为方便讲解,我们暂时仅创建墙,把添加窗洞的功能先去掉。

墙的参数

从代码中分析可以知道,墙底面的x方向的偏移就是墙的长度,y方向的偏移就是墙的厚度,推拉的距离就是墙的高度,所以我们可以把这3个数据定义成工具的成员变量,在工具构造的时候分配一个默认值,在交互中修改这几个成员变量,在创建墙的时候使用这几个变量的值进行计算操作。

class DrawWallTool
  # 初始化
  def initialize
    @thickness = 200
    @length = 5000
    @height = 3000
  end
end

然后在创建墙的代码中,把原来硬编码的数值替换成我们定义的变量

...
x_offset = @length.mm
y_offset = @thickness.mm
...
face.pushpull(@height.mm)
...

对话框

SketchUp中可以创建出各种各样的对话框,从最简单的消息框到复杂的网页对话框,每种对话框都有其特定的用途。这里我们先从简单的输入对话框开始,输入对话框可以把用户的输入传递给程序,是一个固定格式的对话框。以我们将要修改的墙的几个参数为例

prompts = ['厚度(mm)', '高度(mm)', '长度(mm)']
defaults = [@thickness.to_s, @height.to_s, @length.to_s]
title = '修改墙参数'
input = UI.inputbox(prompts, defaults, title)

这样就可以创建出一个输入对话框。其中

  • prompts:每个编辑框的标题。
  • defaults:输入框的默认值。
  • title:输入对话框的标题。
  • input:如果点“确定”按钮,返回所有编辑框中的输入的字符串数组,如果点“取消”按钮,返回false。

我们把这段代码包装成我们的工具类的一个私有方法change_wall中,在每次创建墙之前进行调用,在鼠标点击时就可以看到弹出的对话框

SketchUp插件开发(十二)画墙工具——调整墙尺寸_第1张图片

不进行任何修改,点击确定之后,我们可以把结果打印到控制台中

SketchUp插件开发(十二)画墙工具——调整墙尺寸_第2张图片

所以我们按顺序把结果转为我们的墙参数就可以了

@thickness = input[0].to_i
@height = input[1].to_i
@length = input[2].to_i

如果我们对参数进行了修改,那现在创建出来的墙就是我们修改后的样子了。

SketchUp插件开发(十二)画墙工具——调整墙尺寸_第3张图片

键盘按键按下接口

上面每次点击都需要编辑墙的参数很不方便,实际上我们可能只需要编辑一次,然后就要创建很多堵墙,然后再编辑一次,再创建很多堵墙。所以我们需要另外一个时机来编辑墙参数,在这里我们使用键盘按键按下接口

def onKeyDown(key, repeat, flags, view)
  p '按键按下接口'
  p key
end

其中

  • key:键盘按键的虚拟键码。
  • repeat:按键按下去就释放该值是1,按键一直按下去则该值是2。
  • view:视图对象。
  • flags:按键的状态。

比如,我们使用Ctrl键来触发参数修改,可以实现为

case key
when VK_CONTROL
  change_wall
end

这样,在Ctrl键按下的时候,我们的修改参数对话框才会弹出来,在点击的时候就会使用上次修改过后的参数来生成墙,直到再次激活工具的时候,就又会恢复到我们设置的默认参数。

你可能感兴趣的:(SketchUp插件开发)