如何将SketchUp插件添加到菜单栏及工具条

微信公众号:老顽童与小东邪
关注可了解更多的教程及编程技巧。问题或建议,请加好友留言;
如果你觉得对你有帮助,欢迎赞赏

插件目录Plugins

我们想要在SketchUp平台上进行二次开发,就要了解它的基本规则。这里我们先来了解下我们插件安装后存放代码的地方,即Plugins文件夹。如图:
plugins目录

它被放置在用户目录中,所以只有只有用户安装了插件,在SketchUp菜单栏中才会出现【Extensions】或【扩展程序】菜单。如图:
图1
否则看到的是这样的。如图:
图2
总之Plugins插件目录对于开发者来说非常重要!!!

SketchUp之UI模块

UI模块包含许多用于从SketchUp Ruby脚本创建简单UI元素的方法及常用的类。如:

menu - 该方法通过给定的名称检索SketchUp的菜单对象

toolbar - 该方法用于按名称获取SketchUp工具栏

messagebox - 该方法返回消息窗口

常用的类还有Command、HtmlDialog、Toolbar等。

菜单栏menu

菜单栏就是SketchUp标题栏下面的水平栏,包含了文件、编辑、视图、相机等下拉菜单。
如图1、图2所示。
在这里我们重点来看插件怎么放在这些菜单栏中。
先来看一下实例:

tool_menu = UI.menu("Tools")
tool_menu.add_item("Cheese Tool") {
   UI.messagebox("Cheese activated.")
}

这段代码的功能是在菜单栏中的工具栏中添加了一个名为【Cheese Tool】的子菜单。我们运行一下代码查看效果:
在这里插入图片描述

有效的的菜单名有“File”, “Edit”, “View”, “Camera”, “Draw”, “Tools”, “Window”, “Extensions” and “Help”.在上面的示例代码中我们用的Tools。一般我们自己开发的扩展程序放在Extensions中比较合适。
注意:在SketchUp2015以前是Plugins而并非Extensions,为了保持兼容Plugins依旧有效。

工具条Toolbar

