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