You can also do your attribute setup (and establish what you need for the
isVirtual test then just call virtualized = pm.PyNode(newNode) and continue
on from there:


@classmethod
    def _postCreateVirtual(cls, newNode):
        """ This is called before creation, pymel/cmds allowed."""
        newNode.addAttr('version',attributeType='double',defaultValue=1.0)

        virtualized = pm.PyNode(newNode)
        virtualized.customFunction('foobar')


On Mon, Oct 22, 2012 at 9:53 AM, Paul Molodowitch <[email protected]>wrote:

> Ah, I see what you meant now... sorry. I think I forgot myself how the
> virtual node creation process worked... =/
>
> Anyway, yes, you're right 'newNode' will not yet be an instance of your
> new virtual class.  However, you can still call methods of your new class -
> just pass in the node explicitly:
>
> MyVirtualClass.myMethod(newNode, arg1, ...)
>
> However... the *Create stuff are only used when the actual maya node is
> created in the scene - and even then, only when created by using a PyNode -
> ie, MyVirtualClass(name='foo').  If you want to run something everytime an
> instance is created, like a normal __init__... you should still be able to
> just override __init__.  Just make sure that you make it accept *args and
> **kwargs (because you shouldn't make any assumptions about what the
> incoming args/kwargs will be), and make sure you call the super __init__.
>
> - Paul
>
>
> On Fri, Oct 19, 2012 at 2:03 PM, Morgan <[email protected]> wrote:
>
>> Right, all the pymel methods are available, but in that example, if I add
>> a method to CustomJointBase called customMethod and then try to call that
>> within _postCreateVirtual like so:
>>
>> newNode.customMethod()
>>
>> I get an error because I newNode isn't an instance of my new virtual
>> class:
>> # AttributeError: nt.Joint(u'leftLeg') has no attribute or method named
>> 'customMethod' #
>>
>> I can call it just fine once the class has been instanced in another
>> function or script, just not within the node creation methods of the class
>> itself. Is that right?
>>
>>
>> On Saturday, October 20, 2012 8:19:33 AM UTC+13, elrond79 wrote:
>>
>>> Nope, it's an instance of the class, and you can use it exactly as you
>>> would self.  Check the example file at:
>>>
>>> https://github.com/**LumaPictures/pymel/blob/**
>>> master/examples/customClasses.**py<https://github.com/LumaPictures/pymel/blob/master/examples/customClasses.py>
>>>
>>> In it's _postCreateVirtual, it adds an attribute, and calls it's .attr
>>> method...
>>>
>>> - Paul
>>>
>>>
>>> On Fri, Oct 19, 2012 at 12:13 PM, Morgan <[email protected]> wrote:
>>>
>>>> But that new node is different from self because it's just a node, not
>>>> an instance of the class, so although you can act on the node directly, you
>>>> can't call any of the custom methods or set member variables, I don't
>>>> think....
>>>>
>>>>
>>>> On Saturday, October 20, 2012 7:33:39 AM UTC+13, elrond79 wrote:
>>>>>
>>>>> Morgan - though _postCreateVirtual is indeed a classmethod, when it is
>>>>> called by pymel's mechanics, it is always passed in the "newNode" as the
>>>>> first argument (after the classmethod-automatically-**crea**ted 'cls'
>>>>> arg, of course).  So you can use this arg just as you would "self" in a
>>>>> "normal" instance method.
>>>>>
>>>>> - Paul
>>>>>
>>>>  --
>>>> 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
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe

Reply via email to