Monday, April 18, 2016

Memanfaatkan Adobe Illustrator Scripts sederhana untuk membuat gambar kotak



Hi para surfers, perkenalkan nama saya Junaidi. Jujur aja nih, ini blog pertama saya, haha. kalo ada kata-kata yang gak berkenan di hati or ada yang salah dengan penulisan blog saya, saya haturkan maaf terlebih dahulu ya. Dalam kesempatan kali ini saya mau mencoba men-sharing sedikit (men-sharing yah, gak mengajari..yang kesinggung saya mohon maaf, sekiranya gak berkenan lewati page ini aja, jangan dikomentari ;) peace) pengetahuan saya tentang Adobe Illustrator Script. Bagi saya ini sangat berguna banget script di Illustrator, mengapa? Stay tune ya.

Adobe Illustrator merupakan software pendukung pembuatan design grafis. Berbagai design dapat dibuat dengan menggunakan AI, limitnya hanya penggunanya. Nah, yang akan saya bahas disini adalah penggunaannya dalam ruang lingkup packaging.

Pernahkah kamu sebagai designer ataupun pre-press officer (repro house) atau siapapun kamu mendapatkan job/order packaging yang beragam? (ya pernah la, pake nanya lagee). Nah, biasanya tuh kalo cust-nya beda-beda pastinya design yang diinginkan pun beda-beda. Dan yang tentunya lagi ukuran kotak/packaging yang diinginkan pun berbeda-beda. Yang akan saya bahas disini penggambaran diecut kotak ini.

Biasanya neh kotak yang ada itu, contoh.. kotak tutup atas dan bawah (atau kalo saya sebut biasanya non-crash lock, istilah sendiri neh, hehe), dah itu ada kotak crash lock.. kotak bottom lock sendiri dibagi 2 lagi (ribet yah?), ada kotak bottom lock manual, dan auto-bottom lock yang sudah dilem di pabrik terlebih dahulu dan penggunaannya nanti bisa langsung lock dengan sendiri saat kotak dibuka.

Nah, kebayang gak kalo kita dapat puluhan order kotak yang semuanya tidak sama ukurannya. Mending kalo kotak yang dipake itu cuma kotak non-bottom lock (nih ma gampang, 5 menit selesai 1 gambar). Kalo kotaknya bottom lock, apalagi auto-bottom lock. Wuih, kalo pengalaman saya tuh butuh setidaknya 10-30 menit (belum lagi ngukur-ngukur persentase bottomnya), untuk membuat diecut kotak tersebut (kalo gak percaya tanya aja para bro designer atau bro prepress). Apalagi kalo udah dikejar deadline, pasti sangat ribet kalo mau buat kotak sebanyak itu dalam waktu singkat.
Naaaah, sekarang saya mau sharing neh pembuatan kotak tersebut secara flash alias express, tinggal enter p x l x t, jadi deh kotaknya..hehe. Gak percaya? Ikutin sampe abis ye..hehe.

Lalu apa itu Adobe Illustrator Scripts, AI Scripts adalah fasilitas yang dibuat oleh Adobe untuk para pengguna untuk membuat program/scripts nya sendiri untuk mendukung pekerjaannya di Adobe Illustrator, seperti bahasa program yang lainnya, tetapi ini hanya dapat digunakan di Adobe Illustrator saja.

So, AI script (extensionnya .jsx) sendiri bisa kita create melalui “Adobe Extended Scripts Toolkit”, biasanya kalo kita install Creative suites nih program dah ada. Pemakaian AdobeEST ini sendiri mensupport beberapa script mulai dari Ms Visual Basic, JavaScript, AppleScript maupun ExtendScript. Nah, kita mulai ya pembuatan programnya.

Banyak AI Script di web-web/blog-blog yang di-sharing para ahli Illustrator yang sangat berguna untuk mendukung pekerjaan kita sebagai designer ataupun prepres. It’s just a “Google” away. Jika file scriptnya sudah ada, cara memanggilnya adalah sebagai berikut
1. dari menu file-scripts-other scripts-[lalu cari file scripts di folder yang kita simpan]


2. tempatkan file scripts di folder default scripts Adobe Illustrator,
"C:\Program Files (x86)\Adobe\Adobe Illustrator CS5\Presets\en_US\Scripts" untuk cs5, atau
"C:\Program Files\Adobe\Adobe Illustrator CC (64 Bit)\Presets\en_US\Scripts" untuk AI cc,


