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
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 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}
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;
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);
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
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]];
}
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]]);
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];
}
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 = [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
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]];
}
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.
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. :)
file .jsx nya tidak bisa di download Gan
ReplyDeletelink updated
DeletePlease update the link
ReplyDelete