your first instinct here gave me an idea of how to make this more
user-friendly.  i've reworked it so that simply importing a module with an
AETemplate subclass will register it.  from the new docs:
----------------
To create an Attribute Editor template using python, do the following:
  1. create a subclass of `uitypes.AETemplate`
2. set its ``_nodeType`` class attribute to the name of the desired node
type, or name the class using the convention ``AE<nodeType>Template``
3. import the module

AETemplates which do not meet one of the two requirements listed in step 2
will be ignored.  To ensure that your Template's node type is being detected
correctly, use the ``AETemplate.nodeType()`` class method::

    import AETemplates
    AETemplates.AEmib_amb_occlusionTemplate.nodeType()

As a convenience, when pymel is imported it will automatically import the
module ``AETemplates``, if it exists, thereby triggering any AETemplates
within it or its sub-modules to be registered. Be sure to import pymel or
modules containing your ``AETemplate`` classes before opening the Atrribute
Editor for the node types in question.

To check which templates are loaded using python::

 from pymel.core.uitypes import AELoader
print AELoader.loadedTemplates()
----------------------

things are wonky at work right now so i can't commit it to github at the
moment, but i'll put it up tomorrow morning.

-chad



On Thu, Mar 18, 2010 at 11:05 AM, thirstydevil <[email protected]>wrote:

