[Maya MEL : Pop the UI]
ลอง Execute จะได้ window ขึ้นมาหนึ่งหน้า คำสั่งหลักที่ใช้คือ window คำสั่งนี้สร้าง window ขึ้นมา และ
ให้ชื่อเก็บไว้ในตัวแปลชื่อ $mainwindow มี option หนึ่งอันคือ –t “Character UI” คือ ให้ชื่อที่จะเขียนลง
ไปแถบบนของ window บรรทัดถัดมาคือ showWindow โดยมา parameter คือ $mainWindow หมายถึง
ให้แสดง window ชื่อที่เก็บในตัวแปล $mainWindow ขึ้นมาบนจอ
สำหรับเครื่องหมาย ` หรือ Grave ที่เห็นในบรรทัดแรกนั้น เป็นการบอกว่า ในนำผลลัพธ์ที่ได้จากประโยคภาย
ในเครื่องหมาย ไปเก็บไว้ที่ตัวแปลด้านซ้าย ซึ่งก็คือ $mainWindowลองเพื่อตัวหนังสือเข้าไปด้วยการใช้คำสั่ง text text "Character UI";
การวาง text ลงไปไม่สามารถวางลงไปได้ทันที เนื่องจาก text ถือเป็น control ชนิดหนึ่ง และ control ทุก อันต้องอยู่ภายใน layoutจึงจำเป็นต้องมีการสร้าง layout อย่างใดอย่างหนึ่งขึ้นมาก่อน เช่น ใช้คำสั่ง columnLayout เป็นต้น จากตัวอย่างมีการเรียกคำสั่ง columnLayout และใช้ option –p $mainwindow หมายถึงให้ layout นี้ขึ้นกับ window ที่ชื่อเก็บไว้ในตัวแปล $mainwindow ที่สร้างขึ้นมาก่อนหน้านี้ ทำให้สามารถใช้พื้นที่ของ window ได้ทั้งหมด และเก็บชื่อของ layout ที่ได้ไว้ในตัวแปลชื่อ $toplayout ถัดมาจึงเป็นคำสั่ง text “Character UI” เป็นผลให้พิมพ์ตัวหนังสือคำว่า Character UI ขึ้นมาบน layout Control อื่นๆที่ใช้งานบ่อยเช่นปุ่ม หรือ button ก็มีการใช้งานง่ายๆเช่น button -l "Set Key"; สร้างปุ่มชื่อ button ขึ้นมาหนึ่งปุ่ม ชื่อ “Set Key” แต่ปุ่มนี้ยังไม่มีคำสั่งในการทำงานใดๆ การใส่คำสั่งลงไป สามารถใส่ลงไปได้โดยการใช้ option –c และตามด้วยคำสั่งที่ต้องการ ซึ่งคำสั่งต้องอยู่ในรูปของ string หรือ ในลักษณะของสายอักษรเท่านั้น เช่นคำสั่ง setKeyframe "charZombieFace.cMouthSmile_translateX"; เป็นคำสั่งที่ใช้ในการ set key ให้กับ character set ที่ชื่อ charZombieFace เนื่องจากคำสั่งมักมีความยาว แบบนี้ จำนิยมสร้าง procedure (หรือ finction) ขึ้นมา เพื่อให้สามารถเรียกใช้คำสั่งได้สั้น เช่นสร้าง procedure proc setkeyzombie () { proc setkeyzombie () { }
ได้ UI ที่มีปุ่มสำหรับ set key ให้กับหน้าของตัวละครที่ชื่อ Zombie จะเห็นได้จากตัวอย่าง เราสามารถเรียก
ใช้งานคำสั่งที่ยาวมากผ่านการสร้าง procedure ได้อย่างง่าย ในขณะเดียวกัน ถ้าคำสั่งมีความยาวไม่มากนัก
ก็สามารถใส่คำสั่งนั้นๆลงไปใน option ได้เลย เช่นตัวอย่างการใช้ check box ต่อไปนี้ คำสั่งแรกที่ option –onc Control อีกแบบที่มีเพิ่มความสะดวกในการใช้งานคือ control slider หรือแถบเลื่อน เพื่อปรับค่า แทนที่การ ตั้งค่าในช่องลองมาดูการใช้งานของ slider $fsikfkrightarm = `floatSliderGrp -s 0.01 -min 0 -max 10 -f 1 -fmn 0 -fmx 10 -label "IkFkBlend
Right Arm"`; –s 0.01 คือบอกความละเอียดในการเลื่อด slider ให้เลื่อนทีละ 0.01 การทำให้ slider ทำงานมีสองลักษณะคือ ทำงานตลอดการเปลี่ยนแปลงค่า หรือเมื่อ เลื่อน slider ก็ทำให้ เปลี่ยนค่าในทันทีที่เลื่อน หรืออีกแบบ เลื่อนจนหยุดเลื่อนแล้วจึงทำงาน ในกรณีนี้ใช้งานกับ character ควรมี การทำงานตลอดเวลาที่มีการเลื่อน ไม่ต้องรอให้หยุดก่อนแล้วจึงทำงาน จะทำให้ การทำงานสะดวกกว่า การ ทำงานแบบนี้ใช้ option –dc สิ่งที่ต้องการให้ทำงานตอนนี้คือเมื่อเลื่อน slider ให้นำค่าใน slider ไปเปลี่ยนแปลงค่าที่ต้องการ เช่นใน ตัวอย่างด้านบน ค่าที่เราต้องการเปลี่ยนคือ IkFkBlend จะเห็นได้ว่า คำสั่งที่ต้องทำงาน ต้องมีการเรียกค่าจาก slider ด้วย การใช้เพียงบรรทัดเดียวจึงยุ่งยากและมักเกิดปัญหาตามมา เนื่องจากต้องมีการเรียกค่าจาก slider แล้ว ตั้งค่าตามค่าที่ได้มา จึงไม่เหมาะที่จะเขียนลงไปโดยตรง ควร เขียนผ่าน procedure เช่นเดียวกับการทำปุ่มที่มีคำสั่งมากกว่า 1 บรรทัด เช่น proc getandsetattr (string $fs, string $objattr) { Procedure มี parameter สองตัวคือ $fs ซึ่งเป็นตัวส่งผ่านชื่อของ slider และ $objattr เป็นตัวส่งผ่านชื่อ ของค่าที่ต้องการเปลี่ยน $val = `floatSliderGrp -q -v $fs`; จากนั้นเรียก procedure โดยเพิ่มเติม option –dc เข้าไปใน slider floatSliderGrp -e -dc "getandsetattr($fsikfkrightarm, "getandsetattr($fsikfkrightarm, \"cWristRealRight.IkFkBlend\")" proc getandsetattr (string $fs, string $objattr) {
layout และ control มีให้ใช้อีกหลายตัว เพื่อการปรับแต่งสำหรับการทำงานที่แตกต่างกัน จากตัวอย่างที่ยกมา น่าจะพอเป็นแนวทางในการศึกษา control และ layout อื่นๆต่อไปได้การสร้าง UI ขึ้นมาใช้งาน เป็นเรื่องที่จำเป็นสำหรับงานเขียน MEL ที่ต้องการนำกลับมาใช้บ่อยเพื่อความ สะดวก หรือ MEL ที่ต้องการให้ผู้ร่วมงานใช้ แทนที่การแก้ MEL เพื่อตั้งค่า ก็สามารถใช้งานผ่าน UI ที่ง่ายและ สะดวกกว่าทดลองนำไปใช้ในงานต่างๆดูครับ ไม่ยากอย่างที่คิด ถ้ามีคำถาม mail มาได้ตลอดเวลาครับ
|
|