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

在初识 SketchUp 的 Ruby Code Editor之后,

我们学会了6行代码绘制球体

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

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

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

那这次我们的 目标 是:

把我们的球体插件,放到SketchUP的菜单栏里面;

并且每次启动Sketchup都能使用。

先来看目标下效果吧!

在这里插入图片描述

1、 添加菜单

我们来理一下思路,

绘制球体的代码有了,

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

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

在这里插入图片描述

对应代码:

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

# 自己的菜单 作为extensions的子菜单
menu = UI.menu('extensions')
menu.add_item(cmd)

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

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

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

menu = UI.menu(‘extensions’)

在这里插入图片描述

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

文件(F)编辑(E)视图(V)相机©绘图®工具(T)窗口(W)扩展程序帮助(H)
FileEditViewCameaDrawToolsWindowExtensionsHelp
2、放入绘制球体代码

菜单栏有了,接下来就是把我们绘制球体的代码放进去咯!
在这里插入图片描述

对应代码:

#============创建自定义菜单============== 
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的球体。

3、控制球体大小

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

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

在这里插入图片描述

对应代码:

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

4、完整代码

最后贴一下完整代码:

#============创建自定义菜单============== 
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 文件

在这里插入图片描述

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

下面贴一些速成教程,

先来看一下 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扩展的方法

官方 API 传送门

再贴一点学习资料吧

SketchUp

Ruby

SketchUP 插件开发

在这里插入图片描述

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

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值