🌓
搜索
 找回密码
 立即注册

SketchUp的二次开发探索 (二)菜单栏中放入自己写的插件 ...

moonforget 2022-8-24 13:31:39 59894

在初识 SketchUp 的 Ruby Code Editor之后,

我们学会了

SketchUp的奇妙之旅 (一)没有插件怎么画一个球? ​ mp.weixin.qq.com/s/bHMHJH4sUQ-3jzYnWtK-rw


但是这不是一个 完整 的插件,

在使用的时候还需要打开 Ruby Code Editor

粘贴我们的球体代码执行。


那这次我们的 目标 是:

把我们的球体插件,放到SketchUP的菜单栏里面;
并且每次启动Sketchup都能使用。


先来看目标下效果吧!

hvduLzp6l0uzLfUV.jpg

一、 添加菜单

我们来理一下思路,

绘制球体的代码有了,

现在需要一个菜单栏来放我们的插件,

那怎么操控SketchUp添加一个我们自己的菜单栏?

b731zd9y4JRYGYOe.jpg


对应代码:

#============创建自定义菜单============== 
cmd = UI::Command.new('我自己加的菜单'){
    # 点击该菜单做的事情
    puts 1
}
​
# 自己的菜单 作为extensions的子菜单
menu = UI.menu('extensions')
menu.add_item(cmd)

执行之后即可看到 extensions 下就添加上了 我们自己加的菜单,

因为SketchUp 不允许 我们创建新的菜单,但是可以在现有菜单中添加 子菜单


菜单栏添加在哪个菜单下面我们可以自己选择。

menu = UI.menu('extensions')
s66rFoLOMC5CPO6V.jpg

使用汉化版本的小可爱们,可以参考下面表格选择对应菜单的英文名称。

t9Ub3ILozcZszOWL.jpg


二、放入绘制球体代码

菜单栏有了,接下来就是把我们绘制球体的代码放进去咯!

a9Ghmzs6aZ0xm7i5.jpg


对应代码:

#============创建自定义菜单============== 
cmd = UI::Command.new('绘制球体'){
  
  # 点击该菜单做的事情
  #============创建球体============== 
  ents = Sketchup.active_model.entities
  # 创建一个正向为(0,0,1)的圆面
  center = [0, 0, 0]
  radius = 5
  circle = ents.add_circle center, [0, 0, 1], radius
  circle_face = ents.add_face circle
  # 创建一个与上面圆面垂直的圆,作为路径
  path = ents.add_circle center, [0, 1, 0], radius + 1
  # 创建球体
  circle_face.followme path
  # 删除路径
  ents.erase_entities path
}
​
# 自己的菜单 作为extensions的子菜单
menu = UI.menu('extensions')
menu.add_item(cmd)


这样我们就已经实现了点击 extensions > 绘制球体

即可生成半径为5mm的球体。


三、控制球体大小

但是这样不能精确控制球体的 大小

需要加一个交互界面,输入我们需要绘制球体的半径。

gbv7BsrQVQM7c6wY.jpg


对应代码:

#============创建工具窗口============== 
prompts = ['半径(mm)']
defaults = [@radius.to_f]
title = '创建球体'
input = UI.inputbox(prompts,defaults,title)


四、完整代码

最后贴一下完整代码:

#============创建自定义菜单============== 
cmd = UI::Command.new('绘制球体'){
  
  #============创建工具窗口============== 
  prompts = ['半径(mm)']
  defaults = [@radius.to_f]
  title = '创建球体'
  input = UI.inputbox(prompts,defaults,title)
​
  #============创建球体============== 
  ents = Sketchup.active_model.entities
  # 创建一个正向为(0,0,1)的圆面
  center = [0, 0, 0]
  radius = input[0]
  circle = ents.add_circle center, [0, 1, 0], radius
  circle_face = ents.add_face circle
  # 创建一个与上面圆面垂直的圆,作为路径
  path = ents.add_circle center, [0, 0, 1], radius + 1
  # 创建球体
  circle_face.followme path
  # 删除路径
  ents.erase_entities path
}
​
menu = UI.menu('extensions')
menu.add_item(cmd)


好的,现在看起来就很棒棒了!

以后工作中就可以直接用自己写的插件工具了。


等等,重启SketchUp后,发现刚才添加的菜单 没有了

那是因为上面教程中,

我们自己的菜单栏是在SketchUp启动 之后 加载的,

所以只需要把上面的完整代码保存成 .rb 文件,

安装成插件就可以永久使用了。

(安装插件都会吧?优先推荐下面的A方法)


安装插件方法:

A.将我们的 .rb文件直接放到 sketchup 的 Plugins 文件夹下面
B. 通过 extensions manager 安装,选择我们保存的 .rb 文件
U4oUV6UocHCr7szR.jpg


知道各位小可爱忙着画图没时间学习代码,

下面贴一些速成教程,


先来看一下 SketchUp 二次开发提供的几个模块和类别(我也看不懂~)


主要模块

1、Geom :对点和线处理的封装,重点在于对数据的判断,简化我们的代码;

2、Layout:这个模块是 SketchUp 2018 中新增的API 来对LayOut进行编程;

3、Sketchup :最终的模块,包含了对SketchUp二次开发所需要的方方面面,比如:动画、曲线、相机、材质、实体、组建等等;

4、UI :用户界面模块,包括可调的SketchUp界面风格的控件,比如弹框,创建操作工具栏,显示原生通知消息等。


主要类别

1、Array:SketchUp中的Array是对原有Ruby Array类的扩展

2、LanguageHandler :SketchUp扩展更容易跨不同语言进行本地化的方法

3、Length :专门用于处理长度的类,统计出来的长度都以以英寸为单位存储值

4、Numeric :专门用于做单位转换的类,比如将英尺转换为米,厘米等操作

5、String :获取字符串长度 (就一个方法:to_l)

6、SketchUpExtension :封装了创建和操作SketchUp扩展的方法



再贴一点学习资料吧

SketchUp

  • 官网
  • SketchupUcation
  • 中文官网
  • 紫天SketchUp中文网
  • SketchUp吧
  • SketchUp自学博客
  • SketchUpBBS
  • Sketchup中文网

Ruby

  • 官网
  • 菜鸟教程
  • Ruby China
  • Ruby on Rails

SketchUP 插件开发

  • Ruby API
  • Developer Center
Q1lf5h9x9Ln5i9ss.jpg

文章转载请注明出处 author by Nicaicai

也可加微信 wxid_ljshjsw95hcv22 进群共同探索创新

扫一扫

0 回复

高级模式
游客
返回顶部