MEL How-To #106 | ||
| ||
How do I find the type of an anonymous MEL UI control?The "objectTypeUI" command may be used to query the type of a MEL UI control. objectTypeUI AEnodeNameHeaderLayout; // Result: formLayout // objectTypeUI directKeyTool; // Result: toolButton // objectTypeUI bdeOutOfRangeColor; // Result: canvas // Watch out, tho'. It can throw you a change-up when querying items from Maya's custom control groups - e.g. a "radioButtonGrp" or "attrFieldSliderGrp."
string $ca[] = `layout -q -ca columnLayout12`;
// Result: polyObjsAffectedRadio separator5 polyVerticesDisplayCheck
separator6 polyEdgeDisplayRadio borderEdgeHiliteDisplayCheck
borderEdgeSizeSlider separator7 polyFacetDisplayCheck
separator8 polyItemDisplayCheck normalSizeSlider
polyUVDisplayCheck separator9 colorShadedDisplayCheck
colorMaterialPopup materialBlendPopup separator10
backfaceCullPopup //
for ( $c in $ca )
{
print ( $c + ": " + (`objectTypeUI $c`) + "\n" );
}
Result (formatted for easy reading):
polyObjsAffectedRadio: rowGroupLayout
separator5: separator
polyVerticesDisplayCheck: rowGroupLayout
separator6: separator
polyEdgeDisplayRadio: rowGroupLayout
borderEdgeHiliteDisplayCheck: rowGroupLayout
borderEdgeSizeSlider: rowGroupLayout
separator7: separator
polyFacetDisplayCheck: rowGroupLayout
separator8: separator
polyItemDisplayCheck: rowGroupLayout
normalSizeSlider: rowGroupLayout
polyUVDisplayCheck: rowGroupLayout
separator9: separator
colorShadedDisplayCheck: rowGroupLayout
colorMaterialPopup: rowGroupLayout
materialBlendPopup: rowGroupLayout
separator10: separator
backfaceCullPopup: rowGroupLayout
Now extend the query into a... rowGroupLayout? Wazzat? Well, it's a pretty good clue that this is a layout of some sort; perhaps we can generalize and again use the "layout" command. string $ca[] = `layout -q -ca polyVerticesDisplayCheck`; // Result: label check1 check2 check3 // (Incidentally, querying via "rowLayout" works here, too.) string $ca[] = `rowLayout -q -ca polyVerticesDisplayCheck`; // Result: label check1 check2 check3 //
for ( $c in $ca )
{
print ( $c + ": " + (`objectTypeUI $c`) + "\n" );
};
Results: label: staticText check1: checkBox check2: checkBox check3: checkBox And now what? The "checkBox" controls are all well and good, but "staticText?" It's clear you'll have to back up a step and be able to recognize this type of layout is actually a checkBoxGrp: checkBoxGrp -q -label polyVerticesDisplayCheck; // Result: Vertices // checkBoxGrp -q -value1 polyVerticesDisplayCheck; // Result: 1 // checkBoxGrp -q -value2 polyVerticesDisplayCheck; // Result: 1 // checkBoxGrp -q -value3 polyVerticesDisplayCheck; // Result: 1 // checkBoxGrp -q -value4 polyVerticesDisplayCheck; // Error: line 1: Object not found: check4 // Oops.. you'll also have to take care to consult the number of children before you query willy-nilly (since you cannot query the '-numberOfCheckBoxes' flag). Or how about this one from the Attribute Editor:
string $ca[] = `layout -q -ca columnLayout3`;
// Result: attrFieldSliderGrp1 formLayout52 attrFieldSliderGrp2
formLayout53 attrFieldSliderGrp3 formLayout54
attrFieldSliderGrp4 formLayout55 attrFieldSliderGrp5
formLayout56 attrFieldSliderGrp6 //
for ( $c in $ca )
{
print ( $c + ": " + (`objectTypeUI $c`) + "\n" );
};
Results:
attrFieldSliderGrp1: rowGroupLayout
formLayout52: formLayout
attrFieldSliderGrp2: rowGroupLayout
formLayout53: formLayout
attrFieldSliderGrp3: rowGroupLayout
formLayout54: formLayout
attrFieldSliderGrp4: rowGroupLayout
formLayout55: formLayout
attrFieldSliderGrp5: rowGroupLayout
formLayout56: formLayout
attrFieldSliderGrp6: rowGroupLayout
string $ca[] = `layout -q -ca attrFieldSliderGrp1`;
// Result: AFGlabel AFGfield //
for ( $c in $ca )
{
print ( $c + ": " + (`objectTypeUI $c`) + "\n" );
};
AFGlabel: exprStaticText AFGfield: exprFloatField Hmmm.. that doesn't help. Again, back up and recognize "AFGlabel" and "AFGfield" as controls within an attrFieldSliderGrp: attrFieldSliderGrp -q -label attrFieldSliderGrp1; // Result: Max Triangles // attrFieldSliderGrp -q -at attrFieldSliderGrp1; // Result: pCubeShape1.maxTriangles //In other words, in order to query the properties of Maya's built-in control groups, you'll need to devise some sort of logic to be able to recognize a layout's type by its children. Remember, you can always assert whether a control (or layout) is, or isn't, a presumed type by using an '-exists' query: radioButtonGrp -q -exists polyVerticesDisplayCheck; // Result: 0 // rowLayout -q -exists polyVerticesDisplayCheck; // Result: 1 // checkBoxGrp -q -exists polyVerticesDisplayCheck; // Result: 1 // Related How-To's19 Feb 2005 | ||
| Copyright ©2006 by Bryan Ewert, maya@ewertb.com Maya is a Registered Trademark of Autodesk (formerly Alias) |