여기서는 connectAttr 로 각도 attribute 를 연결할때의 현상을 알아보자.
// 1. 물체 $a 와 $b 를 만든다.
// $a 에는 angle 이라는 attribute 가 들어갈 것이다. 그 attribute는 // $b 의 rx 를 조절할 것이다.
string $a = CreateSimpleObjUtil_Cube(); // polygon Cube 를 만들어준다.
string $b = CreateSimpleObjUtil_Pipe(); // polygon Pipe 를 만들어준다.
// 2. cube 에 "angle" 이라는 Attribute 를 slider와 함께 추가
// (기본값 0, slider 최소값 0, slider 최대값 360)
NodeUtil_AddAttr_Double_WithSlider $a "angle" 0 0 360;
// 3. connect attribute 한다.
connectAttr -f ($a + ".angle") ($b + ".rx");
이제 이렇게 하면 $a 의 angle 어트리뷰트를 슬라이더로 조절할 때 $b 즉 pipe 가 회전하는 것을 볼 수 있다.
2. unitConversion 노드
이제 다음과 같이 해보자.
connectionInfo -destinationFromSource ($a + ".angle");이렇게 하면 아마 pPipe.rx 가 출력될거라고 예상할 것이다. 하지만 실제로는
// Result: unitConversion1.input //같은 값이 출력된다. 그 이유는 이 값이 angle 값이기 때문이다. (내부적으로 아마 라디안 값으로 변환하는 모양이다) 다른 보통의 attribute 들을 connectAttr 하면 unitConversion 노드 없이 바로 연결된다. 참고로
ls -type unitConversion;를 해보면 모든 unitConversion 노드를 list 해볼 수 있다.
3. disconnect 하는 방법 중간에 unitConversion 노드가 있기 때문에 모든 경우에 disconnectAttr 함수를 쓸수는 없다. 따라서 다음과 같이 해주면
NodeUtil_DisconnectAttr ($a + ".angle") ($b + ".rx");unitConversion 노드가 있는 경우와 없는 경우 모두 connection 이 제대로 끊어진다.
4. Connected 여부 알아내기 중간에 unitConversion 노드가 있는 경우, MEL 에서 기본 제공되는 isConnected 함수를 쓸 경우 connect 되지 않았다고 나온다. 이는 매우 이상하게 느껴질 수 있다 왜냐하면 분명히
- connect -f "A.rot" "B.rx"
- isConnected "A.rot" "B.rx"
No comments:
Post a Comment