Right. It depends on the indended use for this node: if there will be some sharing of data, then passing the data, or a reference to the data, throught the dg makes sense.
On Thu, Jun 7, 2012 at 4:31 PM, cedric bazillou <[email protected]>wrote: > You are right Judah, the other node is not mandatory: it was just a > personal preference: separating data processing( noise point ) from drawing > ( the locator ).If you duplicate your locator you dont need to compute > several time your point list( when you need the same point list of course > ). In my case it was easier to stick to the regular maya workflow( data > flows from one node to another ) > I would also use a MVectorArray initialized with your self.pointCount > value but its just my way of doing things. > > Le jeudi 7 juin 2012 23:11:44 UTC+2, Judah Baron a écrit : > >> You don't need connect another node to pull the data from the plug and >> trigger compute. It sounds like you are on the right track with the query >> in draw. You can either use a real attribute, or create a dummy that is >> used solely for the purpose of triggering compute. You then need to make >> sure your attribute dependency is set up properly with attributeAffects, or >> setDependentsDirty. Once you've done this, pulling the plug's value from >> within draw will dirty the plug, triggering compute. You'll need to do this >> early in draw, obviously - befor you draw anything, for the change to take >> effect. >> >> There is a good sample here: >> http://code.google.com/p/**mayaprogramming/source/browse/** >> trunk/locator/GrassLocator.**cpp?r=4<http://code.google.com/p/mayaprogramming/source/browse/trunk/locator/GrassLocator.cpp?r=4> >> >> Good luck, >> -Judah >> >> >> On Thursday, June 7, 2012, cedric bazillou wrote: >> >>> Hello, >>> (lets call you Nero... ) >>> >>> I think you can explain why your compute is not triggered: the >>> dependency graph in maya is not informed that your output attribute needs >>> to be update: you have nothing connected to it , right? >>> Nothing original but how about writing a node to compute your pointList >>> and plug it to your locator that will only draw from a >>> kPointArray/kVectorArray input attribute? I have play with this idea and it >>> works: http://forums.cgsociety.org/**showpost.php?p=7280472&** >>> postcount=14<http://forums.cgsociety.org/showpost.php?p=7280472&postcount=14> >>> . >>> >>> >>> Le mardi 5 juin 2012 18:35:15 UTC+2, WhileRomeBurns a écrit : >>>> >>>> So basically I've got a python node called *simpleLocator* with an >>>> attribute called *pointCount *(type *kInt*) which is used to generate >>>> some random points. These points can be passed out as an array with the >>>> attribute *outPoints *(type *kDoubleArray *for this example). I've >>>> setup *attributeAffects*() so that outPoints depends on pointCount, so >>>> it should update if the user edits the number of points. This node needs to >>>> draw the points every frame with OpenGL as well, but only compute as >>>> needed. So far so good. Here's my example code (also attached to this >>>> post), stripped to the bare essentials and it almost works: >>>> >>>> http://hastebin.com/**vixiyaruda**.py<http://hastebin.com/vixiyaruda.py> >>>> >>>> >>>> When compute() is called though, plug never equals aOutPoints. Ever, >>>> ever. >>>> >>>> def compute( self, plug, data ): >>>> if plug == simpleLocator.aOutPoints: >>>> print( 'aOutPoints needs to be computed, but we never get >>>> here...' ) >>>> return om.MStatus.kSuccess >>>> else: >>>> return om.MStatus.kUnknownParameter >>>> >>>> >>>> What's normal practice here? Should I just query my >>>> simpleLocator.aPointCount every time draw is called and only >>>> call generatePoints() if the value of aPointCount has been changed? Should >>>> I derive from a node other than MPxLocator and implement my own draw >>>> method? Does MPxLocator behave different in C++? Any help, any insight >>>> would be greatly appreciated. Thanks. >>>> >>>> -shawn >>>> PS- If you're curious, the real node is generating blue noise for >>>> thousands of points and is fairly expensive to calculate. >>>> >>> -- >>> view archives: >>> http://groups.google.com/**group/python_inside_maya<http://groups.google.com/group/python_inside_maya> >>> change your subscription settings: http://groups.google.com/** >>> group/python_inside_maya/**subscribe<http://groups.google.com/group/python_inside_maya/subscribe> >>> >> -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
