Tuesday, April 19, 2016

membuat kotak bottom-lock dengan Adobe Illustrator scripts

Jumpa lagi para surfers, :). di blog sebelumnya saya sudah post tentang pembuatan AI script sederhana yang dapat bermanfaat membuat gambar kotak di AI. nah untuk selanjutnya saya mau bahas mengenai bagaimana pembuatan AI scripts untuk kotak bottom-lock, baik auto maupun manual akan saya bahas disini.

Kotak bottom lock merupakan kotak yang bagian bawahnya mengunci, tujuannya adalah agar dapat menahan beban yang lebih berat. Jenis bottom lock secara general dan yang biasa digunakan ada 2.
yaitu

1. bottom lock manual
aturan-aturan pembuatan kotak bottom lock sendiri tidak lah susah. Banyak versi aturan pembuatanya, akan tetapi secara general tetap sama. Bros dapat searching ke Google untuk mendapatkan aturannya. Saya coba jelaskan dengan pengertian saya sendiri.

 
keterangan :
"A" = jaraknya dapat disesuaikan dengan ukuran kotaknya, ketiga ukuran tersebut digambar harus sama, jika mau diberi kompensasi kertas juga boleh, asal tidak terlalu besar (0.25 - 0.5 mm, tergantung kertas yang dipakai)
gambar terlampir di atas merupakan aturan utama pembuatan kotak bottom lock, untuk jarak-jarak yang lain dapat disesuaikan dengan penggunaannya.

2. auto-bottom Lock
Aturan pembuatan auto-bottom lock ini sedikit lebih rumit daripada bottom lock manual.Perhitungan jaraknya juga harus presisi. agar pada saat kotak dibuka, bottom lock nya dapat mengunci dengan sempurna dan tanpa hambatan (setidaknya hambatanny bukan dari bentuk kotaknya)

untuk gambar dibawah yang dilingkari merah, bagian tersebut sebenarnya tidak ada aturan tetapnya, akan tetapi harus dibuat demikian agar saat melipat dan pengeleman lebih mudah.


Okay, demikian penjelasan singkat mengenai aturan pembuatan bottom-lock. Dengan ketentuan-ketentuan tersebut dapat kita definisikan kedalam scripts sebagai berikut :

untuk script variable-variable, rectangle, dan line dapat dilihat di-post saya sebelumnya di sini, hanya beberapa tambahan script saja yang akan saya bahas di sini.

1. round corner
Untuk membuat round corner sempurna, kita harus mengetahui posisi tangan curve dari titik atau path points tersebut. hitungannya cukup membingungkan dan ada kaitannya dengan rumus matematika untuk menghitung keliling lingkaran (kalo nggak salah, hahaha), untuk itu kita membutuhkan "function" supaya mudah memanggilnya kembali dan tidak berulang-ulang menghitungnya manual.
note function ini saya create sendiri akan tetapi rumusnya diambil dari penggalan script SATO Hiroyuki "circle.js".
Script ini dapat membuat lingkaran dengan jumlah pathPoints yang beragam (biasanya kalo lingkaran yang dibuat di Illustrator hanya 4 pathPoints). Jika circle.js nya tidak dapat dibuka, buka aja melalui AdobeEST.

function round_corner(x){
    var x;
    rc = (x*mp)*4/3*(1-Math.cos((Math.PI/2)/2))/Math.sin(((Math.PI/2)/2));
}



cara pakainya sebagai berikut :
round_corner(5); //jika round corner yg kita kehendaki berjari-jari 5mm
var kotak = utama.pathItems.add();
with (kotak.pathPoints.add()){
        anchor = [0, 0];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0],anchor[1]];
}

with (kotak.pathPoints.add()){
        anchor = [0, 10*mp];
        rightDirection = [anchor[0], anchor[1]+rc];
        leftDirection = [anchor[0],anchor[1]];
}

with (kotak.pathPoints.add()){
        anchor = [5*mp, 15*mp];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0]-rc,anchor[1]];
}

with (kotak.pathPoints.add()){
        anchor = [20*mp, 15*mp];
        rightDirection = [anchor[0]+rc, anchor[1]];
        leftDirection = [anchor[0],anchor[1]];
}

with (kotak.pathPoints.add()){
        anchor = [25*mp, 10*mp];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0],anchor[1]+rc];
}

