"It is being more selective about how often, and how deeply it needs to evaluate the DG"
You are right ... so I rechek the code again and guess what...I have got a solution for my problem :)...in my case I'm using node's world matrix ( connected to drivingBoneMatrix of my node ) only to drive compute block when any node in the hierarchy changing its transform. I never actually used the incoming matrix value as I have no need of that value for my rest of the calulation I want to perform. But seems that is the trick....it doesn't matter whether I need it or not but if I try to get the value from input matrix attr of my nodes inside compute block from MDatablock object that will give me desired result....So seems just adding only this line in compute block will solve the issue....and now getting desired result. data.inputValue(drivingBoneMatrixAttr); may be a better & cleaner way possible...may be i no need to do it at all...please let me know. Thanks everyone... On Mon, Aug 16, 2010 at 9:25 PM, John Creson <johncre...@gmail.com> wrote: > 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 -- http://groups.google.com/group/python_inside_maya