Archive for June, 2012

Tue, Jun 26th, 2012
posted by jjburton 05:06 PM

Major avenues of progress for the week:

  • attrTools coming along well along with the accompanying modules
  • Added a buffer to Locinator along with an accompanying mode toggle
  • Added a few more hiding options for setTools (maya sets, anim layer sets)

Lessons learned from the week…

  • min/max values on Attributes only seem to be honored with float attributes
  • attributeQuery fails to return the correct value on:
    • keyable flag. Must use getAttr to get correct state
    • hidden flag. Must use getAttr with channelBox flag
  • if you change the enum options of an attribute in maya 2011 it will update the channelbox but not the attribute editor until you select something else then the object again. just deselecting the object and the object again won’t update, nor reopening the file after saving. Awesome.
    • Tried a function to manually toggle a couple selections and that didn’t work
    • Looked a little into ui update stuff, no joy. Moved on after a couple of strikes. Not a deal breaker
  • Alias attributes only affect the channel box
  • Odd bug with baseMelUI or maybe just a maya thing in maya 2013. If a text field is disabled, it clears the bgc. 2011 didn’t to do that.
  • Can assign the window as the parent to a ui element in Hamish’s baseMelUI with a self.get() function. Useful for formLayout


Mon, Jun 25th, 2012
posted by jjburton 09:06 AM
  • cgm.attTools
    • Tools:
      • standard flags
      • numeral editing
      • enum editing
      • string editng
      • message editing
      • name editing (nice,alias)
      • attr conversion mode
    • Manager
      • Reordering
      • Multi editing – Keyable, hide, lock
      • Working through Transfer stuff, Connect works
  • cgm.AttrFactory
    • Added updateData function to get the various states of a variable – value, locked,keyable,hidden,minValue,maxValue,defaultValue
    • added:
      • doLocked(True/False)
      • doHidden(True/False)
      • dokeyable(True/False)
      • doDefaultValue(value)
      • doMaxValue(value) – False to clear
      • doMinValue(value) – False to clear
      • doStore
    • Fixed hidden/keyabale logic flags
    • Added connection functions
    • Workin on copy
  • cgm.lists
    • Added reorderListInPlace in order to reorder lists…order:)
  • cgm.attributes
    • Added returnMatchAttrsDict – better tool to find match attributes
    • Added doRenameAttr – ignores lock state, restores lock
    • Modified out convertAttrType works with enum conversion
    • Added reorderAttrubutes function
    • Added function to return a better list function. It prioritizes channel box selection over viewport selection. Returns attributes as well.
  • cgm.setKey marking menu
    • fixed the toggle for catching whether an action is excecuted to know whether to do the default keying action or not
  • cgm.setToolsLib/cgm.setTools
    • documented lib
    • Added a toggle to hide maya sets and to hide anim layer sets
    • Fixed a bug whereby not all objectSetGroups were being flagged properly for filtering
  • cgm.ObjectFactory
    • Took away transform requirement, added self.transform variable to store it’s transform and added checks on the various functions that require a transform
  • cgm.OptionVarFactory
    • Added clear function
  • cgm.guiFactory
    • Added a force reselect function for odd circumstances where maya won’t update without it. For example. changing some attributes won’t update without selecting something else
  • cgm.Locinator/cgm.LocinatorLib
    • Added buffer functionality for updating
    • Added buffer tools – define, add, subtract, select, purge options
    • Added a mode toggle for update – selected/buffer
    • Changed the over time modes to using constraints instead of just a snap. This is to account for heirarchal updates. So, a constraint is setup at the start of the update, blendParent is turned on if necessary, all objects to be updated are keyed and the constraints are deleted at the end of the process
    • Overall, the locinatorLIb is messy and need to swing back and clean it up. It works but it’s messy and confusing code.
Mon, Jun 18th, 2012
posted by jjburton 10:06 AM

  • New build –
    • If you grabbed it first thing this morning, there’s a rev 2 up for today with a bug fix – loaded/active mode wasn’t working right
  • There’s new documentation on for setTools accessible via the nav on the side here
  • Working on attrTools and Locinator this week…
    • Locinator
      • Adding buffer tools to it for repetitive work
    • AttrTools
      • Wanna get ready for initial release
