Kopdar - 1 : Belajar Bareng Membuat Plugins/Extension SketchUp

OBROLAN KOPDAR-1

1. Pengertian Plugins

Apakah plugin itu?
Plugin adalah alat, tool, fitur tambahan atau perluasan. Istilah lainnya adalah Extension, Add-ons, dll

Jadi plugin SketchUp bisa kita artikan bebas adalah sebuah alat/fitur tambahan yang dibuat baik oleh SketchUp sendiri maupun yang dibuat oleh developer / programmer pihak ke-3. Plugin ini berupa skrip/koding text dalam bahasa Ruby.

Saat kita pertama kali install SketchUp umumnya sudah disertakan plugin dasar tergantung dari versinya. Seperti sandbox, camera tools, dll.

Untuk melengkapi & membantu kita dalam modeling di SketchUp, terkadang kita membutuhkan plugin yang dibuat oleh pihak ke-3. Seperti plugin KSI Ruang Otomatis, Auto Pushpull, Auto Tris,  dll... (Plugin sendiri neh...hehehe).   Tujuannya adalah agar proses kerja kita saat modeling lebih cepat, efektif & efisien.

SketchUp Ruby API

Supaya kita bisa juga membuat plugin, maka kita memerlukan satu alat yang sudah di sediakan oleh SektchUp. Alat ini kita kenal dengan nama SketchUp Ruby API (Application Program Interface). API ini beris banyak koding/skrip dalam bahasa Ruby sebagai bahan kita dalam proses membuat plugin.

SketchUp Ruby API memungkinkan kita dapat berinteraksi dengan model SketchUp dan aplikasi SketchUp.
Plugin SketchUp hanya bisa dijalankan di dalam sketchUp sendiri, ini berarti  tidak dapat dijalankan jika kita tidak menginstall  SketchUp.

Kita dapat menggunakan bahasa Ruby untuk memperluas & mengembangkan  SketchUp agar kita bisa melakukan lebih  dari fitur dasar yang disediakan oleh SketchUp.
Belajar Bareng Membuat Plugins/Extension
sumber gambar: https://developer.sketchup.com/en/content/welcome

Contohnya saya bisa membuat tools tambahan fitur drawing Line dengan aksi saat sudah terbentuk face(tertutup) langsung otomatis melakukan pushpull dengan nilai yang baku yg sudah di seting, atau dengan nilai lainnya.

Contoh lain yang lebih komplek adalah  plugin yang saya buat(KSI Ruang Otomatis) , saya bisa membuat dinding sekaligus di pushpul, dilubangi untuk kusen pintu & jendela dalam satu langkah cepat. Bahkan dalam plugin yang saya buat ini bisa dalam sekali klik terbetuk satu 3D Ruang lengkap dengan lubang-lubang kusen, roster, lantai, plafon..hehehe.

Lain halnya dengan SketchUp SDK, ini bisa dijalankan secara mandiri. Hanya saja masih dalam bahasa C (SketchUp C API) yang jujur sy sendiri ajah masih mumet belajar bahasa ini. wkwkwk

2. Alat Tempur

Untuk membuat skrip/koding, sebenarnya tidak perlu spek PC/Lepi yang canggih. Karena skript ini bisa dibuat sekalipun dengan editor primitif notepad. Kita tingaal save skrip tersebut dengan ektensi *.rb.

Tapi untuk plugin yang fokus ke modeling tentu kita perlu  mencoba(debug) gimana jalannya skrip plugin yang udah kita buat langsung di SketchUp. Jika teman-teman pernah mencoba plugin round corner, akan terasa berat bahkan bisa bugsplat saat proses nge-round jalan. Ini karena terlalu besar nilai yang di berikan, juga objek yang di-round terlalu banyak. Maka supaya lancar kita perlu spesifikasi hardware yang cukup memadai.

Hardware :
RAM 4 GB & VGA 1 GB (minimal) / 8GB & 2 GB (Rekomen)
(Mampu membaca file size SketchUp & tidak Lemot)

Software :
SketchUp 2013 - 2019
Code Editor:
RDE, Visual Code, Notepad++, Atom, dll)
Ruby 2.6 / teranyar
Referensi, Dokumentasi & Manual

Sebagai referensi lengakap untuk mempelajari pembuatan sketchup, teman-taman bisa langsung kunjungi langsung ke sumbernya.

SketchUp API
https://ruby.sketchup.com/_index.html 

Gudang Plugins (Externsion WareHouse)
https://extensions.sketchup.com

http://rhin.crai.archi.fr/rld/plugins_list_az.php