dan nantinya di "menu file-scripts" sudah ada script-nya

Script yang saya jelaskan disini adalah script untuk membuat kotak non-bottom lock (bisa dikembangkan untuk kotak-kotak lainnya, misalnya sarung tangan, paperbag, kotak bottom lock, auto-bottom lock, dlsb). Biasanya program dimulai dari pengenalan-pengenalan variable yang akan kita gunakan. Misalnya

var panjang = 140;
var lebar = 50;
var tinggi = 80;
var var_Integer;

oh..ya, warna-warna yang saya berikan di script ini sesuai dengan apa yang nantinya akan muncul di AdobeEST, supaya ntar gak bingung..dan warna-warna tersebut masing-masing memiliki arti tersendiri, misalnya biru adalah perintah, hijau adalah nilai, merah adalah string, dsb
Perintah diatas untuk mengenalkan AdobeEST “panjang”, “lebar”, “tinggi”. Sesuai apa yang saya isi nilai masing-masing berarti “panjang nilainya 140, lebar 50, dan tinggi 80”, nah nilai ini masih dalam points ya. Sebagaimana yang kita ketahui 1 point itu bernilai 0.3527 (sekian-sekian)mm. Jadi kalo kita mau pake di dalam metric, kita mesti convert angka nilai ini ke metric, caranya kalikan aja dengan “2.834645731787465”

mp = 2.834645731787465 (sampe sini dlu ya penjelasan conversi metric, saya jelaskan lebih jauh nanti di bawah)

mp diatas nggak diberikan “var” sebagaimana saya berikan di atas untuk panjang karena, mp nantinya hanya sebagai media kalkulasi, jadi nggak perlu diberi “var. Nah.. setelah itu kita buat program untuk penginputan dari AI kedalam program yang kita buat ini.

var_Integer = panjang;
var_Integer = prompt ("Masukkan ukuran panjang", var_Integer);
{panjang = Math.floor (var_Integer)*mp}
var_Integer = lebar;
var_Integer = prompt ("Masukkan ukuran lebar", var_Integer);
{lebar = Math.floor (var_Integer)*mp}
var_Integer = tinggi;
var_Integer = prompt ("Masukkan ukuran tinggi", var_Integer);
{tinggi = Math.floor (var_Integer)*mp}

dengan membuat script “prompt” diatas, nantinya pada saat program dijalankan, program akan memanggil “input box” kedalam AI, gambarnya seperti di bawah ini, dan karena kita buat script “prompt”-nya 3x, maka input box juga akan muncul 3x (note. Sesuai dengan nilai yang kita berikan pada awal untuk panjang adalah “140”, maka di-input box defaultnya adalah “140”). Script ini pun akan merekam nilai yang kita masukkan nantinya di-input box
 
okay, sesuai janji saya tadi mengenai conversi metric...script “{panjang = Math.floor (var_Integer)*mp}” kan terdapat “mp” kan? Nah script inilah yang akan menyesuaikan inputan kita menjadi metric nantinya.

Okay, lanjut ya. Kalo mau tanya ntar di kolom komentar aja(ya iyalah, mangnya bisa nanya sekarang? Hahahah). 

app.activeDocument.defaultStroked = true;
app.activeDocument.defaultStrokeWidth = 0.1*mp;
app.activeDocument.defaultFilled = false;
var utama = app.activeDocument.layers[0].groupItems.add()

3 baris script di atas untuk membuat default fill dan stroke yang kita kehendaki, dalam kasus ini berarti fill empty, strokenya 0.1mm. untuk baris selanjutnya adalah mengenalkan variable “utama” merupakan single group yang ditempatkan pada layer yang kita pilih (dalam kasus ini adalah layer 0 atau layer pertama pada AI).

Setelah mengenalkan kepada AI Script variable-variable utama yang kita perlukan akan tetapi tidak menutup kemungkinan untuk menambahkan variable-variable lainnya yang mungkin akan kita butuhkan untuk pendukung pembuatan kotak nantinya. Dan untuk selanjutnya adalah membuat script untuk menggambar kotak yang kita inginkan.

//Bagian utama kotak
utama.pathItems.rectangle (0, 0, panjang, tinggi);
utama.pathItems.rectangle (0, panjang, lebar, tinggi);
utama.pathItems.rectangle (0, panjang+lebar, panjang, tinggi);
utama.pathItems.rectangle (0, (panjang*2)+lebar, lebar-(0.5*mp), tinggi);