Mon, Jun 18th, 2012
posted by jjburton 06:06 AM

Hot off the repository! The big push in this pack is finishing up the first pass of cgm.setTools. There’s a tool page setup now for more details (see the nav on the side).

The first release today had a bug with active/loaded modes 

  • ml_resetChannels
    • Sent potential change to Morgan to allow attributes to be passed through the function. Temporary patch in Toolbox version till Morgan decides how he wants to handle
  • cgm.setMenu
    • Marking menu counterpart to cgm.setTools
    • Key/Delete Key/Select Loaded or active sets
    • Individual set selection
    • Load setTools
    • Toggle types and references options
    • Change keying type mode
  • cgm.setTools
    • Reference sorting implemented
    • Added Reset functions per set and with multimode
    • Added key mode to be able to set reg keys or breakdown keys
    • Type sorting implemented
    • Added mulittagging via a right click menu on the mode toggle
    • Set grouping implemented
      • maintain local scene set group option for clean scenes
      • hide set groups option to keep them from loading
    • Tweaked the objectSet search function. Oddly enough animation layers were coming up in the search
    • Added a few more checks to selected channels check. Added ability to return raw channels
  • cgm.lists
    • changed the return on returnMatchedList to be [] instead of False when no matches found
  • cgm.OptionVarFactory
    • Added a defaultValue call option that will ONLY set if the optionVar doesn’t exist yet
    • Default type is int now
    • Fixed a data check logic process. It was turning empty string optionVar’s to ints
  • cgm.SetFactory
    • added doName function
    • added doSetType function
    • added refPrefix attribute to the class
    • added parents attribute to the class  to call to know which sets a set might belong to
Fri, Jun 15th, 2012
posted by jjburton 07:06 AM

So got a couple of queries on how you actually add attributes to sets in practice.

When cgm.setTools creates a set with selected channel box attributes on the fly, there are a couple of processes going on.

  1. A set is created
  2. The channel boxes are queried for selection via the function
  3. There’s an active selection query for regular objects
  4. Objects and selected attributes are added to that set

Sometimes you just wanna do stuff  yourself so here’s a few examples. Here’s an example of adding an attribute to an existing set. So in this case, the existing set is ‘point_lightSet’ and the attribute is ‘nurbsSphere1.translateX’:

import maya.cmds as mc
setName = 'point_lightSet'
attribute = 'nurbsSphere1.translateX'
mc.sets(attribute,add =setName)

If you just wanted to create a set from a list of attributes,  you’d wanna call that list into the sets command like this:


I’m curious if anyone out there has an older version of maya (<2011) that this doesn’t work on. Maybe it didn’t allow for this at one point in time and I missed when it changed.

Tue, Jun 12th, 2012
posted by jjburton 11:06 AM

Just a quick update. Hopefully updates will be a bit more regular now (least till the next gig crush). Things are coming along well. Few bits:

  • cgm.setTools initial release in the last pack. Video above.
  • First open release of the beta tools. See post prior to this.
  • New format for builds like that post as an easy way for users to get a certain build
  • Work continuing on the web front. Hopefully have an announcement on that soon
  • Cool stuff:
    • Prometheus – great (a few plot inconsistencies notwithstanding). Amazing art design. Props.
    • Guild Wars 2 Beta and Torchligh 2 Beta – this year is lookin good for pc games:)
Mon, Jun 11th, 2012
posted by jjburton 04:06 PM

Trying a new distribution method. Open Beta!


cgm.setTools (NEW)
Sitting in the dev tab for now. Tool for dealing with maya sets and quick select sets. More work incoming this week with categories and reference sorting.

  • Recognizes quick select and regular sets
  • References:
    • Grabs prefixes for sorting
    • Disables some controls with references
  • Group Mode:
    • Set all as active/inactive
    • Key all/delete all keys (on active frame)
    • All (loaded) and active sets modes as well as individual control\
  • Individual:
    • Make active/inactive
    • select
    • Set names editable with typical cgm naming style (root name, tag is auto supplied)
    • add to
    • subtract from
    • key
    • delete
    • Right click text field:
      • Set as qss type
      • Set Type
      • Purge
      • Duplicate
      • Delete


  • Now obsolete – Josh discovered that the cgm specific bufferTypes were unecessary, so retooled the entire concept to work with standard maya object sets. It’s not clearly documented you can store attributes and what not to sets.
  • Oh so much work….
  • Made it so you can have a default value on call
  • Made type not necessary on call
  • Initial single item list calls correctly
  • Changed priorities:
  • If value on call:
    • if value is list, self.value is list or single, extend
    • if value is single, if self.value…
      • list, append
      • single, replace
    • If not value on call:
      •  set default value
  • Retooled from BufferFactory. Same concept just now utilizing standard maya sets
  • Added a cgm option var purge for testing purposes.

