URBAN-GRUNGE AUTOMATION
utomation adalah fitur canggih yang sejak lama banyak diimplementasikan oleh software-software grafis kenamaan, semisal Photoshop, 3D-Max, dan tentu saja CorelDraw. Automation dalam CorelDraw sangat erat kaitannya dengan VBA (Visual Basic for Application) -karena memang- VBA adalah urat nadi teknologi automation.
A
Lalu apa itu automation dan VBA? Serta apa hubungannya dengan desain bergaya urban-grunge? Bab ini akan membeberkannya kepada Anda. Tutorial praktis yang memaparkan konsep desain juga hadir dalam bab ini sebagaimana bab-bab pendahulunya, untuk memperkenalkan kepada Anda beberapa hal berikut ini. •
Konsep automation dengan VBA, fungsi dan keuntungannya dalam proses desain menggunakan CorelDraw X4.
•
Contoh aplikatif 1: automation untuk menciptakan retro circle.
•
Contoh aplikatif 2: automation untuk menciptakan starburst.
7.1 Apa Itu Automation? Persis seperti namanya, automation memberikan kemampuan automasi. Kemampuan ini memungkinkan proses desain yang bersifat repetitif (berulang-ulang) bisa dikerjakan secepat kilat dengan hasil yang akurat. Tidak tanggung-tanggung, kecepatan output desain proses automation boleh dibilang sekejap mata. Sekali klik (Run), desain yang kompleks sekalipun, terwujud sempurna dalam hitungan detik. 141
Dengan automation, hampir semua task desain, seperti menggambar shapes, me-reposisi dan me-resize shapes, mewarnai fill, dan lainlain, dapat dilakukan secara terprogram. Selain itu, automation juga memungkinkan proses desain yang bersifat dinamis karena memberikan interaktivitas bagi user. Dengan kata lain, Anda bisa menciptakan aplikasi mini di dalam workspace software grafis yang bersangkutan. Tentu saja untuk bisa seperti ini, software grafis harus didukung oleh script engine atau bahasa pemrograman tertentu. Nah, di sinilah Visual Basic for Application atau VBA memainkan perannya.
7.2 CorelDraw X4 VBA CorelDraw sendiri telah mengadopsi kemampuan automation sejak tahun 1995 ketika CorelDraw versi 6 pertama kali diluncurkan. Bahasa program yang digunakan ketika itu adalah Corel SCRIPT. Pada tahun 1998, CorelDraw 9 menggandeng Microsoft Visual Basic for Application (VBA) sebagai tokoh sentral di balik layar proses automation. Kendati tidak lagi menyediakan Corel SCRIPT editor, CorelDraw 9 masih menyertakan run-time engine Corel SCRIPT sehingga Corel SCRIPT yang dibuat menggunakan versi CorelDraw klasik tetap bisa berjalan pada versi 9 ke atas. Selanjutnya proses penulisan kode diambil alih oleh Visual Basic Editor yang terintegrasi langsung dengan Shungan kerja (workspace) CorelDraw.
7.2.1 Visual Basic Editor User CorelDraw bisa memanfaatkan fitur automation melalui interface yang disebut Visual Basic Editor (VB Editor). Di sinilah tempat Anda menuliskan script macro, yaitu sekumpulan fungsi dan perintah untuk menjalankan proses automation. Visual Basic Editor bisa diakses di dalam workspace CorelDraw melalui menu Tools Visual Basic Visual Basic Editor, atau bisa juga dengan menekan tombol kombinasi Alt+F11 pada keyboard. 142
Bagi Anda yang familiar dengan pemrograman berorientasi objek menggunakan Visual Basic, sekilas interface VB Editor tak ada bedanya dengan Visual Basic 6.0. Salah satu perbedaan mencolok mungkin terlihat di jendela Project-VBAProject (Gambar 7.1).
Gambar 7.1 Visual Basic Editor.
Pada jendela ini terdapat beberapa project automation yang secara default telah disediakan oleh CorelDraw untuk beberapa keperluan desain. Project-project tersebut tersimpan dalam file GMS (Global Macro Storage) yang biasanya terdapat di direktori X:\Program Files\Corel\CorelDraw Graphics Suite X4\Draw\GMS (di mana X adalah drive tempat Anda menginstal CorelDraw X4). Di antara project (selanjutnya disebut macro) default yang disediakan oleh CorelDraw adalah: •
CalendarWizard.gms: aplikasi VBA yang memungkinkan Anda menciptakan kalender di workspace CorelDraw dalam sekejap. 143
•
FileConverter.gms: aplikasi VBA yang menyediakan fitur konversi format antarfile grafik, seperti konversi dari format .cdr menjadi .jpg, dan lain-lain.
•
GlobalMacros.gms: aplikasi VBA yang berisi 2 buah macro, yaitu CreateColorSwatch yang akan menciptakan daftar nama warna (berikut objek warnanya dalam bentuk rectangle) di dalam workspace CorelDraw, dan PageNumbering yang mampu memberi nomor halaman pada project desain dengan halaman yang banyak, seperti majalah.
Untuk menjalankan macro-macro di atas, Anda tinggal memilihnya di jendela Project-VBAProject, lalu memilih menu Run ` Run Macro, atau bisa juga dengan menekan tombol F5 keyboard.
7.2.2 Automation In Action Baiklah, saatnya melakukan proof of concept atau pembuktian kehebatan automation, agar semua hal yang dibicarakan di atas akan semakin jelas. Sebagai contoh sederhana, kita akan membuat sebuah objek circle yang memiliki warna fill tertentu dan outline dengan ketebalan tertentu pula. Berikut ini langkah-langkahnya. 1. Buat sebuah dokumen baru dengan nama Bulat Bergerigi.cdr. Buka VB Editor (Alt+F11), pada jendela Project-VBAProject klik ganda modul ThisDocument yang ada di bawah VBAProject (Bulat Bergerigi) ` CorelDRAW X4 Objects. Maka jendela ThisDocument (Code) akan muncul sebagai tempat Anda menuliskan script macro. 2. Pada jendela ThisDocument (Code), tuliskan script macro berikut ini. Saya memberikan komentar yang diawali dengan tanda petik agar memudahkan Anda memahami maksud setiap baris kode. Sub BulatGerigi() Dim Sh As Shape Dim Lr As Layer ActiveDocument.Unit = cdrInch Set Lr = ActiveLayer Set Sh = Lr.CreateEllipse2(4.5, 5.5, 1.5) Sh.Outline.SetProperties 0.2, OutlineStyles(1), _
144
CreateCMYKColor(0, 0, 0, 100) Sh.Fill.UniformColor.CMYKAssign 100, 0, 0, 0 End Sub
3. Kini Anda bisa menutup (Close) VB Editor, walaupun sebenarnya tidak harus. Kembali ke workspace CorelDraw, coba jalankan macro tersebut dengan memilih menu Tools ` Macros ` Run Macro. Anda akan dihadapkan dengan sebuah kotak dialog. Pada Macros in, pastikan yang terpilih adalah VBAProject (Bulat Bergerigi), dan pada Macro name pilih BulatGerigi lalu klik tombol Run.
Gambar 7.2 Memilih macro yang akan di-Run.
Pada workspace CorelDraw, sekejap mata Anda akan mendapatkan hasil seperti berikut ini.
Gambar 7.3 Hasil eksekusi macro BulatGerigi().
145
Mari sejenak melihat lebih dalam apa sebenarnya yang terjadi saat baris demi baris kode macro di atas dieksekusi oleh VBA engine. Saat melewati baris kode: Sub BulatGerigi()
VBA segera menciptakan prosedur yang bernama BulatGerigi. Prosedur ini berisi beberapa baris perintah yang diawali: Dim Sh As Shape
Baris kode tersebut memerintahkan VBA engine untuk mendeklarasikan sebuah variabel objek bernama Sh dengan tipe objeknya adalah Shape. Ini berarti Sh nantinya bisa saja berupa rectangle, ellipse (circle), atau shape lainnya. Baris kode selanjutnya mendeklarasikan sebuah variabel bernama Lr dengan tipe Layer. Layer di sini adalah sebuah class yang merepresentasikan layer pada workspace CorelDraw: Dim Lr As Layer
Kemudian unit pengukuran yang akan digunakan adalah inci, ditentukan oleh baris kode: ActiveDocument.Unit = cdrInch
Baris kode selanjutnya menetapkan Lr sebagai layer yang aktif pada workspace CorelDraw. Perlu diingat bahwa proses menggambar shape hanya bisa dilakukan pada layer yang aktif: Set Lr = ActiveLayer
Baris kode berikutnya bekerja persis seperti ketika Anda membuat objek circle (ellipse dengan radius tetap) pada workspace menggunakan Ellipse Tool . Objek Sh yang telah didefinisikan di awal sebagai Shape, ditetapkan jenis shape-nya berupa circle pada layer yang aktif (dalam hal ini Lr): Set Sh = Lr.CreateEllipse2(4.5, 5.5, 1.5)
Yang bertugas membuat circle adalah CreateEllipse2, sebuah method yang berfungsi menciptakan objek ellipse berdasarkan nilainilai pada parameternya. Kita lihat sejenak syntax CreateEllipse2 guna membedah 3 buah parameter utamanya.
146
Catatan: Saya katakan “3 buah parameter utama” karena CreateEllipse2 sebenarnya punya 7 buah parameter, 4 di antaranya bersifat opsional sehingga boleh tidak diisi. Untuk referensi lebih lanjut, silakan melihat CorelDRAW VBA Help (draw_vba.chm) yang ada di Program Files\Corel\CorelDRAW Graphics Suite X4\ Programs. CreateEllipse2(CenterX As Double, CenterY As Double, Radius1 As Double, [Radius2 As Double]) As Shape CenterX
:
Koordinat-x titik pusat ellipse. Nilainya berdasarkan unit pengukuran yang telah ditentukan sebelumnya, dalam hal ini inci (cdrInch).
CenterY
:
Koordinat-y titik pusat ellipse. Nilainya juga berdasarkan unit pengukuran.
Radius1
:
Merupakan jarak dari titik pusat koordinat-x ke circumference (keliling ellipse). Nilainya berdasarkan unit pengukuran.
Radius2
:
Merupakan jarak dari titik pusat koordinat-y ke circumference (keliling ellipse). Nilainya juga berdasarkan unit pengukuran. Parameter ini bersifat opsional, boleh tidak diisi. Jika tidak diisi, ellipse yang tercipta akan memiliki radius yang tetap (sama dengan Radius1), inilah yang akan membentuk circle (objek lingkaran).
Dengan memahami parameter CreateEllipse2 di atas, tentunya Anda tidak kesulitan lagi memahami maksud baris kode ini. Titik pusat circle berada (4.5,5.5) inci dari titik referensi workspace (0,0), dengan jari-jari circle 1.5 inci. Set Sh = Lr.CreateEllipse2(4.5, 5.5, 1.5)
Perjalanan menelusuri macro BulatGerigi() belum selesai. Kini perhatikan baris kode selanjutnya: Sh.Outline.SetProperties 0.2, OutlineStyles(1), _ CreateCMYKColor(0, 0, 0, 100)
147
Kode tersebut akan menciptakan garis tepi (outline) bagi objek circle yang telah dibuat oleh CreateEllipse2 pada baris kode sebelumnya. Yang bertugas untuk ini adalah property Outline dari class Shape (dalam hal ini Sh). Property Outline memiliki method bernama SetProperties, method inilah yang menentukan ketebalan garis tepi sebesar 0.2 inci, dengan jenis garis putus-putus (OutlineStyles = 1), dan warna garis tepi, hitam (CMYK = 0, 0, 0, 100). Catatan: Method SetProperties punya parameter yang banyak, namun semuanya bersifat opsional. Silakan melihat dokumentasinya di CorelDRAW VBA Help. Untuk property Outline, parameter inti SetProperties adalah 3 yang pertama; (1) menentukan ketebalan outline, (2) menentukan jenis outline, (3) menentukan warna outline. Untuk menentukan warna outline, digunakan method CreateCMYKColor milik class Application. Class Application sudah tersedia secara global dalam VBA, jadi tidak perlu dideklarasikan lagi. Namun demikian, sah-sah saja Anda menuliskannya lengkap seperti berikut, hasilnya sama saja. Application.CreateCMYKColor 0, 0, 0, 100
CreateCMYKColor punya 4 buah parameter yang masing-masing merepresentasikan intensitas warna dari 1 sampai 100 untuk Cyan (C), Magenta (M), Yellow (Y), dan Black (K). Sekarang tentunya Anda sudah mengerti mengapa kombinasi nilai 0, 0, 0, 100 menghasilkan warna hitam. Kini kita lihat baris kode terakhir dalam prosedur BulatGerigi(): Sh.Fill.UniformColor.CMYKAssign 100, 0, 0, 0
Kode tersebut memerintahkan CorelDraw untuk mengisi circle, dalam hal ini Sh, dengan warna yang seragam (UniformColor), yaitu cyan (CMYK = 100, 0, 0, 0). Yang memungkinkan hal tersebut adalah method CMYKAssign, salah satu method milik class Color. UniformColor sendiri merupakan salah satu property bertipe Color milik class Fill. Fill adalah class yang merepresentasikan fill atau isi suatu shape.
148
Tip: Manfaatkan kotak dialog Uniform Fill (Shift+F11) untuk melihat langsung warna hasil komposisi nilai CMYK bagi suatu objek shape. Terakhir adalah baris kode: End Sub
yang menutup prosedur BulatGerigi(). Setiap prosedur, wajib diakhiri dengan End Sub.
7.3 Macro #1: Retro Circle Tentunya setelah melewati pembahasan singkat tentang kode macro di atas, Anda sudah mendapatkan gambaran bagaimana memanfaatkan macro VBA untuk menciptakan elemen desain urban-grunge. Ambil contoh elemen yang paling sederhana, yaitu retro circle. Selain paling sederhana, alur penulisan kode macro retro circle tidak jauh berbeda dengan prosedur BulatGerigi() sebelumnya. Namun, sebelum menulis kode macro-nya, kita perlu memetakan skenario pembuatan retro circle dari perspektif desain di atas kanvas CorelDraw: 1. Buat objek circle (circle1) dengan warna (warna1) dan radius tertentu (radius1). 2. Buat objek circle yang baru (circle2), letakkan paling bawah di Object Manager, beri warna berbeda (warna2) dan radius yang lebih besar (radius2). 3. Langkah 1 dan 2 diulangi sebanyak circle yang hendak dibuat. Anda telah mempelajari bagaimana membuat objek circle dengan method CreateEllipse2, demikian pula bagaimana mengisi fill circle dengan warna tertentu menggunakan method CMYKAssign. Adapun cara menempatkan suatu objek shape (Sh) di bawah atau di atas, bisa dengan kode berikut: Sh.OrderToBack ‘memposisikan objek agar berada paling bawah. Sh.OrderToFront ‘memposisikan objek agar berada paling atas.
149
Catatan: Dalam aturan coding VB maupun VBA, penulisan komentar selalu diawali tanda petik (‘). Kode apa pun setelah tanda petik, tidak akan dieksekusi oleh VBA engine.
7.3.1 Kode Macro Retro Circle Berikut ini contoh kode macro untuk menciptakan retro circle. Dibuat sesederhana mungkin dan ditambah sedikit komentar demi memudahkan Anda dalam mempelajarinya. Macro ini terdiri atas dua buah prosedur, RetroCircle(), dan BuatCircle(). Prosedur RetroCircle() akan memanggil prosedur BuatCircle() sebanyak 7 kali guna menghasilkan 7 buah circle dengan radius yang berbeda dengan warna silih berganti hitam-putih. Sub RetroCircle() Dim tpX As Double 'Titik pusat X. Dim tpY As Double 'Titik pusat Y. tpX = 5 tpY = 7 BuatCircle tpX, tpY, 0.5, True 'Radius 0.5 warna hitam. BuatCircle tpX, tpY, 0.75, False 'Radius 0.75 warna putih. BuatCircle tpX, tpY, 1.5, True BuatCircle tpX, tpY, 1.65, False BuatCircle tpX, tpY, 1.75, True BuatCircle tpX, tpY, 1.8, False BuatCircle tpX, tpY, 1.85, True End Sub Sub BuatCircle(TitikPusatX As Double, TitikPusatY As Double, _ Radius As Double, Hitam As Boolean) Dim Lr As Layer Dim Sh As Shape ActiveDocument.Unit = cdrInch Set Lr = ActiveLayer Set Sh = Lr.CreateEllipse2(TitikPusatX, TitikPusatY, Radius) Sh.Outline.SetNoOutline 'Hilangkan garis tepi circle. If Hitam = True Then 'Jika parameter Hitam True, maka 'warna circle hitam. Sh.Fill.UniformColor.CMYKAssign 0, 0, 0, 100 Else 'Jika bernilai False, maka 'warna circle putih. Sh.Fill.UniformColor.CMYKAssign 0, 0, 0, 0 End If Sh.OrderToBack 'Bawa circle ke belakang. End Sub
Berikut ini hasil yang diperoleh setelah prosedur RetroCircle() di-Run (F5 keyboard). 150
Gambar 7.4 Hasil eksekusi prosedur RetroCircle().
7.4 Macro #2: Starburst Tentu Anda setuju dengan saya bahwa menciptakan starburst secara manual, sebagaimana retro circle, adalah pekerjaan yang merepotkan plus menjemukan jika harus melakukannya berulang kali. Di sinilah pentingnya membuat kode macro.
7.4.1 Kode Macro Starburst Kita tahu objek starburst tersusun dari beberapa objek circle bertipe pie yang kesemuanya memiliki titik pusat rotasi yang sama, namun dengan besar sudut rotasi yang berbeda satu sama lain. Oleh karena itu, pada kasus starburst ini, alur skenario pembuatan macro-nya adalah: 1. Tentukan ukuran pie yang akan dibuat. Di sinilah 2 buah parameter CreateEllipse2, StartAngle, dan EndAngle, mengambil peranan. 2. Tentukan jumlah pie yang harus dibuat untuk menyusun starburst. Rumus yang digunakan adalah: Jumlah pie = 360 dibagi ukuran circle pie. 151
3. Tentukan besarnya sudut rotasi pie. 4. Buat circle pie berdasarkan ukuran yang telah ditentukan, lalu beri fill dengan warna tertentu. 5. Pindahkan titik pusat rotasi pie dari tengah ke ujung lancipnya. 6. Putar pie sebesar sudut rotasi yang telah ditentukan. 7. Ulangi proses 3, 4, 5, dan 6 dengan sudut rotasi yang terinkrementasi (semakin membesar secara teratur) sampai jumlah pie yang harus dibuat tercapai. Untuk membuat objek pie, digunakan method CreateEllipse2 dengan melibatkan parameter opsional StartAngle, EndAngle, dan Pie. Mari kembali melihat syntax CreateEllipse2, kini bersama keseluruhan parameternya. CreateEllipse2(CenterX As Double, CenterY As Double, Radius1 As Double, [Radius2 As Double], [StartAngle As Double = 90], [EndAngle As Double = 90], [Pie As Boolean = False]) Empat parameter pertama telah dibahas sebelumnya, tinggal 3 parameter terakhir yang berperan penting dalam proses pembuatan starburst: StartAngle
:
Besarnya sudut sisi ke-1 pie terhadap sumbu horizontal workspace. Nilai default-nya 90. Jika bernilai 0, sisi tersebut akan sejajar sumbu-x (horizontal).
EndAngle
:
Besarnya sudut ke-2 pie terhadap sumbu horizontal workspace. Nilai default-nya juga 90. Parameter ini menentukan ukuran pie yang akan tercipta.
Pie
:
Parameter Boolean yang menentukan apakah CreateEllipse2 akan membuat objek circle ataukah objek pie. Jika True, objek pie yang akan dibuat. Nilai default-nya adalah False.
Dan listing kode berikut ini adalah contoh macro untuk menciptakan starburst. Tuliskan pada module ThisDocument, kemudian coba diRun (F5) lalu pilih prosedur Starburst() untuk melihat hasilnya. 152
Sub Starburst() Dim JumlahPie As Long Dim i As Long Dim UkuranPie As Double Dim RotasiPie As Double UkuranPie = 7.5 RotasiPie = 15 JumlahPie = 360 / RotasiPie i = 0 'Koefisien bantu untuk memperbesar 'nilai SudutRotasiPie secara inkremental. Do 'Mulai proses perulangan (loop). i = i + 1 'Inkrementasi. 'Panggil prosedur BuatPie, dengan nilai 'SudutRotasiPie = i dikali RotasiPie. BuatPie UkuranPie, i * RotasiPie JumlahPie = JumlahPie - 1 'Dekrementasi, 'penanda bahwa 1 pie telah tercipta. Loop Until JumlahPie = 0 'Ulangi loop sampai semua 'pie sukses tercipta. End Sub Sub BuatPie(EndAngle As Double, SudutRotasiPie As Double) Dim Sh As Shape Dim Lr As Layer Dim StartAngle As Double Dim tpX As Double Dim tpY As Double Dim Radius1 As Double Dim Radius2 As Double StartAngle = 0 tpX = 5 'Koordinat-x titik pusat pie. tpY = 6 'Koordinat-y titik pusat pie. Radius1 = 5 'Jarak dari tpX ke circumference pie. Radius2 = -5 'Jarak dari tpY ke circumference pie. ActiveDocument.Unit = cdrInch Set Lr = ActiveLayer Set Sh = Lr.CreateEllipse2(tpX, tpY, Radius1, Radius2, _ StartAngle, EndAngle, True) 'Buat pie. Sh.Outline.SetNoOutline 'Hilangkan garis tepi pie. 'Beri fill warna hitam. Sh.Fill.UniformColor.CMYKAssign 0, 0, 0, 100 'Pindahkan titik pusat rotasi pie dari 'tengah ke bagian lancip. Sh.RotationCenterX = tpX Sh.RotationCenterY = tpY 'Putar pie sebesar nilai SudutRotasiPie. Sh.Rotate SudutRotasiPie End Sub
Macro di atas jika dijalankan akan menghasilkan objek starburst seperti berikut ini pada workspace.
153
Gambar 7.5 Hasil eksekusi macro. (CD\Bab-7\Macro Starburst.cdr)
Anda bisa memodifikasi kode macro di atas untuk menghasilkan objek starburst yang berbeda. Di antara variable-variabel yang bisa Anda modifikasi adalah; UkuranPie, RotasiPie, tpX, dan tpY.
154