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