Bug Fixes:

  • Issue  with curve creation on tdTools fixed due to calling an optionVar on menu build not going off till the menu was activated.
  • NameFactory was erroring out on naming shapes of sets because set member shapes are returned on a shape listRelatives call. Added a ref check to the name object function
Mon, Jun 4th, 2012
posted by jjburton 04:06 PM

…isn’t necessarily a quick select set.

So, I learned I’d been going in the wrong direction for a couple of weeks on the buffer front. A bit frustrating? Yes. However, plenty of stuff learned. Failure is learning. And the faster you admit it, the faster you can start a new path. Hopefully the right one!

The main reasons I’d thought we needed a custom buffers turned out to not be true, it just so happens that Maya’s documentation is about as clear as mud on that front.

Here’s some useful tidbits:

  • A quick select set is just a regular maya set that has it’s ‘text’ tag set to be ‘gCharacterSet’.  As far as I can tell that is the only difference at all.
  • You can indeed add attributes to a set. I’d thought for ages you could only do objects and components. If Only I’d known…
  • Anim curves can be added as well
  • Sets can be flagged to only accept certain component types. However, the list is rather limited (verts, edges, faces, editPoints)
  • If you add a set to another set, it’s like parenting them. Removing is like unparenting.

Regardless, been reworking the tools and the base functions are pretty much there. Just working through the GUI stuff. Hoping to have cgm.setTools up in the release later this week for testers.


Mon, Jun 4th, 2012
posted by jjburton 09:06 AM

Well it’s about jolly time. I know. Sorry for the delays and the lack of vids. We’ve been swamped with work this month. Josh wrapped up his gig and is back coding this week, Ryan has been getting the initial web stuff going and Bokser is on a gig through the end of the month.

Here’s the notes from today’s tester release:

  • Bohdon Sayre new contributor!
    • boTriggers now includedWill work on looking at implementing more
  • General
    • Fixed a bad function call from ObjectFactory for .name(). The new call is .doName(). Was causing the control maker to error out
    • work on installer – wasn’t working on 2012
    • need to make the shelf uninstallable
    • Marking menus
    • More minor work
  • cgm.AnimTools
    • Morgan Loomis’ Copy Anim and Convert Rotation order now implemented
  • cgm.tdTools
    • Added John Doublestein’s Dynamic Parent Constraint Tool
    • zoo.SkinPropagationTool – link broke at some point.Fixed
    • Made polyUnite work with FFD’s. It’s a bit of a hack. Wanna look at cleaner implementation
    • returnSelectedAttributesFromChannelBox (NEW) – query for lots of stuff
    • returnObjectBuffers(NEW) – search a scene for object buffers for other tools
  • cgm.BufferFactory
    • now working pretty much as expected
  • cgm.bufferTools
    • starting working on the gui
    • Got some basic stuff working
  • cgm.attributes
    • Oh, stupid attributes lib. Lots and lots of work in it. Trying to unify calls where possible to my preferred method of (obj,attr) format rather than having to format everthing.
    •  simplified several commands – return driven/driver attribute/object in conjunction with buffer tools
    • doSetAttr – made to work with different attribute types. changes based on type
    • convertAttrType – new function to change an attribute from one type to another. Enum’s are stored to strings as ‘option1;option2’. Strings with a ‘;’ will split to enum options on conversion
      • storeInfo – modified to match attr type for storing for the previous bullet
  • Bugs reported
    • zooHudCTRL – fixed bug from missing zooDates.mel. Added it. Fixed. Amazing.
    • cgm.tdTools.cgmNameToFloat – missing an import
    • cgm.tdTools.cgmNameToFloat – wasn’t creating keyable attr. Fixed. Also made better reporting.