Maya API 에서 outRotate 값을 array attribute 로 만들어 주려면 compound array attribute 를 활용하면 된다.
initialize(){
...
MFnUnitAttribute uAttrFn;
MFnCompoundAttribute cAttrFn;
aOutRotateX = uAttrFn.create("outRotateX", "orx", MFnUnitattribute::kAngle, 0.0);
addAttribute(aOutRotateX);
aOutRotateY = uAttrFn.create("outRotateY", "ory", MFnUnitattribute::kAngle, 0.0);
addAttribute(aOutRotateY);
aOutRotateZ = uAttrFn.create("outRotateZ", "orz", MFnUnitattribute::kAngle, 0.0);
addAttribute(aOutRotateZ);
aOutRotateArr = cAttrFn.create("outRotateArr", "orarr");
cAttrFn.addChild(aoutRotateX);
cAttrFn.addChild(aoutRotateY);
cAttrFn.addChild(aoutRotateZ);
cAttrFn.setArray(true);
cAttrFn.setUsesArrayDataBuilder(true);
addAttribute(aOutRotateArr);
...
}
compute(){
...
MArrayDataHandle outRotateHndArr = data.outputArrayValue(aOutRotateArr);
MarrayDataBuilder outRotateBldArr = outRotateHndArr.builder();
unsigned int nOutRotate = (int)outRotateHndArr.elementCount();
for (unsigned int i=0 ; i<nOutRotate < i++){
MDataHandle outHandle = outRotateBldArr.addElement(i);
outHandle.set3Double(outRotArr[i][0], outRotArr[i][1], outRotArr[i][2]);
}
outRotateHndArr.set(outRotateBldArr);
outRotateHndArr.setAllClean();
...
}
그런데, 여기에서 Rotate 를 set 하는 value 가 angle 임에 주목해야 한다.
현 재 작성한 node 에서 vector 와 vector 사이의 사잇각을 rotateTo() 를 사용해서 MQuaternion 으로 찾고 이를 다시 MEulerRotation 으로 변환, MVector 에 저장한 다음 outRotate Attribute 에 set 해 주었다.
그런데 이 때 log 를 찍어보면 MEulerRotation 의 x,y,z 값과, 이를
MVector에 저장한 다음 찍히는 x,y,z 값이 달랐는데, 이 MVector 를 outRotate 에 set 해 보면 Maya
에는 MVector 에 찍히는 값이 아니라 MEulerRotation에 찍히는 값이 나온다.
아마도 라디안 계산을 하는 것으로 보이는데 자세한 사항은 향후 수정바람