RUBY Programming
https://www.ruby-lang.org/id/documentation/

3. Struktur Model SketchUp

  • Model


Model adalah istilah yang digunakan SketchUp untuk menamai 3D objek gambar. Jadi model juga berarti adalah satu file SketchUp (*.skp)/beberapa  yang di dalamnya berisi  informasi, bentuk visual 3D desain.
Contoh: Model Rumah, Model Interior, Model Mesin, dll

Dalam sebuah model SketchUp bisa terdiri dari: 
  • Entities (Objek Entitas berupa Line, Cicrcle, Face, Endge, dst)
  • Layer
  • Material SketchUp (Warna & Tekture format bitmap)
  • Halaman Sceen
  • Definisi Objek (Group, komponen, dll)
  • Opsi-opsi yang tersimpan.

Dalam koding skrip ini mutlak untuk didefinisikan sebelum kita membuat objek entitas lainnya. 
Dalam koding skrip umumnya di deklarasikan sebagai berikut:
mod = Sketchup.active_model
mod : sebuah Variable. Bebas bisa kita ganti dengan apa saja yang mengacu ke Model

Sketchup.active_model = Deklarasi model SketchUp
  • MODEL ENTITIES

Setiap objek 3D dalam SketchUp diwakili oleh Entitas atau subkelasnya.
Line, face, gambar, teks, grup, komponen,dll adalah contoh dari subkelas sebuah entitas
Entities adalah kelas utama/superclassmod dari Sketchup.active_model
ents = mod.entities
ents = Sketchup.active_model.entities


SketchUp Entity Face
Entity Face

SketchUp Entity Group
Entity Group

SketchUp Entity Component
Entity Component


 Kopdar - 1 : Belajar Bareng Membuat Plugins/Extension
Dari kiri Ke Kanan: Zulfi, Asep, Suwarto & Lukman

4. Dasar Bahasa Ruby

Ruby adalah bahasa pemograman yang bisa dibilang baru seperti halnya phyton. Pembuat scripting ruby ini bernama Yukihiro Matsumoto. Ruby bisa dijalankan di banyak platform, seperti Windows, Mac OS, Linux dan berbagai versi UNIX. .

Yang sudah terbiasa dengan bahasa Java, Phyton, Perl mungkin tidak akan terlalu kesulitan dengan cara penulisan kode skrip(Syntac) Ruby. Lain halnya dengan saya yang baru kadang ngerasa jelimet dengan aturan-aturan cara penulisan.

Jadi tutorial ini saya buat sesederhana & sesingkat mungkin  khusus bagi pemula yang belum pernah mengenal koding & berniat ingin mengenalnya, ya kita mulai ajah mengenal si Ruby ini..heheh. Ini sangat dasar sekali untuk membantu kita memahami konsep dari bahasa Ruby ini.

Baiklah, karena tema kita utamanya adalah Plugin SketchUp. Maka kita akan manfaatkan fitur Ruby Console yang ada di SketchUp. Ikuti langkah berikut ini.
1. Buka SketchUp teman-teman, lalu klik menu Windows > Ruby Console
2. Akan muncul jendela Ruby Console seperti dibawah ini. Bagian yang atas adalah untuk menampilkan output & bagian bawah adalah untuk menginput kode ruby yang akan kita pelajari.
Belajar Bareng Membuat Plugins/Extension SketchUp

3. Coba ketikan kode berikut ini lalu ketik enter di tiap akhir selesai mengetik satu baris kode.

# - Kode Skrip latihan1.rb
puts "Hello Plugin Skp...!!!" 
2 + 8 
2 * 8
8 - 2
angka1 = 2 
angka2 = 8 
Puts angka1 angka2 
ksi = "Komunitas SketchUp Indonesia" 
ksi.upcase
ksi.downcase
ksi.reverse
puts "#{ksi} #{angka1 angka2 }" 

Gimana ? Mudah kan?
Oke lah kalo agak bingung, wajar ajah. Karena baru mulai ngoding... :)
Sekarang coba sy jelasakan secara sederhana saja dahulu beberapa baris kode di atas

