You left out the _isVirtual method on your Mib_amb_occlusion class.
If this is not in the example that came with your version of pymel,
apologies... the current example has it, and looks like this:
# make sure Mayatomr plugin is loaded or the Mib_amb_occlusion node type
might not exist
loadPlugin('Mayatomr')
class Mib_amb_occlusion(Mib_amb_occlusion):
"""This is an example of how to replace a node. Use this technique
with care"""
def occlude(self):
print "occluding!"
@staticmethod
def _isVirtual(obj, name):
"""
the callback always returns True, so we always replace the default
with our own.
"""
return True
factories.registerVirtualClass( Mib_amb_occlusion, nameRequired=False )
The _isVirtual method is required (though it doesn't need to necessarily be
called exactly that - you can pass in a different name/method to the
'isVirtual' kwarg of registerVirtualClass) on every virtual subclass.
- Paul
On Tue, Nov 1, 2011 at 12:24 AM, Justin <[email protected]> wrote:
> Thanks! The first example seemed a bit overkill which is why I asked the
> question, but the second example is exactly what I need (Except I'm not on
> the trunk):
>
> # make sure Mayatomr plugin is loaded ore the Mib_amb_occlusion might not
> exist
> loadPlugin('Mayatomr')
> class Mib_amb_occlusion(Mib_amb_occlusion):
> """This is an example of how to replace a node. Use this technique
> with care"""
> def occlude(self):
> print "occluding!"
>
> # the callback always returns True, so we always replace the default with
> our own.
> Mib_amb_occlusion.registerVirtualSubClass( lambda *args: True,
> nameRequired=False )
>
> def testMib():
> n = createNode('mib_amb_occlusion')
> n.occlude()
>
> But, I get the following error:
> # Error: AttributeError: file
> /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/pymel/core/general.py
> line 53: type object 'Mib_amb_occlusion' has no attribute '_isVirtual' #
>
> I'm running the version of pcl that comes with 2011. I assume there have
> been a bunch of changes since then that has made this process easier, not
> requiring _isVirtual to be defined or in the trunks case a callback to be
> specified? Can I accomplish the same task of replacing the mental ray node
> with the version of pcl that comes with Maya2011?
>
> Thanks,
> Justin
>
>
> On Oct 31, 2011, at 11:53 PM, Justin Israel wrote:
>
> > This seems to be a really straight forward example located here:
> > http://pymel.googlecode.com/svn/trunk/examples/customClasses.py
> >
> > It outlines how to subclass, and what class methods must be provided. I
> believe the use of the id attribute is for the validation test function, in
> order to determine if the incoming object type is the right kind. In this
> case they use the joint id attribute from the original Joint class to
> check. If its a joint then allow this subclass to be returned. Technically
> you could perform any test you see fit as long as you stick to the api to
> do it and not pymel calls.
> >
> >
> >
> >
> > On Oct 31, 2011, at 7:51 PM, Justin <[email protected]> wrote:
> >
> >> Hey all, It's been a super long time since I've been on this list!
> >>
> >> I was wondering if I could get a quick example on how to accomplish a
> simple wrapping of a pymel node as described here:
> >> http://code.google.com/p/pymel/issues/detail?id=62
> >>
> >> allow users to add their own methods to any node. users can now easily
> import pymel and then subclass nodes to do what they like, but perhaps
> there's a way to register these user subclass modules to be loaded by
> pymel, such that they are found within the pymel namespace.
> >>
> >>
> >>
> >> import pymel.core as pm
> >>
> >> # Load plugin
> >> pm.loadPlugin('pointless')
> >>
> >> # Print Node Type
> >> print pm.nt.PointlessViewer
> >>
> >> How would I subclass this and add my own methods?
> >>
> >> class PointlessViewerNode(pm.nt.PointlessViewer):
> >> def myMethod(self):
> >> # Do something with my node
> >> pass
> >>
> >> Do I have to follow the example under pymel.examples.customClasses.py?
> Where an extra attribute is added, ie cls._PointlessClassID? I'm not sure
> I need this extra attribute, I just want to add additional methods to the
> existing pymel node returned when creating nodes.
> >>
> >> viewer = pm.createNode('pointlessViewer')
> >> viewer.myMethod()
> >>
> >>
> >> Thanks,
> >> Justin
> >>
> >>
> >>
> >>
> >> --
> >> 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
>
--
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings:
http://groups.google.com/group/python_inside_maya/subscribe