Ruby for Sketchup|2[练习]为SUAPP增添工具条图标

Posted 建筑流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby for Sketchup|2[练习]为SUAPP增添工具条图标相关的知识,希望对你有一定的参考价值。

        SUAPP插件是一款非常好用的插件。其离线版(免费)集成几十个常用的插件工具,但这些工具多数都在“扩展程序”菜单下,不注册会员不能自定义按排序,只有少数几个工具有图标,使用较不方便。

        下面利用上一次文章内容,尝试解决一下这个问题(添加工具图标,修改菜单位置)。


        通过查看SUAPP安装后的文件(我的电脑在H盘),多数文件是加密的,不允许阅读和修改,但其离线版的核心文件H:\SUAPP\suapp\suapp_data.rb,却未进行加密,立面详细列出了各个工具的模块或者类,只是用分号代替的回车,可读性差。

        1、格式化

        复制出一段完整的代码,以只选择线(面)为例,百度ruby代码在线格式化工具,处理后的代码如下:

module Select_Only
  
  def Select_Only::contains_edge
    ss=Sketchup.active_model.selection
    ss.each{|e|return true if e.class==Sketchup::Edge}
  end
  
  def Select_Only::contains_face
    ss=Sketchup.active_model.selection
    ss.each{|e|return true if e.class==Sketchup::Face}
  end
  
  def Select_Only::only_edges
    ss=Sketchup.active_model.selection
    sa=ss.to_a
    ss.clear
    sa.each{|e|ss.add(e)if e.class==Sketchup::Edge}
  end
  
  def Select_Only::only_faces
    ss=Sketchup.active_model.selection
    sa=ss.to_a
    ss.clear
    sa.each{|e|ss.add(e)if e.class==Sketchup::Face}
  end

end
#module

UI.add_context_menu_handler do |menu|
menu.add_item(
"只选择边(&B)"){Select_Only::only_edges}if Select_Only::contains_edge
menu.add_item(
"只选择面(&U)"){Select_Only::only_faces}if Select_Only::contains_face
end

        格式化后,代码由一个模块(包含四个方法)和两个右键菜单两部分,我们只需要给其添加工具图标和菜单栏便可以作为一个单独完整的插件使用。(仅有右键菜单也可以使用。)

2.添加工具图标和菜单栏

        工具图标、菜单栏与右键菜单一样,由固定的命令关联相关的方法即可。

        首先把上面的代码复制到ruby code editor,开头添加 require "sketchup.rb",工具图标、菜单栏等代码添加在尾部。

        修改后另存为“suapp select only.rb”。完整代码如下:

require "sketchup.rb"
module Select_Only def Select_Only::contains_edge ss=Sketchup.active_model.selection ss.each{|e|return true if e.class==Sketchup::Edge} end def Select_Only::contains_face ss=Sketchup.active_model.selection ss.each{|e|return true if e.class==Sketchup::Face} end def Select_Only::only_edges ss=Sketchup.active_model.selection sa=ss.to_a ss.clear sa.each{|e|ss.add(e)if e.class==Sketchup::Edge} end def Select_Only::only_faces ss=Sketchup.active_model.selection sa=ss.to_a ss.clear sa.each{|e|ss.add(e)if e.class==Sketchup::Face} end

end
#module#已有的右键菜单

UI.add_context_menu_handler do |menu|
menu.add_item(
"只选择边(&B)"){Select_Only::only_edges}if Select_Only::contains_edge
menu.add_item(
"只选择面(&U)"){Select_Only::only_faces}if Select_Only::contains_face
end