Penjelasan Skrip:

  • puts adalah perintah/statemen ruby mengistilahkannya method adalah perintah untuk menampilkan text. Aturannya text yang akan di tampilkan harus diapit tanda petik dua "...." atau petik satu '....'
  • baris kedua s/d ke keempat tentu teman-teman faham kan maksudnya? Ya benar kalkulator gratisk kalo kata si om kasir mah.. :)
  • baris berikutnya (angka1 = 2, angka2 = 8), angka1 &  angka2 disebut variabel. Isi dari variable tersebut berupa data numerik/nomor yaitu 2 & 8
  • tulisan ksi juga disebut variable. Hanya saja isi datanya berupa text/tulisan istilah kodingnya data string
  • upcase, downcase & reverse disebut method juga yang berfungsi untuk merubah format text dari variabel ksi
  • baris terakhir adalah cara menampilkan variabel dalam tipe data string. Simbol pagar # & kurung kurawal { } adalah aturan yang diberikan Ruby agar perintah puts bisa sukses. Variabel musti di tempatkan dalam kurung kurawal. 
Tips. 
  1. Coba blok semua baris kode diatas, copy lalu pastekan di ruby console. Tekan Enter. Apa yang terjadi?
  2. Teman-teman juga bisa membuat kode skrip tersebut dalam text editor. Beri nama dengan extension *.rb (misalnya latihan1.rb) untuk menandai bahwa file tersebut file Ruby.  
  3. Simpan file tersebut ke folder dimana semua plugin sketchup di simpan. Umumnya berada di folder  C:\user\namaUser\appdata\roaming\sketchup\versiSketchUp\plugin (sesuaikan text berwarna merah dengan foldernya)
  4. Kopikan file latihan1.rb ke folder tersebut. Lalu ketik di ruby console load "latihan1.rb" lalu tekan Enter.
  5. Pindahkan/Hapus file latihan1.rb tadi dari folder Plugin SketchUp karena di versi tertentu akan selalu diload saat kita pertama kali membuka SketchUp.
Selamat...!!! Jika skrip kode file latihan1.rb tadi sukses & ga ada error. Anggap saja itu adalah plugin sketchup pertama teman-teman semua...hehehe.

Tidak perlu bingung atau merasa susah dengan aturan2, kode2 diatas, nanti juga akan terbiasa jika sering latihan.

Baiklah sekian dahulu,  selanjutanya di point no 5 dibawah ini, nanti kita akan coba buat plugin sketchUp sungguhannya. Kalo yang ini cuma sekdar mengenalkan bahasa yang digunakan oleh SketchUp dalam membaca sebuah plugin.

5. Dasar Ruby API SketchUp

Kita lanjut pembahasan ini ke yang lebih spesifik, yaitu mengenai API SketchUp. Seperti yang sudah di uraikan di awal pembuka artikel ini, bahwa dengan API SketchUp memungkinkan kita dapat berinteraksi dengan model SketchUp dan aplikasi SketchUp.
Ok, masih tetap di Ruby Console,  coba kita input koding dibawah ini. Boleh satu persatu agar faham, boleh bagian perbagian.

# - Kode Skrip latihan2.rb
# - Bagian-1 (Deklarasi Variable)
mod = Sketchup.active_model
ent = mod.active_entities
panjang = 8.m
lebar = 10.m
tinggi = 8.m

# - Bagian-2 (Deklarasi Variable Array pts)
pts = []
pts[0] = [0, 0, 0]
pts[1] = [panjang, 0, 0]
pts[2] = [panjang, lebar, 0]
pts[3] = [0, lebar, 0]

# - Bagian-3 (Method membuat objek "BatuBata")
face = ent.add_face(pts)  # bentuk face sesuai data array
face.reverse!             # balikan face
face.pushpull tinggi      # pushpull face sesuai variabel tinggi
grp = ent.add_group face.all_connected # buat jadi add_group    
grp.name = "BatuBata"         # berinama grup
vol = grp.volume/61023.74409473229 # deteksi volume grup
vol = vol.round(0)        # pembulatan desimal
view = Sketchup.active_model.active_view
new_view = view.zoom_extents # menzoom extend lembar kerja

# - Bagian-4 (menampilkan info objek BatuBata)
harga = 100
total = vol * harga
UI.messagebox "Material : #{grp.name}\n Dimensi(m): #{panjang} x #{lebar} x #{tinggi}\n Volume : #{vol}m3\n Harga/m3 : Rp#{harga}\n Total harga : Rp#{total}"

