# Joint Tools¶

Status: Alpha release

Last Updated: 16 October 2017

## Overview¶

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

## Accessing¶

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
cgm.core.tools.jointTools.ui()


## UI¶

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

Note

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.

## Orient¶

### Tweak¶

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.

### Vector/Aim¶

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

Note

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

### Functions¶

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

## Create¶

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)

Note

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

Note

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

## RayCast¶

Only shows up in standalone ui. See toolbox section

## Axis¶

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

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

Note

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

## Utilities¶

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