SketchUp的二次开发探索 (三)制作一个完整的插件

上一讲我们学会了

菜单栏中放入自己写的插件

今天带小可爱们来制作一个 带图标 的 完整插件 吧!

一 、实现彩色魔方

​彩色魔方插件效果演示▼

彩色魔方

记性好的小可爱们应该知道这是ruby code editor的官方demo,

那今天就顺便带大家分析一下这个demo的思路。

思路解析▼

思路解析▼

我们先忽略颜色:

1 、 这是一个 n*n 的方块阵列
2 、 方块可以由 矩形推拉 形成
3 、 矩形由四个点封面形成

那我们直接通过Ruby的循环来实现矩形阵列吧!

矩形阵列▼

矩形阵列

对应代码:


#============创建阵列矩形==============
mod = Sketchup.active_model # 打开模型
ent = mod.entities # 所有的实体模型
​
n = 2 # 魔方边盒子数量
s = 100 # 盒子间隔(2个盒子同一位置点的间隔,不是间距哦)
w = 50 # 盒子高度
​
# i j k 可以理解成 x y z 轴
(0..n-1).each{|i|
 (0..n-1).each{|j|
  (0..n-1).each{|k|
​
   # 通过组件的盒子的4个点,封面
   face = ent.add_face [i*s,j*s,k*s],[i*s,j*s+w,k*s],[i*s+w,j*s+w,k*s],[i*s+w,j*s,k*s]   
  }
 }
}

我们设置了盒子的数量为n,


#============循环遍历==============
n = 6
(0..n-1).each{|i|
    puts i
}
​
# 在ruby控制台输出结果为
0
1

n*s就得到了我们矩形的一个端点,

+w的三次偏移就能得到矩形的另外3个点。

看不懂的小可爱们就要去看下ruby的循环语法了!

Ruby 循环 | 菜鸟教程​

得到阵列面之后,

可以通过face.back_material给面上色,

最后只需要用face.pushpull

把所有面推拉出预设好的高度就得到了我们的盒子了。

二 、实现图标插件

现在我们就可以把这个彩色魔方的功能放到插件里面去了。

下面是官方文档关于UI类下面的Toolbar类插件demo:


toolbar = UI::Toolbar.new "Test"
# This toolbar icon simply displays Hello World on the screen
cmd = UI::Command.new("Test") {
  # 该插件要做的事情
  UI.messagebox "Hello World"
}
cmd.small_icon = "ToolPencilSmall.png" # 大图标
cmd.large_icon = "ToolPencilLarge.png" # 小图标
cmd.tooltip = "Test Toolbars" # 工具条提示
cmd.status_bar_text = "Testing the toolbars class" # 状态栏提示
cmd.menu_text = "Test"
toolbar = toolbar.add_item cmd
toolbar.show

  • 大图标 large_icon:用于工具条上的图标。

  • 小图标 small_icon:用于工具条提示文字中的图标。

  • 菜单文本 menu_text:在菜单中显示的按钮名称,和命令对象构造时的参数是一样的。

  • 状态栏提示文字 status_bar_text:鼠标移到对应的按钮上时状态栏的提示文本,鼠标移到工具条按钮上时还作为提示气泡的内容显示。

  • 工具条提示文字 tooltip:鼠标移到工具条按钮上时弹出的提示气泡标题。

demo字段解释▼

demo字段解释

为了可以灵活设置盒子的数量,

我们再添加了一个交互界面接收盒子数量参数n。

顺便截了个图作插件的图标。

最后给上这个插件完整源码:


#============创建图标插件==============
toolbar = UI::Toolbar.new "magicCube" # 插件名称
cmd = UI::Command.new("magicCube") {
​
mod = Sketchup.active_model # 打开模型
ent = mod.entities # 所有的实体模型
​
#============创建交互窗口==============
prompts = ['边盒子数量(mm)']
defaults = [@radius.to_i]
title = '创建魔方'
input = UI.inputbox(prompts,defaults,title)
​
#============创建魔方==============
n = input[0] # 魔方边盒子数量
s = 100 # 盒子间隔(2个盒子同一位置点的间隔,不是间距哦)
w = 50 # 盒子高度
​
# i j k 可以理解成 x y z 轴
(0..n-1).each{|i|
 (0..n-1).each{|j|
  (0..n-1).each{|k|
​
   # 把每个盒子建成组件
   group = ent.add_group
​
   # 通过组件的盒子的4个点,封面
   face = group.entities.add_face [i*s,j*s,k*s],[i*s,j*s+w,k*s],[i*s+w,j*s+w,k*s],[i*s+w,j*s,k*s]
​
   # 给面添加材质(RGB 颜色)
   face.back_material = [(255/(n-1)*i).round,(255/(n-1)*j).round,(255/(n-1)*k).round]

   # 所有面推拉出高度
   face.pushpull -w
  }
 }
}
}
​
# 设置插件 大图标 小图标
cmd.small_icon = "C:/Users/Administrator/Desktop/magic_cobe_icon.png"
cmd.large_icon = "C:/Users/Administrator/Desktop/magic_cobe_icon.png"
​
# 设置插件 工具条提示 状态栏提示
cmd.tooltip = "magicCube tips"
cmd.status_bar_text = "magicCube bar_test"
cmd.menu_text = "1"
toolbar = toolbar.add_item cmd
# 显示插件
toolbar.show

把源码保存成.rb文件,放到你的SketchUp下的Plugins文件夹即可安装该插件。

至此,

咱这天然无公害的一个完整插件就搞定了

有问题的小可爱可以关注公众号问我!▼

image

​文章转载请注明出处author by Nicaicaiwo

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值