Penjelasan Skrip:

  • Bagian-1 (Deklarasi Variable). Pada bagian skrip ini fungsinya adalah untuk mendeklarikan variabel utama. Variabel mod = Sketchup.active_model dan dan variabel ent = mod.active_entities disebut variable dalam bentuk kelas/class. Merupakan objek kelas paling tinggi (super class). Semua skrip berupa modeling atau apapun pasti harus mendeklarasikan kedua variabel ini. 

  • Bagian-2 (Deklarasi Variable Array pts) Seperti kita fahami, bahwa untuk membentu 1 buah garis, maka butuh minimal 2 titik untuk menghubungkannya. Dalam skrip ini kita menyiapkan variable pts dalam bentuk array untuk menyimpan beberapa koordinat titik pada lembar kerja sketchUp. Begitu juga untuk membentuk sebuah bidang/face, minimal kita membutuhkan 3 buah garis yang saling terhubung/ketemu untuk membentuk sebuah objek gambar dasar segitiga. Segi empat butuh 4 garis, dst. Dalam array urutan index selalu dimulai dari 0, bukan dari satu. Contoh pts[0] = [0,0,0]. Maksudnya adalah variabel indek array pts ke-1 ([0]) kita isikan dengan data koordinat 3 dimensi [x,y,z] atau [0,0,0]. dst.

  • Bagian-3 (Method membuat objek "BatuBata") Pada bagian ini, awalnya skrip akan bekerja membentuk sebuah face sesuai data dalam variable array pts. Kemudian baris skrip selanjutnya mempushpusll, mengrup,dst. Perhatikan semua keterangan(komen) dengan tag/simbol pagar # yang ada di sebelah kanan tiap baris koding. 

  • Bagian-4 (menampilkan info objek BatuBata) Ini skrip tambahan buat teman-teman yang selalu meminta saya untuk membuat plugin RAB... hehehe. Mungkin dasarnya bisa kita awali dari baris kode skrip bagian ini. Fungsinya adalah memberikan data-data harga/m3 & mengkalkulasi total harga sesuai dengan volume objek yang sudah dibuat.
Simpan file latihan2.rb ini di folder tertentu. Misalnya Anda buat folder di C:\LatihanRuby.
Maka coba buka SketchUp, lalu buka Ruby Console. Ketikan load "C:\LatihanRuby\latihan2.rb" Enter.

Kembali saya ucapkan selamat, karena Anda telah berhasil membuat  plugin. Silahkan latihan dengan mengubah-ubah variabel agar Anda lebih faham mengenai Ruby API ini.

6. Kupas Tuntas Plugin SketchUp KSI Ruang Otomatis

Ini adalah plugin pertama yang saya buat. Plugin ini terinspirasi dari plugin 1001bit & Dibac. Awalnya kodingnya saya jadikan satu dengan jumlah baris kode lebih dari 3300 baris. Namun kemudian karena ada beberapa teman tertarik untuk mengetahui & memperlajari cara membuatnya. maka saya buat menjadi beberapa file agar terstruktur dalam memahaminya.

Yang di tulis dibawah adalah hanya pokok & gambaran dasar dari struktur umum plugin. Kupas tuntas sebenarnya akan saya tulis langsung pada skrip berupa komen-komen penting.

Tujuan & Fitur Plugin

Tujuan saya membuat plugin ini adalah untuk membantu teman-teman yang tergabung dalam Komunitas SketchUp Indonesia, umumnya untuk pengguna SketchUp lainnya untuk mempermudah dalam menyiapkan sebuah ruang Arsitektektur. Bagi bagi mereka yang fokus di interior, maupun mereka yang fokus di exterior. Padahal faktanya saya adalah bergerak di bidang modeling alat uji. Walau pernah kuliah di bidang arsitektur, namun nasib membawanya ke rancang bangun alat uji. hehehe

Fitur Plugin:
1. Membuat ruang secara otomatis lengkap dengan lubang kusen
2. Membuat kustom dinding yang dapat di atur baik tinggi, tebal & model kusennya
3. Grid Ruang, membuat ruangan berdasarkan grid. Grid didapat dari panjang dinding yang di gambar
4. Menyediakan komponen dalam bentuk dasar sebagai pelengkap. Sperti atap, kusen, teras, sampai ke furniture
5. Dan fitur-fitur lainnya. :)

1. File "ncep_plugin.rb"

File ini berfungsi sebagai loader yang umum digunakan oleh para developer plugin sketchup. Fungsi utamanya meregistrasi plugin ke SketchUp. Berisi koding skrip dari kelas extension.rb
File ini harus di tempatkan dalam folder Plugin seperti sudah dijelaskan sebelumnya. 
Silahkan download & pelajari kodingnya. Penjelasan ada dalam setiap baris perintah.

2. Folder "..\Plugins\ncep_studio"