#添加加载、工具栏、菜单栏
if( not file_loaded?(File.basename(__FILE__))) #自动加载 select_toolbar_tools = UI::Toolbar.new("选择工具") #添加工具栏 #选择线   select_cmd = UI::Command.new("仅选择边线"){Select_Only::only_edges}if Select_Only::contains_edge select_cmd.tooltip = "仅选择边线" #工具提示 select_cmd.status_bar_text = "仅选择边线" #状态提示 select_cmd.large_icon = "./选择工具/edge.png"#大图标 select_cmd.small_icon = "./选择工具/edge.png"#小图标 select_cmd1 = UI::Command.new("仅选择面"){Select_Only::only_faces}if Select_Only::contains_face select_cmd1.tooltip = "仅选择面" select_cmd1.status_bar_text = "仅选择面" select_cmd1.large_icon = "./选择工具/face.png" select_cmd1.small_icon = "./选择工具/face.png" select_toolbar_tools.add_item(select_cmd) select_toolbar_tools.add_item(select_cmd1) select_toolbar_tools.show select_menu = UI.menu "Tools" #添加菜单栏 select_menu.add_separator #新增分割线 select_submenu = select_menu.add_submenu("选择工具") select_it1=select_submenu.add_item("仅选择边线"){Select_Only::only_edges}if Select_Only::contains_edge select_it2=select_submenu.add_item("仅选择面"){Select_Only::only_faces}if Select_Only::contains_face
end #if

        其中关联的方法复制右键菜单的即可。

        修改好后,找了两个图标,放在选择工具文件夹下,一起放到su的插件文件夹内。经测试,可以正常使用。

3.尝试直接调用suapp文件

        和文件开头对sketchup.rb的调用一样,把文件内原先复制的部分换成

require "H:/SUAPP/suapp/suapp_data.rb"

即可。完整代码如下:

require "sketchup.rb"
require "H:/SUAPP/suapp/suapp_data.rb"

#添加加载、工具栏、菜单栏
if( not file_loaded?(File.basename(__FILE__))) #自动加载 select_toolbar_tools = UI::Toolbar.new("选择工具") #添加工具栏 #选择线   select_cmd = UI::Command.new("仅选择边线"){Select_Only::only_edges}if Select_Only::contains_edge select_cmd.tooltip = "仅选择边线" #工具提示 select_cmd.status_bar_text = "仅选择边线" #状态提示 select_cmd.large_icon = "./选择工具/edge.png"#大图标 select_cmd.small_icon = "./选择工具/edge.png"#小图标 select_cmd1 = UI::Command.new("仅选择面"){Select_Only::only_faces}if Select_Only::contains_face select_cmd1.tooltip = "仅选择面" select_cmd1.status_bar_text = "仅选择面" select_cmd1.large_icon = "./选择工具/face.png" select_cmd1.small_icon = "./选择工具/face.png" select_toolbar_tools.add_item(select_cmd) select_toolbar_tools.add_item(select_cmd1) select_toolbar_tools.show select_menu = UI.menu "Tools" #添加菜单栏 select_menu.add_separator #新增分割线 select_submenu = select_menu.add_submenu("选择工具") select_it1=select_submenu.add_item("仅选择边线"){Select_Only::only_edges}if Select_Only::contains_edge select_it2=select_submenu.add_item("仅选择面"){Select_Only::only_faces}if Select_Only::contains_face
end #if

        至此,第一个工具解决:

        1:补充插件放置在su插件目录,在su启动时会自动打开;

        2:在工具菜单下添加次级菜单,方便查找(去掉“选择工具”那一级会更方便)

        3:自定义图标和工具条,方便应用。

        其他的工具类似进行修改即可,建议把代码放置在上面同一个文件内。

以上是关于Ruby for Sketchup|2[练习]为SUAPP增添工具条图标的主要内容,如果未能解决你的问题,请参考以下文章

Sketchup Ruby,为Face添加纹理

vray for sketchup 2017中文版|vray for sketchup 2017

如何在Sketchup Ruby中复制面并保留转换

sketchup导入arcgis后材质出错

SketchUp2016的plugins目录在哪

韩的日志直播预告 | 系统入门 V-Ray 3 for SketchUp