just to note, and I guess quite obvious for someone, I found same as MPlug setFloat etc... is setAttr in MEL, so the alternative of growing arrays in a command is just using a script, if speed is not big issue. Most of computation is then done in a node`s compute or deform method.
On Oct 30, 12:38 am, Jakub Krompolc <[email protected]> wrote: > so... I found that one problem was in initialize function, because I > was adding my float Values array attribute and also adding it as child > of compound. But that still didn`t solve problem with adding values to > array plug in the command. I wonder if it`s really possible to expand > array attribute of a node using command. All examples do it in a node. > The tricky thing is when you want to add array only when user needs > it. > I have another version which works, and the command only increments > one number and triggers the node, where if number is higher than > current List size the deform method will add new Values array. But it > just seems like a hack... > > On Oct 29, 11:05 pm, Jakub Krompolc <[email protected]> wrote: > > > > > now it doesn`t error but still not adding all element, only 1 it > > seems: > > > valuesPlug = listPlug.child(listCount) > > > for i in range(100): > > elem = valuesPlug.elementByLogicalIndex(i) > > elem.setFloat(0.1) > > > arraySize = valuesPlug. numElements() > > > after adding value to 100 different indexes of new array I thought the > > size would be 100 as well, but I`m getting 1. > > > On Oct 29, 10:44 pm, Jakub Krompolc <[email protected]> wrote: > > > > actually I tried this before and now I`m getting same problem, that > > > the plug doesn`t exist. this is part of the code > > > > listPlug = OpenMaya.MPlug( nodeObject, node.list ) > > > listCount = listPlug.numElements() > > > valuesPlug = listPlug.elementByLogicalIndex(listCount) > > > > for i in range(100): > > > elem = valuesPlug.elementByLogicalIndex(i) > > > > after this I get error, so it seems the plug wasn`t actually created. > > > The list is compound attribute which is set as array and values is > > > child attribute, also array, but holds array of floats. Maybe I should > > > select the child plug not by elementByLogicalIndex but using child() > > > function. And use elementByLogicalIndex only for single value > > > elements... > > > > On Oct 29, 1:22 am, Jakub Krompolc <[email protected]> wrote: > > > > > thanks. I didn`t get to work on this again yet, but just went through > > > > this PDF ILM skinning from A.Maiolo, couple of helpful notes about > > > > array > > > > attributeshttp://www.angelfire.com/ex2/andreamaiolo/skinningAtILM.pdf > > > > > On Oct 28, 4:19 pm, Chad Vernon <[email protected]> wrote: > > > > > > No, you cannot use arrayDataBuilder outside of the compute or deform > > > > > methods. > > > > > > On Wed, Oct 28, 2009 at 7:09 AM, Jakub Krompolc > > > > > <[email protected]>wrote: > > > > > > > thanks Chad! will try that. do you think I should still use > > > > > > buildDataAttribute? I think this wouldn`t make sense anymore... > > > > > > > Jakub > > > > > > > On Oct 28, 3:18 am, Chad Vernon <[email protected]> wrote: > > > > > > > MPlug.elementByLogicalIndex(n) will automatically create a plug > > > > > > > at that > > > > > > > index if one doesn't exist there. So your command just needs to > > > > > > > find the > > > > > > > next available index. MPlug.getExistingArrayAttributeIndices will > > > > > > > give > > > > > > you > > > > > > > the current indices. > > > > > > > > -Chad > > > > > > > > On Tue, Oct 27, 2009 at 7:03 PM, Jakub Krompolc < > > > > > > [email protected]>wrote: > > > > > > > > > I`m trying to use arrayDataBuilder in the command, but it seems > > > > > > > > I > > > > > > > > can`t do that without dataBlock. And as documentation says "The > > > > > > > > data > > > > > > > > block is only valid during the compute method of the depend > > > > > > > > node", it > > > > > > > > looks like you can`t generate array attributes using command > > > > > > > > itself, > > > > > > > > even the node specified... > > > > > > > > I have made a trigger system (using int value on the node that > > > > > > > > command > > > > > > > > changes) to make array in "deform time" of node and this works, > > > > > > > > but > > > > > > > > there`s no clean way described for this. skin algorithm example > > > > > > > > (Writing Creature Deformers DVD) and weighstNode.cpp both don`t > > > > > > > > show > > > > > > > > how you technique how user can add his new array. Say, if you`re > > > > > > > > making a blendShape with multiple targets. > > > > > > > > Anyone knows more elegant way? --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
