Added a standalone buttonable call for locinator’s update function at a user request. If you wanted to use that, use this as your button:
[crayon]from cgm.tools.lib import locinatorLib
reload(locinatorLib)
locinatorLib.doStandAloneUpdateSelected()[/crayon]

After looking into that bug at the end, it was messing up because this version of the Morphy proxy geo had messed up UV’s. Follicles need decent UV’s to work. Will look at adding a check for decent UV’s.

Info:

Add target mesh objects with the ‘>>’ button

Modes:

Surface – places on the surface

Bisect – places at every contact of the cast ray on the object(s)

MidPoint – finds the midpoint of hit points

Drag – whether you want creation as you drag or not. Default is only on mouse release

Clamp – how many intersection are allowed, 0 means infinite

Create Modes – all but locator and joint will create when you drop the tool or press ‘q’ on most maya default setups

locator

joint

jointChain

curve

follicle

group — only a transform at that spot

Start – initializes tool

Drop – finalizes it (or ‘q’)

To do in the future:

mirror mode

skinDeep mode – for placing joints just within the surface for facial work

Sorry for the delays. Been busy on gigs and the Morpheus Kickstarter. Been wresting with matrices and space distances and maya. Api worldSpace returns are usually in cm though the docs fail to specify. More on this and more another time. Back to the build.

So saw some questions on these enigmas around and wanted to attempt to shed some light on them.

optionVars are maya devices for saving information between maya sessions, from say one tool session to another or any other wide variety of things. By default you use them like something like this:

If you decided you wanted to play with optionVars. They’re awesome but can be a bugger to get working the way you want them. We use them to save settings between gui sessions and even to send info to some stand alone functions.
[crayon]
import maya.cmds as mc
case = ‘int’
if not mc.optionVar(exists =’optionVarTest’):#if it doesn’t exist, make it
if case == ‘int’:
mc.optionVar(iv=(self.name,0))#creates an int one
elif case == ‘float’:
mc.optionVar(fv=(self.name,0))#creates a float one
elif case == ‘string’:
mc.optionVar(sv=(self.name,”))#creates a string one

mc.optionVar(q=’optionVarTest’)#To get a value
[/crayon]

If you want to add to a string one you have to remember it’s a string one and use a different flag than a int or float one. It got confusing to us, so we decided to go a different route.

We wrote a class wrapper for dealing with them that made it easier for us to get a handle on so that we call them at the top of any gui with something like:
[crayon]
from cgm.lib.classes.OptionVarFactory import *

That initializes the option var to an instance that can be appended, rebuilt, culled purged, cleared, call, converted or whatever in any of our tools.

The defaultValue flag sets the value only if the optionVar doesn’t exist. We did that so that if a specific tool is reset and has it’s flags wiped. It builds again with the default ‘factory’ settings. It also converts on the fly so if you pass a string to a non string optionVar, it converts it to a string, and so on.

We also flag all of our optionVar’s with a ‘cgmVar’ so that we can easily do a full wipe of our variables when needed for testing.

You’re welcome to give it a try if you like or take part of it it works for you and run with it or join us and help make it better. It’s in the cgmTool box from cgMonks – cgm/lib/classes/OptionVarFactory

It’s been a hectic few weeks at CG Monks. David and I have been working hard finishing a crazy deadline commercial gig. ~2 minutes of content in about 2 and half weeks. Yeah, nutty. I had a lot of fun on my own segment though, of course, wish I’d had more time to polish. When you have a week and a half to animate 30 seconds with a continual movement shot comprising 4 main characters, a couple of birds, sets popping in and out of place, a crowd of ~100 and all on a spinning ‘world’ some corners have to get cut:)

The team did a great job and for what we had to work with in the time we had, it’s a nice bit of work. Bokser acted as the project lead on our end, we shared TD hats and I acted as animation lead.

Morpheus 2.0…

The ball is rolling. We have our project in for Kickstarter for review and expect it to be ready for Monday. If not, we may have to delay a day or two but it’s out of our hands. Our pal, Martin is doing our edit for the Kickstarter vid and he did a great job – especially with a talking Josh who talks like he’s had an double shot espresso…Venti.

Support Platform…

Ryan has been working away on getting our community platform up and running and we’re looking to start opening up for testing soon. If you’re interest, connect with us on our testers page. As it’s the vehicle we want to use for both our own tool and rig support and potential place for others, we wanna get the kinks out before we get too much traffic.

Bugs…

Production is a great finder of bugs and oh did I find some bugs in the cgmTools. This week I’m trying to get a handle on them to avoid repeating some of these issues in the future and preparing for starting Morpheus 2.0 development.