Great work Chad,  I'm on holiday next week, but I will probably take a
look at it from home.  Hopefully you get time to update git in the
morning, Which means I might get chance to try it before I leave
tonight.

I can see these dynamic templates being really useful.

-Dave


On Fri, Mar 19, 2010 at 1:29 AM, Chad Dombrova <[email protected]> wrote:
> 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.
>

-- 
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