Joint Tools

Status: Alpha release

Last Updated: 16 October 2017



cgmJointTools is our attempt at an all in one joint creation and orienting tool for our own purposes. We hope you find it useful as well.

What can I do with it?

  • Create joint chains be selection or curve and resplit by multiple methods
  • Tweak and edit joint orientation values in multiple ways
  • Define world up vector by object axis or a vector between two objects
  • Access rayCast joint creation tools (stand alone ui only)
  • Orient and snap joints on a plane for fingers or limbs
  • Relatively tweak joint radius values contextually


  1. UI - standalone

    • Top cgm menu - CGM> TD/Rigging> > Joints > cgmJointTools
    • Marking menu (several of them) - cgmJointTools
  2. UI - Nested

    • You can find most of the tools nested in the cgmToolbox
  3. Python

import cgm


If you open the stand alone ui, you should see something like this:



When you load it as a standalone, RayCast create options are availabe as well. Seemed overkill to have that in the Toolbox version as well.



Full props to Michael Comet for the logic on this one in his fantastic cometJO.


Change the current jointOrient values on selected joints by provided amounts in a relative manner.

  • x[  ] y[  ] z[  ] - Set the relative values
  • + - Add to the current values
  • - - Subtract to the current values
  • Zero - Clear out the fields.


With orientation we're talking about the up vector for aiming for the orientation processes. We have a couple of ways of defining it.

  • World - You can set to standard axis by the X, Y , Z buttons or manually input values.
  • x+... - With a selected object, pick an axis which will general a vector and input it to the fields
  • Between Sel - If you select two objects, the vector from the first point to the second will be measured and input

Aim/up axis directions are how joints will be aimed and oriented. Aim is from one to the next in the chain, up will go by the defined world vector.

  • Aim - Set the aim axis of oriented joints
  • Up - Set the up axis of oriented joints


When no parent or child joints are detected, joints will be oriented to the world following the aim/up axis


  • Orient Selected - Orient selected joints following the user's settings

    • []Relative - Affects orientation. Relative mode reevaulates the up vector from the parent. This supports better orientation for twisting joint segments.
  • Plane Up/Out - Planar orientation creates a snap plane to help fingers and limbs for examples all be on the same rotation plane.

    • 3 joints are required
    • Up/Out defines which axis the plane will be cast through - the joints up or out axis. For fingers, you probably want up. For an arm out would probably make more sense.
  • Freeze - Our freeze orienation function as we don't like maya's.


Joint creation is based on selection. There are several main methods. When we resplit, it can be by the selection generated curve or an existing one.

  • From Selected - Create new joints based on selection. Can be transforms or components
  • Mid - Create a joint at the mid point of the selected
  • Curve - Build joints along selected curve(s)


Mid only creates mid joint from selection. The other modes support the extra behaviours.

What follows are the options that each mode can use.

  • Resplit - Resplit a given curve or selection

    • None - No resplit
    • Linear - Linear curve
    • Curve - Cubic curve
    • Sub - Resplit between each root. Only supported in from selected mode
  • [5]# Set the number of joints for resplit

  • [] Orient - Whether to orient created joints

  • [] Chain - Whether to parent created joints

  • [] Relative - Relative orienation mode where the last joint's up is used as the new up vector


Context can be changed via the first menu in the cgmToolbox or cgmJointTools


Only shows up in standalone ui. See toolbox section


  • *Show - Show axis (CONTEXTUAL)
  • *Hide - Hide axis (CONTEXTUAL)



Contextual radius editing.

  • /2 - In this case take current, then divide by 2.
  • -10 - ... current - 10
  • -1 - ... current - 1
  • +1 - ... current + 1
  • +10 - ... current + 10
  • *2 - ... current * 2


Context can be changed via the first menu in the cgmToolbox or cgmJointTools


  • cometJO - Tool by the brilliant Michael B. Comet for orienting joints
  • *Select - Select joints. (CONTEXTUAL)
  • seShapeTaper - Tool by our good friend Scott Englert for splitting sdk 'poses'