aboutsummaryrefslogtreecommitdiff
path: root/docs/build/_sources/sections
diff options
context:
space:
mode:
authorhome_pc <[email protected]>2020-01-20 13:48:51 -0800
committerhome_pc <[email protected]>2020-01-20 13:48:51 -0800
commit75fa1d1810e98453960a81115d88302e276d817f (patch)
tree92f37accb3cb041d056d00525b5830a69862631a /docs/build/_sources/sections
parentfixed install.mel issue (diff)
downloadartv2-75fa1d1810e98453960a81115d88302e276d817f.tar.xz
artv2-75fa1d1810e98453960a81115d88302e276d817f.zip
Uploading work on refactor
At this point, all components can build their skeletons. Next steps are to get components building their rigs.
Diffstat (limited to 'docs/build/_sources/sections')
-rw-r--r--docs/build/_sources/sections/rigging_tools/group_bake_offsets.rst.txt35
-rw-r--r--docs/build/_sources/sections/rigging_tools/group_mirror_xforms.rst.txt38
-rw-r--r--docs/build/_sources/sections/rigging_tools/pose_manager.rst.txt67
-rw-r--r--docs/build/_sources/sections/tech_docs/components/aim_helper.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/components/arm_component.rst.txt9
-rw-r--r--docs/build/_sources/sections/tech_docs/components/base_classes.rst.txt16
-rw-r--r--docs/build/_sources/sections/tech_docs/components/biped_leg_component.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/camera.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/chain.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/component_base.rst.txt33
-rw-r--r--docs/build/_sources/sections/tech_docs/components/component_classes.rst.txt23
-rw-r--r--docs/build/_sources/sections/tech_docs/components/components.rst.txt15
-rw-r--r--docs/build/_sources/sections/tech_docs/components/components_overview.rst.txt61
-rw-r--r--docs/build/_sources/sections/tech_docs/components/creating_custom_component.rst.txt244
-rw-r--r--docs/build/_sources/sections/tech_docs/components/finger.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/hind_leg.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/hinge.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/joint.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/joint_mover.rst.txt16
-rw-r--r--docs/build/_sources/sections/tech_docs/components/pose.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/components/rig_asset.rst.txt20
-rw-r--r--docs/build/_sources/sections/tech_docs/components/root_component.rst.txt9
-rw-r--r--docs/build/_sources/sections/tech_docs/components/segment.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/spine.rst.txt10
-rw-r--r--docs/build/_sources/sections/tech_docs/components/template.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/add_component_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/available_components_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/bone_counter_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/component_context_menu.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/component_settings_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/group_bake_offsets_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_xforms_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/group_reset_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/installed_components_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/load_template_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/mirror_component_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/parent_list_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/pose_manager_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/rename_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/rig_builder_ui.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/rigging_tools.rst.txt45
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/set_mirror_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/rigging_tools/set_parent_widget.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/running_tests.rst.txt29
-rw-r--r--docs/build/_sources/sections/tech_docs/useful_scripting_commands.rst.txt75
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/component_utils.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/control_utilities.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/error_utils.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/general_utils.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/interface_utils.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/joint_mover_utils.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/rigging_utilities.rst.txt8
-rw-r--r--docs/build/_sources/sections/tech_docs/utilities/utilities.rst.txt18
54 files changed, 1067 insertions, 0 deletions
diff --git a/docs/build/_sources/sections/rigging_tools/group_bake_offsets.rst.txt b/docs/build/_sources/sections/rigging_tools/group_bake_offsets.rst.txt
new file mode 100644
index 0000000..0da37d0
--- /dev/null
+++ b/docs/build/_sources/sections/rigging_tools/group_bake_offsets.rst.txt
@@ -0,0 +1,35 @@
+===================
+Group Bake Offsets
+===================
+
+.. codeauthor:: Jeremy Ernst
+
+Overview
+--------
+
+The interface is comprised of three main elements:
+
+.. figure:: /images/group_bake_offsets.png
+ :width: 198px
+ :align: center
+ :height: 366px
+ :figclass: align-center
+
+
+1. Search bar: filters components in the list by the search term.
+2. Component list: displays components in the scene.
+3. Bake Offsets button: bakes offsets on selected components in the list.
+
+
+Usage
+-----
+
+To use, select any number of components in the component list. Then hit the "Bake Offsets" button.
+
+Example:
+
+.. figure:: /images/group_bake_offsets_usage.gif
+ :width: 519px
+ :align: center
+ :height: 383px
+ :figclass: align-center \ No newline at end of file
diff --git a/docs/build/_sources/sections/rigging_tools/group_mirror_xforms.rst.txt b/docs/build/_sources/sections/rigging_tools/group_mirror_xforms.rst.txt
new file mode 100644
index 0000000..ffb07fd
--- /dev/null
+++ b/docs/build/_sources/sections/rigging_tools/group_mirror_xforms.rst.txt
@@ -0,0 +1,38 @@
+============================
+Group Mirror Transformations
+============================
+
+.. codeauthor:: Jeremy Ernst
+
+Overview
+--------
+
+The interface is comprised of four main elements:
+
+.. figure:: /images/group_mirror_xforms.png
+ :width: 301px
+ :align: center
+ :height: 327px
+ :figclass: align-center
+
+
+1. left side component list
+2. right side component list (matches with left side mirror)
+3. direction button (which list are you mirrring from and to. Default is left list to right list).
+4. mirror button. Executes mirroring on selected components using the direction specified.
+
+
+Usage
+-----
+
+To use, select any number of components in the left list. The mirrors of those components will automatically be selected
+in the right list. Choose whether you want to mirror from left to right, or right to left by toggling the button in
+between the two lists. Finally, hit the Mirror button to complete the operation.
+
+Example:
+
+.. figure:: /images/group_mirror_xforms_usage.gif
+ :width: 519px
+ :align: center
+ :height: 383px
+ :figclass: align-center \ No newline at end of file
diff --git a/docs/build/_sources/sections/rigging_tools/pose_manager.rst.txt b/docs/build/_sources/sections/rigging_tools/pose_manager.rst.txt
new file mode 100644
index 0000000..2eaa026
--- /dev/null
+++ b/docs/build/_sources/sections/rigging_tools/pose_manager.rst.txt
@@ -0,0 +1,67 @@
+=============
+Pose Manager
+=============
+
+.. codeauthor:: Jeremy Ernst
+
+Overview
+--------
+
+The pose manager is meant for users who may need to repose their model in order to have a better pose for rigging.
+For example, in the image below, we have a mesh that is modeled in a pose where the feet are not planted.
+This isn't ideal for rigging and animation.
+
+
+.. image:: /images/pose_manager_model.png
+
+
+Using the pose manager, we can store this "model" pose, and create a new "rig" pose, and freely switch between them.
+This way, when we build our deformation skeleton, we'll build it in the rig pose, so the rotations are nice and clean,
+but then we can set it to the model pose, so that the skeleton lines up with the mesh for doing deformations.
+
+.. image:: /images/pose_manager_overview.gif
+
+
+Right-clicking on a pose will bring up a context menu that allows you to remove the pose.
+
+.. image:: /images/pose_manager_remove.png
+
+
+This diagram shows the workflow intended with the pose manager. In the section below, we'll go through the process step
+by step.
+
+.. image:: /images/pose_manager_diagram.png
+
+Usage
+-----
+
+Using the above example, we have a mesh that was modeled in a pose like this:
+
+.. image:: /images/pose_manager_model.png
+
+We place our components in this pose, but we don't really want to build our rig in this pose, so using the pose manager,
+we can store our model pose by opening the interface, and clicking the bottom button to store the pose. Give the pose a
+name, like "model".
+
+.. image:: /images/pose_manager_modelpose.gif
+
+Now, let's re-pose our components so that the legs are straight and the bends in the arms are removed (for example).
+
+.. image:: /images/pose_manager_rigpose.png
+
+Using the pose manager, we can now store this as a pose. I'll call it "rig".
+
+.. image:: /images/pose_manager_rigpose.gif
+
+Now, when we build the skeleton, I'll use the pose manager to set the pose to the rig pose. This way, our skeleton is
+built in this pose, which is the pose we want our rig to be built in. By building in this pose, we ensure the
+rotation values are clean and zeroed out.
+
+.. image:: /images/pose_manager_buildskeleton.gif
+
+Now we can use the pose manager to set the pose back to "model", so our skeleton fits the mesh again, and do our
+deformations.
+
+.. image:: /images/pose_manager_deform.gif
+
+When we go to build the rig, we'll want to set the pose back to the "rig" pose. \ No newline at end of file
diff --git a/docs/build/_sources/sections/tech_docs/components/aim_helper.rst.txt b/docs/build/_sources/sections/tech_docs/components/aim_helper.rst.txt
new file mode 100644
index 0000000..6e12fc1
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/aim_helper.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Aim Helper
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.base_components.aim_helper.AimHelper
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/components/arm_component.rst.txt b/docs/build/_sources/sections/tech_docs/components/arm_component.rst.txt
new file mode 100644
index 0000000..291ad59
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/arm_component.rst.txt
@@ -0,0 +1,9 @@
+==========================
+Arm Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.arm.Arm
+ :show-inheritance:
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/components/base_classes.rst.txt b/docs/build/_sources/sections/tech_docs/components/base_classes.rst.txt
new file mode 100644
index 0000000..d06e447
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/base_classes.rst.txt
@@ -0,0 +1,16 @@
+===================
+Base Classes
+===================
+
+.. codeauthor:: Jeremy Ernst
+
+
+.. toctree::
+ :maxdepth: 1
+
+ component_base.rst
+ rig_asset.rst
+ joint_mover.rst
+ aim_helper.rst
+ pose.rst
+ template.rst
diff --git a/docs/build/_sources/sections/tech_docs/components/biped_leg_component.rst.txt b/docs/build/_sources/sections/tech_docs/components/biped_leg_component.rst.txt
new file mode 100644
index 0000000..afb1c02
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/biped_leg_component.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Bipedal Leg Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.biped_leg.BipedLeg
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/camera.rst.txt b/docs/build/_sources/sections/tech_docs/components/camera.rst.txt
new file mode 100644
index 0000000..bebfa7c
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/camera.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Camera Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.camera.Camera
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/chain.rst.txt b/docs/build/_sources/sections/tech_docs/components/chain.rst.txt
new file mode 100644
index 0000000..4dc15f9
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/chain.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Chain Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.chain.Chain
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/component_base.rst.txt b/docs/build/_sources/sections/tech_docs/components/component_base.rst.txt
new file mode 100644
index 0000000..a4194bf
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/component_base.rst.txt
@@ -0,0 +1,33 @@
+==========================
+Component Base Class
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.base_components.base_component.ART_Component
+ :members:
+
+Properties
+----------
+
+.. py:attribute:: prefix
+
+ This property holds the component's prefix (optional)
+
+ :return: Returns the component's prefix.
+ :rtype: str
+
+.. py:attribute:: suffix
+
+ This property holds the component's suffix (optional)
+
+ :return: Returns the component's suffix.
+ :rtype: str
+
+.. py:attribute:: parent
+
+ This property holds the joint name of the parent of this component.
+
+.. py:attribute:: network_node
+
+ This property holds the network node that contains this module's metadata.
diff --git a/docs/build/_sources/sections/tech_docs/components/component_classes.rst.txt b/docs/build/_sources/sections/tech_docs/components/component_classes.rst.txt
new file mode 100644
index 0000000..9947a5d
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/component_classes.rst.txt
@@ -0,0 +1,23 @@
+===================
+Component Classes
+===================
+
+.. codeauthor:: Jeremy Ernst
+
+
+.. toctree::
+ :maxdepth: 1
+
+ root_component.rst
+ spine.rst
+ arm_component.rst
+ finger.rst
+ biped_leg_component.rst
+ hind_leg.rst
+ joint.rst
+ chain.rst
+ segment.rst
+ hinge.rst
+ camera.rst
+
+
diff --git a/docs/build/_sources/sections/tech_docs/components/components.rst.txt b/docs/build/_sources/sections/tech_docs/components/components.rst.txt
new file mode 100644
index 0000000..6b716a8
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/components.rst.txt
@@ -0,0 +1,15 @@
+=================
+Components
+=================
+
+
+.. toctree::
+ :maxdepth: 1
+
+ components_overview.rst
+ base_classes.rst
+ component_classes.rst
+ creating_custom_component.rst
+
+
+
diff --git a/docs/build/_sources/sections/tech_docs/components/components_overview.rst.txt b/docs/build/_sources/sections/tech_docs/components/components_overview.rst.txt
new file mode 100644
index 0000000..6d362ef
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/components_overview.rst.txt
@@ -0,0 +1,61 @@
+===================
+Components Overview
+===================
+
+.. codeauthor:: Jeremy Ernst
+
+
+Terminology
+-----------
+
+.. glossary::
+
+ asset
+
+ An asset is the totality of all of the parts that make up the rig. In terms of a character, an asset would be
+ the encapsulation of the components that make up the character, as well as metadata defining the character,
+ like its name, etc.
+
+ component
+
+ Components are the individual parts that make up an asset. Components are things like, a leg, an arm, a torso,
+ etc.
+
+ metanode
+
+ Each component (and asset) has a metanode, which is a Maya network node that stores metadata. The most basic
+ metadata are things like the prefix, suffix, full name of the module, and many more useful bits of information.
+
+ .. image:: /images/metanode.png
+
+ joint mover
+
+ A joint mover is a simple rig attached to a component that aids in the creation of the skeleton. It makes joint
+ placement clean and consistent across all components.
+
+ aim helper
+
+ A component that handles ensuring a parent joint aims at its child for the joint mover controls.
+ Aim constraints are placed on joints in the joint mover that have been marked up to aim at their child.
+ Those same constraints are removed if aim mode is toggled off. How aim mode is setup is done through the
+ :ref:`joint mover markup tool <joint-mover-markup-ref>`.
+
+
+Class Diagram
+-------------
+
+.. image:: /images/artv2_class_diagram.png
+
+
+
+Classes Associated with Components
+----------------------------------
+
+The following classes are used by or associated with the component classes.
+
+.. toctree::
+ :maxdepth: 1
+
+ rig_asset.rst
+ joint_mover.rst
+ aim_helper.rst
diff --git a/docs/build/_sources/sections/tech_docs/components/creating_custom_component.rst.txt b/docs/build/_sources/sections/tech_docs/components/creating_custom_component.rst.txt
new file mode 100644
index 0000000..7c12643
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/creating_custom_component.rst.txt
@@ -0,0 +1,244 @@
+===========================
+Creating Your Own Component
+===========================
+
+.. codeauthor:: Jeremy Ernst
+
+
+In order to create your own component, there are two things you need: a python file for the class, and a maya ascii
+file that defines the joints that component can create.
+
+Creating the Maya File
+----------------------
+
+This file is generally referred to as the 'joint mover file'. In a new Maya scene, simply create the joints you want
+your component to create. If your component has options like number of twist joints, create the maximum configuration
+in this Maya scene. The exception to this are components where we want to insert joints into the hierarchy, like the
+chain and spine components. With these types of components, I create the minimum configuration. Let's compare what the
+joint mover files for a biped leg and a chain look like:
+
+.. figure:: /images/joint_mover_compare.png
+ :width: 404px
+ :align: center
+ :height: 256px
+ :figclass: align-center
+
+As you can see, the leg has the maximum configuration and the spine has the minimum configuration. How those
+configurations change is defined in the properties of the python class. You'll also notice that some default names
+have been given to each joint.
+In the leg, for example, I don't want the twist joints to be available by default (their property will be set to 0),
+so I will hide those joints.
+
+Let's build a component as a demonstration. In a new Maya scene, I will create a basic hinge setup for an arm and name
+the joints shoulder, elbow, and wrist. Make sure the rotations are frozen and the joint orients are clean.
+
+.. image:: /images/joint_mover_demo_01.png
+
+Now, I will add three twist joints to the shoulder, naming them shoulder_twist_01, shoulder_twist_02, and
+shoulder_twist_03. These are parented under the shoulder. Because I don't want them to be there by default, I will
+hide them.
+
+.. image:: /images/joint_mover_demo_01.gif
+
+The last thing we need to do with the maya scene is markup these joints with some attributes for how the joint mover
+rig will be created.
+
+.. _joint-mover-markup-ref:
+
+Joint Mover Markup Tool
+-----------------------
+
+Under the ART v2 menu, in the Development sub-menu, click on the Joint Mover Markup menu item.
+
+.. image:: /images/joint_mover_markup_01.png
+
+Once the interface is displayed, clicking on 'Markup Joints' will put attributes on all of the joints in the scene.
+Let's talk about each of these attributes and what they do.
+
+.. figure:: /images/joint_mover_markup_02.png
+ :width: 263px
+ :align: center
+ :height: 348px
+ :figclass: align-center
+
+ The markup attributes that were created can be seen here.
+
+.. glossary::
+
+ Can Aim
+
+ Whether this joint should aim at another joint when aim mode is turned on.
+
+ Aim Joint
+
+ Which joint this joint should aim at when aim mode is turned on. (This is ignored if Can Aim is False)
+
+ Aim Axis
+
+ Which axis represents the aim axis. (This is ignored if Can Aim is False)
+
+ Invert Aim Axis
+
+ If the aim axis should be inverted. (If your aim axis is set to X, but needs to be -X, this would be True)
+ (This is ignored if Can Aim is False)
+
+ Up Axis
+
+ The axis of the joint that is closes to the world up axis. (This is ignored if Can Aim is False)
+
+ Maintain Offset
+
+ This will probably not ever need to be used, but in the case of some special circumstance, this will create the
+ aim constraint while maintaining offsets.
+ (This is ignored if Can Aim is False)
+
+ Twist Joint
+
+ Whether the joint is to be setup as a twist joint. A twist joint gets no global mover control. Instead it
+ gets an offset mover that is only unlocked along the length axis, and is automatically driven to keep equal
+ spacing between the start joint and end joint (calf and foot for example).
+
+ Control Type
+
+ The shape that the joint mover control should have. This list is populated by the files located in
+ /resources/control_shapes.
+
+ Control Size
+
+ The scale factor to create the control at. If you use the "Create Preview Movers" button in the markup tool,
+ you can then set this value in order to see how the control will be built and at what size.
+
+
+ Control Offset X, Y, Z
+
+ When creating the control, the rotational offset to apply on creation. You can use the "Create Preview Movers"
+ button to see how the control will be created given your offsets.
+
+
+So in this case, let's set shoulder and elbow's ".canAim" to True, then set the shoulder's aim joint to elbow, and the
+elbow's to wrist. The up axis for both of those will be Z. I'll set all three of those joints to use a circle shape and
+set the size to 10. For the three twist joints, set their ".twistJoint" attribute to True, and let's put their control
+size at 8. You can use the "Create Preview Movers" and "Delete Preview Movers" to see how your controls will be created
+given these settings.
+
+.. figure:: /images/joint_mover_markup_03.png
+ :width: 265px
+ :align: center
+ :height: 348px
+ :figclass: align-center
+
+ The shoulder with markup data set.
+
+.. note:: Create Preview Movers works on a selection!
+
+Make sure any preview movers have been deleted using the "Delete Preview Movers" and save the scene in:
+ARTv2/resources/rigging_guides as a maya ascii file.
+
+Creating the Python Class
+-------------------------
+
+Create a new python file in artv2/components. In this file, add an import for the base component:
+
+.. code-block:: python
+
+ import artv2.components.base_components.base_component as base
+
+Now create your class and inherit from base. There are some attributes you need to add to the class (above any
+constructor) and fill out their values. These are the attributes and what they do:
+
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | Type | Name | Description |
+ +============+========================+============================================================================+
+ | attribute | nice_name | (string) The nice name of the component (as it will appear in UIs) |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | category | (string) The name of the category where this component will show up in the |
+ | | | user interface. For example: "Limbs", "Primitives", etc. |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | base_name | The string base name of the component. This is a simple string used to |
+ | | | identify the component type and append onto nodes created by the component.|
+ | | | For example, on a leg component, the base_name is simply: "leg" |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | has_sides | Bool for whether or not the component supports different sides,like a leg |
+ | | | or arm do. |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | can_overwrite_names | Bool for whether or not the user can overwrite the names of the joints of |
+ | | | this component. |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | joint_mover_file | The relative path from the ARTv2 directory to the joint mover file of the |
+ | | | component. For example, self.joint_mover_file = |
+ | | | "resources/rigging_guides/root.ma" |
+ +------------+------------------------+----------------------------------------------------------------------------+
+ | attribute | mirror_table | A dictionary of translate and rotate attributes with their multiplier for |
+ | | | mirroring values to mirrored controls. |
+ +------------+------------------------+----------------------------------------------------------------------------+
+
+At this point, your class should look something like this:
+
+.. code-block:: python
+
+ import artv2.components.base_components.base_component as base
+
+ class MyComponent(base.ART_Component):
+
+ nice_name = "Test"
+ category = "Primitives"
+ base_name = "test"
+ has_sides = True
+ can_overwrite_names = True
+ joint_mover_file = "resources\\rigging_guides\\test.ma"
+ mirror_table = {"translateX": -1, "translateY": -1, "translateZ": -1, "rotateX": 1, "rotateY": 1, "rotateZ": 1}
+
+Usually, you will not need to implement an __init__ method, since the base class should take care of anything you need
+there, but if not, you would want to implement that, and make sure you call on the base class's constructor as well.
+
+The main method you need to implement is _add_metadata. This method adds attributes to the network node of the component
+that coincide with properties on the class. For example, in our test, we had three twist joints, so I could add a
+property called num_twist_joints. There are already some methods in the base class that will help with the property
+setter implementation ( we'll go over that in a minute). Because we will be adding this property, we also want to add
+an attribute on the network node for num_twist_joints. So in this example, here is what our _add_metadata method would
+look like:
+
+.. code-block:: python
+
+ def _add_metadata(self, network_node, prefix, suffix):
+
+ # call on the base class's method to get the default attributes first, then unlock the network node and add our
+ # own. Remember to re-lock the network node after!
+ super(MyComponent, self)._add_metadata(network_node, prefix, suffix)
+
+ network_node.unlock()
+
+ # notice how the minimum and maximum are set to match our configuration on the maya file. Since our twist joints
+ # are hidden by default, the default value is 0.
+ network_node.addAttr("num_twist_joints", min=0, max=3, dv=0, keyable=False)
+ network_node.num_upperarm_twists.set(lock=True)
+
+ network_node.lock()
+
+Now let's define that property that coincides with our attribute.
+
+.. code-block:: python
+
+ @property
+ def num_twist_joints(self):
+
+ # the getter of our property will just read the value on the network node of the same attribute!
+ return self.network_node.num_twist_joints.get()
+
+Our property setter is where the implementation of any configuration changes happens. The base class already has a
+method for dealing with this situation, so our setter is pretty simple here:
+
+.. code-block:: python
+
+ @num_upperarm_twists.setter
+ def num_upperarm_twists(self, new_number):
+ # here we pass in the attribute, the new number, the min and max, and a keyword to search for on the joints.
+ # because our joints are named shoulder_twist_01, etc, we can pass in the key _shoulder_twist_0 to find any
+ # relevant twist joints.
+ self.set_twist_joints("num_twist_joints", new_number, 0, 3, "_shoulder_twist_0")
+
+.. note:: To see a more complex implementation of a property setter, check out the chain component's num_joints
+ property.
+
+At this point, you should be able to reload the scripts (or restart Maya) and your component should be in the UI, and
+properly load into the scene, creating a joint mover rig, and a widget for changing your properties. \ No newline at end of file
diff --git a/docs/build/_sources/sections/tech_docs/components/finger.rst.txt b/docs/build/_sources/sections/tech_docs/components/finger.rst.txt
new file mode 100644
index 0000000..c87ae20
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/finger.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Finger Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.finger.Finger
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/hind_leg.rst.txt b/docs/build/_sources/sections/tech_docs/components/hind_leg.rst.txt
new file mode 100644
index 0000000..206f58a
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/hind_leg.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Hind Leg Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.hind_leg.HindLeg
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/hinge.rst.txt b/docs/build/_sources/sections/tech_docs/components/hinge.rst.txt
new file mode 100644
index 0000000..8f9400d
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/hinge.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Hinge Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.hinge.Hinge
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/joint.rst.txt b/docs/build/_sources/sections/tech_docs/components/joint.rst.txt
new file mode 100644
index 0000000..ff34e21
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/joint.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Joint Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.joint.Joint
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/joint_mover.rst.txt b/docs/build/_sources/sections/tech_docs/components/joint_mover.rst.txt
new file mode 100644
index 0000000..6ba0f23
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/joint_mover.rst.txt
@@ -0,0 +1,16 @@
+==========================
+Joint Mover
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.base_components.joint_mover.JointMover
+ :members:
+
+Properties
+----------
+
+.. py:attribute:: metanode
+
+ This property holds a reference to the owning component's network node (the component that created this joint
+ mover.
diff --git a/docs/build/_sources/sections/tech_docs/components/pose.rst.txt b/docs/build/_sources/sections/tech_docs/components/pose.rst.txt
new file mode 100644
index 0000000..e6510aa
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/pose.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Pose
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: scripts.artv2.components.base_components.pose.Pose
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/components/rig_asset.rst.txt b/docs/build/_sources/sections/tech_docs/components/rig_asset.rst.txt
new file mode 100644
index 0000000..c62bb6e
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/rig_asset.rst.txt
@@ -0,0 +1,20 @@
+==========================
+Assets
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: scripts.artv2.components.base_components.rig_asset.RigAsset
+ :members:
+
+Properties
+----------
+
+.. py:attribute:: name
+
+ This property holds the asset name. This could be the name of the character, for example.
+
+.. py:attribute:: network_node
+ :noindex:
+
+ This property holds the network node that contains this asset's metadata. \ No newline at end of file
diff --git a/docs/build/_sources/sections/tech_docs/components/root_component.rst.txt b/docs/build/_sources/sections/tech_docs/components/root_component.rst.txt
new file mode 100644
index 0000000..3e54803
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/root_component.rst.txt
@@ -0,0 +1,9 @@
+==========================
+Root Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.root.Root
+ :show-inheritance:
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/components/segment.rst.txt b/docs/build/_sources/sections/tech_docs/components/segment.rst.txt
new file mode 100644
index 0000000..90de95a
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/segment.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Segment Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.segment.Segment
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/spine.rst.txt b/docs/build/_sources/sections/tech_docs/components/spine.rst.txt
new file mode 100644
index 0000000..80c4804
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/spine.rst.txt
@@ -0,0 +1,10 @@
+==========================
+Spine Component
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: artv2.components.spine.Spine
+ :show-inheritance:
+ :members:
+
diff --git a/docs/build/_sources/sections/tech_docs/components/template.rst.txt b/docs/build/_sources/sections/tech_docs/components/template.rst.txt
new file mode 100644
index 0000000..b48154f
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/components/template.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Template
+==========================
+
+.. codeauthor:: Jeremy Ernst
+
+.. autoclass:: scripts.artv2.components.base_components.template.Template
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/add_component_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/add_component_widget.rst.txt
new file mode 100644
index 0000000..962ad6b
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/add_component_widget.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Add Component Widget
+==========================
+
+artv2.tools.rigging.rig_builder.add_component_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.add_component_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/available_components_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/available_components_widget.rst.txt
new file mode 100644
index 0000000..787925b
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/available_components_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Available Components Widget
+===========================
+
+artv2.tools.rigging.rig_builder.available_components_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.available_components_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/bone_counter_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/bone_counter_ui.rst.txt
new file mode 100644
index 0000000..81056ea
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/bone_counter_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Bone Counter UI
+===========================
+
+artv2.tools.rigging.bone_counter_ui
+
+.. automodule:: artv2.tools.rigging.bone_counter_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/component_context_menu.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/component_context_menu.rst.txt
new file mode 100644
index 0000000..79ce79c
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/component_context_menu.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Component Context Menu
+===========================
+
+artv2.tools.rigging.rig_builder.component_context_menu
+
+.. automodule:: artv2.tools.rigging.rig_builder.component_context_menu
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/component_settings_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/component_settings_widget.rst.txt
new file mode 100644
index 0000000..bed479e
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/component_settings_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Component Settings Widget
+===========================
+
+artv2.tools.rigging.rig_builder.component_settings_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.component_settings_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/group_bake_offsets_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/group_bake_offsets_ui.rst.txt
new file mode 100644
index 0000000..a1f9d96
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/group_bake_offsets_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Group Bake Offsets UI
+===========================
+
+artv2.tools.rigging.group_bake_offsets_ui
+
+.. automodule:: artv2.tools.rigging.group_bake_offsets_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_ui.rst.txt
new file mode 100644
index 0000000..9e92d29
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Group Mirror UI
+===========================
+
+artv2.tools.rigging.group_mirror_ui
+
+.. automodule:: artv2.tools.rigging.group_mirror_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_xforms_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_xforms_ui.rst.txt
new file mode 100644
index 0000000..83ccca4
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/group_mirror_xforms_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Group Mirror Transforms UI
+===========================
+
+artv2.tools.rigging.group_mirror_xforms_ui
+
+.. automodule:: artv2.tools.rigging.group_mirror_xforms_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/group_reset_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/group_reset_ui.rst.txt
new file mode 100644
index 0000000..dfeb46b
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/group_reset_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Group Reset UI
+===========================
+
+artv2.tools.rigging.group_reset_ui
+
+.. automodule:: artv2.tools.rigging.group_reset_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/installed_components_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/installed_components_widget.rst.txt
new file mode 100644
index 0000000..8c7a8d9
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/installed_components_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Installed Components Widget
+===========================
+
+artv2.tools.rigging.rig_builder.installed_components_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.installed_components_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/load_template_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/load_template_ui.rst.txt
new file mode 100644
index 0000000..78d7063
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/load_template_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Load Template UI
+===========================
+
+artv2.tools.rigging.load_template_ui
+
+.. automodule:: artv2.tools.rigging.load_template_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/mirror_component_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/mirror_component_widget.rst.txt
new file mode 100644
index 0000000..9e68dc3
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/mirror_component_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Mirror Component Widget
+===========================
+
+artv2.tools.rigging.rig_builder.mirror_component_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.mirror_component_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/parent_list_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/parent_list_widget.rst.txt
new file mode 100644
index 0000000..3428326
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/parent_list_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Choose Parent List Widget
+===========================
+
+artv2.tools.rigging.rig_builder.parent_list_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.parent_list_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/pose_manager_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/pose_manager_ui.rst.txt
new file mode 100644
index 0000000..9d88fc1
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/pose_manager_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Pose Manager UI
+===========================
+
+artv2.tools.rigging.pose_manager_ui
+
+.. automodule:: artv2.tools.rigging.pose_manager_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/rename_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/rename_widget.rst.txt
new file mode 100644
index 0000000..0d695f5
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/rename_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Rename Component Widget
+===========================
+
+artv2.tools.rigging.rig_builder.rename_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.rename_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/rig_builder_ui.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/rig_builder_ui.rst.txt
new file mode 100644
index 0000000..e1b01b1
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/rig_builder_ui.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Rig Builder UI
+===========================
+
+artv2.tools.rigging.rig_builder.rig_builder_ui
+
+.. automodule:: artv2.tools.rigging.rig_builder.rig_builder_ui
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/rigging_tools.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/rigging_tools.rst.txt
new file mode 100644
index 0000000..a11d0f2
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/rigging_tools.rst.txt
@@ -0,0 +1,45 @@
+==========================
+Rigging Tools
+==========================
+
+Rig Builder
+-----------
+
+.. image:: /images/rig_builder.png
+
+The following tools are all part of the rig builder interface, usually as widgets within that interface, but a few are
+modal dialogs that the rig builder will call upon.
+
+
+.. toctree::
+ :maxdepth: 1
+
+ add_component_widget.rst
+ available_components_widget.rst
+ component_context_menu.rst
+ component_settings_widget.rst
+ installed_components_widget.rst
+ mirror_component_widget.rst
+ parent_list_widget.rst
+ rename_widget.rst
+ rig_builder_ui.rst
+ set_mirror_widget.rst
+ set_parent_widget.rst
+
+Rig Builder Toolbar
+-------------------
+
+.. image:: /images/rig_builder_toolbar.png
+
+The following tools invoked from the toolbar of the rig builder interface.
+
+.. toctree::
+ :maxdepth: 1
+
+ bone_counter_ui.rst
+ group_bake_offsets_ui.rst
+ group_mirror_ui.rst
+ group_mirror_xforms_ui.rst
+ group_reset_ui.rst
+ load_template_ui.rst
+ pose_manager_ui.rst \ No newline at end of file
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/set_mirror_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/set_mirror_widget.rst.txt
new file mode 100644
index 0000000..68df09b
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/set_mirror_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Set Mirror Widget
+===========================
+
+artv2.tools.rigging.rig_builder.set_mirror_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.set_mirror_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/rigging_tools/set_parent_widget.rst.txt b/docs/build/_sources/sections/tech_docs/rigging_tools/set_parent_widget.rst.txt
new file mode 100644
index 0000000..d51baa4
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/rigging_tools/set_parent_widget.rst.txt
@@ -0,0 +1,8 @@
+===========================
+Set Parent Widget
+===========================
+
+artv2.tools.rigging.rig_builder.set_parent_widget
+
+.. automodule:: artv2.tools.rigging.rig_builder.set_parent_widget
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/running_tests.rst.txt b/docs/build/_sources/sections/tech_docs/running_tests.rst.txt
new file mode 100644
index 0000000..dab6284
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/running_tests.rst.txt
@@ -0,0 +1,29 @@
+=========================
+Running Tests
+=========================
+
+.. codeauthor:: Jeremy Ernst, Chad Vernon
+
+.. note::
+
+ Many thanks to Chad Vernon and his incredibly useful blog posts on running unit tests in Maya. Most of the code
+ found in the artv2_tester package was from his posts.
+
+ Check out his posts `here`_:
+
+ .. _here: http://www.chadvernon.com/blog/unit-testing-in-maya/
+
+
+To run tests to ensure changes to the code base you have made aren't causing any issues, it's best to restart Maya,
+then under the ART v2 menu, in the Development sub-menu, find Run Tests.
+
+The following interface will appear:
+
+.. image:: /images/run_tests.png
+
+From here, you can either hit the left-most play button to run all tests, or select a specific test or group of tests
+and use the "Run Selected Tests" button.
+
+If a test fails, you will get information on the right side about what failed and where.
+
+.. image:: /images/artv2_testing.png \ No newline at end of file
diff --git a/docs/build/_sources/sections/tech_docs/useful_scripting_commands.rst.txt b/docs/build/_sources/sections/tech_docs/useful_scripting_commands.rst.txt
new file mode 100644
index 0000000..6b498cf
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/useful_scripting_commands.rst.txt
@@ -0,0 +1,75 @@
+=========================
+Useful Scripting Commands
+=========================
+
+.. codeauthor:: Jeremy Ernst
+
+Below are some examples for scripting aspects of the system. In order to fully understand all the attributes and
+methods available, please look at the relevant technical documentation.
+
+
+Creating a Simple Character
+---------------------------
+
+.. code-block:: python
+
+ # Import the necessary modules
+ import artv2.components.base_components.rig_asset as rig_asset
+ import artv2.components.root as root
+ import artv2.components.spine as spine
+ import artv2.components.biped_leg as leg
+ import artv2.components.arm as arm
+
+ # Build an asset, which is required to hold other components.
+ new_asset = rig_asset.RigAsset()
+
+ # Create a root component
+ root_inst = root.Root()
+
+ # Create a spine components and set the number of spine joints to 4 and its parent to the root
+ spine_inst = spine.Spine()
+ spine_inst.parent = "root"
+ spine_inst.num_joints = 4
+
+ # Create a leg component for the left leg and set its parent to the pelvis bone created by the spine component.
+ l_leg_inst = leg.BipedLeg()
+ l_leg_inst.parent = "pelvis"
+
+ # Create a mirror of the left leg
+ l_leg_inst.create_mirror(prefix="r", suffix="", parent="pelvis")
+
+ # Set the prefix on the left leg instance
+ l_leg_inst.prefix = "l"
+
+ # Create an arm component and set its parent to the last spine joint created by the spine component.
+ l_arm_inst = arm.Arm(prefix="l")
+ l_arm_inst.parent = "spine_04"
+
+ # Create a mirror of the arm component.
+ r_arm_inst = l_arm_inst.create_mirror(prefix="r", suffix="", parent="spine_04")
+
+
+
+Accessing Component Data
+-------------------------
+
+.. code-block:: python
+
+ # In the example, components already exist in the scene, and we want to access information on the components.
+ import artv2.components.base_components.rig_asset as rig_asset
+ import artv2.components.biped_leg as leg
+
+ # Assume this code has been run previously, which creates an asset and a leg component.
+ asset = rig_asset.RigAsset()
+ leg_inst = leg.BipedLeg()
+
+ # Now assume Maya has been closed and re-opened, so the above variables are no longer valid.
+ # To get access to a specific component, pass in that component's network node in the scene:
+ leg_inst = leg.BipedLeg(network_node="leg_metadata")
+
+ # Now let's gather info about the component
+ print(leg_inst.joint_mover.get_movers())
+ print(leg_inst.joint_mover.get_created_joints())
+
+ # As in the previous example, we can also change properties of the leg, like the prefix, suffix, parent, etc.
+ leg_inst.num_thigh_twists = 2
diff --git a/docs/build/_sources/sections/tech_docs/utilities/component_utils.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/component_utils.rst.txt
new file mode 100644
index 0000000..fbdf431
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/component_utils.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Component Utilities
+==========================
+
+artv2.utilities.component_utilities
+
+.. automodule:: artv2.utilities.component_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/control_utilities.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/control_utilities.rst.txt
new file mode 100644
index 0000000..2f917f1
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/control_utilities.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Control Utilities
+==========================
+
+artv2.utilities.control_utilities
+
+.. automodule:: artv2.utilities.control_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/error_utils.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/error_utils.rst.txt
new file mode 100644
index 0000000..1fea05a
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/error_utils.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Error Utilities
+==========================
+
+artv2.utilities.error_utilities
+
+.. automodule:: artv2.utilities.error_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/general_utils.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/general_utils.rst.txt
new file mode 100644
index 0000000..702873a
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/general_utils.rst.txt
@@ -0,0 +1,8 @@
+==========================
+General Utilities
+==========================
+
+artv2.utilities.general_utilities
+
+.. automodule:: artv2.utilities.general_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/interface_utils.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/interface_utils.rst.txt
new file mode 100644
index 0000000..7f2e43d
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/interface_utils.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Interface Utilities
+==========================
+
+artv2.utilities.interface_utilities
+
+.. automodule:: artv2.utilities.interface_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/joint_mover_utils.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/joint_mover_utils.rst.txt
new file mode 100644
index 0000000..4725558
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/joint_mover_utils.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Joint Mover Utilities
+==========================
+
+artv2.utilities.joint_mover_utilities
+
+.. automodule:: artv2.utilities.joint_mover_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/rigging_utilities.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/rigging_utilities.rst.txt
new file mode 100644
index 0000000..da8f2d7
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/rigging_utilities.rst.txt
@@ -0,0 +1,8 @@
+==========================
+Rigging Utilities
+==========================
+
+artv2.utilities.rigging_utilities
+
+.. automodule:: artv2.utilities.rigging_utilities
+ :members:
diff --git a/docs/build/_sources/sections/tech_docs/utilities/utilities.rst.txt b/docs/build/_sources/sections/tech_docs/utilities/utilities.rst.txt
new file mode 100644
index 0000000..d3830ba
--- /dev/null
+++ b/docs/build/_sources/sections/tech_docs/utilities/utilities.rst.txt
@@ -0,0 +1,18 @@
+.. ARTv2 documentation master file, created by
+ sphinx-quickstart on Fri Jul 27 14:30:57 2018.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Utilities
+=============================
+
+.. toctree::
+ :maxdepth: 1
+
+ general_utils.rst
+ component_utils.rst
+ error_utils.rst
+ interface_utils.rst
+ joint_mover_utils.rst
+ control_utilities.rst
+ rigging_utilities.rst