Melanjutkan pembahasan sebelumnya mengenai dasar membuat plugin, cara membuat skirp loader & merigestrasi ke SketchUp, cara membuat menu, toolbar,dll. Nah saat kita fokus pada aksi & fungsi utama plugin kita.
Saya coba yang sangat sederhana ajah dulu supaya tidak frustasi..hehehe. Kita Sisipkan & tambahkan pada file "skrip_utama_saya.rb" dengan beberapa kode skrip lagi. Fungsinya yaitu untuk menggambar sebuah dinding polos. Nah buka deh filenya, lalu coba sisipkan kode skrip dibawah ini sambil memperhatikan keterangan berikut ini.
Tambahan skrip pertama adalah sebuah kelas/class yang kita buat khusus untuk menangani pointer mouse. Kita berinama saja kelas ini dengan nama "Mouse_saya". Catatan: Aturan ruby dalam memberi nama kelas huruf pertama harus kapital.
Dalam class "Mouse_saya" ini terdapat method khusus yang diambil dari kelas utama Ruby Api SketchUp yaitu class InputPoint. Pemberian nama definisi dari kelas ini harus sesuai & tidak boleh salah. Teman-teman bisa langsung cari referensi selengkapnya di situs resminya ruby.sketchup.com
Yang utama dalam Class "Mouse_saya" ini adalah method onMouseMove (Saat pointer mouse bergerak) & onLButtonDown (Saat tombol mouse kiri di tekan).
Fungsi utama Method onMouseMove adalah mencatat lokasi koordinat pointer pada layar kerja sketchup. Fungsi ini juga terkait dengan method draw kelasnya sketchup InputPoint.
Sedangkan pada method onLButtonDown kita sisipkan satu method yang kita buat khusus "gbr_dinding" untuk menggambar dinding. Kita ketahui bahwa sebuah dinding bisa dihasilkan dari sebuah plan XY berupa face yang di pushpull dengan tinggi tertentu. Maka kita juga harus membuat method khusus untuk menggambar face, lalu face terseut dipushpull, kemudian di grup. Nah semua prosedur menggambar ini kita tuangkan juga dengan membuat method khusus. Kita berinama saja "buat_faceXY".
Untuk mencoba fungsi kelas "Mouse_saya" ini, kita coba buat menu & toolbar baru. Jika kemarin untuk menampilkan sebuah kotak pesan di berinama method "perintah", maka kita buat lagi sebuah method dengan nama "perintah_dinding". Funsinya yaitu saat menu/ikon toolbar di akses/klik maka class "Mouse_saya" aktif dengan statemen Sketchup.active_model.select_tool Mouse_saya.new.
Silahkan explore skrip ini. Jika ada pertanyaan silahkan layangkan di Grup WA.
Listing Skrip:
require 'sketchup.rb'
require 'extensions.rb'
class Mouse_saya
def activate
@mod = Sketchup.active_model
@ent = @mod.entities
@ip0 = Sketchup::InputPoint.new
@ip1 = Sketchup::InputPoint.new
@pts=[]
end
def deactivate(view); view.invalidate; end
def resume(view); view.invalidate; end
def onCancel(reason, view); reset_tool;view.invalidate;end
@com2.small_icon = "#{@pathRoot}/ikon_dinding16.png"
@com2.large_icon = "#{@pathRoot}/ikon_dinding32.png"
Saya coba yang sangat sederhana ajah dulu supaya tidak frustasi..hehehe. Kita Sisipkan & tambahkan pada file "skrip_utama_saya.rb" dengan beberapa kode skrip lagi. Fungsinya yaitu untuk menggambar sebuah dinding polos. Nah buka deh filenya, lalu coba sisipkan kode skrip dibawah ini sambil memperhatikan keterangan berikut ini.
Tambahan skrip pertama adalah sebuah kelas/class yang kita buat khusus untuk menangani pointer mouse. Kita berinama saja kelas ini dengan nama "Mouse_saya". Catatan: Aturan ruby dalam memberi nama kelas huruf pertama harus kapital.
Dalam class "Mouse_saya" ini terdapat method khusus yang diambil dari kelas utama Ruby Api SketchUp yaitu class InputPoint. Pemberian nama definisi dari kelas ini harus sesuai & tidak boleh salah. Teman-teman bisa langsung cari referensi selengkapnya di situs resminya ruby.sketchup.com
Yang utama dalam Class "Mouse_saya" ini adalah method onMouseMove (Saat pointer mouse bergerak) & onLButtonDown (Saat tombol mouse kiri di tekan).
Fungsi utama Method onMouseMove adalah mencatat lokasi koordinat pointer pada layar kerja sketchup. Fungsi ini juga terkait dengan method draw kelasnya sketchup InputPoint.
Sedangkan pada method onLButtonDown kita sisipkan satu method yang kita buat khusus "gbr_dinding" untuk menggambar dinding. Kita ketahui bahwa sebuah dinding bisa dihasilkan dari sebuah plan XY berupa face yang di pushpull dengan tinggi tertentu. Maka kita juga harus membuat method khusus untuk menggambar face, lalu face terseut dipushpull, kemudian di grup. Nah semua prosedur menggambar ini kita tuangkan juga dengan membuat method khusus. Kita berinama saja "buat_faceXY".
Untuk mencoba fungsi kelas "Mouse_saya" ini, kita coba buat menu & toolbar baru. Jika kemarin untuk menampilkan sebuah kotak pesan di berinama method "perintah", maka kita buat lagi sebuah method dengan nama "perintah_dinding". Funsinya yaitu saat menu/ikon toolbar di akses/klik maka class "Mouse_saya" aktif dengan statemen Sketchup.active_model.select_tool Mouse_saya.new.
Silahkan explore skrip ini. Jika ada pertanyaan silahkan layangkan di Grup WA.
Listing Skrip:
require 'sketchup.rb'
require 'extensions.rb'
class Mouse_saya
def activate
@mod = Sketchup.active_model
@ent = @mod.entities
@ip0 = Sketchup::InputPoint.new
@ip1 = Sketchup::InputPoint.new
@pts=[]
end
def deactivate(view); view.invalidate; end
def resume(view); view.invalidate; end
def onCancel(reason, view); reset_tool;view.invalidate;end
def onMouseMove(flags, x, y, view)
if !@ip0.valid?
@ip1.pick(view, x, y)
end
view.tooltip = @ip1.tooltip if @ip1.valid?
view.invalidate
end
if !@ip0.valid?
@ip1.pick(view, x, y)
end
view.tooltip = @ip1.tooltip if @ip1.valid?
view.invalidate
end
def onLButtonDown(flags, x, y, view)
if !@ip0.valid?
puts "Point ke-1 sudah di klik"
@point1 = Geom::Point3d.new(@ip1)
puts @point1.x
puts @point1.y
puts @point1.z
gbr_dinding
reset_tool
end
view.invalidate
end
def draw(view)
@ip0.draw(view)
@ip1.draw(view)
if @ip1.valid? && !@ip1.display?
view.draw_points([@ip1.position])
end
if !@ip0.valid?
puts "Point ke-1 sudah di klik"
@point1 = Geom::Point3d.new(@ip1)
puts @point1.x
puts @point1.y
puts @point1.z
gbr_dinding
reset_tool
end
view.invalidate
end
def draw(view)
@ip0.draw(view)
@ip1.draw(view)
if @ip1.valid? && !@ip1.display?
view.draw_points([@ip1.position])
end
end
private
def reset_tool; @ip1.clear; end
def buat_faceXY (po, pj, lb,ti)
pts = []
pts[0] = [po.x, po.y, po.z]
pts[1] = [po.x + pj, po.y, po.z]
pts[2] = [po.x + pj, po.y+lb, po.z]
pts[3] = [po.x, po.y+lb, po.z]
face = @ent.add_face pts
face.reverse!
face.pushpull ti
gface = face.all_connected
group = @ent.add_group gface
end
def gbr_dinding
buat_faceXY @point1, 15.cm, 350.cm,300.cm
end
end # class Mouse Saya
unless file_loaded?(__FILE__)
# ============================================================
# MEMBUAT TOOLSBAR & MENU
# Membuat menu & meletakannya pada menu utama Plugins/Extensions
view_menu = UI.menu "Plugins"
# Menambah garis separator
view_menu.add_separator
# Membuat sub menu di menu utama "Plugins" dengan nama "Menu Plugin Saya"
@sub_menu = view_menu.add_submenu("Menu Plugin Saya")
# Membuat Toolbar menu
@ncep_toolbar = UI::Toolbar.new "Toolbar Saya"
# -------------------------------------------------------
# Prosedure/Fungsi saat menu atau toolbar di klik
def perintah
Sketchup::set_status_text "Ini adalah status text saya"
UI.messagebox "Plugin Saya, Horee...sy bisa membuat plugin.!!!."
end
# Membuat ikon perintah dan menetukan prosedure "perintah" sebagai aksi
@com1 = UI::Command.new("Basic1") {perintah}
# Buat ikon. Simpan di Folder ...Plugins/Folder_saya/
@com1.small_icon = "#{@pathRoot}/ikon16.png"
@com1.large_icon = "#{@pathRoot}/ikon32.png"
# Menampilkan tooltips saat mpointer mouse tepat berada di icon
@com1.tooltip = "Tool Tips Plugin Saya"
tb1 = @ncep_toolbar.add_item @com1
@it1 = @sub_menu.add_item("Plugin Pertama Saya") {perintah}
def perintah_dinding
Sketchup.status_text = "Silahkan ingin diletakan dimana dindingnya."
Sketchup.active_model.select_tool Mouse_saya.new
end
private
def reset_tool; @ip1.clear; end
def buat_faceXY (po, pj, lb,ti)
pts = []
pts[0] = [po.x, po.y, po.z]
pts[1] = [po.x + pj, po.y, po.z]
pts[2] = [po.x + pj, po.y+lb, po.z]
pts[3] = [po.x, po.y+lb, po.z]
face = @ent.add_face pts
face.reverse!
face.pushpull ti
gface = face.all_connected
group = @ent.add_group gface
end
def gbr_dinding
buat_faceXY @point1, 15.cm, 350.cm,300.cm
end
end # class Mouse Saya
unless file_loaded?(__FILE__)
# ============================================================
# MEMBUAT TOOLSBAR & MENU
# Membuat menu & meletakannya pada menu utama Plugins/Extensions
view_menu = UI.menu "Plugins"
# Menambah garis separator
view_menu.add_separator
# Membuat sub menu di menu utama "Plugins" dengan nama "Menu Plugin Saya"
@sub_menu = view_menu.add_submenu("Menu Plugin Saya")
# Membuat Toolbar menu
@ncep_toolbar = UI::Toolbar.new "Toolbar Saya"
# -------------------------------------------------------
# Prosedure/Fungsi saat menu atau toolbar di klik
def perintah
Sketchup::set_status_text "Ini adalah status text saya"
UI.messagebox "Plugin Saya, Horee...sy bisa membuat plugin.!!!."
end
# Membuat ikon perintah dan menetukan prosedure "perintah" sebagai aksi
@com1 = UI::Command.new("Basic1") {perintah}
# Buat ikon. Simpan di Folder ...Plugins/Folder_saya/
@com1.small_icon = "#{@pathRoot}/ikon16.png"
@com1.large_icon = "#{@pathRoot}/ikon32.png"
# Menampilkan tooltips saat mpointer mouse tepat berada di icon
@com1.tooltip = "Tool Tips Plugin Saya"
tb1 = @ncep_toolbar.add_item @com1
@it1 = @sub_menu.add_item("Plugin Pertama Saya") {perintah}
def perintah_dinding
Sketchup.status_text = "Silahkan ingin diletakan dimana dindingnya."
Sketchup.active_model.select_tool Mouse_saya.new
end
@com2 = UI::Command.new("Basic1") {perintah_dinding}
# Buat ikon dinding. Simpan di Folder ...Plugins/Folder_saya/
# Buat ikon dinding. Simpan di Folder ...Plugins/Folder_saya/
@com2.small_icon = "#{@pathRoot}/ikon_dinding16.png"
@com2.large_icon = "#{@pathRoot}/ikon_dinding32.png"
# Menampilkan tooltips saat mpointer mouse tepat berada di icon
@com2.tooltip = "Menggambar Dinding Saya"
tb2 = @ncep_toolbar.add_item @com2
@it2 = @sub_menu.add_item("Gambar Dinding") {perintah_dinding}
end # ulsess
@com2.tooltip = "Menggambar Dinding Saya"
tb2 = @ncep_toolbar.add_item @com2
@it2 = @sub_menu.add_item("Gambar Dinding") {perintah_dinding}
end # ulsess
Cara membuat Plugin/Extension SketchUp - Bagian 3: Tool Pointer Mouse
Reviewed by NCEP Studio
on
Januari 28, 2019
Rating:
Tidak ada komentar: