linfa
02-17-2011, 01:27 PM
Hi there,
this is my very first thread here. I found plenty of answers on this forum, already, but now I'm stuck with something I really can't figure out.
I couldn't find any ultimate solution to my issue, among threads dealing with similar ones, but please just re-address me to any one which I might have missed.
What I want to get is the following.
For 2 attributes "A" and "B" within a custom MPXLocatorNode "myNode", I'd want them to behave as Maya cameraShape's Angle of View and Focal Length atrributes. That is (let's say A is Focal Length; B is Angle of View):
A is keyable. B is not.
When A or B is modified, the other one changes accordingly. I noticed that A must be the "main" attribute, between the two: while changing A using its slider, B's slider move accordingly, in real-time. Instead, when modifying B with its slider, both A's value field and slider only update when the mouse is released.
Then, I guess the keyable attribute is to be the "main", guiding one (and it is logical indeed).
In my case, what I did is:
A is keyable. B is not.
A affects B, B affects A.
The above were set within the initialize() function.
I have cases implemented for both A and B, in an exactly symmetrical way, within setDependentsDirty() and compute().
Also, within the compute(), I setClean() both A and B, in any case.
As far as I could get until now:
- when I change A's value, I see B updated within the AE in real time, and I see from the output window that the compute() is properly called.
- when, instead, I change B's value, A doesn't update and compute() is not called. If I then call getAttr myNode.A with MEL, then the compute() is properly called and the returned value is correct, but still the AE isn't refreshed. If, after that, I select any other object in the outliner and then select back myNodeShape, only at that time I can see the AE refreshed with the current, correct values.
So, my question splits in two:
1) How do I force the compute() for keyable attribute A?
2) How do I get the AE refreshed after compute() is called?
I hope I was clear enough, and that my question wasn't too dumb (I'm definitely a noob with Maya's API).
Thank you all in advance,
s
this is my very first thread here. I found plenty of answers on this forum, already, but now I'm stuck with something I really can't figure out.
I couldn't find any ultimate solution to my issue, among threads dealing with similar ones, but please just re-address me to any one which I might have missed.
What I want to get is the following.
For 2 attributes "A" and "B" within a custom MPXLocatorNode "myNode", I'd want them to behave as Maya cameraShape's Angle of View and Focal Length atrributes. That is (let's say A is Focal Length; B is Angle of View):
A is keyable. B is not.
When A or B is modified, the other one changes accordingly. I noticed that A must be the "main" attribute, between the two: while changing A using its slider, B's slider move accordingly, in real-time. Instead, when modifying B with its slider, both A's value field and slider only update when the mouse is released.
Then, I guess the keyable attribute is to be the "main", guiding one (and it is logical indeed).
In my case, what I did is:
A is keyable. B is not.
A affects B, B affects A.
The above were set within the initialize() function.
I have cases implemented for both A and B, in an exactly symmetrical way, within setDependentsDirty() and compute().
Also, within the compute(), I setClean() both A and B, in any case.
As far as I could get until now:
- when I change A's value, I see B updated within the AE in real time, and I see from the output window that the compute() is properly called.
- when, instead, I change B's value, A doesn't update and compute() is not called. If I then call getAttr myNode.A with MEL, then the compute() is properly called and the returned value is correct, but still the AE isn't refreshed. If, after that, I select any other object in the outliner and then select back myNodeShape, only at that time I can see the AE refreshed with the current, correct values.
So, my question splits in two:
1) How do I force the compute() for keyable attribute A?
2) How do I get the AE refreshed after compute() is called?
I hope I was clear enough, and that my question wasn't too dumb (I'm definitely a noob with Maya's API).
Thank you all in advance,
s