Toolbar类包含在Ruby中创建和操作SketchUp工具条的方法。工具条是按钮的集合,可用于激活自定义工具或ruby脚本。
从工具条调用这些命令时,我们需要去学习一下Command对象。
Command类是把工具添加到菜单栏或工具条的首选类,就是我们最好先创建命令对象。然后将这个命令添加到菜单栏或工具条中。我们结合下面的代码来理解一下:

    toolbar = UI::Toolbar.new "Test"                   # 创建一个名为Test工具条
    cmd = UI::Command.new("Test") {                    # 创建一个工具名为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" # 在状态栏中显示的内容
    toolbar = toolbar.add_item cmd                     # 将这个命名添加到工具条上
    toolbar.show                                       # 在SktchUp中显示该工具条

我们再来看一下这个效果,这样我们就讲这个工具放到了SketchUp工具条上。
在这里插入图片描述

示例程序

学习了这一章,我们来将前面写的创建球体的代码放到工具条和扩展菜单中。

def self.create_sphere
   mod = Sketchup.active_model # Open model
   ent = mod.entities # All entities in model
   group = ent.add_group
   circle = group.entities.add_circle(ORIGIN, X_AXIS, 1.m, 48)
   face = group.entities.add_face(circle)
   face.reverse!
   path = group.entities.add_circle(ORIGIN, Z_AXIS, 2.m, 48)
   face.followme(path)
   group.entities.erase_entities(path)
end
unless file_loaded?(__FILE__)
  menu = UI.menu('Extensions')
  toolbar = UI::Toolbar.new "老顽童工具条"
  cmd = UI::Command.new("create_sphere"){
    self.create_sphere
  }
  cmd.large_icon = cmd.small_icon = "ToolPencilSmall.png"
  cmd.tooltip = "创建球体"                      
  cmd.status_bar_text = "这是创建球体的插件" 
  toolbar1 = toolbar.add_item cmd
  toolbar.show
  menu.add_item cmd
  file_loaded(__FILE__)
end

我们来执行代码来看一下效果:
在这里插入图片描述

在执行代码后SketchUp菜单栏新增了扩展程序菜单,SketchUp工作区中新增了工具条。

打包并安装插件

在SketchUp中安装的扩展程序是以.rbz后缀的文件,我们将写好的插件压缩为.rbz即可。
然后在SketchUp中点击【扩展程序管理器】安装就可以了。
另一种把你保存的代码文件放在Plugins文件夹下,重启SketchUp就可以了。

公众号

下面的是我的公众号二维码图片,欢迎关注。
在这里插入图片描述

下期预告

讲解工具条插件图标及插件目录格式

引用
声明|原创
公众号:老顽童与小东邪
欢迎关注我,一起学习,一起进步!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 SketchUp 中使用 SketchUp Ruby Vue 插件通过 `sketchup-bridge` 拖动模型,你需要进行以下步骤: 1. 首先,在 Vue 组件中引入 `sketchup-bridge`,并创建一个 `bridge` 对象: ```javascript import * as SketchupBridge from 'sketchup-bridge'; export default { data() { return { bridge: null }; }, created() { this.bridge = new SketchupBridge.Bridge(); } }; ``` 2. 在 Vue 组件中创建一个拖曳区域,用于拖曳模型: ```html <template> <div class="drop-zone" @dragover.prevent @drop="onDrop"> Drop model here </div> </template> ``` 3. 在 Vue 组件中编写一个处理拖曳操作的方法: ```javascript methods: { onDrop(event) { event.preventDefault(); const file = event.dataTransfer.files[0]; const reader = new FileReader(); reader.onload = event => { const base64Data = event.target.result.split(',')[1]; const filename = file.name; this.bridge.sendCommand('add_model', { filename, base64Data }); }; reader.readAsDataURL(file); } } ``` 上面的代码将在拖曳操作结束时将模型的文件名和 base64 编码的数据发送到 SketchUp 中。 4. 在 SketchUp 中,你需要创建一个 Ruby 插件,并将其添加SketchUp 中。你可以使用 SketchUp Extension Warehouse 或手动创建和安装插件。 5. 在插件中,你需要创建一个 `Sketchup::Http::RequestHandler` 对象,用于处理从 Vue 组件发送到 SketchUp 的请求。 ```ruby module MyPlugin class RequestHandler < Sketchup::Http::RequestHandler def handle_request(request, response) if request.post? && request.path == '/add_model' data = JSON.parse(request.body) filename, base64_data = data['filename'], data['base64Data'] model = Sketchup.active_model entities = model.active_entities definition = entities.add_instance('path/to/model.skp', Geom::Transformation.new) definition.name = filename definition.set_attribute('my_plugin', 'base64_data', base64_data) response.headers['Content-Type'] = 'application/json' response.body = JSON.dump({ success: true }) end end end end ``` 上面的代码将在拖曳操作结束时将从 Vue 组件发送的文件名和 base64 编码的数据解析为 SketchUp 中的模型,并将其添加到场景中。 6. 在插件中,你还需要创建一个 `Sketchup::Http::CommandHandler` 对象,用于处理从 `bridge.sendCommand` 发送到 SketchUp 的命令: ```ruby module MyPlugin class CommandHandler < Sketchup::Http::CommandHandler def handle_command(command, params, _) if command == 'add_model' filename, base64_data = params['filename'], params['base64Data'] model = Sketchup.active_model entities = model.active_entities definition = entities.add_instance('path/to/model.skp', Geom::Transformation.new) definition.name = filename definition.set_attribute('my_plugin', 'base64_data', base64_data) end end end end ``` 上面的代码将在 `bridge.sendCommand` 中发送的 `add_model` 命令中解析模型数据,并将其添加到场景中。 以上就是使用 SketchUp Ruby Vue 插件通过 `sketchup-bridge` 拖动模型到 SketchUp 的基本步骤。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值