PDA

View Full Version : transfering attributes using mel


schneller
07-27-2009, 07:23 PM
Hi, I was wondering what the best way was to take an object and transfer its translation and rotation coordinates to another object using MEL.

I had started a script attempting this. The first part where I get the attributes of the selection works, but transfering the attributes does not. Any advice would be appreciated. Thanks!

-----------------------------

//select object
string $newSel[] = `ls -sl`;
print $newSel;

//get attributes
getAttr $newSel.translateX;
getAttr $newSel.translateY;
getAttr $newSel.translateZ;
getAttr $newSel.rotateX;
getAttr $newSel.rotateY;
getAttr $newSel.rotateZ;

//print attributes
print (`getAttr $newSel.translateX` + "\n");
print (`getAttr $newSel.translateY` + "\n");
print (`getAttr $newSel.translateZ` + "\n");
print (`getAttr $newSel.rotateX` + "\n");
print (`getAttr $newSel.rotateY` + "\n");
print (`getAttr $newSel.rotateZ` + "\n");

//declare floats and set them equal to selection attribute values
float $transXvalue = $newSel.translateX;
float $transYvalue = $newSel.translateY;
float $transZvalue = $newSel.translateZ;
float $rotateXvalue = $newSel.rotateX;
float $rotateYvalue = $newSel.rotateY;
float $rotateZvalue = $newSel.rotateZ;

//select object to have translation and rotation coordinates replaced
string $newObj[];
select -add $newObj;
print $newObj;

//set new object attributes to old object
setAttr $newObj.translateX = $transXvalue;
setAttr $newObj.translateY = $transYvalue;
setAttr $newObj.translateZ = $transZvalue;
setAttr $newObj.rotateX = $rotateXvalue;
setAttr $newObj.rotateY = $rotateYvalue;
setAttr $newObj.rotateZ = $rotateZvalue;

//print new object new attributes
print (`getAttr $newObj.translateX` + "\n");
print (`getAttr $newObj.translateY` + "\n");
print (`getAttr $newObj.translateZ` + "\n");
print (`getAttr $newObj.rotateX` + "\n");
print (`getAttr $newObj.rotateY` + "\n");
print (`getAttr $newObj.rotateZ` + "\n");

Buexe
07-27-2009, 07:40 PM
string $newSel[]
This gives you an array or a list of objects. To access the objects in the array, you would need to use the corresponding index, something like this:

string $newSel[] = `ls -l sl`;
float $rx = `getAttr ($newSel[0]+".rotateX")`;
setAttr ($newSel[1]+".rotateX") $rx;

or shorter:

string $newSel[] = `ls -l sl`;
setAttr ($newSel[1]+".rotateX") `getAttr ($newSel[0]+".rotateX")`;

schneller
07-27-2009, 09:58 PM
Buexe:

Thank you for your reply.

I select my two objects, making sure I select them in the right order, but when I run the script, i get this error:

string $newSel[] = `ls -l sl`;

setAttr ($newSel[1]+".rotateX") `getAttr ($newSel[0]+".rotateX")`;
setAttr ($newSel[1]+".rotateY") `getAttr ($newSel[0]+".rotateY")`;
setAttr ($newSel[1]+".rotateZ") `getAttr ($newSel[0]+".rotateZ")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;
// Error: Error reading data element number 1: //

Buexe
07-27-2009, 10:08 PM
oh, I think I missed a dash, please try this:

string $newSel[] = `ls -l -sl`;

setAttr ($newSel[1]+".rotateX") `getAttr ($newSel[0]+".rotateX")`;
setAttr ($newSel[1]+".rotateY") `getAttr ($newSel[0]+".rotateY")`;
setAttr ($newSel[1]+".rotateZ") `getAttr ($newSel[0]+".rotateZ")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;
setAttr ($newSel[1]+".translateX") `getAttr ($newSel[0]+".translateX")`;

CGTalk Moderation
07-27-2009, 10:08 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.