> Hi Chad,
>
> I've got the latest from Git.  I've checked the code against the Git
> Hub commits section.  On the 17th of last month you committed fix's
> for AE.  I have those in my git clone, plus recent commits.  Just to
> be sure I have the latest I've deleted my copy and cloned it once
> more.
>
> I've copied the AETemplates example directly into our module folder.
> It's not being picked up by pymel and the mib_amb_occlusion node isn't
> showing the edited label.  I've also removed the previous package
> method and only have this AETemplates module on the sys.path
>
> I tried to manually call the template via
>
> import AETemplates
> AETemplates.AEmetaNodeTemplate("metaNode")
> # Error: Maya command error
> # Traceback (most recent call last):
> #   File "<maya console>", line 2, in <module>
> #   File "G:/Maya/Maya_Modules/Modules/CoreLibs/PyLib\AETemplates.py",
> line 73, in __init__
> #     self.beginScrollLayout()
> #   File "C:/ArtPipelines/App/Maya2010-x86/pymel/LumaPictures-
> pymel-4a6076b\pymel\core\uitypes.py", line 676, in beginScrollLayout
> #     cmds.editorTemplate(beginScrollLayout=True)
> #   File "C:/ArtPipelines/App/Maya2010-x86/pymel/LumaPictures-
> pymel-4a6076b\pymel\internal\pmcmds.py", line 98, in wrappedCmd
> #     res = new_cmd(*new_args, **new_kwargs)
> # RuntimeError: Maya command error #
>
> Any Ideas?
>
> -Dave
>
>
>
> On Mar 18, 4:53 pm, Chad Dombrova <[email protected]> wrote:
> > there was a bug with this in rc1 so you should check out from github.  if
> > that's a problem, i can get a new release up over the weekend.
> >
> > -chad
> >
> > On Thu, Mar 18, 2010 at 9:28 AM, David Moulder <[email protected]
> >wrote:
> >
> > > Hi Chad,
> >
> > > I've tried to get this working but it's not happening for me.
> >
> > > I'm trying to set it up as a package, <<Package,Module,Class>>
> >
> > > I have :-
> >
> > > AETemplates.AEmetaNodeTemplate.AEmetaNodeTemplate
> >
> > > My AEmetaNodeTemplate module looks like this, just to test.
> >
> > > import pymel.core as pCore
> >
> > > class AEmetaNodeTemplate(pCore.ui.AETemplate):
> > >    def __init__(self, nodeName):
> > >        self.buildBody(nodeName)
> >
> > >    def buildBody(self, nodeName):
> > >        print "building", nodeName
> > >        self.beginLayout("kParams",collapse=0)
> > >        self.addControl("bright", label="kBright",
> > > changeCommand=self.colorChanged)
> > >        self.addControl("dark", label="kDark",
> > > changeCommand=self.colorChanged)
> > >        self.addControl("spread", label="kSpread", preventOverride=True)
> > >        self.addControl("max_distance", label="kMaxDistance")
> > >        self.addControl("reflective", label="kReflective")
> > >        self.addControl("output_mode", label="kOutputMode")
> > >        self.addControl("occlusion_in_alpha", label="kOcclusionInAlpha")
> > >        self.addControl("falloff", label="kFalloff")
> > >        self.addControl("id_inclexcl", label="If You See This It
> Worked")
> > >        self.endLayout()
> > >        self.suppress("id_nonself")
> > >        self.dimControl(nodeName, "spread", True)
> >
> > > I'd like to understand how Pymel is intercepting the AETemplate
> > > creation, Does it matter when pymel is loaded to find this AETemplate?
> > >  Pymel is up early in our systems but this module path isn't until
> > > later in the maya boot sequence.
> >
> > > Cheers
> >
> > > -Dave
> >
> > > On Thu, Mar 18, 2010 at 3:43 PM, thirstydevil <
> [email protected]>
> > > wrote:
> > > > Cool, Thanks Chad.
> >
> > > > -Dave
> >
> > > > PS, I've got pymel with git via TortoiseGit.
> >
> > > > On Mar 18, 3:13 pm, Chad Dombrova <[email protected]> wrote:
> > > >> pymel 1.0 has support for python AETemplates using specially
> implemented
> > > classes. there's an example included with pymel showing how to do this
> using
> > > subclassing techniques.  you could easily write a function that created
> an
> > > AETemplate subclass for every one of your metanodes. you may even be
> able to
> > > do something funky like have your MetaData classes double as
> AETemplates.
> > >  be sure to grab pymel from github, as there's been some work done on
> this
> > > very recently.
> >
> > > >> -chad
> >
> > > >> On Mar 18, 2010, at 8:07 AM, thirstydevil wrote:
> >
> > > >> > Based on the Bungee paper we've implemented a MetaData python
> class
> > > >> > that utilises a simple MPxNode as a singleton to store the
> MetaData
> > > >> > attributes.  MetaData structures are connected together and Maya
> Nodes
> > > >> > are tagged to the MetaData via message links.
> >
> > > >> > for example:
> >
> > > >> > class MetaData(obejct):
> > > >> >    def __init__(self, node=None, **kw):
> > > >> >         self,metaClass = self.__class__.__name__
> > > >> >         # create the MPxNode and set the attr attaching it to Node
> >
> > > >> > Each MetaData subclass has different methods associated with them.
> > > >> > While I have a simple AETemplate for my MPxNode.  It's become
> obvious
> > > >> > that I could have a totally different template based on the
> metaClass
> > > >> > attribute on the node.  With buttons calling methods in the class
> that
> > > >> > operate on the MetaData structure.
> >
> > > >> > The only hacky way I have got this working is by reloading the
> > > >> > AETemplate via a script job if the MetaData node is different to
> the
> > > >> > last cached MetaData selection.  This works, is slow-ish, not
> stable
> > > >> > because the UI doesn't seem to be thread safe.
> >
> > > >> > So, I guess I have to create a different MPxNode for every
> subclass
> > > >> > that requires a different template.  Even though my MPxNode is
> > > >> > effectively a blank node?
> >
> > > >> > Anyone?  You're experience with templates would be welcome.  I've
> just
> > > >> > started to investigate them.
> >
> > > >> > -Dave
> >
> > > >> > --
> > > >> >http://groups.google.com/group/python_inside_maya
> >
> > > > --
> > > >http://groups.google.com/group/python_inside_maya
> >
> > > --
> > >http://groups.google.com/group/python_inside_maya
> >
> >
>
> --
> http://groups.google.com/group/python_inside_maya
>

-- 
http://groups.google.com/group/python_inside_maya

To unsubscribe from this group, send email to 
python_inside_maya+unsubscribegooglegroups.com or reply to this email with the 
words "REMOVE ME" as the subject.

Reply via email to