with (kotak.pathPoints.add()){
        anchor = [25*mp, 0];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0],anchor[1]];
}
 

hasil script di atas adalah seperti gambar dibawah ini, dimana round corner tersebut berjari-jari 5mm sesuai dengan saat "round_corner(5);" dipanggil kembali dengan pemberian nilai 5.
Perlu diperhatikan bahwa function ini hanya memberi nilai kepada "rc" yang akan digunakan untuk menempatkan posisi tangan curve yang akan membuat round corner menjadi smooth pada saat jari-jarinya 5mm. Dan hal tersebut hanya dapat tercapai jika jarak antara kedua titik tersebut adalah 5mm x 5mm. akan tetapi jika jaraknya tidak 5mm x 5mm. maka curvenya tentu juga akan berbeda.
note. function dapat dipanggil berulang-ulang jika dibutuhkan untuk round corner dengan nilai yang berbeda, 

    
Perhatikan gambar dibawah ini jika nilai yang diberi tidak sesuai dengan jaraknya


 
gambar di atas menggunakan function "round_corner(10);" dengan jarak 5mm x 5mm.

2.  script round pada setiap sudut bottom lock.



 
sudut ini berfungsi untuk mencegak kotak mengoyak pada saat ditekuk ataupun pada saat dibuka menjadi kotak. ukurannya tergantung kertas yang dipakai, dan sudut ini hanya digunakan untuk kertas yang berukuran tebal (diatas 400gr).
untuk menghasilkan sudut yang smooth (tidak ada sudut-sudut siku yang nantinya akan menyulitkan pada saat pembuatan diecut manual maupun laser), maka dengan itu script ini diperlukan, scriptnya sebagai berikut :
note. script ini juga penggalan dari script SATO Hiroyuki "circle.js", dimana saya mengambil rumus SATO yang saya revisi sedikit agar menghasilkan lingkaran dengan pathPoint sebanyak 9 titik dalam 1/4 lingkaran.

mp = 2.834645731787465;

app.activeDocument.defaultStroked = true;
app.activeDocument.defaultStrokeWidth = 0.1*mp;
app.activeDocument.defaultFilled = false;

var utama = app.activeDocument.layers[0].testgambar.groupItems.add()

var loopx = -Math.sin(Math.PI/(2*(4/3)))*(Math.cos(Math.PI/(2*(4/3)))*(0.8*mp));
var loopy = -10 + (-Math.cos(Math.PI/(2*(4/3)))*(Math.cos(Math.PI/(2*(4/3)))*(0.8*mp))) + ((0.8*mp)/2);
var handle_length = ((0.8*mp) / 100 ) * 50 * 4/3 * (1- Math.cos(Math.PI /24)) / Math.sin(Math.PI / 24);
var handle = Math.PI/4;
var loopakhirx = 0;
var loopakhiry = 0;
var pslb1 = 0;

var tst = utama.pathItems.add();
with(tst.pathPoints.add()){
        anchor = [-2*mp, -5*mp];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0],anchor[1]];
    }

for (i=0;i<9;i++){   
    with(tst.pathPoints.add()){
        anchor = [loopx, loopy];
        rightDirection = [anchor[0]+(Math.sin(handle)*handle_length), anchor[1]+(Math.cos(handle)*handle_length)];
        leftDirection = [anchor[0]-(Math.sin(handle)*handle_length),anchor[1]-(Math.cos(handle)*handle_length)];
    }
    loopakhirx = loopx;
    loopakhiry = loopy;
    loopx = loopx + (Math.sin((Math.PI/24)+handle)*((Math.sin(Math.PI/24))*((0.8*mp))));
    loopy = loopy + (Math.cos((Math.PI/24)+handle)*((Math.sin(Math.PI/24))*((0.8*mp))));   
    handle = handle + Math.PI/24*2;
    pslb1 = loopx;
}
with(tst.pathPoints.add()){
        anchor = [1*mp, -6*mp];
        rightDirection = [anchor[0], anchor[1]];
        leftDirection = [anchor[0],anchor[1]];
    }


Penerapan script diatas bisa beragam, tergantung posisi round tersebut diperlukan. Demikian penambahan script yang diperlukan untuk membuat kotak bottom lock. script untuk bottom lock dapat di download dengan link di bawah ini.

untuk melihat hasil pembuatan script bisa check link youtube berikut ini.


Download.

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. :)