Folder ini adalah folder utama yang biasa di pakai apabila plugin memiliki bagian skrip lainnya atau memiliki ikon, UI/GU, petunjuk dalam format html, dll. Ini penting agar Folder aseli tempat plugin di simpan bawaan SketchUp tetap rapih & terstruktur. Biasanya para developer memilih nama-nama unik dalam penamaan  Folder ini. Begitu juga dalam penamaan file. Agar plugin yang satu & lainnya tidak terjadi konflik dalam meload. Contoh seperti su_sandbox, ams_library, tt_Lib2, Fredo6_curviloft, dll. Begitu juga penamaan plugin & folder saya ini, saya awali dengan ncep_ sebagi ciri unik agar tidak bentrok dengan plugin lain yang mungkin setipe. Juga ... ya.. itung-itung promosi...hehehe.

3. File "ncep_ro.rb"

Ini adalah skrip utama plugin, disimpan dalam folder ...\Plugins\ncep_studio. Isinya sejumlah variable, konstanta, method/fungsi untuk membuat geometri. Didalamnya juga berisi penanganan kelas-kelas lainnya dari API SketchUp. Utamanya adalah kelas Tool, View & UI. 
Kelas tool berisi fungsi-fungsi khusus untuk penanganan mouse & keyboard. 

Kelas View berfungsi untuk penaganan viel lembar kerja. Seperti titik pointer mouse, penetuan titik-titik koordinat proses drawing line, circle, dll. Ini yang menurut saya tersulit karena harus memahami kelas-kelas lain, karena satu sama lain saling keterkaitan.

Kelas UI cukup mudah difahami & tidak terlalu sulit. Karena fungsinya hanya untuk mendisain antar muka, dialog box agar user lebih mudah dalam menggunakan plugin ini. Saya lebih memilih UI Dialog standar ketimbang dalam format UI Web dialog dalam format Html. Ini untuk menjaga agar plugin bisa digunakan di semua versi & sistem windows. Karena format Web dialog cenderung dipengaruhi oleh software IE & komponen lainnya. Seringkali tampilan UI Web dialog tidak menampilkan view yang semestinya. Juga karena dipengaruh CSS atau script lainnya seperti JSon atau lainnya. Tapi jika mereka yang menguasai skrip Web Disain dengan bahasa skripnya tentu tidak akan kesulitan untuk membuat UI dalam format html atau web dialog.

Sebenarnya masih banyak kelas-kelas turunan lainnya yang di gunakan dalam plugin ini. Tapi intinya fokus tersulit adalah dalam kelas-kelas tersebut di atas.

4. File "ncep_mntb.rb" 

Skrip file ini berisi method/fungsi untuk penanganan toolbar & menu bar. Juga untuk mengarahkan aksi dari ikon, menu saat user mengklik atau mengaksesnya. Cukup sederhana & mudah difahami bagi anda yang sudah pernah membuat kode skrip.

5. File "ncep_lis.rb"

Sebenarnya ini rahasia sih, karena rencana saya jika plugin ini telah sukses banyak di gunakan di versi SketchUp & juga bisa kompatibel dengan OS Windos lainnya, rencana ingin menjual atau mencari investor lain untuk membentuk teamword dalam mengembangkan ke plugin yang lebih canggih. Ya.. emang mimpi sih, tapi saya optimis. Jika mereka para developer plugin handal yang udah lama pengalaman ajah bisa, kenapa kita tidak bisa. Walau terlambat, ga masalah daripada tidak melakukan sama sekali...wkwkwk

File skrip ini adalah berisi utilitas untuk penanganan lisensi plugin & fungsi security pengaman plugin dari tindakan kopas, crack & hack. Isinya disamping tehnik mengenskripsi data, juga berisi beberapa fungsi lainnya yang menentukan. Ini juga merupakan bagian koding tersulit karena berpengaruh ke sistem OS juga. Kendala saat ini adalah selalu di cegah oleh level sekuritas windows & terkadang terdeteksi virus oleh sebagian anti virus. Padahal niat saya bukan mau membuat virus... hahaha.

6. File-File pendukung

File-file pendukung ini banyak macamnya dari mulai file icon, text, html, dll. Tujuannya adalah agar plugin lebih interaktif & menarik.

Nah. Itu saja sebagi gambaran awal plugin KSI Ruang Otomatis


7. Cara Bikin SkecthuBOT

Kopdar - 1 : Belajar Bareng Membuat Plugins/Extension SketchUp Kopdar - 1 : Belajar Bareng Membuat Plugins/Extension SketchUp Reviewed by NCEP Studio on Maret 24, 2019 Rating: 5

Tidak ada komentar:

Diberdayakan oleh Blogger.