25 January 2007

Modifying shift+RMB marking menus

Marking menu adalah salah satu diantara fitur di maya yg sangat berguna dalam meningkatkan workflow kerja. Marking menu dapat dibuat sendiri di Marking menu editor, yg terletak di window > settings/preferences > marking menu editor.

Pada maya versi 7 dan keatas, ada sebuah fitur yang dinamakan context marking menus, dimana marking menus tersebut dapat berubah sesuai dengan kondisi yang ditemukan. Misalnya pada scene yang kosong, shift+RMB pada viewport akan muncul marking menus yg berisi command utk membuat cube, sphere, dll. Bila ada object yg di seleksi, maka shift+RMB akan muncul marking menus yg berhubungan dengan object tersebut, misalnya split polygon atau sculpt polygon tool. Apabila dalam object tersebut, kita pilih edge, atau vertex, atau face, dan kita shift+RMB lagi, maka marking menu akan muncul lagi dengan command yg berbeda. Fitur ini sangat berguna, karena dengan demikian kita telah menghemat puluhan keyboard shortcut menjadi sebuah shortcut, yaitu shift+RMB.

Namun fitur ini terbatas, karena kita tidak dapat melakukan perubahan pada shift+RMB melalui marking menus editor yg terdapat di maya. Satu2 nya cara ialah mencari dan memodifkasi script asli yg terdapat di dalam folder installasi maya. Oleh karena itu, mari kita bedah script yang terletak pada C:\Program Files\Alias\Maya8.0\scripts\others , cari script yg dimulai dengan context*.mel ( bisa dilakukan dengan menggunakan search).

Coba kita amati, semua commandnya selalu dimulai dengan contextPolyTools(Default, Edge, Face, Object, Vertex)MM. Dari sini kita sudah tau bahwa nama dari masing2 tugasnya ialah membuat command marking menus. contextPolyToolsMM.mel ialah induk dari semua context marking menus, dimana fungsinya ialah utk mengidentifikasikan jenis object/sub-object yang terseleksi, kemudian memunculkan marking menusnya.

Agar lebih jelas, buka mel tersebut, dan lihatlah commandnya, lalu test di maya. Hal ini lebih mudah dimengerti daripada dijelasin disini :P

Lalu, bagaimana cara memodifikasinya? Cara yang paling gampang ialah dengan membuat marking menus sendiri pada marking menus editor di maya, kemudian di save. Maka di dalam my documents/maya8.0/prefs/markingMenus akan muncul satu marking menus tambahan, sesuai dengan nama yang disave sebelumnya di marking menus editor. Buka mel tersebut dengan text editor, copy semua perintahnya, kemudian buka context marking menus yang ingin diubah, sehingga pada akhirnya formatnya menjadi contoh:

global proc contextPolyToolsObjectMM()
{
/*Paste command tersebut ke sini dan buang apa yang ada sebelumnya*/
}

Selanjutnya, terserah anda... Bisa overwrite filenya, tapi saya lebih merekomendasikan utk di save di my documents/maya8.0/scripts karena lebih aman dan mudah di organized. Script ini tidak akan bentrok dengan file aslinya, karena Maya akan men-source ulang semua scripts yg ada di users scripts directory, dan apabila namanya sama, maka script tersebut akan mengganti isi script yg telah di-source sebelumnya di program files/alias/8.0/scripts

Dengan melakukan sedikit pencarian dan experimen, kita juga bisa menambah context marking menus pada nurbs, subD, joint, animation, dll. Kita juga bisa menggunakan ctrl+shift+RMB, Namun saya belum menemukan alasan menggunakannya, karena shift+RMB dan marking menus yg diassign ke tombol sudah lebih dari cukup utk menyimpan command tersebut. Tapi bukan berarti saya membatasi, apabila anda menemukannya, silahkan berbagi :)

17 January 2007

Partial edge loop/edge ring selection

Di maya 7 dan ke atas, sudah ada fitur edge loop dan edge ring, namun hal yang paling simpel, seperti partial loop belum juga di sediakan secara default. Hal ini membuat saya kadang lebih suka menggunakan OMToolBox, namun kejelekannya ialah karena berupa mel, maka eksekusinya lebih lama.

Agar lebih jelas mengenai partial loop dan partial ring. Lihat gambar di bawah.






Dengan menggunakan sedikit script, kita bisa menggabungkan command dari maya.

Save command di bawah ini dengan nama : polySelectBetween.mel



global proc polySelectBetween(string $method)

{

string $edges[] = `getEdges`;

int $size = `size $edges`;



if ($size == 1)

{

string $buffer[];

tokenize $edges[0] "[]" $buffer;

string $cmd = "polySelect -";

$cmd += $method; $cmd += " ";

$cmd += $buffer[1]; eval($cmd);

}



else if ($size > 1)

{

string $buffer[]; $method = $method + "Path";

tokenize $edges[0] "[]" $buffer;

string $cmd = "polySelect -";

$cmd += $method; $cmd += " ";

$cmd += $buffer[1];

tokenize $edges[1] "[]" $buffer;

$cmd += " ";

$cmd += $buffer[1];

eval($cmd);

}

}




Taroh di user script folder (My Documents\maya8.0\scripts\), source script, kemudian utk melakukan partial loop, type
polySelectBetween("edgeLoop")


sedangkan untuk partial ring, type
polySelectBetween("edgeRing")