Como desenvolver um plugin para o Sketchup
De forma bem resumida, um plugin nada mais é que um arquivo de texto, contendo instruções que serão interpretadas por algum programa. Para que essas instruções sejam entendidas, é necessário que o texto esteja claro e em uma linguagem conhecida pelo programa. Simples assim!
Seguindo o padrão dos plugins existentes no Sketchup crie o arquivo principal do plugin su_NOME_DO_PLUGIN.rb
com o seguinte código:
require 'sketchup.rb' # sketchup.rb é necessário para o 'file_loaded?' e 'file_loaded'.
require 'extensions.rb' # extensions.rb é necessario para a classe 'SketchupExtensions'.
# Eu recomendo um padrão similar a esse, por melhor flexibilidade:
module PublisherName
module ExtensionName
# O uso do 'file_loaded?' aqui é pra prevenir a extensão ser registrada multiplas vezes. Isso pode acontecer por inúmeras razões quando o arquivo é recarregado.
# O '_FILE_' é uma constante "mágica" do ruby ela retorna uma string com o caminho deste arquivo.
unless file_loaded?(__FILE__)
extension = SketchupExtension.new('My Plugin name', 'su_nome_do_modulo/core')
extension.version = '1.0'
extension.copyright = 'Lorem Lorem'
extension.creator = 'Lorem Lorem'
extension.description = 'Lorem Lorem'
# Aqui nós falamos para o Sketchup registrar essa extensão. Lembre-se de sempre setar o segundo argumento como true. Isso diz para o Sketchup carregar a extensão por padrão.
Sketchup.register_extension(extension, true)
# Essa linha é necessária pois previne a extensão de ser carregada multiplas vezes.
file_loaded(__FILE__)
end
end
end
Agora crie uma pasta com o nome do seu ruby module su_nome_do_modulo/
, e dentro da pasta crie o arquivo su_nome_do_modulo/core.rb
, com o seguinte código:
require 'sketchup.rb'
require 'extensions.rb'
require 'json'
require 'ostruct'
module NomeDoModulo::Core
# Cria um HTML Dialog com o HTML que você irá criar
def self.home_html_dialog
dialog = UI::HtmlDialog.new(
{
:dialog_title => "Lorem Lorem",
:preferences_key => "com.sample.plugin",
:scrollable => true,
:resizable => true,
:width => 600,
:height => 400,
:left => 100,
:top => 100,
:min_width => 50,
:min_height => 50,
:max_width =>1000,
:max_height => 1000,
:style => UI::HtmlDialog::STYLE_UTILITY
})
dialog.set_url("algumarquivo.html")
dialog.show
# Método que o jquery irá chamar no HTML
dialog.add_action_callback("getCurrentUser") { |action_context, email, password|
puts "JavaScript getCurrentUser: #{email} and #{password}"
}
end
# Um exemplo de um API Request
def self.http_req
request = Sketchup::Http::Request.new("https://reqres.in/api/users/2")
request.start do |request, response|
obj = JSON.parse(response.body, object_class: OpenStruct)
UI.messagebox("body: #{obj.data}")
end
end
# Exemplo de uma Toolbar no Sketchup
def self.home_toolbar
toolbar = UI::Toolbar.new "Lorem Lorem"
cmd_study = UI::Command.new("Estudo") { self.home_html_dialog }
cmd_study.small_icon = "images/study-icon.png"
cmd_study.large_icon = "images/study-icon.png"
toolbar.add_item cmd_study
toolbar = toolbar.add_separator
cmd_selected_study = UI::Command.new("Estudo Selecionado") { self.http_req }
cmd_selected_study.small_icon = "images/study-selected-icon.png"
cmd_selected_study.large_icon = "images/study-selected-icon.png"
toolbar.add_item cmd_selected_study
toolbar.show
toolbar.each { | item |
puts item
}
end
# Método principal que cria um item no menu do sketchup
unless file_loaded?(__FILE__)
menu = UI.menu("Plugins")
menu.add_item("Nome do Plugin") {
self.home_toolbar
self.home_html_dialog
}
end
file_loaded(__FILE__)
end
Estes arquivos devem ser colocados na seguinte pasta:
Windows 8++: C:\Users\SEU_USUARIO\AppData\Roaming\SketchUp\SketchUp 2017\SketchUp\Plugins
Obs: Sempre que for instalar um plugin manualmente, reinicie o Sketchup para que as mudanças tenham efeito