actually, just clicking in a script editor tab will trigger the
outliner to update.

I was trying to getAttr the visiblitiy of the nodes under LOD, and
just clicking in the scriptEditor tab prompted the outliner to change.

On Mon, Aug 16, 2010 at 4:20 PM, John Creson <johncre...@gmail.com> wrote:
> I think you may be looking at a lag in the Outliner, and not in Maya really.
>
> I published up Distance and Active Level and the transforms that will
> trip the trigger easily and I'm watching real-time interaction with
> the distance and the Active level trigger.
> The Outliner doesn't catch up until I re-select the asset in the outliner.
>
> On Mon, Aug 16, 2010 at 4:07 PM, susanta <susant...@gmail.com> wrote:
>> humm no that callback is because of attribute editor though it is not
>> displayed...
>> ...but outliner update lag is still there if there is no 3d view for
>> LOD. Wondering what else
>> can be possible so LOD node can listen to world matrix change?
>>
>> On Aug 16, 8:01 pm, susanta <susant...@gmail.com> wrote:
>>> You are right with all of these. But I'm more expermenting with it ...
>>> I'm speculating even not camera shape or any node's world matrix, LOD
>>> visibility trigger mechanism actually
>>> driven by some other kind of callback mechanism or somthing else? Ok
>>> let me tell you my observation...
>>>
>>> when you change camera distance by changing camera position you can
>>> see on outliner, node's under LOD group grayed out or
>>> highlighted based on current distance immidiately after distance
>>> change. In my test I'm using a locator, whose worldmatrix connected
>>> with LOD group node's
>>> camera matrix...so by changing locator's location I can change LOD
>>> visibility. changes are very quick and works for othographic or
>>> perspective view. But if I now turn off all 3d view...(i have a single
>>> viewport and now I'm displaying timeline in that area) If I change
>>> locator's position through channel editor...from outliner I can see
>>> LOD Group not immdiately changing LOD visibility for chilld
>>> nodes....untill i change my selection state or back to 3d view. Even
>>> if i move my time slider or manually call dgeval on locator node still
>>> no feeback for LOD visibility change on outliner. Is it some kind of
>>> viewport refresh or selection change or etc callback driving it
>>> instead of DAG tree evalution?
>>>
>>> Another observation, if my locator's is not connected with
>>> loadgroup...it does not print this after changing its transform
>>> through channel editor but it does when connected to a LOD group
>>>
>>> AEupdateWorldPivots locator1;
>>> AEupdateLocalPivots locator1;
>>> AEupdateLocalPivots locator1;
>>>
>>> ...so I'm assuming this is the function they are using as
>>> callback...i.e. external querry to noode's world matrix via MEL? I
>>> hope I'm wrong.
>>>
>>> global proc AEupdateWorldPivots ( string $nodeName )
>>> {
>>>         float $worldRotatePivot[] = `xform -ws -q -rp $nodeName`;
>>>         float $worldScalePivot[] = `xform -ws -q -sp $nodeName`;
>>>
>>>         floatField -e -v $worldRotatePivot[0] wrpX;
>>>         floatField -e -v $worldRotatePivot[1] wrpY;
>>>         floatField -e -v $worldRotatePivot[2] wrpZ;
>>>
>>>         floatField -e -v $worldScalePivot[0] wspX;
>>>         floatField -e -v $worldScalePivot[1] wspY;
>>>         floatField -e -v $worldScalePivot[2] wspZ;
>>>
>>> }
>>>
>>> On Aug 16, 6:10 pm, John Creson <johncre...@gmail.com> wrote:
>>>
>>> > LOD global world space attribute gives the LOD group node the ability
>>> > to be driven by changes to its parents' transforms.
>>>
>>> > Before, or when the world space attribute is unchecked, the parent
>>> > transformations did not affect the visibility of the LOD group
>>> > children.   Now that it is there and checked on, changes to its parent
>>> > nodes cause updates to the distance attribute which is calculated
>>> > between the LOD node and the camera.  (it acts as you would expect it
>>> > to act, and more importantly, the transformations of its parents
>>> > (which could be joints, why not?)  trigger the update to its distance
>>> > attribute)
>>>
>>> > On Mon, Aug 16, 2010 at 6:36 AM, susanta <susant...@gmail.com> wrote:
>>> > > "Have you set up the node's attribute dependencies?"
>>>
>>> > > ...are you talking about overriding setDependentsDirty function?
>>>
>>> > > "...but the LOD group node has a global world space attribute..."
>>> > > Seems like in case of LOD group node driving force is camera shape
>>> > > node's worldMatrix (connected to cameraMatrix of LOD group node)...as
>>> > > you said global world space attribute is telling how to calculate
>>> > > node's LOD feature and affects child node's visibility...so in this
>>> > > case really transform nodes's world matrix (in my case Bone) is not
>>> > > the driving force for DAG evalution. It is interesting though..thanks.
>>>
>>> > > On Aug 14, 9:08 am, John Creson <johncre...@gmail.com> wrote:
>>> > >> I'm not sure if this might help, but the LOD group node has a global
>>> > >> world space attribute, that when checked on allows the distance to the
>>> > >> connected camera to be calculated correctly even if the LOD group node
>>> > >> is parented to other transformed transforms.
>>>
>>> > >> On Fri, Aug 13, 2010 at 6:43 PM, Judah Baron <judah.ba...@gmail.com> 
>>> > >> wrote:
>>> > >> > Have you set up the node's attribute dependencies?
>>>
>>> > >> > On Fri, Aug 13, 2010 at 9:04 AM, susanta <susant...@gmail.com> wrote:
>>>
>>> > >> >> No luck :(. tried to connect currentChainLength (which is the output
>>> > >> >> of my node) to another locator's tx plug....only get evalution once
>>> > >> >> (opening file, or selecting my node in Attribute editor....i.e.
>>> > >> >> external querry to worldMatrix plug)...here is the rough test 
>>> > >> >> code...
>>>
>>> > >> >> class ChainLengthCalc(omx.MPxNode):
>>> > >> >>        kPluginNodeTypeName = "ChainLengthCalc"
>>> > >> >>        kPluginNodeTypeId = om.MTypeId(0xd1a9257)
>>> > >> >>        evalIndex = 0
>>> > >> >>        def __init__(self):
>>> > >> >>            omx.MPxNode.__init__(self)
>>>
>>> > >> >>        def compute(self,plug,dataBlock):
>>> > >> >>            if plug == self.currentChainLength:
>>> > >> >>                        print "hello"
>>> > >> >>                        ChainLengthCalc.evalIndex+=1
>>> > >> >>                        currentLength = ChainLengthCalc.evalIndex
>>> > >> >>                        ##self._getChainLength()
>>> > >> >>                        outHandle =
>>> > >> >> dataBlock.outputValue(self.currentChainLength)
>>> > >> >>                        
>>> > >> >> outHandle.setMDistance(om.MDistance(currentLength))
>>> > >> >>                        dataBlock.setClean(self.currentChainLength)
>>> > >> >>                        return om.MStatus.kSuccess
>>> > >> >>            return m.MStatus.kUnknownParameter
>>>
>>> > >> >>       �...@classmethod
>>> > >> >>        def creator(cls):
>>> > >> >>            return omx.asMPxPtr( cls() )
>>>
>>> > >> >>       �...@classmethod
>>> > >> >>        def initialize(cls):
>>> > >> >>            unitAttr = om.MFnUnitAttribute()
>>> > >> >>            cls.currentChainLength = \
>>> > >> >>            unitAttr.create("currentChainLength", "ccl",
>>> > >> >>                        om.MFnUnitAttribute.kDistance, 0)
>>> > >> >>            unitAttr.setKeyable(False)
>>> > >> >>            unitAttr.setWritable(True)
>>> > >> >>            cls.addAttribute(cls.currentChainLength)
>>>
>>> > >> >>            mAttr = om.MFnMatrixAttribute()
>>> > >> >>            cls.drivingBoneMatrixAttr = mAttr.create( 
>>> > >> >> "drivingBoneMatrix",
>>> > >> >> "dbm")
>>> > >> >>            mAttr.setStorable(True)
>>> > >> >>            mAttr.setWritable(True)
>>> > >> >>            cls.addAttribute(cls.drivingBoneMatrixAttr)
>>> > >> >>            cls.attributeAffects(cls.drivingBoneMatrixAttr,
>>> > >> >> cls.currentChainLength)
>>>
>>> > >> >> On Aug 13, 4:20 pm, Chad Vernon <chadver...@gmail.com> wrote:
>>> > >> >> > You need to have the output connected to something or else Maya 
>>> > >> >> > will
>>> > >> >> > never
>>> > >> >> > request a node compute.  It only calculates nodes when it needs 
>>> > >> >> > to.  You
>>> > >> >> > should be able to just use the worldMatrix just fine.
>>>
>>> > >> >> > Chad
>>>
>>> > >> >> > On Fri, Aug 13, 2010 at 8:11 AM, susanta <susant...@gmail.com> 
>>> > >> >> > wrote:
>>> > >> >> > > "worldmatrix is only updated on demand.."
>>>
>>> > >> >> > > Yea, That also I have speculated...
>>>
>>> > >> >> > > "Try instead hooking up to matrix and parentmatrix plugs of the 
>>> > >> >> > > node
>>> > >> >> > > whose worldmatrix you want. They should get pushed to your node 
>>> > >> >> > > and
>>> > >> >> > > then you can just concatenate them in compute() to get the world
>>> > >> >> > > matrix."
>>>
>>> > >> >> > > My problem is little bit typical :). this is not about 
>>> > >> >> > > computing world
>>> > >> >> > > matrix...say like, my node is connected in this order: NodeA -> 
>>> > >> >> > > NodeB-
>>> > >> >> > > > NodeC->.......-> NodeD->MyNode. Now what I want to achieve, 
>>> > >> >> > > > instaed
>>> > >> >> > > of using any callback system use DAG system, to evalute myNode's
>>> > >> >> > > compute block while any of the node in the hierarchy is changing
>>> > >> >> > > trasform matrix. Now if I plugin parentmatrix / matrix from 
>>> > >> >> > > nodeD, I
>>> > >> >> > > think if nodeD is affected then only it will evalute 
>>> > >> >> > > mynode....but not
>>> > >> >> > > for other nodes up in the hierarchy. So to find a clean way I 
>>> > >> >> > > have
>>> > >> >> > > tried to use worldMatrix of NodeD (as worldMatrix change is 
>>> > >> >> > > true for
>>> > >> >> > > change in any depth) as I not want to plug with all other node's
>>> > >> >> > > matrix in the hierarchy. But seems like I'm wrong :(...need to 
>>> > >> >> > > find a
>>> > >> >> > > better solution. Any way thanks man.
>>>
>>> > >> >> > > On Aug 13, 3:10 pm, Adam Mechtley <adam.mecht...@gmail.com> 
>>> > >> >> > > wrote:
>>> > >> >> > > > Iirc, worldmatrix is only updated on demand (eg, you getAttr 
>>> > >> >> > > > on it
>>> > >> >> > > > or on
>>> > >> >> > > a plug that depends on it). Try instead hooking up to matrix and
>>> > >> >> > > parentmatrix plugs of the node whose worldmatrix you want. They 
>>> > >> >> > > should
>>> > >> >> > > get
>>> > >> >> > > pushed to your node and then you can just concatenate them in
>>> > >> >> > > compute() to
>>> > >> >> > > get the world matrix.
>>>
>>> > >> >> > > > Sent from my iPhone
>>>
>>> > >> >> > > > On Aug 13, 2010, at 6:44, susanta <susant...@gmail.com> wrote:
>>>
>>> > >> >> > > > > Hi Guys,
>>>
>>> > >> >> > > > > I'm trying to create a custom MPX node, which is doing some
>>> > >> >> > > > > calculation based on a bone's scale in a hierarchy. So far 
>>> > >> >> > > > > my
>>> > >> >> > > > > compute
>>> > >> >> > > > > code is working properly. I want to run the compute block 
>>> > >> >> > > > > always
>>> > >> >> > > > > if
>>> > >> >> > > > > the any bone in the hierarchy got new world matrix (either 
>>> > >> >> > > > > by pos,
>>> > >> >> > > > > rot
>>> > >> >> > > > > or scale change). But what I'm getting here, worldmatrix 
>>> > >> >> > > > > attribute
>>> > >> >> > > > > of
>>> > >> >> > > > > a node not getting changed always untill you querry from 
>>> > >> >> > > > > outside
>>> > >> >> > > > > (eg.
>>> > >> >> > > > > through MEL). Below is my test code....I have a input 
>>> > >> >> > > > > matrix plug
>>> > >> >> > > > > which connected to worlMatrix of a tranformNode. I expect 
>>> > >> >> > > > > when I'm
>>> > >> >> > > > > scaling or moving position of the transform node...compute 
>>> > >> >> > > > > block
>>> > >> >> > > > > of my
>>> > >> >> > > > > node should
>>>
>>> ...
>>>
>>> read more »
>>
>> --
>> http://groups.google.com/group/python_inside_maya
>

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to