untuk baris paling atas bukanlah script karena diawali dengan “//”, ini hanya sebagai note untuk scripter (pembuat script) mengingat script apa yang sedang dikerjakannya. Untuk 4 baris selanjutnya, sebagaimana kita bisa artikan bahwa script diperuntukkan menggambar rectangle.

gambar diatas penjelasan pengertian pengisian nilai dari rectangle

Gambar diatas merupakan penjelasan bagaimana script rectangle dijalankan.

//tutup atas
var ta = utama.pathItems.add();
with(ta.pathPoints.add()){
                anchor = [12*mp,lebar-2*mp];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [10*mp,lebar];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [0,lebar];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [0,0];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [panjang,0];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [panjang,lebar];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [panjang-10*mp,lebar];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
with(ta.pathPoints.add()){
                anchor = [panjang-12*mp,lebar-2*mp];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}

Hasilnya seperti gambar diatas

//garis tulang tutup atas
var line = utama.pathItems.add();
line.Stroked = true;
line.setEntirePath ([[11*mp,lebar-1*mp],[panjang-11*mp,lebar-1*mp]]);

 
hasilnya garis merah tersebut

//colokan tutup atas
var cta = utama.pathItems.add();
with(cta.pathPoints.add()){
                anchor = [0,lebar];
                rightDirection = [anchor[0],anchor[1]+8*mp];
                leftDirection = [anchor[0],anchor[1]];
}
with(cta.pathPoints.add()){
                anchor = [5.5*mp,lebar+15*mp];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0]-2.3*mp,anchor[1]-2.7*mp];
}
with(cta.pathPoints.add()){
                anchor = [panjang-5.5*mp,lebar+15*mp];
                rightDirection = [anchor[0]+2.3*mp,anchor[1]-2.7*mp];
                leftDirection = [anchor[0],anchor[1]];
}
with(cta.pathPoints.add()){
                anchor = [panjang,lebar];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]+8*mp];
}


hasilnya seperti gambar di atas, perhatikan nomor 1&2 terdapat tangan dari curve yang sudah di-scriptkan sebelumnya

Scripts diatas merupakan script untuk menggambar line yang nyambung satu sama lain (seperti halnya saat kita memakai “pen tool” di AI). Sedikit penjelasan mengenai scripts diatas
With(ta.pathPoints.add()){
                anchor = [posisi x, posisi y];
                rightDirection = [anchor[0],anchor[1]];
                leftDirection = [anchor[0],anchor[1]];
}
Anchor merupakan posisi titik yang kita berikan pada saat menggambar sebuah path
rightDirection merupakan tangan curve sebelah kanan dari titik tsb, anchor[0] merupakan posisi x dari tangan tersebut, dan anchor[1] merupakan posisi y-nya
leftDirection merupakan tangan curve sebelah kiri dari titik tsb, anchor[0] merupakan posisi x dari tangan tersebut, dan anchor[1] merupakan posisi y-nya
[anchor[0],anchor[1]] merupakan posisi default tangan dari titik tersebut, jika tangan tersebut tidak dimanfaatkan, akan tetapi jika hendak memanfaatkannya, tinggal tambahkan jarak dari titik tersebut, misalnya
with(cta.pathPoints.add()){
                anchor = [panjang-5.5*mp,lebar+15*mp];
                rightDirection = [anchor[0]+2.3*mp,anchor[1]-2.7*mp];
                leftDirection = [anchor[0],anchor[1]];
}
script diatas berarti tangan curve sebelah kanan diarahkan ke posisi x +2.3 mm (ingat bahwa posisi x jika positif itu ke kanan), dan posisi y nya diarahkan -2.7mm (ingat bahwa posisi y jika minus berarti ke bawah)

note. Seperti yang diketahui bahwa Adobe Illustrator sejak CS5 sudah mengganti orientasi posisi y menjadi minus ke atas, dan positif ke bawah. Sejauh ini script yang saya buat tidak terpengaruh oleh orientasi tersebut. Yang terpengaruh hanya posisi awal pembuatan kotaknya saja.

Untuk script selanjutnya hanya pengulangan script diatas dengan hanya mengubah posisi sesuai dengan kotak yang diinginkan.

Done, script untuk buat kotak non-bottom lock akhirnya selesai.
untuk script lengkapnya download file .jsx nya disini.

Yes, at last blog pertamaku jadi..hahaha. terimakasih sudah berkunjung, saya harap dapat bermanfaat bagi semua yang mau memanfaatkannya. :)

3 comments: