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.
