master b4c2c7b71e18 cached
220 files
15.2 MB
219.6k tokens
486 symbols
1 requests
Download .txt
Showing preview only (849K chars total). Download the full file or copy to clipboard to get everything.
Repository: ADN-DevTech/Maya-Training-Material
Branch: master
Commit: b4c2c7b71e18
Files: 220
Total size: 15.2 MB

Directory structure:
gitextract_xa2stlhf/

├── .gitignore
├── 00_API_Overview_Introduction/
│   ├── 00_API_Overview_Introduction.pptx
│   └── 00_Distinguishing Python.pptx
├── 01_API_Overview/
│   ├── 01_API_Overview.pptx
│   ├── 01_Assignment.docx
│   ├── 02_API_Overview.pptx
│   └── helloWorld/
│       ├── Exercise - py/
│       │   └── helloWorldCmd.py
│       └── Solution - py/
│           └── helloWorldCmd.py
├── 02_Commands/
│   ├── 02_Assignment.docx
│   ├── 02_Commands.pptx
│   ├── 03_Helper Classes.pptx
│   ├── 04_CommandsArguments.pptx
│   ├── 04_UndoRedo.pptx
│   ├── 05_UndoRedo.pptx
│   ├── dagInfo/
│   │   ├── Exercise - C++/
│   │   │   ├── dagInfo.cpp
│   │   │   ├── dagInfo.h
│   │   │   ├── dagInfo.sln
│   │   │   ├── dagInfo.vcxproj
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── dagInfo.py
│   │   ├── Solution - C++/
│   │   │   ├── dagInfo.cpp
│   │   │   ├── dagInfo.h
│   │   │   ├── dagInfo.sln
│   │   │   ├── dagInfo.vcxproj
│   │   │   └── pluginMain.cpp
│   │   ├── Solution - py/
│   │   │   └── dagInfo.py
│   │   └── multiInstance.ma
│   ├── instanceRotate/
│   │   ├── Exercise - C++/
│   │   │   ├── instanceRotate.sln
│   │   │   ├── instanceRotate.vcxproj
│   │   │   ├── instanceRotateCmd.cpp
│   │   │   ├── instanceRotateCmd.h
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── instanceRotateCmd.py
│   │   ├── Solution - C++/
│   │   │   ├── instanceRotate.sln
│   │   │   ├── instanceRotate.vcxproj
│   │   │   ├── instanceRotateCmd.cpp
│   │   │   ├── instanceRotateCmd.h
│   │   │   └── pluginMain.cpp
│   │   └── Solution - py/
│   │       └── instanceRotateCmd.py
│   └── nodeInfo/
│       ├── Exercise - C++/
│       │   ├── nodeInfoCmd.cpp
│       │   ├── nodeInfoCmd.h
│       │   ├── nodeInfoCmd.sln
│       │   ├── nodeInfoCmd.vcxproj
│       │   └── pluginMain.cpp
│       ├── Exercise - py/
│       │   └── nodeInfoCmd.py
│       ├── Solution - C++/
│       │   ├── nodeInfoCmd.cpp
│       │   ├── nodeInfoCmd.h
│       │   ├── nodeInfoCmd.sln
│       │   ├── nodeInfoCmd.vcxproj
│       │   └── pluginMain.cpp
│       └── Solution - py/
│           └── nodeInfoCmd.py
├── 03_Nodes/
│   ├── 03_Assignment.docx
│   ├── 03_Nodes.pptx
│   ├── simpleNode/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── simpleNode.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   └── Solution - py/
│   │       └── simpleNode.py
│   ├── sineNode/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── sineNode.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   └── Solution - py/
│   │       └── sineNode.py
│   └── transCircleNode/
│       ├── Exercise - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── transCircleNode.cpp
│       │   ├── transCircleNode.h
│       │   ├── transCircleNode.mel
│       │   ├── transCircleNode.sln
│       │   └── transCircleNode.vcxproj
│       ├── Exercise - py/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── transCircleNode.mel
│       │   └── transCircleNode.py
│       ├── Solution - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── transCircleNode.cpp
│       │   ├── transCircleNode.h
│       │   ├── transCircleNode.mel
│       │   ├── transCircleNode.sln
│       │   └── transCircleNode.vcxproj
│       └── Solution - py/
│           ├── AEtransCircleTemplate.mel
│           ├── transCircleNode.mel
│           └── transCircleNode.py
├── 04_NodeAttributes/
│   ├── 04_Assignment.docx
│   ├── 04_NodeAttributes.pptx
│   ├── dynNode/
│   │   ├── Exercise - C++/
│   │   │   ├── DynNode.sln
│   │   │   ├── DynNode.vcxproj
│   │   │   ├── dynNode.cpp
│   │   │   ├── dynNode.h
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── dynNode.py
│   │   ├── Solution - C++/
│   │   │   ├── DynNode.sln
│   │   │   ├── DynNode.vcxproj
│   │   │   ├── dynNode.cpp
│   │   │   ├── dynNode.h
│   │   │   └── pluginMain.cpp
│   │   └── Solution - py/
│   │       └── dynNode.py
│   └── simpleNode - with Typed Attr/
│       ├── Exercise - C++/
│       │   ├── pluginMain.cpp
│       │   ├── simpleNode.cpp
│       │   ├── simpleNode.h
│       │   ├── simpleNode.sln
│       │   └── simpleNode.vcxproj
│       ├── Exercise - py/
│       │   └── simpleNode.py
│       ├── Solution - C++/
│       │   ├── pluginMain.cpp
│       │   ├── simpleNode.cpp
│       │   ├── simpleNode.h
│       │   ├── simpleNode.sln
│       │   └── simpleNode.vcxproj
│       └── Solution - py/
│           └── simpleNode.py
├── 05_DependencyGraph/
│   ├── 05_Assignment.docx
│   ├── 05_DependencyGraph.pptx
│   └── retrieveWeight/
│       ├── Exercise - C++/
│       │   ├── pluginMain.cpp
│       │   ├── retrieveWeight.sln
│       │   ├── retrieveWeight.vcxproj
│       │   ├── retrieveWeightCmd.cpp
│       │   └── retrieveWeightCmd.h
│       ├── Exercise - py/
│       │   └── retrieveWeight.py
│       ├── Solution - C++/
│       │   ├── pluginMain.cpp
│       │   ├── retrieveWeight.sln
│       │   ├── retrieveWeight.vcxproj
│       │   ├── retrieveWeightCmd.cpp
│       │   └── retrieveWeightCmd.h
│       ├── Solution - py/
│       │   └── retrieveWeight.py
│       └── blendShape.ma
├── 06_MiscTools/
│   ├── 06_Assignment.docx
│   ├── 06_MiscTools.pptx
│   ├── sceneMsg/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── sceneMsgCmd.cpp
│   │   │   ├── sceneMsgCmd.h
│   │   │   ├── sceneMsgCmd.sln
│   │   │   └── sceneMsgCmd.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── sceneMsgCmd.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── sceneMsgCmd.cpp
│   │   │   ├── sceneMsgCmd.h
│   │   │   ├── sceneMsgCmd.sln
│   │   │   └── sceneMsgCmd.vcxproj
│   │   └── Solution - py/
│   │       └── sceneMsgCmd.py
│   └── setUpTransCircle/
│       ├── Exercise - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── setUpTransCircle.sln
│       │   ├── setUpTransCircle.vcxproj
│       │   ├── setUpTransCircleCmd.cpp
│       │   ├── setUpTransCircleCmd.h
│       │   ├── transCircleNode.cpp
│       │   └── transCircleNode.h
│       ├── Exercise - py/
│       │   └── setUpTransCircle.py
│       ├── Solution - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── setUpTransCircle.sln
│       │   ├── setUpTransCircle.vcxproj
│       │   ├── setUpTransCircleCmd.cpp
│       │   ├── setUpTransCircleCmd.h
│       │   ├── transCircleNode.cpp
│       │   └── transCircleNode.h
│       └── Solution - py/
│           └── setUpTransCircle.py
├── 07_Locator/
│   ├── 07_Assignment.docx
│   ├── 07_Locator.pptx
│   └── arrowLocator/
│       ├── Exercise - C++/
│       │   ├── arrowLocator.sln
│       │   ├── arrowLocator.vcxproj
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       ├── Exercise - py/
│       │   └── arrowLocator.py
│       ├── Solution - C++/
│       │   ├── arrowLocator.sln
│       │   ├── arrowLocator.vcxproj
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       └── Solution - py/
│           └── arrowLocator.py
├── 08_Manipulators/
│   ├── 08_Assignment.docx
│   ├── 08_Manipulators.pptx
│   └── arrowLocatorManip/
│       ├── Exercise - C++/
│       │   ├── arrowLocatorManip.sln
│       │   ├── arrowLocatorManip.vcxproj
│       │   ├── arrowLocatorManipNode.cpp
│       │   ├── arrowLocatorManipNode.h
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       ├── Exercise - py/
│       │   └── arrowLocatorManip.py
│       ├── Solution - C++/
│       │   ├── arrowLocatorManip.sln
│       │   ├── arrowLocatorManip.vcxproj
│       │   ├── arrowLocatorManipNode.cpp
│       │   ├── arrowLocatorManipNode.h
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       └── Solution - py/
│           └── arrowLocatorManip.py
├── 09_PythonAPI/
│   ├── 09_Assignment.docx
│   ├── 09_Python 2.0.pptx
│   ├── 09_Python Scripting Exercise.pptx
│   ├── 09_PythonAPI.pptx
│   ├── 09_ReadingC++Docs.pptx
│   ├── helloWorld/
│   │   ├── Exercise - py/
│   │   │   └── helloWorldCmd.py
│   │   └── Solution - py/
│   │       └── helloWorldCmd.py
│   └── sineNode/
│       ├── Exercise - py/
│       │   └── sineNode.py
│       ├── Solution - py/
│       │   └── sineNode.py
│       └── sineNode-setup.mel
├── 10_PythonAdvanced/
│   ├── 10_PythonAdvanced.ppt
│   ├── DemoInstructions.docx
│   └── examples/
│       ├── ShotServer.py
│       ├── alt_str.py
│       ├── cppCentroid.cpp
│       ├── dist.py
│       ├── guipdb.py
│       ├── guipdb1.py
│       └── pyCentroid.py
├── AdditionalDocuments/
│   ├── Introduction to Maya API Summary.pptx
│   └── MELvsPython.ppt
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results

[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/

# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
!packages/*/build/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
*.ncrunch*
.*crunch*.local.xml

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml
*.pubxml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/

# Windows Azure Build Output
csx
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac crap
.DS_Store

# Compiled Object files
*.slo
*.lo
*.o

# Compiled Dynamic libraries
*.so
*.dylib

# Compiled Static libraries
*.lai
*.la
*.a


================================================
FILE: 01_API_Overview/helloWorld/Exercise - py/helloWorldCmd.py
================================================
# Copyright (C) 
# 
# Author: Autodesk Developer Network

#For this exercise, search for the TODO keywords and follow the instructions in
#comments. If you are unsure of what you need to do, feel free to ask the instructor
#or look into the solution folder.
#Each #... line is a line of code you need to write or complete.

# Python script to execute to test the sample in the Maya Script Editor
# import maya
# maya.cmds.loadPlugin("helloWorldCmd.py")
# maya.cmds.spHelloWorld()

#- Import all the necessary modules here
#TODO: ...

kPluginCmdName = "spHelloWorld"

# class implementation for custom command
class scriptedCommand(OpenMayaMPx.MPxCommand):
	#- TODO: Add Implementation of __init__(self) and doIt(self,argList)
	#...

# Creator
#- TODO: Implement the creator function and apply asMPxPtr() to it
#...
	
# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		#- TODO: Register this custom command                
		#...
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )
		raise

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		#- TODO: Deregister this custom command                 
		#...
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )
		raise

================================================
FILE: 01_API_Overview/helloWorld/Solution - py/helloWorldCmd.py
================================================
# Copyright (C) 
# 
# File: helloWorld.py
#
# Author: Autodesk Developer Network

# Python script to execute to test the sample in the Maya Script Editor
# import maya
# maya.cmds.loadPlugin("helloWorldCmd.py")
# maya.cmds.spHelloWorld()

#- Import all the necessary modules here
import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

kPluginCmdName = "spHelloWorld"

# class implementation for custom command
class scriptedCommand(OpenMayaMPx.MPxCommand):
	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)
	def doIt(self,argList):
		print "Hello World!"

# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( scriptedCommand() )
	
# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.registerCommand( kPluginCmdName, cmdCreator )
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )
		raise

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterCommand( kPluginCmdName )
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )
		raise


================================================
FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.cpp
================================================
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#include "dagInfo.h"

#include <maya/MArgList.h>
#include <maya/MSelectionList.h>
#include <maya/MItSelectionList.h>
#include <maya/MGlobal.h>
#include <maya/MDagPath.h>
#include <maya/MDagPathArray.h>
#include <maya/MFnDagNode.h>
#include <maya/MMatrix.h>
#include <maya/MFnBlendShapeDeformer.h>
#include <maya/MFnTransform.h>

//- This method performs the action of the command. It iterates over all
//- selected items and prints out connected plug and dependency node type
//- information.
MStatus dagInfo::doIt(const MArgList& )
{
	MStatus stat;

	//- Select all objects currently selected into the Maya editor.
	MSelectionList slist;
	MGlobal::getActiveSelectionList( slist );
	//- Create an iterator on the selection list (using the iterator pattern).
	MItSelectionList iter( slist, MFn::kDagNode,&stat );

	//- Iterate over all selected dependency nodes
	for ( ; !iter.isDone(); iter.next() ) 
	{
		
		//- get the dependency node first and then apply MFnDagNode function set onto it.
		MObject depNode;
		iter.getDependNode(depNode);

		MFnDagNode fnDag(depNode);
		cout<<"********************************************************"<<endl;
		cout<<"The selected node name is "<<fnDag.name(&stat)<<", node type : "<<depNode.apiTypeStr()<<endl;

		//- TODO: Retrieve number of instances on this dag node
		unsigned int num = //...
		if( num != 1 )	cout<<"Number of instances on this node is : "<<num<<endl;
		
		MDagPathArray dagPathArray;
		//- TODO: Retrieve all the instanced paths of this dag node, assign to "dagPathArray"
		//- and print out them
		//...

		for(unsigned int j = 0; j < dagPathArray.length(); j++)
		{
			MDagPath instanceDagPath = dagPathArray[j];
			//- TODO: Get this instance full dag path and print it
			cout<<"Dag Path "<<j<<" for this node:"<< //...
				<<endl;
		
			//- TODO: Get the exclusive matrix of this node and print it.
			MMatrix exMatrix = //...
			cout<<"The exclusive transformation matrix of this node is "<<exMatrix<<endl;

			//- TODO: Get the inclusive matrix of this node and print it.
			//- If it is a shape node, the inclusive and exclusive matrix should be the same
			//- If it is a transform node and its transformation matrix is not identity, they 
			//- should be different!
			MMatrix inMatrix = //...
			cout<<"The inclusive transformation matrix of this node is "<<inMatrix<<endl;

			//- TODO: Decide if this dag node is a transform node
			//
			if ( //... )
			{
				//- If this dag node is a transform node, also get its local transformation matrix
				MFnTransform fnTrans(instanceDagPath);
				MTransformationMatrix localMatrix = fnTrans.transformation();
				cout<<"The local transformation matrix represented by this transform node is "<<localMatrix.asMatrix()<<endl;
			}
		}
	}

	//- Return success to Maya
	return MS::kSuccess;
}

================================================
FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.h
================================================
//
// Copyright (C) 
// 
// File: dagInfo.h
//
// MEL Command: dagInfo
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>

// Command class declaration
class dagInfo : public MPxCommand
{
public:
	dagInfo() {}
	virtual ~dagInfo() {}

	static void *creator() {
		return new dagInfo();
	}
	
	//- This method should perform a command by setting up internal class data
	//- and then calling the redoIt method if undo is supported by the command.
	//- The actual action performed by the command should be done in the redoIt 
	//- method. This is a pure virtual method, and must be overridden in derived 
	//- classes.
	virtual MStatus doIt(const MArgList &);

};


================================================
FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dagInfo", "dagInfo.vcxproj", "{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Debug|x64.ActiveCfg = Debug|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Debug|x64.Build.0 = Debug|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Release|x64.ActiveCfg = Release|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <OutDir>Debug\</OutDir>
    <IntDir>Debug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <OutDir>C:\MayaAPITraining\plug-ins\</OutDir>
    <TargetExt>.mll</TargetExt>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <OutDir>Release\</OutDir>
    <IntDir>Release\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2009\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;OpenMayaAnim.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2009\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2015\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;OpenMayaAnim.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2015\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="dagInfo.cpp" />
    <ClCompile Include="pluginMain.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="dagInfo.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 02_Commands/dagInfo/Exercise - C++/pluginMain.cpp
================================================
//
// Copyright (C)  
// 
// File: pluginMain.cpp
//
// Author: Maya Plug-in Wizard 2.0
//
#include <maya/MFnPlugin.h>
#include <maya/MGlobal.h>
#include "dagInfo.h"

MStatus initializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is loaded into Maya.  It 
//		registers all of the services that this plug-in provides with 
//		Maya.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{ 
	MStatus   status;
	MFnPlugin plugin( obj, "", "2009", "Any");

	// Add plug-in feature registration here
	//

	status = plugin.registerCommand("dagInfo",dagInfo::creator);

	return status;
}

MStatus uninitializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is unloaded from Maya. It 
//		deregisters all of the services that it was providing.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus   status;
	MFnPlugin plugin( obj );

	// Add plug-in feature deregistration here
	//
	status = plugin.deregisterCommand("dagInfo");

	return status;
}


================================================
FILE: 02_Commands/dagInfo/Exercise - py/dagInfo.py
================================================
# Copyright (C) 
# 
# Author: Autodesk Developer Network

#For this exercise, search for the TODO keywords and follow the instructions in
#comments. If you are unsure of what you need to do, feel free to ask the instructor
#or look into the solution folder.
#Each #... line is a line of code you need to write or complete.

import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

# Command name
kPluginCmdName = "dagInfo"

# dagInfo command
class dagInfo(OpenMayaMPx.MPxCommand):
	
	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)

	#- This method performs the action of the command. It iterates over all
	#- selected items and prints out connected plug and dependency node type
	#- information.
	def doIt(self, args):
		#- Select all objects currently selected into the Maya editor.
		slist = OpenMaya.MSelectionList()
		OpenMaya.MGlobal.getActiveSelectionList( slist )
		#- Create an iterator on the selection list (using the iterator pattern).
		iter = OpenMaya.MItSelectionList( slist, OpenMaya.MFn.kDagNode )

		#- Iterate over all selected dependency nodes
		while ( iter.isDone() == 0 ): 
			#- Not getting the dag path, it will only return one path. I.e.:
			#dagPath = OpenMaya.MDagPath 
			#iter.getDagPath(dagPath)

			#- Instead, get the dependency node first and then apply MFnDagNode function set onto it.
			depNode = OpenMaya.MObject()
			iter.getDependNode(depNode)

			fnDag = OpenMaya.MFnDagNode(depNode)
			print "********************************************************"
			sys.stdout.write( '\n' )
			print "The selected node name is %s" % fnDag.name()
			print ", node type : %s" % depNode.apiTypeStr()
			sys.stdout.write( '\n' )

			#- TODO: Retrieve number of instances on this dag node
			num = #...
			if( num != 1 ):
				print "Number of instances on this node is : %d" % num
				sys.stdout.write( '\n' )
			
			# Save out the MMatrix __str__ function so we can replace it once were done
			oldMMatrix_str = OpenMaya.MMatrix .__str__		
			# Call my new printing function to print the matrix so that is it readable
			OpenMaya.MMatrix.__str__ = myMatrix_str		
			
			#- TODO: Retrieve all the instanced paths of this dag node and print out them
			dagPathArray = OpenMaya.MDagPathArray()
			#...
			for j in range (0, dagPathArray.length()):
				instanceDagPath = dagPathArray[j]
				#- TODO: Get this instance full dag path and print it
				#...
				
				sys.stdout.write( '\n' )
			
				#- TODO: Get the exclusive matrix of this node
				exMatrix = #...
				
				print "The exclusive transformation matrix of this node is "
				print exMatrix
				sys.stdout.write( '\n' )

				#- TODO: Get the inclusive matrix of this node
				#- If it is a shape node, the inclusive and exclusive matrix should be the same
				#- If it is a transform node and its transformation matrix is not identity, they 
				#- should be different!
				inMatrix = #...
				print "The inclusive transformation matrix of this node is "
				print inMatrix
				sys.stdout.write( '\n' )

				#- TODO: If this dag node is a transform node, also get its local transformation matrix
				if ( #... ):
					fnTrans = OpenMaya.MFnTransform(instanceDagPath)
					localMatrix = fnTrans.transformation()
					print "The local transformation matrix represented by this transform node is "
					print localMatrix.asMatrix()
					sys.stdout.write( '\n' )

			iter.next()
			# Replace MMatrix __str__ function to the default
			OpenMaya.MMatrix.__str__ = oldMMatrix_str


# New __str__ function for Making the matrix readable....
def myMatrix_str(self):
	return "[[%g,%g,%g,%g][%g,%g,%g,%g][%g,%g,%g,%g][%g,%g,%g,%g]]" % (self(0,0), self(0,1), self(0,2), self(0,3), self(1,0), self(1,1), self(1,2), self(1,3), self(2,0), self(2,1), self(2,2), self(2,3), self(3,0), self(3,1), self(3,2), self(3,3))

# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( dagInfo() )

# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.registerCommand( kPluginCmdName, cmdCreator )
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterCommand( kPluginCmdName )
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )



================================================
FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.cpp
================================================
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#include "dagInfo.h"

#include <maya/MArgList.h>
#include <maya/MSelectionList.h>
#include <maya/MItSelectionList.h>
#include <maya/MGlobal.h>
#include <maya/MDagPath.h>
#include <maya/MDagPathArray.h>
#include <maya/MFnDagNode.h>
#include <maya/MMatrix.h>
#include <maya/MFnBlendShapeDeformer.h>
#include <maya/MFnTransform.h>

//- This method performs the action of the command. It iterates over all
//- selected items and prints out connected plug and dependency node type
//- information.
MStatus dagInfo::doIt(const MArgList& )
{
	MStatus stat;

	//- Select all objects currently selected into the Maya editor.
	MSelectionList slist;
	MGlobal::getActiveSelectionList( slist );
	//- Create an iterator on the selection list (using the iterator pattern).
	MItSelectionList iter( slist, MFn::kDagNode,&stat );

	//- Iterate over all selected dependency nodes
	for ( ; !iter.isDone(); iter.next() ) 
	{
		//- get the dependency node first and then apply MFnDagNode function set onto it.
		MObject depNode;
		iter.getDependNode(depNode);

		MFnDagNode fnDag(depNode);
		cout<<"********************************************************"<<endl;
		cout<<"The selected node name is "<<fnDag.name(&stat)<<", node type : "<<depNode.apiTypeStr()<<endl;

		//- Retrieve number of instances on this dag node
		unsigned int num = fnDag.instanceCount(true,&stat);
		if( num != 1 )	cout<<"Number of instances on this node is : "<<num<<endl;
		
		//- Retrieve all the instanced paths of this dag node and print out them
		MDagPathArray dagPathArray;
		fnDag.getAllPaths(dagPathArray);
		for(unsigned int j = 0; j < dagPathArray.length(); j++)
		{
			MDagPath instanceDagPath = dagPathArray[j];
			cout<<"Dag Path "<<j<<" for this node:"<<instanceDagPath.fullPathName(&stat)<<endl;
		
			//- Get the exclusive matrix of this node
			MMatrix exMatrix = instanceDagPath.exclusiveMatrix(&stat);
			cout<<"The exclusive transformation matrix of this node is "<<exMatrix<<endl;

			//- Get the inclusive matrix of this node
			//- If it is a shape node, the inclusive and exclusive matrix should be the same
			//- If it is a transform node and its transformation matrix is not identity, they 
			//- should be different!
			MMatrix inMatrix = instanceDagPath.inclusiveMatrix(&stat);
			cout<<"The inclusive transformation matrix of this node is "<<inMatrix<<endl;

			//- If this dag node is a transform node, also get its local transformation matrix
			if (depNode.hasFn(MFn::kTransform))
			{
				MFnTransform fnTrans(instanceDagPath);
				MTransformationMatrix localMatrix = fnTrans.transformation();
				cout<<"The local transformation matrix represented by this transform node is "<<localMatrix.asMatrix()<<endl;
			}
		}
	}

	//- Return success to Maya
	return MS::kSuccess;
}

================================================
FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.h
================================================
//
// Copyright (C) 
// 
// File: dagInfo.h
//
// MEL Command: dagInfo
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>

// Command class declaration
class dagInfo : public MPxCommand
{
public:
	dagInfo() {}
	virtual ~dagInfo() {}

	static void *creator() {
		return new dagInfo();
	}
	
	//- This method should perform a command by setting up internal class data
	//- and then calling the redoIt method if undo is supported by the command.
	//- The actual action performed by the command should be done in the redoIt 
	//- method. This is a pure virtual method, and must be overridden in derived 
	//- classes.
	virtual MStatus doIt(const MArgList &);

};


================================================
FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dagInfo", "dagInfo.vcxproj", "{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Debug|x64.ActiveCfg = Debug|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Debug|x64.Build.0 = Debug|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Release|x64.ActiveCfg = Release|x64
		{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{62B3E8DE-B8B9-4DEF-99F4-78E2EA80E56B}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <OutDir>Debug\</OutDir>
    <IntDir>Debug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <TargetExt>.mll</TargetExt>
    <OutDir>C:\MayaAPITraining\plug-ins\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <OutDir>Release\</OutDir>
    <IntDir>Release\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2009\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;OpenMayaAnim.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2009\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2015\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;OpenMayaAnim.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2015\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/dagInfo.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\dagInfo.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/dagInfo.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/dagInfo.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="dagInfo.cpp" />
    <ClCompile Include="pluginMain.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="dagInfo.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 02_Commands/dagInfo/Solution - C++/pluginMain.cpp
================================================
//
// Copyright (C)  
// 
// File: pluginMain.cpp
//
// Author: Maya Plug-in Wizard 2.0
//
#include <maya/MFnPlugin.h>
#include <maya/MGlobal.h>
#include "dagInfo.h"

MStatus initializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is loaded into Maya.  It 
//		registers all of the services that this plug-in provides with 
//		Maya.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{ 
	MStatus   status;
	MFnPlugin plugin( obj, "", "2012", "Any");

	// Add plug-in feature registration here
	//

	status = plugin.registerCommand("dagInfo",dagInfo::creator);

	return status;
}

MStatus uninitializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is unloaded from Maya. It 
//		deregisters all of the services that it was providing.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus   status;
	MFnPlugin plugin( obj );

	// Add plug-in feature deregistration here
	//
	status = plugin.deregisterCommand("dagInfo");

	return status;
}


================================================
FILE: 02_Commands/dagInfo/Solution - py/dagInfo.py
================================================
# Copyright (C) 
# 
# File: dagInfo.py
#
# Author: Autodesk Developer Network

import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

# Command name
kPluginCmdName = "dagInfo"

# dagInfo command
class dagInfo(OpenMayaMPx.MPxCommand):
	
	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)

	#- This method performs the action of the command. It iterates over all
	#- selected items and prints out connected plug and dependency node type
	#- information.
	def doIt(self, args):
		#- Select all objects currently selected into the Maya editor.
		slist = OpenMaya.MSelectionList()
		OpenMaya.MGlobal.getActiveSelectionList( slist )
		#- Create an iterator on the selection list (using the iterator pattern).
		iter = OpenMaya.MItSelectionList( slist, OpenMaya.MFn.kDagNode )

		#- Iterate over all selected dependency nodes
		while ( iter.isDone() == 0 ): 
			#- Not getting the dag path, it will only return one path. I.e.:
			#dagPath = OpenMaya.MDagPath 
			#iter.getDagPath(dagPath)

			#- Instead, get the dependency node first and then apply MFnDagNode function set onto it.
			depNode = OpenMaya.MObject()
			iter.getDependNode(depNode)

			fnDag = OpenMaya.MFnDagNode(depNode)
			print "********************************************************"
			sys.stdout.write( '\n' )
			print "The selected node name is %s, node type : %s" % (fnDag.name(), depNode.apiTypeStr())
			sys.stdout.write( '\n' )

			#- Retrieve number of instances on this dag node
			num = fnDag.instanceCount(1)
			if( num != 1 ):
				print "Number of instances on this node is : %d" % num
				sys.stdout.write( '\n' )
			
			#Save out the MMatrix __str__ function so we can replace it once were done
			oldMMatrix_str = OpenMaya.MMatrix .__str__		
			# Call my new printing function to print the matrix so that is it readable
			OpenMaya.MMatrix.__str__ = myMatrix_str		
			
			#- Retrieve all the instanced paths of this dag node and print out them
			dagPathArray = OpenMaya.MDagPathArray()
			fnDag.getAllPaths(dagPathArray)
			for j in range (0, dagPathArray.length()):
				instanceDagPath = dagPathArray[j]
				print "Dag Path %d for this node: %s" % (j, instanceDagPath.fullPathName())
				
				sys.stdout.write( '\n' )
			
				#- Get the exclusive matrix of this node
				exMatrix = instanceDagPath.exclusiveMatrix()

				print "The exclusive transformation matrix of this node is:"
				print exMatrix
				sys.stdout.write( '\n' )

				#- Get the inclusive matrix of this node
				#- If it is a shape node, the inclusive and exclusive matrix should be the same
				#- If it is a transform node and its transformation matrix is not identity, they 
				#- should be different!
				inMatrix = instanceDagPath.inclusiveMatrix()
				print "The inclusive transformation matrix of this node is:"
				print inMatrix
				sys.stdout.write( '\n' )

				#- If this dag node is a transform node, also get its local transformation matrix
				if (depNode.hasFn(OpenMaya.MFn.kTransform)):
					fnTrans = OpenMaya.MFnTransform(instanceDagPath)
					localMatrix = fnTrans.transformation()
					print "The local transformation matrix represented by this transform node is:"
					print localMatrix.asMatrix()
					sys.stdout.write( '\n' )
				
			iter.next()
			# Replace MMatrix __str__ function to the default
			OpenMaya.MMatrix.__str__ = oldMMatrix_str


# New __str__ function for Making the matrix readable....
def myMatrix_str(self):
	return "[[%g,%g,%g,%g][%g,%g,%g,%g][%g,%g,%g,%g][%g,%g,%g,%g]]" % (self(0,0), self(0,1), self(0,2), self(0,3), 
	self(1,0), self(1,1), self(1,2), self(1,3), self(2,0), self(2,1), self(2,2), self(2,3), self(3,0), self(3,1), self(3,2), self(3,3))

# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( dagInfo() )

# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.registerCommand( kPluginCmdName, cmdCreator )
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterCommand( kPluginCmdName )
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )



================================================
FILE: 02_Commands/dagInfo/multiInstance.ma
================================================
//Maya ASCII 2012 scene
//Name: multiInstance.ma
//Last modified: Sun, Sep 25, 2011 11:03:05 PM
//Codeset: 1252
requires maya "2012";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2012";
fileInfo "version" "2012 Hotfix 1";
fileInfo "cutIdentifier" "001200000000-798788";
fileInfo "osv" "Microsoft Windows XP Professional Service Pack 3 (Build 2600)\n";
createNode transform -s -n "persp";
	setAttr ".v" no;
	setAttr ".t" -type "double3" 36.204867073134864 24.239823589777796 10.518486229164782 ;
	setAttr ".r" -type "double3" -32.738352729661635 73.799999999992863 1.1400200983521435e-014 ;
createNode camera -s -n "perspShape" -p "persp";
	setAttr -k off ".v" no;
	setAttr ".fl" 34.999999999999993;
	setAttr ".coi" 44.82186966202994;
	setAttr ".imn" -type "string" "persp";
	setAttr ".den" -type "string" "persp_depth";
	setAttr ".man" -type "string" "persp_mask";
	setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
	setAttr ".v" no;
	setAttr ".t" -type "double3" 0 100.1 0 ;
	setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
	setAttr -k off ".v" no;
	setAttr ".rnd" no;
	setAttr ".coi" 100.1;
	setAttr ".ow" 30;
	setAttr ".imn" -type "string" "top";
	setAttr ".den" -type "string" "top_depth";
	setAttr ".man" -type "string" "top_mask";
	setAttr ".hc" -type "string" "viewSet -t %camera";
	setAttr ".o" yes;
createNode transform -s -n "front";
	setAttr ".v" no;
	setAttr ".t" -type "double3" 0 0 100.1 ;
createNode camera -s -n "frontShape" -p "front";
	setAttr -k off ".v" no;
	setAttr ".rnd" no;
	setAttr ".coi" 100.1;
	setAttr ".ow" 30;
	setAttr ".imn" -type "string" "front";
	setAttr ".den" -type "string" "front_depth";
	setAttr ".man" -type "string" "front_mask";
	setAttr ".hc" -type "string" "viewSet -f %camera";
	setAttr ".o" yes;
createNode transform -s -n "side";
	setAttr ".v" no;
	setAttr ".t" -type "double3" 100.1 0 0 ;
	setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
	setAttr -k off ".v" no;
	setAttr ".rnd" no;
	setAttr ".coi" 100.1;
	setAttr ".ow" 30;
	setAttr ".imn" -type "string" "side";
	setAttr ".den" -type "string" "side_depth";
	setAttr ".man" -type "string" "side_mask";
	setAttr ".hc" -type "string" "viewSet -s %camera";
	setAttr ".o" yes;
createNode transform -n "pCylinder1";
	setAttr ".t" -type "double3" 0 0 -6 ;
createNode mesh -n "pCylinderShape1" -p "pCylinder1";
	setAttr -k off ".v";
	setAttr -s 4 ".iog";
	setAttr ".vir" yes;
	setAttr ".vif" yes;
	setAttr ".uvst[0].uvsn" -type "string" "map1";
	setAttr ".cuvs" -type "string" "map1";
	setAttr ".dcc" -type "string" "Ambient+Diffuse";
	setAttr ".covm[0]"  0 1 1;
	setAttr ".cdvm[0]"  0 1 1;
	setAttr ".bnr" 0;
createNode transform -n "pCylinder2";
	setAttr ".t" -type "double3" 0 0 -2 ;
createNode transform -n "pCylinder3";
	setAttr ".t" -type "double3" 0 0 2 ;
createNode transform -n "pCylinder4";
	setAttr ".t" -type "double3" 0 0 6 ;
parent -s -nc -r -add "|pCylinder1|pCylinderShape1" "pCylinder2" ;
parent -s -nc -r -add "|pCylinder1|pCylinderShape1" "pCylinder3" ;
parent -s -nc -r -add "|pCylinder1|pCylinderShape1" "pCylinder4" ;
createNode lightLinker -s -n "lightLinker1";
	setAttr -s 2 ".lnk";
	setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
createNode displayLayer -n "defaultLayer";
createNode renderLayerManager -n "renderLayerManager";
createNode renderLayer -n "defaultRenderLayer";
	setAttr ".g" yes;
createNode polyCylinder -n "polyCylinder1";
	setAttr ".sc" 1;
	setAttr ".cuv" 3;
createNode script -n "uiConfigurationScriptNode";
	setAttr ".b" -type "string" (
		"// Maya Mel UI Configuration File.\n//\n//  This script is machine generated.  Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint    $useSceneConfig = $gUseScenePanelConfig;\n\tint    $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint    $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint    $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t//  get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n            modelEditor -e \n                -camera \"top\" \n                -useInteractiveMode 0\n                -displayLights \"default\" \n                -displayAppearance \"wireframe\" \n"
		+ "                -activeOnly 0\n                -ignorePanZoom 0\n                -wireframeOnShaded 0\n                -headsUpDisplay 1\n                -selectionHiliteDisplay 1\n                -useDefaultMaterial 0\n                -bufferMode \"double\" \n                -twoSidedLighting 1\n                -backfaceCulling 0\n                -xray 0\n                -jointXray 0\n                -activeComponentsXray 0\n                -displayTextures 0\n                -smoothWireframe 0\n                -lineWidth 1\n                -textureAnisotropic 0\n                -textureHilight 1\n                -textureSampling 2\n                -textureDisplay \"modulate\" \n                -textureMaxSize 8192\n                -fogging 0\n                -fogSource \"fragment\" \n                -fogMode \"linear\" \n                -fogStart 0\n                -fogEnd 100\n                -fogDensity 0.1\n                -fogColor 0.5 0.5 0.5 1 \n                -maxConstantTransparency 1\n                -rendererName \"base_OpenGL_Renderer\" \n"
		+ "                -colorResolution 256 256 \n                -bumpResolution 512 512 \n                -textureCompression 0\n                -transparencyAlgorithm \"frontAndBackCull\" \n                -transpInShadows 0\n                -cullingOverride \"none\" \n                -lowQualityLighting 0\n                -maximumNumHardwareLights 1\n                -occlusionCulling 0\n                -shadingModel 0\n                -useBaseRenderer 0\n                -useReducedRenderer 0\n                -smallObjectCulling 0\n                -smallObjectThreshold -1 \n                -interactiveDisableShadows 0\n                -interactiveBackFaceCull 0\n                -sortTransparent 1\n                -nurbsCurves 1\n                -nurbsSurfaces 1\n                -polymeshes 1\n                -subdivSurfaces 1\n                -planes 1\n                -lights 1\n                -cameras 1\n                -controlVertices 1\n                -hulls 1\n                -grid 1\n                -joints 1\n                -ikHandles 1\n"
		+ "                -deformers 1\n                -dynamics 1\n                -fluids 1\n                -hairSystems 1\n                -follicles 1\n                -nCloths 1\n                -nParticles 1\n                -nRigids 1\n                -dynamicConstraints 1\n                -locators 1\n                -manipulators 1\n                -dimensions 1\n                -handles 1\n                -pivots 1\n                -textures 1\n                -strokes 1\n                -motionTrails 1\n                -shadows 0\n                $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels  $panelName;\n\t\t$editorName = $panelName;\n        modelEditor -e \n            -camera \"top\" \n            -useInteractiveMode 0\n            -displayLights \"default\" \n            -displayAppearance \"wireframe\" \n            -activeOnly 0\n            -ignorePanZoom 0\n            -wireframeOnShaded 0\n"
		+ "            -headsUpDisplay 1\n            -selectionHiliteDisplay 1\n            -useDefaultMaterial 0\n            -bufferMode \"double\" \n            -twoSidedLighting 1\n            -backfaceCulling 0\n            -xray 0\n            -jointXray 0\n            -activeComponentsXray 0\n            -displayTextures 0\n            -smoothWireframe 0\n            -lineWidth 1\n            -textureAnisotropic 0\n            -textureHilight 1\n            -textureSampling 2\n            -textureDisplay \"modulate\" \n            -textureMaxSize 8192\n            -fogging 0\n            -fogSource \"fragment\" \n            -fogMode \"linear\" \n            -fogStart 0\n            -fogEnd 100\n            -fogDensity 0.1\n            -fogColor 0.5 0.5 0.5 1 \n            -maxConstantTransparency 1\n            -rendererName \"base_OpenGL_Renderer\" \n            -colorResolution 256 256 \n            -bumpResolution 512 512 \n            -textureCompression 0\n            -transparencyAlgorithm \"frontAndBackCull\" \n            -transpInShadows 0\n            -cullingOverride \"none\" \n"
		+ "            -lowQualityLighting 0\n            -maximumNumHardwareLights 1\n            -occlusionCulling 0\n            -shadingModel 0\n            -useBaseRenderer 0\n            -useReducedRenderer 0\n            -smallObjectCulling 0\n            -smallObjectThreshold -1 \n            -interactiveDisableShadows 0\n            -interactiveBackFaceCull 0\n            -sortTransparent 1\n            -nurbsCurves 1\n            -nurbsSurfaces 1\n            -polymeshes 1\n            -subdivSurfaces 1\n            -planes 1\n            -lights 1\n            -cameras 1\n            -controlVertices 1\n            -hulls 1\n            -grid 1\n            -joints 1\n            -ikHandles 1\n            -deformers 1\n            -dynamics 1\n            -fluids 1\n            -hairSystems 1\n            -follicles 1\n            -nCloths 1\n            -nParticles 1\n            -nRigids 1\n            -dynamicConstraints 1\n            -locators 1\n            -manipulators 1\n            -dimensions 1\n            -handles 1\n            -pivots 1\n"
		+ "            -textures 1\n            -strokes 1\n            -motionTrails 1\n            -shadows 0\n            $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n            modelEditor -e \n                -camera \"side\" \n                -useInteractiveMode 0\n                -displayLights \"default\" \n                -displayAppearance \"wireframe\" \n                -activeOnly 0\n                -ignorePanZoom 0\n                -wireframeOnShaded 0\n                -headsUpDisplay 1\n                -selectionHiliteDisplay 1\n                -useDefaultMaterial 0\n                -bufferMode \"double\" \n                -twoSidedLighting 1\n                -backfaceCulling 0\n"
		+ "                -xray 0\n                -jointXray 0\n                -activeComponentsXray 0\n                -displayTextures 0\n                -smoothWireframe 0\n                -lineWidth 1\n                -textureAnisotropic 0\n                -textureHilight 1\n                -textureSampling 2\n                -textureDisplay \"modulate\" \n                -textureMaxSize 8192\n                -fogging 0\n                -fogSource \"fragment\" \n                -fogMode \"linear\" \n                -fogStart 0\n                -fogEnd 100\n                -fogDensity 0.1\n                -fogColor 0.5 0.5 0.5 1 \n                -maxConstantTransparency 1\n                -rendererName \"base_OpenGL_Renderer\" \n                -colorResolution 256 256 \n                -bumpResolution 512 512 \n                -textureCompression 0\n                -transparencyAlgorithm \"frontAndBackCull\" \n                -transpInShadows 0\n                -cullingOverride \"none\" \n                -lowQualityLighting 0\n                -maximumNumHardwareLights 1\n"
		+ "                -occlusionCulling 0\n                -shadingModel 0\n                -useBaseRenderer 0\n                -useReducedRenderer 0\n                -smallObjectCulling 0\n                -smallObjectThreshold -1 \n                -interactiveDisableShadows 0\n                -interactiveBackFaceCull 0\n                -sortTransparent 1\n                -nurbsCurves 1\n                -nurbsSurfaces 1\n                -polymeshes 1\n                -subdivSurfaces 1\n                -planes 1\n                -lights 1\n                -cameras 1\n                -controlVertices 1\n                -hulls 1\n                -grid 1\n                -joints 1\n                -ikHandles 1\n                -deformers 1\n                -dynamics 1\n                -fluids 1\n                -hairSystems 1\n                -follicles 1\n                -nCloths 1\n                -nParticles 1\n                -nRigids 1\n                -dynamicConstraints 1\n                -locators 1\n                -manipulators 1\n                -dimensions 1\n"
		+ "                -handles 1\n                -pivots 1\n                -textures 1\n                -strokes 1\n                -motionTrails 1\n                -shadows 0\n                $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels  $panelName;\n\t\t$editorName = $panelName;\n        modelEditor -e \n            -camera \"side\" \n            -useInteractiveMode 0\n            -displayLights \"default\" \n            -displayAppearance \"wireframe\" \n            -activeOnly 0\n            -ignorePanZoom 0\n            -wireframeOnShaded 0\n            -headsUpDisplay 1\n            -selectionHiliteDisplay 1\n            -useDefaultMaterial 0\n            -bufferMode \"double\" \n            -twoSidedLighting 1\n            -backfaceCulling 0\n            -xray 0\n            -jointXray 0\n            -activeComponentsXray 0\n            -displayTextures 0\n            -smoothWireframe 0\n            -lineWidth 1\n"
		+ "            -textureAnisotropic 0\n            -textureHilight 1\n            -textureSampling 2\n            -textureDisplay \"modulate\" \n            -textureMaxSize 8192\n            -fogging 0\n            -fogSource \"fragment\" \n            -fogMode \"linear\" \n            -fogStart 0\n            -fogEnd 100\n            -fogDensity 0.1\n            -fogColor 0.5 0.5 0.5 1 \n            -maxConstantTransparency 1\n            -rendererName \"base_OpenGL_Renderer\" \n            -colorResolution 256 256 \n            -bumpResolution 512 512 \n            -textureCompression 0\n            -transparencyAlgorithm \"frontAndBackCull\" \n            -transpInShadows 0\n            -cullingOverride \"none\" \n            -lowQualityLighting 0\n            -maximumNumHardwareLights 1\n            -occlusionCulling 0\n            -shadingModel 0\n            -useBaseRenderer 0\n            -useReducedRenderer 0\n            -smallObjectCulling 0\n            -smallObjectThreshold -1 \n            -interactiveDisableShadows 0\n            -interactiveBackFaceCull 0\n"
		+ "            -sortTransparent 1\n            -nurbsCurves 1\n            -nurbsSurfaces 1\n            -polymeshes 1\n            -subdivSurfaces 1\n            -planes 1\n            -lights 1\n            -cameras 1\n            -controlVertices 1\n            -hulls 1\n            -grid 1\n            -joints 1\n            -ikHandles 1\n            -deformers 1\n            -dynamics 1\n            -fluids 1\n            -hairSystems 1\n            -follicles 1\n            -nCloths 1\n            -nParticles 1\n            -nRigids 1\n            -dynamicConstraints 1\n            -locators 1\n            -manipulators 1\n            -dimensions 1\n            -handles 1\n            -pivots 1\n            -textures 1\n            -strokes 1\n            -motionTrails 1\n            -shadows 0\n            $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" == $panelName) {\n"
		+ "\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n            modelEditor -e \n                -camera \"front\" \n                -useInteractiveMode 0\n                -displayLights \"default\" \n                -displayAppearance \"wireframe\" \n                -activeOnly 0\n                -ignorePanZoom 0\n                -wireframeOnShaded 0\n                -headsUpDisplay 1\n                -selectionHiliteDisplay 1\n                -useDefaultMaterial 0\n                -bufferMode \"double\" \n                -twoSidedLighting 1\n                -backfaceCulling 0\n                -xray 0\n                -jointXray 0\n                -activeComponentsXray 0\n                -displayTextures 0\n                -smoothWireframe 0\n                -lineWidth 1\n                -textureAnisotropic 0\n                -textureHilight 1\n                -textureSampling 2\n                -textureDisplay \"modulate\" \n                -textureMaxSize 8192\n"
		+ "                -fogging 0\n                -fogSource \"fragment\" \n                -fogMode \"linear\" \n                -fogStart 0\n                -fogEnd 100\n                -fogDensity 0.1\n                -fogColor 0.5 0.5 0.5 1 \n                -maxConstantTransparency 1\n                -rendererName \"base_OpenGL_Renderer\" \n                -colorResolution 256 256 \n                -bumpResolution 512 512 \n                -textureCompression 0\n                -transparencyAlgorithm \"frontAndBackCull\" \n                -transpInShadows 0\n                -cullingOverride \"none\" \n                -lowQualityLighting 0\n                -maximumNumHardwareLights 1\n                -occlusionCulling 0\n                -shadingModel 0\n                -useBaseRenderer 0\n                -useReducedRenderer 0\n                -smallObjectCulling 0\n                -smallObjectThreshold -1 \n                -interactiveDisableShadows 0\n                -interactiveBackFaceCull 0\n                -sortTransparent 1\n                -nurbsCurves 1\n"
		+ "                -nurbsSurfaces 1\n                -polymeshes 1\n                -subdivSurfaces 1\n                -planes 1\n                -lights 1\n                -cameras 1\n                -controlVertices 1\n                -hulls 1\n                -grid 1\n                -joints 1\n                -ikHandles 1\n                -deformers 1\n                -dynamics 1\n                -fluids 1\n                -hairSystems 1\n                -follicles 1\n                -nCloths 1\n                -nParticles 1\n                -nRigids 1\n                -dynamicConstraints 1\n                -locators 1\n                -manipulators 1\n                -dimensions 1\n                -handles 1\n                -pivots 1\n                -textures 1\n                -strokes 1\n                -motionTrails 1\n                -shadows 0\n                $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels  $panelName;\n"
		+ "\t\t$editorName = $panelName;\n        modelEditor -e \n            -camera \"front\" \n            -useInteractiveMode 0\n            -displayLights \"default\" \n            -displayAppearance \"wireframe\" \n            -activeOnly 0\n            -ignorePanZoom 0\n            -wireframeOnShaded 0\n            -headsUpDisplay 1\n            -selectionHiliteDisplay 1\n            -useDefaultMaterial 0\n            -bufferMode \"double\" \n            -twoSidedLighting 1\n            -backfaceCulling 0\n            -xray 0\n            -jointXray 0\n            -activeComponentsXray 0\n            -displayTextures 0\n            -smoothWireframe 0\n            -lineWidth 1\n            -textureAnisotropic 0\n            -textureHilight 1\n            -textureSampling 2\n            -textureDisplay \"modulate\" \n            -textureMaxSize 8192\n            -fogging 0\n            -fogSource \"fragment\" \n            -fogMode \"linear\" \n            -fogStart 0\n            -fogEnd 100\n            -fogDensity 0.1\n            -fogColor 0.5 0.5 0.5 1 \n            -maxConstantTransparency 1\n"
		+ "            -rendererName \"base_OpenGL_Renderer\" \n            -colorResolution 256 256 \n            -bumpResolution 512 512 \n            -textureCompression 0\n            -transparencyAlgorithm \"frontAndBackCull\" \n            -transpInShadows 0\n            -cullingOverride \"none\" \n            -lowQualityLighting 0\n            -maximumNumHardwareLights 1\n            -occlusionCulling 0\n            -shadingModel 0\n            -useBaseRenderer 0\n            -useReducedRenderer 0\n            -smallObjectCulling 0\n            -smallObjectThreshold -1 \n            -interactiveDisableShadows 0\n            -interactiveBackFaceCull 0\n            -sortTransparent 1\n            -nurbsCurves 1\n            -nurbsSurfaces 1\n            -polymeshes 1\n            -subdivSurfaces 1\n            -planes 1\n            -lights 1\n            -cameras 1\n            -controlVertices 1\n            -hulls 1\n            -grid 1\n            -joints 1\n            -ikHandles 1\n            -deformers 1\n            -dynamics 1\n            -fluids 1\n"
		+ "            -hairSystems 1\n            -follicles 1\n            -nCloths 1\n            -nParticles 1\n            -nRigids 1\n            -dynamicConstraints 1\n            -locators 1\n            -manipulators 1\n            -dimensions 1\n            -handles 1\n            -pivots 1\n            -textures 1\n            -strokes 1\n            -motionTrails 1\n            -shadows 0\n            $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n            modelEditor -e \n                -camera \"persp\" \n                -useInteractiveMode 0\n                -displayLights \"default\" \n                -displayAppearance \"wireframe\" \n                -activeOnly 0\n                -ignorePanZoom 0\n"
		+ "                -wireframeOnShaded 0\n                -headsUpDisplay 1\n                -selectionHiliteDisplay 1\n                -useDefaultMaterial 0\n                -bufferMode \"double\" \n                -twoSidedLighting 1\n                -backfaceCulling 0\n                -xray 0\n                -jointXray 0\n                -activeComponentsXray 0\n                -displayTextures 0\n                -smoothWireframe 0\n                -lineWidth 1\n                -textureAnisotropic 0\n                -textureHilight 1\n                -textureSampling 2\n                -textureDisplay \"modulate\" \n                -textureMaxSize 8192\n                -fogging 0\n                -fogSource \"fragment\" \n                -fogMode \"linear\" \n                -fogStart 0\n                -fogEnd 100\n                -fogDensity 0.1\n                -fogColor 0.5 0.5 0.5 1 \n                -maxConstantTransparency 1\n                -rendererName \"base_OpenGL_Renderer\" \n                -colorResolution 256 256 \n                -bumpResolution 512 512 \n"
		+ "                -textureCompression 0\n                -transparencyAlgorithm \"frontAndBackCull\" \n                -transpInShadows 0\n                -cullingOverride \"none\" \n                -lowQualityLighting 0\n                -maximumNumHardwareLights 1\n                -occlusionCulling 0\n                -shadingModel 0\n                -useBaseRenderer 0\n                -useReducedRenderer 0\n                -smallObjectCulling 0\n                -smallObjectThreshold -1 \n                -interactiveDisableShadows 0\n                -interactiveBackFaceCull 0\n                -sortTransparent 1\n                -nurbsCurves 1\n                -nurbsSurfaces 1\n                -polymeshes 1\n                -subdivSurfaces 1\n                -planes 1\n                -lights 1\n                -cameras 1\n                -controlVertices 1\n                -hulls 1\n                -grid 1\n                -joints 1\n                -ikHandles 1\n                -deformers 1\n                -dynamics 1\n                -fluids 1\n"
		+ "                -hairSystems 1\n                -follicles 1\n                -nCloths 1\n                -nParticles 1\n                -nRigids 1\n                -dynamicConstraints 1\n                -locators 1\n                -manipulators 1\n                -dimensions 1\n                -handles 1\n                -pivots 1\n                -textures 1\n                -strokes 1\n                -motionTrails 1\n                -shadows 0\n                $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels  $panelName;\n\t\t$editorName = $panelName;\n        modelEditor -e \n            -camera \"persp\" \n            -useInteractiveMode 0\n            -displayLights \"default\" \n            -displayAppearance \"wireframe\" \n            -activeOnly 0\n            -ignorePanZoom 0\n            -wireframeOnShaded 0\n            -headsUpDisplay 1\n            -selectionHiliteDisplay 1\n            -useDefaultMaterial 0\n"
		+ "            -bufferMode \"double\" \n            -twoSidedLighting 1\n            -backfaceCulling 0\n            -xray 0\n            -jointXray 0\n            -activeComponentsXray 0\n            -displayTextures 0\n            -smoothWireframe 0\n            -lineWidth 1\n            -textureAnisotropic 0\n            -textureHilight 1\n            -textureSampling 2\n            -textureDisplay \"modulate\" \n            -textureMaxSize 8192\n            -fogging 0\n            -fogSource \"fragment\" \n            -fogMode \"linear\" \n            -fogStart 0\n            -fogEnd 100\n            -fogDensity 0.1\n            -fogColor 0.5 0.5 0.5 1 \n            -maxConstantTransparency 1\n            -rendererName \"base_OpenGL_Renderer\" \n            -colorResolution 256 256 \n            -bumpResolution 512 512 \n            -textureCompression 0\n            -transparencyAlgorithm \"frontAndBackCull\" \n            -transpInShadows 0\n            -cullingOverride \"none\" \n            -lowQualityLighting 0\n            -maximumNumHardwareLights 1\n"
		+ "            -occlusionCulling 0\n            -shadingModel 0\n            -useBaseRenderer 0\n            -useReducedRenderer 0\n            -smallObjectCulling 0\n            -smallObjectThreshold -1 \n            -interactiveDisableShadows 0\n            -interactiveBackFaceCull 0\n            -sortTransparent 1\n            -nurbsCurves 1\n            -nurbsSurfaces 1\n            -polymeshes 1\n            -subdivSurfaces 1\n            -planes 1\n            -lights 1\n            -cameras 1\n            -controlVertices 1\n            -hulls 1\n            -grid 1\n            -joints 1\n            -ikHandles 1\n            -deformers 1\n            -dynamics 1\n            -fluids 1\n            -hairSystems 1\n            -follicles 1\n            -nCloths 1\n            -nParticles 1\n            -nRigids 1\n            -dynamicConstraints 1\n            -locators 1\n            -manipulators 1\n            -dimensions 1\n            -handles 1\n            -pivots 1\n            -textures 1\n            -strokes 1\n            -motionTrails 1\n"
		+ "            -shadows 0\n            $editorName;\nmodelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n            outlinerEditor -e \n                -showShapes 1\n                -showAttributes 0\n                -showConnected 0\n                -showAnimCurvesOnly 0\n                -showMuteInfo 0\n                -organizeByLayer 1\n                -showAnimLayerWeight 1\n                -autoExpandLayers 1\n                -autoExpand 0\n                -showDagOnly 0\n                -showAssets 1\n                -showContainedOnly 1\n                -showPublishedAsConnected 0\n                -showContainerContents 1\n                -ignoreDagHierarchy 0\n                -expandConnections 0\n"
		+ "                -showUpstreamCurves 1\n                -showUnitlessCurves 1\n                -showCompounds 1\n                -showLeafs 1\n                -showNumericAttrsOnly 0\n                -highlightActive 1\n                -autoSelectNewObjects 0\n                -doNotSelectNewObjects 0\n                -dropIsParent 1\n                -transmitFilters 0\n                -setFilter \"defaultSetFilter\" \n                -showSetMembers 1\n                -allowMultiSelection 1\n                -alwaysToggleSelect 0\n                -directSelect 0\n                -displayMode \"DAG\" \n                -expandObjects 0\n                -setsIgnoreFilters 1\n                -containersIgnoreFilters 0\n                -editAttrName 0\n                -showAttrValues 0\n                -highlightSecondary 0\n                -showUVAttrsOnly 0\n                -showTextureNodesOnly 0\n                -attrAlphaOrder \"default\" \n                -animLayerFilterOptions \"allAffecting\" \n                -sortOrder \"none\" \n                -longNames 0\n"
		+ "                -niceNames 1\n                -showNamespace 1\n                -showPinIcons 0\n                -mapMotionTrails 0\n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels  $panelName;\n\t\t$editorName = $panelName;\n        outlinerEditor -e \n            -showShapes 1\n            -showAttributes 0\n            -showConnected 0\n            -showAnimCurvesOnly 0\n            -showMuteInfo 0\n            -organizeByLayer 1\n            -showAnimLayerWeight 1\n            -autoExpandLayers 1\n            -autoExpand 0\n            -showDagOnly 0\n            -showAssets 1\n            -showContainedOnly 1\n            -showPublishedAsConnected 0\n            -showContainerContents 1\n            -ignoreDagHierarchy 0\n            -expandConnections 0\n            -showUpstreamCurves 1\n            -showUnitlessCurves 1\n            -showCompounds 1\n            -showLeafs 1\n            -showNumericAttrsOnly 0\n            -highlightActive 1\n"
		+ "            -autoSelectNewObjects 0\n            -doNotSelectNewObjects 0\n            -dropIsParent 1\n            -transmitFilters 0\n            -setFilter \"defaultSetFilter\" \n            -showSetMembers 1\n            -allowMultiSelection 1\n            -alwaysToggleSelect 0\n            -directSelect 0\n            -displayMode \"DAG\" \n            -expandObjects 0\n            -setsIgnoreFilters 1\n            -containersIgnoreFilters 0\n            -editAttrName 0\n            -showAttrValues 0\n            -highlightSecondary 0\n            -showUVAttrsOnly 0\n            -showTextureNodesOnly 0\n            -attrAlphaOrder \"default\" \n            -animLayerFilterOptions \"allAffecting\" \n            -sortOrder \"none\" \n            -longNames 0\n            -niceNames 1\n            -showNamespace 1\n            -showPinIcons 0\n            -mapMotionTrails 0\n            $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n"
		+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n            outlinerEditor -e \n                -showShapes 1\n                -showAttributes 1\n                -showConnected 1\n                -showAnimCurvesOnly 1\n                -showMuteInfo 0\n                -organizeByLayer 1\n                -showAnimLayerWeight 1\n                -autoExpandLayers 1\n                -autoExpand 1\n                -showDagOnly 0\n                -showAssets 1\n                -showContainedOnly 0\n                -showPublishedAsConnected 0\n                -showContainerContents 0\n                -ignoreDagHierarchy 0\n                -expandConnections 1\n                -showUpstreamCurves 1\n                -showUnitlessCurves 1\n                -showCompounds 0\n                -showLeafs 1\n                -showNumericAttrsOnly 1\n                -highlightActive 0\n"
		+ "                -autoSelectNewObjects 1\n                -doNotSelectNewObjects 0\n                -dropIsParent 1\n                -transmitFilters 1\n                -setFilter \"0\" \n                -showSetMembers 0\n                -allowMultiSelection 1\n                -alwaysToggleSelect 0\n                -directSelect 0\n                -displayMode \"DAG\" \n                -expandObjects 0\n                -setsIgnoreFilters 1\n                -containersIgnoreFilters 0\n                -editAttrName 0\n                -showAttrValues 0\n                -highlightSecondary 0\n                -showUVAttrsOnly 0\n                -showTextureNodesOnly 0\n                -attrAlphaOrder \"default\" \n                -animLayerFilterOptions \"allAffecting\" \n                -sortOrder \"none\" \n                -longNames 0\n                -niceNames 1\n                -showNamespace 1\n                -showPinIcons 1\n                -mapMotionTrails 1\n                $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n            animCurveEditor -e \n"
		+ "                -displayKeys 1\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 1\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"integer\" \n                -snapValue \"none\" \n                -showResults \"off\" \n                -showBufferCurves \"off\" \n                -smoothness \"fine\" \n                -resultSamples 1\n                -resultScreenSamples 0\n                -resultUpdate \"delayed\" \n                -showUpstreamCurves 1\n                -stackedCurves 0\n                -stackedCurvesMin -1\n                -stackedCurvesMax 1\n                -stackedCurvesSpace 0.2\n                -displayNormalized 0\n                -preSelectionHighlight 0\n                -constrainDrag 0\n                -classicMode 1\n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels  $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n"
		+ "            outlinerEditor -e \n                -showShapes 1\n                -showAttributes 1\n                -showConnected 1\n                -showAnimCurvesOnly 1\n                -showMuteInfo 0\n                -organizeByLayer 1\n                -showAnimLayerWeight 1\n                -autoExpandLayers 1\n                -autoExpand 1\n                -showDagOnly 0\n                -showAssets 1\n                -showContainedOnly 0\n                -showPublishedAsConnected 0\n                -showContainerContents 0\n                -ignoreDagHierarchy 0\n                -expandConnections 1\n                -showUpstreamCurves 1\n                -showUnitlessCurves 1\n                -showCompounds 0\n                -showLeafs 1\n                -showNumericAttrsOnly 1\n                -highlightActive 0\n                -autoSelectNewObjects 1\n                -doNotSelectNewObjects 0\n                -dropIsParent 1\n                -transmitFilters 1\n                -setFilter \"0\" \n                -showSetMembers 0\n                -allowMultiSelection 1\n"
		+ "                -alwaysToggleSelect 0\n                -directSelect 0\n                -displayMode \"DAG\" \n                -expandObjects 0\n                -setsIgnoreFilters 1\n                -containersIgnoreFilters 0\n                -editAttrName 0\n                -showAttrValues 0\n                -highlightSecondary 0\n                -showUVAttrsOnly 0\n                -showTextureNodesOnly 0\n                -attrAlphaOrder \"default\" \n                -animLayerFilterOptions \"allAffecting\" \n                -sortOrder \"none\" \n                -longNames 0\n                -niceNames 1\n                -showNamespace 1\n                -showPinIcons 1\n                -mapMotionTrails 1\n                $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n            animCurveEditor -e \n                -displayKeys 1\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 1\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"integer\" \n"
		+ "                -snapValue \"none\" \n                -showResults \"off\" \n                -showBufferCurves \"off\" \n                -smoothness \"fine\" \n                -resultSamples 1\n                -resultScreenSamples 0\n                -resultUpdate \"delayed\" \n                -showUpstreamCurves 1\n                -stackedCurves 0\n                -stackedCurvesMin -1\n                -stackedCurvesMax 1\n                -stackedCurvesSpace 0.2\n                -displayNormalized 0\n                -preSelectionHighlight 0\n                -constrainDrag 0\n                -classicMode 1\n                $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n            outlinerEditor -e \n"
		+ "                -showShapes 1\n                -showAttributes 1\n                -showConnected 1\n                -showAnimCurvesOnly 1\n                -showMuteInfo 0\n                -organizeByLayer 1\n                -showAnimLayerWeight 1\n                -autoExpandLayers 1\n                -autoExpand 0\n                -showDagOnly 0\n                -showAssets 1\n                -showContainedOnly 0\n                -showPublishedAsConnected 0\n                -showContainerContents 0\n                -ignoreDagHierarchy 0\n                -expandConnections 1\n                -showUpstreamCurves 1\n                -showUnitlessCurves 0\n                -showCompounds 1\n                -showLeafs 1\n                -showNumericAttrsOnly 1\n                -highlightActive 0\n                -autoSelectNewObjects 0\n                -doNotSelectNewObjects 1\n                -dropIsParent 1\n                -transmitFilters 0\n                -setFilter \"0\" \n                -showSetMembers 0\n                -allowMultiSelection 1\n"
		+ "                -alwaysToggleSelect 0\n                -directSelect 0\n                -displayMode \"DAG\" \n                -expandObjects 0\n                -setsIgnoreFilters 1\n                -containersIgnoreFilters 0\n                -editAttrName 0\n                -showAttrValues 0\n                -highlightSecondary 0\n                -showUVAttrsOnly 0\n                -showTextureNodesOnly 0\n                -attrAlphaOrder \"default\" \n                -animLayerFilterOptions \"allAffecting\" \n                -sortOrder \"none\" \n                -longNames 0\n                -niceNames 1\n                -showNamespace 1\n                -showPinIcons 0\n                -mapMotionTrails 1\n                $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n            dopeSheetEditor -e \n                -displayKeys 1\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"integer\" \n"
		+ "                -snapValue \"none\" \n                -outliner \"dopeSheetPanel1OutlineEd\" \n                -showSummary 1\n                -showScene 0\n                -hierarchyBelow 0\n                -showTicks 1\n                -selectionWindow 0 0 0 0 \n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels  $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n            outlinerEditor -e \n                -showShapes 1\n                -showAttributes 1\n                -showConnected 1\n                -showAnimCurvesOnly 1\n                -showMuteInfo 0\n                -organizeByLayer 1\n                -showAnimLayerWeight 1\n                -autoExpandLayers 1\n                -autoExpand 0\n                -showDagOnly 0\n                -showAssets 1\n                -showContainedOnly 0\n                -showPublishedAsConnected 0\n                -showContainerContents 0\n                -ignoreDagHierarchy 0\n"
		+ "                -expandConnections 1\n                -showUpstreamCurves 1\n                -showUnitlessCurves 0\n                -showCompounds 1\n                -showLeafs 1\n                -showNumericAttrsOnly 1\n                -highlightActive 0\n                -autoSelectNewObjects 0\n                -doNotSelectNewObjects 1\n                -dropIsParent 1\n                -transmitFilters 0\n                -setFilter \"0\" \n                -showSetMembers 0\n                -allowMultiSelection 1\n                -alwaysToggleSelect 0\n                -directSelect 0\n                -displayMode \"DAG\" \n                -expandObjects 0\n                -setsIgnoreFilters 1\n                -containersIgnoreFilters 0\n                -editAttrName 0\n                -showAttrValues 0\n                -highlightSecondary 0\n                -showUVAttrsOnly 0\n                -showTextureNodesOnly 0\n                -attrAlphaOrder \"default\" \n                -animLayerFilterOptions \"allAffecting\" \n                -sortOrder \"none\" \n"
		+ "                -longNames 0\n                -niceNames 1\n                -showNamespace 1\n                -showPinIcons 0\n                -mapMotionTrails 1\n                $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n            dopeSheetEditor -e \n                -displayKeys 1\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"integer\" \n                -snapValue \"none\" \n                -outliner \"dopeSheetPanel1OutlineEd\" \n                -showSummary 1\n                -showScene 0\n                -hierarchyBelow 0\n                -showTicks 1\n                -selectionWindow 0 0 0 0 \n                $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n"
		+ "\t\t\t$panelName = `scriptedPanel -unParent  -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n            clipEditor -e \n                -displayKeys 0\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"none\" \n                -snapValue \"none\" \n                -manageSequencer 0 \n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels  $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n            clipEditor -e \n                -displayKeys 0\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"none\" \n"
		+ "                -snapValue \"none\" \n                -manageSequencer 0 \n                $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n            hyperGraph -e \n                -graphLayoutStyle \"hierarchicalLayout\" \n                -orientation \"horiz\" \n                -mergeConnections 0\n                -zoom 1\n                -animateTransition 0\n                -showRelationships 1\n                -showShapes 0\n                -showDeformers 0\n                -showExpressions 0\n                -showConstraints 0\n                -showUnderworld 0\n                -showInvisible 0\n                -transitionFrames 1\n                -opaqueContainers 0\n"
		+ "                -freeform 0\n                -imagePosition 0 0 \n                -imageScale 1\n                -imageEnabled 0\n                -graphType \"DAG\" \n                -heatMapDisplay 0\n                -updateSelection 1\n                -updateNodeAdded 1\n                -useDrawOverrideColor 0\n                -limitGraphTraversal -1\n                -range 0 0 \n                -iconSize \"smallIcons\" \n                -showCachedConnections 0\n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels  $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n            hyperGraph -e \n                -graphLayoutStyle \"hierarchicalLayout\" \n                -orientation \"horiz\" \n                -mergeConnections 0\n                -zoom 1\n                -animateTransition 0\n                -showRelationships 1\n                -showShapes 0\n                -showDeformers 0\n                -showExpressions 0\n"
		+ "                -showConstraints 0\n                -showUnderworld 0\n                -showInvisible 0\n                -transitionFrames 1\n                -opaqueContainers 0\n                -freeform 0\n                -imagePosition 0 0 \n                -imageScale 1\n                -imageEnabled 0\n                -graphType \"DAG\" \n                -heatMapDisplay 0\n                -updateSelection 1\n                -updateNodeAdded 1\n                -useDrawOverrideColor 0\n                -limitGraphTraversal -1\n                -range 0 0 \n                -iconSize \"smallIcons\" \n                -showCachedConnections 0\n                $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n"
		+ "\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Texture Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels `;\n"
		+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"blendShapePanel\" (localizedPanelLabel(\"Blend Shape\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tblendShapePanel -unParent -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
		+ "\t\tblendShapePanel -edit -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n"
		+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n"
		+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n"
		+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"multiListerPanel\" (localizedPanelLabel(\"Multilister\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"multiListerPanel\" -l (localizedPanelLabel(\"Multilister\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Multilister\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"devicePanel\" (localizedPanelLabel(\"Devices\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tdevicePanel -unParent -l (localizedPanelLabel(\"Devices\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
		+ "\t\tdevicePanel -edit -l (localizedPanelLabel(\"Devices\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"webBrowserPanel\" (localizedPanelLabel(\"Web Browser\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"webBrowserPanel\" -l (localizedPanelLabel(\"Web Browser\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Web Browser\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
		+ "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels  $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent  -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n            clipEditor -e \n                -displayKeys 0\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"none\" \n                -snapValue \"none\" \n                -manageSequencer 1 \n                $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels  $panelName;\n"
		+ "\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n            clipEditor -e \n                -displayKeys 0\n                -displayTangents 0\n                -displayActiveKeys 0\n                -displayActiveKeyTangents 0\n                -displayInfinities 0\n                -autoFit 0\n                -snapTime \"none\" \n                -snapValue \"none\" \n                -manageSequencer 1 \n                $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n        string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n        if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap true\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n"
		+ "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n    -cam `findStartUpCamera persp` \\n    -useInteractiveMode 0\\n    -displayLights \\\"default\\\" \\n    -displayAppearance \\\"wireframe\\\" \\n    -activeOnly 0\\n    -ignorePanZoom 0\\n    -wireframeOnShaded 0\\n    -headsUpDisplay 1\\n    -selectionHiliteDisplay 1\\n    -useDefaultMaterial 0\\n    -bufferMode \\\"double\\\" \\n    -twoSidedLighting 1\\n    -backfaceCulling 0\\n    -xray 0\\n    -jointXray 0\\n    -activeComponentsXray 0\\n    -displayTextures 0\\n    -smoothWireframe 0\\n    -lineWidth 1\\n    -textureAnisotropic 0\\n    -textureHilight 1\\n    -textureSampling 2\\n    -textureDisplay \\\"modulate\\\" \\n    -textureMaxSize 8192\\n    -fogging 0\\n    -fogSource \\\"fragment\\\" \\n    -fogMode \\\"linear\\\" \\n    -fogStart 0\\n    -fogEnd 100\\n    -fogDensity 0.1\\n    -fogColor 0.5 0.5 0.5 1 \\n    -maxConstantTransparency 1\\n    -rendererName \\\"base_OpenGL_Renderer\\\" \\n    -colorResolution 256 256 \\n    -bumpResolution 512 512 \\n    -textureCompression 0\\n    -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n    -transpInShadows 0\\n    -cullingOverride \\\"none\\\" \\n    -lowQualityLighting 0\\n    -maximumNumHardwareLights 1\\n    -occlusionCulling 0\\n    -shadingModel 0\\n    -useBaseRenderer 0\\n    -useReducedRenderer 0\\n    -smallObjectCulling 0\\n    -smallObjectThreshold -1 \\n    -interactiveDisableShadows 0\\n    -interactiveBackFaceCull 0\\n    -sortTransparent 1\\n    -nurbsCurves 1\\n    -nurbsSurfaces 1\\n    -polymeshes 1\\n    -subdivSurfaces 1\\n    -planes 1\\n    -lights 1\\n    -cameras 1\\n    -controlVertices 1\\n    -hulls 1\\n    -grid 1\\n    -joints 1\\n    -ikHandles 1\\n    -deformers 1\\n    -dynamics 1\\n    -fluids 1\\n    -hairSystems 1\\n    -follicles 1\\n    -nCloths 1\\n    -nParticles 1\\n    -nRigids 1\\n    -dynamicConstraints 1\\n    -locators 1\\n    -manipulators 1\\n    -dimensions 1\\n    -handles 1\\n    -pivots 1\\n    -textures 1\\n    -strokes 1\\n    -motionTrails 1\\n    -shadows 0\\n    $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n"
		+ "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels  $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n    -cam `findStartUpCamera persp` \\n    -useInteractiveMode 0\\n    -displayLights \\\"default\\\" \\n    -displayAppearance \\\"wireframe\\\" \\n    -activeOnly 0\\n    -ignorePanZoom 0\\n    -wireframeOnShaded 0\\n    -headsUpDisplay 1\\n    -selectionHiliteDisplay 1\\n    -useDefaultMaterial 0\\n    -bufferMode \\\"double\\\" \\n    -twoSidedLighting 1\\n    -backfaceCulling 0\\n    -xray 0\\n    -jointXray 0\\n    -activeComponentsXray 0\\n    -displayTextures 0\\n    -smoothWireframe 0\\n    -lineWidth 1\\n    -textureAnisotropic 0\\n    -textureHilight 1\\n    -textureSampling 2\\n    -textureDisplay \\\"modulate\\\" \\n    -textureMaxSize 8192\\n    -fogging 0\\n    -fogSource \\\"fragment\\\" \\n    -fogMode \\\"linear\\\" \\n    -fogStart 0\\n    -fogEnd 100\\n    -fogDensity 0.1\\n    -fogColor 0.5 0.5 0.5 1 \\n    -maxConstantTransparency 1\\n    -rendererName \\\"base_OpenGL_Renderer\\\" \\n    -colorResolution 256 256 \\n    -bumpResolution 512 512 \\n    -textureCompression 0\\n    -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n    -transpInShadows 0\\n    -cullingOverride \\\"none\\\" \\n    -lowQualityLighting 0\\n    -maximumNumHardwareLights 1\\n    -occlusionCulling 0\\n    -shadingModel 0\\n    -useBaseRenderer 0\\n    -useReducedRenderer 0\\n    -smallObjectCulling 0\\n    -smallObjectThreshold -1 \\n    -interactiveDisableShadows 0\\n    -interactiveBackFaceCull 0\\n    -sortTransparent 1\\n    -nurbsCurves 1\\n    -nurbsSurfaces 1\\n    -polymeshes 1\\n    -subdivSurfaces 1\\n    -planes 1\\n    -lights 1\\n    -cameras 1\\n    -controlVertices 1\\n    -hulls 1\\n    -grid 1\\n    -joints 1\\n    -ikHandles 1\\n    -deformers 1\\n    -dynamics 1\\n    -fluids 1\\n    -hairSystems 1\\n    -follicles 1\\n    -nCloths 1\\n    -nParticles 1\\n    -nRigids 1\\n    -dynamicConstraints 1\\n    -locators 1\\n    -manipulators 1\\n    -dimensions 1\\n    -handles 1\\n    -pivots 1\\n    -textures 1\\n    -strokes 1\\n    -motionTrails 1\\n    -shadows 0\\n    $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n"
		+ "\t\t\t\t$configName;\n\n            setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n        }\n\n        panelHistory -e -clear mainPanelHistory;\n        setFocus `paneLayout -q -p1 $gMainPane`;\n        sceneUIReplacement -deleteRemaining;\n        sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n");
	setAttr ".st" 3;
createNode script -n "sceneConfigurationScriptNode";
	setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
	setAttr ".st" 6;
select -ne :time1;
	setAttr ".o" 1;
	setAttr ".unw" 1;
select -ne :renderPartition;
	setAttr -s 2 ".st";
select -ne :initialShadingGroup;
	setAttr -s 4 ".dsm";
	setAttr ".ro" yes;
select -ne :initialParticleSE;
	setAttr ".ro" yes;
select -ne :defaultShaderList1;
	setAttr -s 2 ".s";
select -ne :postProcessList1;
	setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
select -ne :renderGlobalsList1;
select -ne :hardwareRenderGlobals;
	setAttr ".ctrs" 256;
	setAttr ".btrs" 512;
select -ne :defaultHardwareRenderGlobals;
	setAttr ".fn" -type "string" "im";
	setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
connectAttr "polyCylinder1.out" "|pCylinder1|pCylinderShape1.i";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "|pCylinder1|pCylinderShape1.iog" ":initialShadingGroup.dsm" -na;
connectAttr "|pCylinder2|pCylinderShape1.iog" ":initialShadingGroup.dsm" -na;
connectAttr "|pCylinder3|pCylinderShape1.iog" ":initialShadingGroup.dsm" -na;
connectAttr "|pCylinder4|pCylinderShape1.iog" ":initialShadingGroup.dsm" -na;
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of multiInstance.ma


================================================
FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotate.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "instanceRotate", "instanceRotate.vcxproj", "{B29093BC-064C-4465-A61B-2DE73002010E}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B29093BC-064C-4465-A61B-2DE73002010E}.Debug|x64.ActiveCfg = Debug|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Debug|x64.Build.0 = Debug|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Release|x64.ActiveCfg = Release|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotate.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{B29093BC-064C-4465-A61B-2DE73002010E}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <OutDir>Debug\</OutDir>
    <IntDir>Debug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <OutDir>C:\MayaAPITraining\plug-ins\</OutDir>
    <TargetExt>.mll</TargetExt>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <OutDir>Release\</OutDir>
    <IntDir>Release\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2009\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\instanceRotate.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2009\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2015\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\instanceRotate.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2015\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="instanceRotateCmd.cpp" />
    <ClCompile Include="pluginMain.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="instanceRotateCmd.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.cpp
================================================
//
// Copyright (C) 
// 
// File: instanceRotateCmd.cpp
//
// MEL Command: instanceRotate
//
// Author: Maya Plug-in Wizard 2.0
//
#include <stdlib.h>
#include <time.h>
#include "instanceRotateCmd.h"

#include <maya/MGlobal.h>
#include <maya/MArgDatabase.h>
#include <maya/MSyntax.h>
#include <maya/MFnDagNode.h>
#include <maya/MSelectionList.h>
#include <maya/MPlug.h>

//- Create a new MSyntax object to teach Maya about possible arguments
//- in our command. This newSyntax() method is used during the command
//- registration into our plug-in
/*static*/ MSyntax instanceRotate::cmdSyntax()
{
	MSyntax syntax;
	syntax.addFlag(ROTATEFLAG,ROTATELONGFLAG,MSyntax::kUnsigned);
	syntax.enableEdit(false);
	syntax.enableQuery(false);
	return syntax;
}

//- This method should perform a command by setting up internal class data
//- and then calling the redoIt method if undo is supported by the command.
//- The actual action performed by the command should be done in the redoIt 
//- method. This is a pure virtual method, and must be overridden in derived 
//- classes.
MStatus instanceRotate::doIt( const MArgList& argList)
{
	MStatus stat = MS::kSuccess;

	//- Since all the command actions will be done in the redoIt() method, this
	//- method will only parse the arguments. redoIt() will not use arguments
	//- at all.
	MArgDatabase argDB(syntax(),argList,&stat);
	if ( MS::kSuccess != stat )
	{
		cerr << "Invalid flag used";              
		return stat.statusCode();        
	}

	unsigned int numFlags = argDB.numberOfFlagsUsed();
	if(numFlags != 1) 
	{
		MGlobal::displayError("Simple Plugs requires one flag argument and a DAG object must be selected");
		return MS::kFailure;
	}
	else
	{
		if(argDB.isFlagSet(ROTATEFLAG, &stat))
		{	
			uint flag =0;
			//- The user enters 1, 2, or 3 to indicate x, y, or z rotation axis
			//- TODO: get flag argument from "ROTATEFLAG"
			//...

			if(flag == AXIS_X)
				axis = AXIS_X;
			else if(flag == AXIS_Y)
				axis = AXIS_Y;
			else if(flag == AXIS_Z)
				axis = AXIS_Z;
			else
			{
				MGlobal::displayError("Invalid axis rotation argument");
				return MS::kFailure;
			}
		}
	}

	return redoIt();
}

//- This method should do the actual work of the command based on the internal 
//- class data only. Internal class data should be set in the doIt method.
MStatus instanceRotate::redoIt()
{
	setResult( "instanceRotate command executed!\n" );

	//- This is really where is the intelligence of the command. Here we will
	//- preform all the actions we wanted to implement for this command.

	//- Get the active selection in the Maya viewport.
	MSelectionList selList;
	MGlobal::getActiveSelectionList(selList);

	if(selList.isEmpty())
	{
		MGlobal::displayError("A single DAG object must be selected");
		return MS::kFailure;
	}

	MDagPath dagPath;
	selList.getDagPath(0,dagPath);

	//- Chances are the user selected the object from the panel view or
	//- outliner window so the object in the list will actually be a 
	//- transform node... if so we call extendToShape to grab the actual
	//- shape node from the dagPath

	//- TODO: Test if this node is a transform node, and if so extend the
	//- TODO: dagPath to the real shape node.
	//...
	//...

	if(dagPath.isInstanced())
	{
		shapeObj = dagPath;
		rotate(dagPath);
	}
	else
	{
		MGlobal::displayError("The selected item is not an instanced DAG object");
		return MS::kFailure;
	}

	return MS::kSuccess;
}

//- This method should undo the work done by the redoIt method based on the 
//- internal class data only.
MStatus instanceRotate::undoIt()
{
	MGlobal::displayInfo( "instanceRotate command undone!\n" );
	
	MFnDagNode fnDag(shapeObj);

	for(uint i = 0; i<numInstances; i++)
	{

		MObject currentParent = fnDag.parent(i);
		MFnDependencyNode fnParent(currentParent);
		MPlug rotPlug = fnParent.findPlug("rotate");
		switch (axis)
		{
		case AXIS_X:
			{
				MPlug rotxPlug = rotPlug.child(0);
				rotxPlug.setValue(rotations[i]);
				break;
			}
		case AXIS_Y:
			{
				MPlug rotyPlug = rotPlug.child(1);
				rotyPlug.setValue(rotations[i]);
				break;
			}
		case AXIS_Z:
			{
				MPlug rotzPlug = rotPlug.child(2);
				rotzPlug.setValue(rotations[i]);
				break;
			}
		default:
			{
				MPlug rotyPlug = rotPlug.child(1);
				rotyPlug.setValue(rotations[i]);
				break;
			}
		}
	}

	//- Empty the array in case the user chooses redoIt
	rotations.clear();

	return MS::kSuccess;
}

//- Method used by redoIt to assign a 45 degree rotation along a random axis.
void instanceRotate::rotate( MDagPath dp )
{
	//- Seeds the random number generation function rand so it does not produce the 
	//- same sequence of numbers every time.
	srand(time(NULL));

	//- The passed-in dag object is a shape object, 
	//- need to find all the parent transform objects.
	MFnDagNode fnDag(dp);
	//- The number of parents represents the current number of instances.
	numInstances = fnDag.parentCount();

	for(uint i = 0;i<numInstances;i++)
	{
		MObject currentParent = fnDag.parent(i);
		MFnDependencyNode fnParent(currentParent);	

		//- Find the rotate plug, figure out which axis the user opted for 
		//- and set the plug to a random direction.

		//- TODO: find the plug named 'rotate'
		MPlug rotPlug = //...

		//- Acquire a random number deciding which direction the 45 degree should be
		int randVal;
		if(rand()%2 == 0)
			randVal = 1;
		else randVal = -1;
		cout<<"The randVal is "<<randVal<<endl;

		switch(axis)
		{

		case AXIS_X:
			{
				//- TODO: Get the first child plug 'rotateX' 
				MPlug rotxPlug = //...

				//- retrieve original rotation and store it in member variable "rotations"
				double origRot = 0;
				//- TODO: Get the plug value
				//...
				rotations.append(origRot);

				//- set new rotation
				double rot = origRot + randVal * ROTATIONVALUE;
				//- TODO: Set the new plug value
				//...
				break;
			}
		case AXIS_Y:
		default: //- by default, rotate around y axis
			{
				//- TODO: Get the second child plug 'rotateY' 
				MPlug rotyPlug = //...

				double origRot = 0;
				//- TODO: Get the plug value
				//...
				rotations.append(origRot);

				double rot = origRot + randVal * ROTATIONVALUE;
				//- TODO: Set the new plug value
				//...
				break;
			}
		case AXIS_Z:
			{
				//- TODO: Get the third child plug 'rotateZ'
				MPlug rotzPlug = //...

				double origRot = 0;
				//- TODO: Get the plug value
				//...
				rotations.append(origRot);

				double rot = origRot + randVal * ROTATIONVALUE;
				//- TODO: Set the new plug value
				//...
				break;
			}
		}
	}

}


================================================
FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.h
================================================
//
// Copyright (C) 
// 
// File: instanceRotateCmd.h
//
// MEL Command: instanceRotate
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>
#include <maya/MDagPath.h>
#include <maya/MDoubleArray.h>

//- Forward declaration
class MArgList;

//- A convenience enum to keep track of which axis the user wanted to rotate around
typedef enum AXIS {AXIS_X = 1, AXIS_Y = 2, AXIS_Z = 3};

//- This are the long and short command names.
#define ROTATEFLAG "-r"
#define ROTATELONGFLAG "-rotate"

#define ROTATIONVALUE 0.785398163

// Command class declaration
class instanceRotate : public MPxCommand
{

public:
	instanceRotate() {}
	virtual ~instanceRotate() {}

	//- This method should perform a command by setting up internal class data
	//- and then calling the redoIt method if undo is supported by the command.
	//- The actual action performed by the command should be done in the redoIt 
	//- method. This is a pure virtual method, and must be overridden in derived 
	//- classes.
	virtual MStatus doIt( const MArgList& );
	//- This method should do the actual work of the command based on the internal 
	//- class data only. Internal class data should be set in the doIt method.
	virtual MStatus redoIt();
	//- This method should undo the work done by the redoIt method based on the 
	//- internal class data only.
	virtual MStatus undoIt();
	//- This method is used to specify whether or not the command is undoable. In 
	//- the base class, it always returns false. If you are writing a command that 
	//- might be eligible for undo, you should override this method.
	//- After Maya executes the command's doIt method, it will call isUndoable. If 
	//- isUndoable returns true, Maya will retain the instance of the class and pass 
	//- it to Maya's undo manager so that the undoIt and redoIt methods can be called
	//- when appropriate. If isUndoable returns false, the command instance will be 
	//- immediately destroyed.
	virtual bool isUndoable() const {
		return true;
	}

	static void* creator() {
		new instanceRotate();
	}

	virtual	bool hasSyntax() {
		return true;
	}
	static MSyntax cmdSyntax();

	//- Rotates each instance with 45 degrees along user-specified axis
	void rotate( MDagPath dp );

	//- Store the user selection of the rotation axis (one axis for all of the instances)
	AXIS axis;

	//- Store the base shape for the instances here for undo
	MDagPath shapeObj;

	//- Store the number of instances for one shape
	uint numInstances;

	//- Store the original rotation values for undo here
	MDoubleArray rotations;
};


================================================
FILE: 02_Commands/instanceRotate/Exercise - C++/pluginMain.cpp
================================================
//
// Copyright (C) 
// 
// File: pluginMain.cpp
//
// Author: Maya Plug-in Wizard 2.0
//
#include "instanceRotateCmd.h"
#include <maya/MFnPlugin.h>

MStatus initializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is loaded into Maya.  It 
//		registers all of the services that this plug-in provides with 
//		Maya.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{ 
	MStatus   status;
	MFnPlugin plugin( obj, "", "2008", "Any");

	// Add plug-in feature registration here
	//
	status = plugin.registerCommand( "instanceRotate", instanceRotate::creator,instanceRotate::cmdSyntax );

	if (!status) {
		status.perror("registerCommand");
		return status;
	}

	return status;
}

MStatus uninitializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is unloaded from Maya. It 
//		deregisters all of the services that it was providing.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus   status;
	MFnPlugin plugin( obj );

	// Add plug-in feature deregistration here
	//
	status = plugin.deregisterCommand( "instanceRotate" );

	if (!status) {
		status.perror("deregisterCommand");
		return status;
	}

	return status;
}


================================================
FILE: 02_Commands/instanceRotate/Exercise - py/instanceRotateCmd.py
================================================
# Copyright (C) 
# 
# Author: Autodesk Developer Network

#For this exercise, search for the TODO keywords and follow the instructions in
#comments. If you are unsure of what you need to do, feel free to ask the instructor
#or look into the solution folder.
#Each #... line is a line of code you need to write or complete.

import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

# Command name
kPluginCmdName = "instanceRotate"

# Command switch short and long names
ROTATEFLAG = "-r"
ROTATELONGFLAG = "-rotate"

ROTATIONVALUE = 0.785398163
AXIS_X = 1
AXIS_Y = 2
AXIS_Z = 3

# instanceRotate command
class instanceRotate(OpenMayaMPx.MPxCommand):
	#- Store the base shape for the instances here for undo
	shapeObj = OpenMaya.MDagPath()
	#- Store the original rotation values for undo here
	rotations = OpenMaya.MDoubleArray()

	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)
		#- Store the user selection of the rotation axis (one axis for all of the instances)
		self.axis = AXIS_X
		#- Store the number of instances for one shape
		self.numInstances = 0

	#- This method is used to specify whether or not the command is undoable. In 
	#- the base class, it always returns false. If you are writing a command that 
	#- might be eligible for undo, you should override this method.
	#- After Maya executes the command's doIt method, it will call isUndoable. If 
	#- isUndoable returns true, Maya will retain the instance of the class and pass 
	#- it to Maya's undo manager so that the undoIt and redoIt methods can be called
	#- when appropriate. If isUndoable returns false, the command instance will be 
	#- immediately destroyed.
	#def isUndoable(self):
	#	return True

	#def hasSyntax(self):
	#	return True

	#- This method should perform a command by setting up internal class data
	#- and then calling the redoIt method if undo is supported by the command.
	#- The actual action performed by the command should be done in the redoIt 
	#- method. This is a pure virtual method, and must be overridden in derived 
	#- classes.
	def doIt(self, args):
		#- Since all the command actions will be done in the redoIt() method, this
		#- method will only parse the arguments. redoIt() will not use arguments
		#- at all.
		argParser = OpenMaya.MArgParser (self.syntax(),args)

		numFlags = argParser.numberOfFlagsUsed()
		if(numFlags != 1):
			OpenMaya.MGlobal.displayError("Simple Plugs requires one flag argument and a DAG object must be selected")
			return None
		else:
			if(argParser.isFlagSet(ROTATEFLAG) | argParser.isFlagSet(ROTATELONGFLAG)):
				#- The user enters 1, 2, or 3 to indicate x, y, or z rotation axis
				flag =argParser.flagArgumentInt(ROTATEFLAG,0)

				if(flag == AXIS_X):
					self.axis = AXIS_X
				elif(flag == AXIS_Y):
					self.axis = AXIS_Y
				elif(flag == AXIS_Z):
					self.axis = AXIS_Z
				else:
					OpenMaya.MGlobal.displayError("Invalid axis rotation argument")
					return None

		return self.redoIt(args)

	#- This method should do the actual work of the command based on the internal 
	#- class data only. Internal class data should be set in the doIt method.
	def redoIt(self, args):
		OpenMayaMPx.MPxCommand.setResult( "instanceRotate command executed!\n" )

		#- This is really where is the intelligence of the command. Here we will
		#- preform all the actions we wanted to implement for this command.

		#- Get the active selection in the Maya viewport.
		selList = OpenMaya.MSelectionList()
		OpenMaya.MGlobal.getActiveSelectionList(selList)

		if(selList.isEmpty()):
			OpenMaya.MGlobal.displayError("A single DAG object must be selected")
			return None

		dagPath = OpenMaya.MDagPath()
		selList.getDagPath(0,dagPath)

		#- Chances are the user selected the object from the panel view or
		#- outliner window so the object in the list will actually be a 
		#- transform node... if so we call extendToShape to grab the actual
		#- shape node from the dagPath
		
		#- TODO: Test if this node is a transform node, and if so extend the
		#- TODO: dagPath to the real shape node.
		#...
		#...

		if(dagPath.isInstanced()):
			self.shapeObj = dagPath
			self.rotate(dagPath)
		else:
			OpenMaya.MGlobal.displayError("The selected item is not an instanced DAG object")
			return None

	#- This method should undo the work done by the redoIt method based on the 
	#- internal class data only.
	def undoIt(self, args):
		OpenMaya.MGlobal.displayInfo( "instanceRotate command undone!\n" )
		
		fnDag = MFnDagNode(self.shapeObj)

		for i in range ( 0, self.numInstances ):
			currentParent = fnDag.parent(i)
			fnParent = OpenMaya.MFnDependencyNode(currentParent)
			rotPlug = fnParent.findPlug("rotate")
			if (self.axis == AXIS_X):
				rotxPlug = rotPlug.child(0)
				rotxPlug.setDouble(self.rotations[i])
			elif (self.axis == AXIS_Z):
				rotzPlug = rotPlug.child(2)
				rotzPlug.setDouble(self.rotations[i])
			else: # AXIS_Y:
				rotyPlug = rotPlug.child(1)
				rotyPlug.setDouble(self.rotations[i])

		#- Empty the array in case the user chooses redoIt
		self.rotations.clear()

	#- Method used by redoIt to assign a 45 degree rotation along a random axis.
	def rotate( self, dp ):
		#- The passed-in dag object is a shape object, 
		#- need to find all the parent transform objects.
		fnDag = OpenMaya.MFnDagNode(dp)
		#- The number of parents represents the current number of instances.
		self.numInstances = fnDag.parentCount()

		for i in range ( 0, self.numInstances ):
			currentParent = fnDag.parent(i)
			fnParent = OpenMaya.MFnDependencyNode(currentParent)	

			#- Find the rotate plug, figure out which axis the user opted for 
			#- and set the plug to a random direction.
			
			#- TODO: find the plug named 'rotate'
			rotPlug = #...

			#- Acquire a random number deciding which direction the 45 degree should be
			randVal = random.randint(0, 1000)
			if(randVal % 2 == 0):
				randVal = 1
			else:
				randVal = -1
			print "The randVal is %d " % randVal
			sys.stdout.write( '\n' )

			if (self.axis == AXIS_X):
				#- TODO: Get the X plug of the 'rotate' plug
				rotxPlug = #...

				#- retrieve original rotation and store it in member variable "rotations"
				origRot = 0
				#- TODO: Get the plug value
				#...
				self.rotations.append(origRot)

				#- set new rotation
				rot = origRot + randVal * ROTATIONVALUE
				#- TODO: Set the new plug value
				#...
			elif (self.axis == AXIS_Z):
				#- TODO: Get the Z plug of the 'rotate' plug
				rotzPlug = #...

				origRot = 0
				#- TODO: Get the plug value
				#...
				self.rotations.append(origRot)

				rot = origRot + randVal * ROTATIONVALUE
				#- TODO: Set the new plug value
				#...
			else: # AXIS_Y: - by default, rotate around y axis
				- TODO: Get the Y plug of the 'rotate' plug
				rotyPlug = #...

				origRot = 0
				#- TODO: Get the plug value
				#...
				self.rotations.append(origRot)

				rot = origRot + randVal * ROTATIONVALUE
				#- TODO: Set the new plug value
				#...

# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( instanceRotate() )

#- Create a new MSyntax object to teach Maya about possible arguments
#- in our command. This newSyntax() method is used during the command
#- registration into our plug-in
# Syntax creator
def syntaxCreator():
	syntax = OpenMaya.MSyntax()
	syntax.addFlag(ROTATEFLAG, ROTATELONGFLAG, OpenMaya.MSyntax.kUnsigned)
	syntax.enableEdit(0)
	syntax.enableQuery(0)
	return syntax

# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.registerCommand( kPluginCmdName, cmdCreator, syntaxCreator )
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterCommand( kPluginCmdName )
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )



================================================
FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotate.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "instanceRotate", "instanceRotate.vcxproj", "{B29093BC-064C-4465-A61B-2DE73002010E}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B29093BC-064C-4465-A61B-2DE73002010E}.Debug|x64.ActiveCfg = Debug|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Debug|x64.Build.0 = Debug|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Release|x64.ActiveCfg = Release|x64
		{B29093BC-064C-4465-A61B-2DE73002010E}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotate.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{B29093BC-064C-4465-A61B-2DE73002010E}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <OutDir>Debug\</OutDir>
    <IntDir>Debug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <OutDir>C:\MayaAPITraining\plug-ins\</OutDir>
    <TargetExt>.mll</TargetExt>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <OutDir>Release\</OutDir>
    <IntDir>Release\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2009\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\instanceRotate.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2009\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2015\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\instanceRotate.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2015\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="instanceRotateCmd.cpp" />
    <ClCompile Include="pluginMain.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="instanceRotateCmd.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.cpp
================================================
//
// Copyright (C) 
// 
// File: instanceRotateCmd.cpp
//
// MEL Command: instanceRotate
//
// Author: Maya Plug-in Wizard 2.0
//
#include <stdlib.h>
#include <time.h>
#include "instanceRotateCmd.h"

#include <maya/MGlobal.h>
#include <maya/MArgDatabase.h>
#include <maya/MSyntax.h>
#include <maya/MFnDagNode.h>
#include <maya/MSelectionList.h>
#include <maya/MPlug.h>

//- Create a new MSyntax object to teach Maya about possible arguments
//- in our command. This newSyntax() method is used during the command
//- registration into our plug-in
/*static*/ MSyntax instanceRotate::cmdSyntax()
{
	MSyntax syntax;
	syntax.addFlag(ROTATEFLAG,ROTATELONGFLAG,MSyntax::kUnsigned);
	syntax.enableEdit(false);
	syntax.enableQuery(false);
	return syntax;
}

//- This method should perform a command by setting up internal class data
//- and then calling the redoIt method if undo is supported by the command.
//- The actual action performed by the command should be done in the redoIt 
//- method. This is a pure virtual method, and must be overridden in derived 
//- classes.
MStatus instanceRotate::doIt( const MArgList& argList)
{
	MStatus stat = MS::kSuccess;

	//- Since all the command actions will be done in the redoIt() method, this
	//- method will only parse the arguments. redoIt() will not use arguments
	//- at all.
	MArgDatabase argDB(syntax(),argList,&stat);
	if ( MS::kSuccess != stat )
	{
		cerr << "Invalid flag used";              
		return stat.statusCode();        
	}

	unsigned int numFlags = argDB.numberOfFlagsUsed();
	if(numFlags != 1) 
	{
		MGlobal::displayError("Simple Plugs requires one flag argument and a DAG object must be selected");
		return MS::kFailure;
	}
	else
	{
		if(argDB.isFlagSet(ROTATEFLAG, &stat))
		{	
			uint flag =0;
			//- The user enters 1, 2, or 3 to indicate x, y, or z rotation axis
			argDB.getFlagArgument(ROTATEFLAG,0,flag);

			if(flag == AXIS_X)
				axis = AXIS_X;
			else if(flag == AXIS_Y)
				axis = AXIS_Y;
			else if(flag == AXIS_Z)
				axis = AXIS_Z;
			else
			{
				MGlobal::displayError("Invalid axis rotation argument");
				return MS::kFailure;
			}
		}
	}

	return redoIt();
}

//- This method should do the actual work of the command based on the internal 
//- class data only. Internal class data should be set in the doIt method.
MStatus instanceRotate::redoIt()
{
	setResult( "instanceRotate command executed!\n" );

	//- This is really where is the intelligence of the command. Here we will
	//- preform all the actions we wanted to implement for this command.

	//- Get the active selection in the Maya viewport.
	MSelectionList selList;
	MGlobal::getActiveSelectionList(selList);

	if(selList.isEmpty())
	{
		MGlobal::displayError("A single DAG object must be selected");
		return MS::kFailure;
	}

	MDagPath dagPath;
	selList.getDagPath(0,dagPath);

	//- Chances are the user selected the object from the panel view or
	//- outliner window so the object in the list will actually be a 
	//- transform node... if so we call extendToShape to grab the actual
	//- shape node from the dagPath
	if(dagPath.hasFn(MFn::kTransform))
		dagPath.extendToShape();

	if(dagPath.isInstanced())
	{
		shapeObj = dagPath;
		rotate(dagPath);
	}
	else
	{
		MGlobal::displayError("The selected item is not an instanced DAG object");
		return MS::kFailure;
	}

	return MS::kSuccess;
}

//- This method should undo the work done by the redoIt method based on the 
//- internal class data only.
MStatus instanceRotate::undoIt()
{
	MGlobal::displayInfo( "instanceRotate command undone!\n" );
	
	MFnDagNode fnDag(shapeObj);

	for(uint i = 0; i<numInstances; i++)
	{

		MObject currentParent = fnDag.parent(i);
		MFnDependencyNode fnParent(currentParent);
		MPlug rotPlug = fnParent.findPlug("rotate");
		switch (axis)
		{
		case AXIS_X:
			{
				MPlug rotxPlug = rotPlug.child(0);
				rotxPlug.setValue(rotations[i]);
				break;
			}
		case AXIS_Y:
			{
				MPlug rotyPlug = rotPlug.child(1);
				rotyPlug.setValue(rotations[i]);
				break;
			}
		case AXIS_Z:
			{
				MPlug rotzPlug = rotPlug.child(2);
				rotzPlug.setValue(rotations[i]);
				break;
			}
		default:
			{
				MPlug rotyPlug = rotPlug.child(1);
				rotyPlug.setValue(rotations[i]);
				break;
			}
		}
	}

	//- Empty the array in case the user chooses redoIt
	rotations.clear();

	return MS::kSuccess;
}

//- Method used by redoIt to assign a 45 degree rotation along a random axis.
void instanceRotate::rotate( MDagPath dp )
{
	//- Seeds the random number generation function rand so it does not produce the 
	//- same sequence of numbers every time.
	srand(time(NULL));

	//- The passed-in dag object is a shape object, 
	//- need to find all the parent transform objects.
	MFnDagNode fnDag(dp);
	//- The number of parents represents the current number of instances.
	numInstances = fnDag.parentCount();

	for(uint i = 0;i<numInstances;i++)
	{
		MObject currentParent = fnDag.parent(i);
		MFnDependencyNode fnParent(currentParent);	

		//- Find the rotate plug, figure out which axis the user opted for 
		//- and set the plug to a random direction.
		MPlug rotPlug = fnParent.findPlug("rotate");

		//- Acquire a random number deciding which direction the 45 degree should be
		int randVal;
		if(rand()%2 == 0)
			randVal = 1;
		else randVal = -1;
		cout<<"The randVal is "<<randVal<<endl;

		switch(axis)
		{

		case AXIS_X:
			{
				MPlug rotxPlug = rotPlug.child(0);

				//- retrieve original rotation and store it in member variable "rotations"
				double origRot = 0;
				rotxPlug.getValue(origRot);
				rotations.append(origRot);

				//- set new rotation
				double rot = origRot + randVal * ROTATIONVALUE;
				rotxPlug.setValue(rot);
				break;
			}
		case AXIS_Y:
		default: //- by default, rotate around y axis
			{
				MPlug rotyPlug = rotPlug.child(1);

				double origRot = 0;
				rotyPlug.getValue(origRot);
				rotations.append(origRot);

				double rot = origRot + randVal * ROTATIONVALUE;
				rotyPlug.setValue(rot);
				break;
			}
		case AXIS_Z:
			{
				MPlug rotzPlug = rotPlug.child(2);

				double origRot = 0;
				rotzPlug.getValue(origRot);
				rotations.append(origRot);

				double rot = origRot + randVal * ROTATIONVALUE;
				rotzPlug.setValue(rot);
				break;
			}
		}
	}

}


================================================
FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.h
================================================
//
// Copyright (C) 
// 
// File: instanceRotateCmd.h
//
// MEL Command: instanceRotate
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>
#include <maya/MDagPath.h>
#include <maya/MDoubleArray.h>

//- Forward declaration
class MArgList;

//- A convenience enum to keep track of which axis the user wanted to rotate around
typedef enum AXIS {AXIS_X = 1, AXIS_Y = 2, AXIS_Z = 3};

//- This are the long and short command names.
#define ROTATEFLAG "-r"
#define ROTATELONGFLAG "-rotate"

#define ROTATIONVALUE 0.785398163

// Command class declaration
class instanceRotate : public MPxCommand
{

public:
	instanceRotate() {}
	virtual ~instanceRotate() {}

	//- This method should perform a command by setting up internal class data
	//- and then calling the redoIt method if undo is supported by the command.
	//- The actual action performed by the command should be done in the redoIt 
	//- method. This is a pure virtual method, and must be overridden in derived 
	//- classes.
	virtual MStatus doIt( const MArgList& );
	//- This method should do the actual work of the command based on the internal 
	//- class data only. Internal class data should be set in the doIt method.
	virtual MStatus redoIt();
	//- This method should undo the work done by the redoIt method based on the 
	//- internal class data only.
	virtual MStatus undoIt();
	//- This method is used to specify whether or not the command is undoable. In 
	//- the base class, it always returns false. If you are writing a command that 
	//- might be eligible for undo, you should override this method.
	//- After Maya executes the command's doIt method, it will call isUndoable. If 
	//- isUndoable returns true, Maya will retain the instance of the class and pass 
	//- it to Maya's undo manager so that the undoIt and redoIt methods can be called
	//- when appropriate. If isUndoable returns false, the command instance will be 
	//- immediately destroyed.
	virtual bool isUndoable() const {
		return true;
	}

	static void* creator() {
		return new instanceRotate();
	}

	virtual	bool hasSyntax() {
		return true;
	}
	static MSyntax cmdSyntax();

	//- Rotates each instance with 45 degrees along user-specified axis
	void rotate( MDagPath dp );

	//- Store the user selection of the rotation axis (one axis for all of the instances)
	AXIS axis;

	//- Store the base shape for the instances here for undo
	MDagPath shapeObj;

	//- Store the number of instances for one shape
	uint numInstances;

	//- Store the original rotation values for undo here
	MDoubleArray rotations;
};


================================================
FILE: 02_Commands/instanceRotate/Solution - C++/pluginMain.cpp
================================================
//
// Copyright (C) 
// 
// File: pluginMain.cpp
//
// Author: Maya Plug-in Wizard 2.0
//
#include "instanceRotateCmd.h"
#include <maya/MFnPlugin.h>

MStatus initializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is loaded into Maya.  It 
//		registers all of the services that this plug-in provides with 
//		Maya.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{ 
	MStatus   status;
	MFnPlugin plugin( obj, "", "2008", "Any");

	// Add plug-in feature registration here
	//
	status = plugin.registerCommand( "instanceRotate", instanceRotate::creator,instanceRotate::cmdSyntax );

	if (!status) {
		status.perror("registerCommand");
		return status;
	}

	return status;
}

MStatus uninitializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is unloaded from Maya. It 
//		deregisters all of the services that it was providing.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus   status;
	MFnPlugin plugin( obj );

	// Add plug-in feature deregistration here
	//
	status = plugin.deregisterCommand( "instanceRotate" );

	if (!status) {
		status.perror("deregisterCommand");
		return status;
	}

	return status;
}


================================================
FILE: 02_Commands/instanceRotate/Solution - py/instanceRotateCmd.py
================================================
#
# Copyright (C) 
# 
# File: instanceRotateCmd.py
#
# MEL Command: instanceRotate
#
# Author: Maya Plug-in Wizard 2.0
#
import sys, random
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

# Command name
kPluginCmdName = "instanceRotate"

# Command switch short and long names
ROTATEFLAG = "-r"
ROTATELONGFLAG = "-rotate"

ROTATIONVALUE = 0.785398163
AXIS_X = 1
AXIS_Y = 2
AXIS_Z = 3

# instanceRotate command
class instanceRotate(OpenMayaMPx.MPxCommand):
	#- Store the base shape for the instances here for undo
	shapeObj = OpenMaya.MDagPath()
	#- Store the original rotation values for undo here
	rotations = OpenMaya.MDoubleArray()

	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)
		#- Store the user selection of the rotation axis (one axis for all of the instances)
		self.axis = AXIS_X
		#- Store the number of instances for one shape
		self.numInstances = 0

	#- This method is used to specify whether or not the command is undoable. In 
	#- the base class, it always returns false. If you are writing a command that 
	#- might be eligible for undo, you should override this method.
	#- After Maya executes the command's doIt method, it will call isUndoable. If 
	#- isUndoable returns true, Maya will retain the instance of the class and pass 
	#- it to Maya's undo manager so that the undoIt and redoIt methods can be called
	#- when appropriate. If isUndoable returns false, the command instance will be 
	#- immediately destroyed.
	#def isUndoable(self):
	#	return True

	#def hasSyntax(self):
	#	return True

	#- This method should perform a command by setting up internal class data
	#- and then calling the redoIt method if undo is supported by the command.
	#- The actual action performed by the command should be done in the redoIt 
	#- method. This is a pure virtual method, and must be overridden in derived 
	#- classes.
	def doIt(self, args):
		#- Since all the command actions will be done in the redoIt() method, this
		#- method will only parse the arguments. redoIt() will not use arguments
		#- at all.
		argParser = OpenMaya.MArgParser (self.syntax(),args)

		numFlags = argParser.numberOfFlagsUsed()
		if(numFlags != 1):
			OpenMaya.MGlobal.displayError("Simple Plugs requires one flag argument and a DAG object must be selected")
			return None
		else:
			if(argParser.isFlagSet(ROTATEFLAG) | argParser.isFlagSet(ROTATELONGFLAG)):
				#- The user enters 1, 2, or 3 to indicate x, y, or z rotation axis
				flag =argParser.flagArgumentInt(ROTATEFLAG,0)

				if(flag == AXIS_X):
					self.axis = AXIS_X
				elif(flag == AXIS_Y):
					self.axis = AXIS_Y
				elif(flag == AXIS_Z):
					self.axis = AXIS_Z
				else:
					OpenMaya.MGlobal.displayError("Invalid axis rotation argument")
					return None

		return self.redoIt(args)

	#- This method should do the actual work of the command based on the internal 
	#- class data only. Internal class data should be set in the doIt method.
	def redoIt(self, args):
		OpenMayaMPx.MPxCommand.setResult( "instanceRotate command executed!\n" )

		#- This is really where is the intelligence of the command. Here we will
		#- preform all the actions we wanted to implement for this command.

		#- Get the active selection in the Maya viewport.
		selList = OpenMaya.MSelectionList()
		OpenMaya.MGlobal.getActiveSelectionList(selList)

		if(selList.isEmpty()):
			OpenMaya.MGlobal.displayError("A single DAG object must be selected")
			return None

		dagPath = OpenMaya.MDagPath()
		selList.getDagPath(0,dagPath)

		#- Chances are the user selected the object from the panel view or
		#- outliner window so the object in the list will actually be a 
		#- transform node... if so we call extendToShape to grab the actual
		#- shape node from the dagPath
		if(dagPath.hasFn(OpenMaya.MSpace.kTransform)):
			dagPath.extendToShape()

		if(dagPath.isInstanced()):
			self.shapeObj = dagPath
			self.rotate(dagPath)
		else:
			OpenMaya.MGlobal.displayError("The selected item is not an instanced DAG object")
			return None

		

	#- This method should undo the work done by the redoIt method based on the 
	#- internal class data only.
	def undoIt(self, args):
		OpenMaya.MGlobal.displayInfo( "instanceRotate command undone!\n" )
		
		fnDag = MFnDagNode(self.shapeObj)

		for i in range ( 0, self.numInstances ):
			currentParent = fnDag.parent(i)
			fnParent = OpenMaya.MFnDependencyNode(currentParent)
			rotPlug = fnParent.findPlug("rotate")
			if (self.axis == AXIS_X):
				rotxPlug = rotPlug.child(0)
				rotxPlug.setDouble(self.rotations[i])
			elif (self.axis == AXIS_Z):
				rotzPlug = rotPlug.child(2)
				rotzPlug.setDouble(self.rotations[i])
			else: # AXIS_Y:
				rotyPlug = rotPlug.child(1)
				rotyPlug.setDouble(self.rotations[i])

		#- Empty the array in case the user chooses redoIt
		self.rotations.clear()

		

	#- Method used by redoIt to assign a 45 degree rotation along a random axis.
	def rotate( self, dp ):
		#- The passed-in dag object is a shape object, 
		#- need to find all the parent transform objects.
		fnDag = OpenMaya.MFnDagNode(dp)
		#- The number of parents represents the current number of instances.
		self.numInstances = fnDag.parentCount()

		for i in range ( 0, self.numInstances ):
			currentParent = fnDag.parent(i)
			fnParent = OpenMaya.MFnDependencyNode(currentParent)	

			#- Find the rotate plug, figure out which axis the user opted for 
			#- and set the plug to a random direction.
			rotPlug = fnParent.findPlug("rotate")

			#- Acquire a random number deciding which direction the 45 degree should be
			randVal = random.randint(0, 1000)
			if(randVal % 2 == 0):
				randVal = 1
			else:
				randVal = -1
			print "The randVal is %d " % randVal
			sys.stdout.write( '\n' )

			if (self.axis == AXIS_X):
				rotxPlug = rotPlug.child(0)

				#- retrieve original rotation and store it in member variable "rotations"
				origRot = rotxPlug.asDouble()
				self.rotations.append(origRot)

				#- set new rotation
				rot = origRot + randVal * ROTATIONVALUE
				rotxPlug.setDouble(rot)
			elif (self.axis == AXIS_Z):
				rotzPlug = rotPlug.child(2)

				origRot = rotzPlug.asDouble()
				self.rotations.append(origRot)

				rot = origRot + randVal * ROTATIONVALUE
				rotzPlug.setDouble(rot)
			else: # AXIS_Y: - by default, rotate around y axis
				rotyPlug = rotPlug.child(1)

				origRot = rotyPlug.asDouble()
				self.rotations.append(origRot)

				rot = origRot + randVal * ROTATIONVALUE
				rotyPlug.setDouble(rot)

# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( instanceRotate() )

#- Create a new MSyntax object to teach Maya about possible arguments
#- in our command. This newSyntax() method is used during the command
#- registration into our plug-in
# Syntax creator
def syntaxCreator():
	syntax = OpenMaya.MSyntax()
	syntax.addFlag(ROTATEFLAG, ROTATELONGFLAG, OpenMaya.MSyntax.kUnsigned)
	syntax.enableEdit(0)
	syntax.enableQuery(0)
	return syntax

# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.registerCommand( kPluginCmdName, cmdCreator, syntaxCreator )
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterCommand( kPluginCmdName )
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )



================================================
FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.cpp
================================================
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#include <maya/MIOStream.h>
#include <maya/MString.h>
#include <maya/MStringResource.h>
#include <maya/MStringResourceId.h>
#include <maya/MArgList.h>

#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MArgDatabase.h>

#include <maya/MGlobal.h>
#include <maya/MDagPath.h>
#include <maya/MItSelectionList.h>
#include <maya/MSelectionList.h>

#include <maya/MFnDependencyNode.h>
#include <maya/MPlugArray.h>
#include <maya/MPlug.h>

#include "nodeInfoCmd.h"

// Command class implementation
nodeInfo::nodeInfo() : quiet (false)
{}

nodeInfo::~nodeInfo()
{}

//- Create a new MSyntax object to teach Maya about possible arguments
//- in our command. This newSyntax() method is used during the command
//- registration into our plug-in
/*stattic*/ MSyntax nodeInfo::newSyntax()
{
	 MSyntax syntax;
	 
	 //- TODO: add flags onto the new created MSyntax object
	 //....

	 return syntax;
}

//- This is a method which will be used by our command doIt() method to
//- check arguments passed into our command call.
MStatus nodeInfo::parseArgs( const MArgList& args )
{
	MStatus			stat;
	MArgDatabase	argData(syntax(), args);

	//- TODO: use MArgDataBase::isFlagSet to parse if the flag has been set by user
	//- and assign the corresponding boolean value to variable "quiet" based on the flag
	//...

	return stat;
}

//- This method performs the action of the command. It iterates over all
//- selected items and prints out connected plug and dependency node type
//- information.
//- TODO: Define the method called by Maya to execute your command (the 
//- function argument will be named args for this exercise).
//...
{
	MStatus stat;			// Status code
	MObject dependNode;		// Selected dependency node

	stat = parseArgs ( args );
	if ( !stat )
		return stat;

	MSelectionList slist;
	//- TODO: Retrieve all objects currently selected into the Maya editor and put it onto "slist"
	//...


	//- Create an iterator on the selection list (using the iterator pattern).
	MItSelectionList iter( slist, MFn::kInvalid,&stat );

	//- Iterate over all selected dependency nodes
	for ( ; !iter.isDone(); iter.next() ) 
	{
		//- TODO: From the iterator,get corresponding dependency node 
		//- by using MItSelectionList::getDependNode()
		//...

		//- TODO: Create a function set for the dependency node (name it fnDependNode)
		//...

		//- Check the type of the dependency node
		MString nodeName = fnDependNode.name();
		cout << "////////////////////////////////////////////" << endl;
		cout << nodeName << " is of type " << dependNode.apiTypeStr() << endl;

		MPlugArray connectedPlugs;
		//- TODO: Get all connected plugs to this node by using MFnDependencyNode::getConnections()
		//- add assign them to "connectedPlugs"
		//...

		int numberOfPlugs = connectedPlugs.length();
		if ( !quiet )
		{
			cout << "Number of connections found: " << numberOfPlugs << endl;
		}

		//- Print out the dependency node name and attributes
		//- for each plug
		for ( int i=0; i<numberOfPlugs; i++ ) 
		{
			MPlug plug = connectedPlugs[i];
			MString pinfo = plug.info();
			if ( !quiet )
			{
				cout << " Connected Plug Info: " << pinfo << endl;
			}

			//- Now get the plugs that this plug is the
			//- destination of and print the node type.
			MPlugArray array;
			//- TODO: Get the list of plugs this current plug is connected to.
			//...

			for ( unsigned int j=0; j<array.length(); j++ )
			{
				MObject mnode = array[j].node();
				if( !quiet )
				{
					MFnDependencyNode fnConnectedNode(mnode);
					cout << " This plug is a destination of node:" << fnConnectedNode.name() << endl;
				}
			}
		}
	}

	//- Return success to Maya
	return MS::kSuccess;
}




================================================
FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.h
================================================
//
// Copyright (C) 
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>

//- This are the long and shor command names.
#define kQuietFlag		"-q"
#define kQuietFlagLong	"-quiet"

// Command class declaration
class nodeInfo : public MPxCommand
{
public:
	nodeInfo();
	virtual ~nodeInfo(); 

	//- TODO: Declare the method called by Maya to execute your command.
	//...

	//- Create a new MSyntax object to teach Maya about possible arguments
	//- in our command. This newSyntax() method is used during the command
	//- registration into our plug-in
	static MSyntax newSyntax();

	static void* creator() {
		return new nodeInfo ();
	}

private:
	MStatus			parseArgs( const MArgList& args );
	bool			quiet;
};


================================================
FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nodeInfoCmd", "nodeInfoCmd.vcxproj", "{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Debug|x64.ActiveCfg = Debug|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Debug|x64.Build.0 = Debug|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Release|x64.ActiveCfg = Release|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <OutDir>Debug\</OutDir>
    <IntDir>Debug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <OutDir>C:\MayaAPITraining\plug-ins\</OutDir>
    <TargetExt>.mll</TargetExt>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <OutDir>Release\</OutDir>
    <IntDir>Release\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2009\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\nodeInfoCmd.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2009\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS /Gm /EHac /ZI /I "." /D "WIN32" /D "_DEBUG"  /RTC1 /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2015\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Debug/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>C:\MayaAPITraining\plug-ins\nodeInfoCmd.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2015\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Debug/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Debug/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <AdditionalOptions>/GR /GS  /EHac /I "."  /c %(AdditionalOptions)</AdditionalOptions>
      <Optimization>MaxSpeed</Optimization>
      <AdditionalIncludeDirectories>C:\Program Files\Autodesk\Maya2008\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_AFXDLL;_MBCS;NT_PLUGIN;REQUIRE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <PrecompiledHeaderOutputFile>Release/.pch</PrecompiledHeaderOutputFile>
      <WarningLevel>Level3</WarningLevel>
    </ClCompile>
    <Link>
      <AdditionalOptions>/subsystem:windows /incremental:no /machine:I386 /export:initializePlugin /export:uninitializePlugin %(AdditionalOptions)</AdditionalOptions>
      <AdditionalDependencies>Foundation.lib;OpenMaya.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <OutputFile>Release\.mll</OutputFile>
      <AdditionalLibraryDirectories>C:\Program Files\Autodesk\Maya2008\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ProgramDatabaseFile>Release/.pdb</ProgramDatabaseFile>
      <ImportLibrary>Release/.lib</ImportLibrary>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="nodeInfoCmd.cpp" />
    <ClCompile Include="pluginMain.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="nodeInfoCmd.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 02_Commands/nodeInfo/Exercise - C++/pluginMain.cpp
================================================
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#include "nodeInfoCmd.h"
#include <maya/MFnPlugin.h>

MStatus initializePlugin( MObject obj )
//
//	Description:
//		this method is called when the plug-in is loaded into Maya.  It 
//		registers all of the services that this plug-in provides with 
//		Maya.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus   status;
	MFnPlugin plugin( obj, PLUGIN_COMPANY, "2009", "Any");

	// Add plug-in feature registration here
	
	//- TODO: Register your command into Maya, and make sure you define a syntax
	//...

	if (!status) {
		status.perror("registerCommand");
		return status;
	}

	return status;
}

MStatus uninitializePlugin( MObject obj)
//
//	Description:
//		this method is called when the plug-in is unloaded from Maya. It 
//		deregisters all of the services that it was providing.
//
//	Arguments:
//		obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
	MStatus	  status;
	MFnPlugin plugin( obj );

	// Add plug-in feature deregistration here
	
	//- TODO: unregister your command from Maya before you unload.
	//...

	if (!status) {
		status.perror("deregisterCommand");
		return status;
	}

	return status;
}


================================================
FILE: 02_Commands/nodeInfo/Exercise - py/nodeInfoCmd.py
================================================
# Copyright (C) 
# 
# Author: Autodesk Developer Network

#For this exercise, search for the TODO keywords and follow the instructions in
#comments. If you are unsure of what you need to do, feel free to ask the instructor
#or look into the solution folder.
#Each #... line is a line of code you need to write or complete.

import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

# Command name
kPluginCmdName = "nodeInfoCmd"

# Command switch short and long names
kQuietFlag = "-q"
kQuietFlagLong = "-quiet"

# nodeInfoCmd command
class nodeInfoCmd(OpenMayaMPx.MPxCommand):
	
	def __init__(self):
		OpenMayaMPx.MPxCommand.__init__(self)
		self.quiet = 0
	
	#- This is a method which will be used by our command doIt() method to
	#- check arguments passed into our command call.
	def parseArgs ( self, args ):
		argData = OpenMaya.MArgDatabase( self.syntax(), args)
		if (argData.isFlagSet(kQuietFlag)):
			self.quiet = 1
	
	#- This method performs the action of the command. It iterates over all
	#- selected items and prints out connected plug and dependency node type
	#- information.
	#- TODO: Define the method called by Maya to execute your command (the 
	#- function argument will be named args for this exercise).
	def #...
		self.parseArgs ( args )

		#- TODO: Select all objects currently selected into the Maya editor.
		slist = OpenMaya.MSelectionList()
		#...
		
		#- Create an iterator on the selection list (using the iterator pattern).
		iter = OpenMaya.MItSelectionList(slist)
	
		#- Iterate over all selected dependency nodes
		dependNode = OpenMaya.MObject()
		fnDependNode = OpenMaya.MFnDependencyNode()
		while (iter.isDone() == 0):
			#- TODO: Get the selected dependency node
			#...

			#- TODO: Create a function set for the dependency node
			#...
			if  not self.quiet:
				#- Check the type of the dependency node
				nodeName = fnDependNode.name()
				print "######################"
				sys.stdout.write( '\n' )
				print nodeName 
				print " is of type %s" % dependNode.apiTypeStr()
				sys.stdout.write( '\n' )

			#- TODO: Get all connected plugs to this node
			try:
				connectedPlugs = OpenMaya.MPlugArray()
				try:
					#...
				except:					
					pass

				numberOfPlugs = connectedPlugs.length()
				if  not self.quiet:
					print "Number of connections found: %d " % numberOfPlugs
					sys.stdout.write( '\n' )

				#- Print out the dependency node name and attributes
				#- for each plug
				for i in range( 0, numberOfPlugs ): 
					plug = connectedPlugs[i]
					pinfo = plug.info()
					if  not self.quiet:
						print " Connected Plug Info: %s" % pinfo
						sys.stdout.write( '\n' )

					#- Now get the plugs that this plug is the
					#- destination of and print the node type.
					array = OpenMaya.MPlugArray()
					#- TODO: Get the list of plugs, this plug is connected to.
					#...
					for j in range( 0, array.length() ): 
						mnode = array[j].node()
						if  not self.quiet:
							fnConnectedNode = OpenMaya.MFnDependencyNode(mnode)
							print " This plug is a destination of node: %s" % fnConnectedNode.name()
							sys.stdout.write( '\n' )
			except:
				sys.stderr.write( "Failed to get connections: %s" % kPluginCmdName)
				#raise

			iter.next()

	
# Creator
def cmdCreator():
	return OpenMayaMPx.asMPxPtr( nodeInfoCmd() )

#- Create a new MSyntax object to teach Maya about possible arguments
#- in our command. This newSyntax() method is used during the command
#- registration into our plug-in
# Syntax creator
def syntaxCreator():
	syntax = OpenMaya.MSyntax()
	syntax.addFlag(kQuietFlag, kQuietFlagLong)
	return syntax

# Initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		#- TODO: Register your command into Maya, and make sure you define a syntax
		#...
	except:
		sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )

# Uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		#- TODO: unregister your command from Maya before you unload.
		#...
	except:
		sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )



================================================
FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.cpp
================================================
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#include <maya/MIOStream.h>
#include <maya/MString.h>
#include <maya/MStringResource.h>
#include <maya/MStringResourceId.h>
#include <maya/MArgList.h>

#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MArgDatabase.h>

#include <maya/MGlobal.h>
#include <maya/MDagPath.h>
#include <maya/MItSelectionList.h>
#include <maya/MSelectionList.h>

#include <maya/MFnDependencyNode.h>
#include <maya/MPlugArray.h>
#include <maya/MPlug.h>

#include "nodeInfoCmd.h"

// Command class implementation
nodeInfo::nodeInfo() : quiet (false)
{}

nodeInfo::~nodeInfo()
{}

//- Create a new MSyntax object to teach Maya about possible arguments
//- in our command. This newSyntax() method is used during the command
//- registration into our plug-in
/*static*/ MSyntax nodeInfo::newSyntax()
{
	 MSyntax syntax;
	 syntax.addFlag(kQuietFlag, kQuietFlagLong);
	 return syntax;
}

//- This is a method which will be used by our command doIt() method to
//- check arguments passed into our command call.
MStatus nodeInfo::parseArgs( const MArgList& args )
{
	MStatus			stat;
	MArgDatabase	argData(syntax(), args);

	if (argData.isFlagSet(kQuietFlag))
		quiet = true;

	return stat;
}

//- This method performs the action of the command. It iterates over all
//- selected items and prints out connected plug and dependency node type
//- information.
MStatus nodeInfo::doIt( const MArgList& args )
{
	MStatus stat;			// Status code
	MObject dependNode;		// Selected dependency node

	stat = parseArgs ( args );
	if ( !stat )
		return stat;

	//- Retrieve all objects currently selected into the Maya editor.
	MSelectionList slist;
	MGlobal::getActiveSelectionList( slist );
	//- Create an iterator on the selection list (using the iterator pattern).
	MItSelectionList iter( slist, MFn::kInvalid,&stat );

	//- Iterate over all selected dependency nodes
	for ( ; !iter.isDone(); iter.next() ) 
	{
		//- Get the selected dependency node
		iter.getDependNode( dependNode );

		//- Create a function set for the dependency node
		MFnDependencyNode fnDependNode( dependNode );

		//- Check the type of the dependency node
		MString nodeName = fnDependNode.name();
		cout << "////////////////////////////////////////////" << endl;
		cout << nodeName << " is of type " << dependNode.apiTypeStr() << endl;

		//- Get all connected plugs to this node
		MPlugArray connectedPlugs;
		fnDependNode.getConnections( connectedPlugs );

		int numberOfPlugs = connectedPlugs.length();
		if ( !quiet )
		{
			cout << "Number of connections found: " << numberOfPlugs << endl;
		}

		//- Print out the dependency node name and attributes
		//- for each plug
		for ( int i=0; i<numberOfPlugs; i++ ) 
		{
			MPlug plug = connectedPlugs[i];
			MString pinfo = plug.info();
			if ( !quiet )
			{
				cout << " Connected Plug Info: " << pinfo << endl;
			}

			//- Now get the plugs that this plug is the
			//- destination of and print the node type.
			MPlugArray sourceArray;
			plug.connectedTo( sourceArray, true, false );
			for ( unsigned int j=0; j<sourceArray.length(); j++ )
			{
				MObject mnode = sourceArray[j].node();
				if( !quiet )
				{
					MFnDependencyNode fnConnectedNode(mnode);
					cout << " This plug is a destination of node:" << fnConnectedNode.name() << endl;
				}
			}

		}
	}

	//- Return success to Maya
	return MS::kSuccess;
}




================================================
FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.h
================================================
//
// Copyright (C) 
// 
// File: 
//
// Dependency Graph Node: 
//
// Author: Maya Plug-in Wizard 2.0
//
#pragma once

#include <maya/MPxCommand.h>

//- This are the long and short command names.
#define kQuietFlag		"-q"
#define kQuietFlagLong	"-quiet"

// Command class declaration
class nodeInfo : public MPxCommand
{
public:
	nodeInfo();
	virtual ~nodeInfo(); 

	//- This method should perform a command by setting up internal class data
	//- and then calling the redoIt method if undo is supported by the command.
	//- The actual action performed by the command should be done in the redoIt 
	//- method. This is a pure virtual method, and must be overridden in derived 
	//- classes.
	virtual MStatus doIt( const MArgList& args );

	//- Create a new MSyntax object to teach Maya about possible arguments
	//- in our command. This newSyntax() method is used during the command
	//- registration into our plug-in
	static MSyntax	newSyntax();

	static void* creator() {
		return new nodeInfo ();
	}

private:
	MStatus			parseArgs( const MArgList& args );
	bool			quiet;
};


================================================
FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nodeInfoCmd", "nodeInfoCmd.vcxproj", "{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Debug|x64.ActiveCfg = Debug|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Debug|x64.Build.0 = Debug|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Release|x64.ActiveCfg = Release|x64
		{B86ED337-5087-4A1B-B9F4-3B634AE09BC4}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfigurati
Download .txt
gitextract_xa2stlhf/

├── .gitignore
├── 00_API_Overview_Introduction/
│   ├── 00_API_Overview_Introduction.pptx
│   └── 00_Distinguishing Python.pptx
├── 01_API_Overview/
│   ├── 01_API_Overview.pptx
│   ├── 01_Assignment.docx
│   ├── 02_API_Overview.pptx
│   └── helloWorld/
│       ├── Exercise - py/
│       │   └── helloWorldCmd.py
│       └── Solution - py/
│           └── helloWorldCmd.py
├── 02_Commands/
│   ├── 02_Assignment.docx
│   ├── 02_Commands.pptx
│   ├── 03_Helper Classes.pptx
│   ├── 04_CommandsArguments.pptx
│   ├── 04_UndoRedo.pptx
│   ├── 05_UndoRedo.pptx
│   ├── dagInfo/
│   │   ├── Exercise - C++/
│   │   │   ├── dagInfo.cpp
│   │   │   ├── dagInfo.h
│   │   │   ├── dagInfo.sln
│   │   │   ├── dagInfo.vcxproj
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── dagInfo.py
│   │   ├── Solution - C++/
│   │   │   ├── dagInfo.cpp
│   │   │   ├── dagInfo.h
│   │   │   ├── dagInfo.sln
│   │   │   ├── dagInfo.vcxproj
│   │   │   └── pluginMain.cpp
│   │   ├── Solution - py/
│   │   │   └── dagInfo.py
│   │   └── multiInstance.ma
│   ├── instanceRotate/
│   │   ├── Exercise - C++/
│   │   │   ├── instanceRotate.sln
│   │   │   ├── instanceRotate.vcxproj
│   │   │   ├── instanceRotateCmd.cpp
│   │   │   ├── instanceRotateCmd.h
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── instanceRotateCmd.py
│   │   ├── Solution - C++/
│   │   │   ├── instanceRotate.sln
│   │   │   ├── instanceRotate.vcxproj
│   │   │   ├── instanceRotateCmd.cpp
│   │   │   ├── instanceRotateCmd.h
│   │   │   └── pluginMain.cpp
│   │   └── Solution - py/
│   │       └── instanceRotateCmd.py
│   └── nodeInfo/
│       ├── Exercise - C++/
│       │   ├── nodeInfoCmd.cpp
│       │   ├── nodeInfoCmd.h
│       │   ├── nodeInfoCmd.sln
│       │   ├── nodeInfoCmd.vcxproj
│       │   └── pluginMain.cpp
│       ├── Exercise - py/
│       │   └── nodeInfoCmd.py
│       ├── Solution - C++/
│       │   ├── nodeInfoCmd.cpp
│       │   ├── nodeInfoCmd.h
│       │   ├── nodeInfoCmd.sln
│       │   ├── nodeInfoCmd.vcxproj
│       │   └── pluginMain.cpp
│       └── Solution - py/
│           └── nodeInfoCmd.py
├── 03_Nodes/
│   ├── 03_Assignment.docx
│   ├── 03_Nodes.pptx
│   ├── simpleNode/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── simpleNode.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   └── Solution - py/
│   │       └── simpleNode.py
│   ├── sineNode/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── sineNode.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── simpleNode.cpp
│   │   │   ├── simpleNode.h
│   │   │   ├── simpleNode.sln
│   │   │   └── simpleNode.vcxproj
│   │   └── Solution - py/
│   │       └── sineNode.py
│   └── transCircleNode/
│       ├── Exercise - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── transCircleNode.cpp
│       │   ├── transCircleNode.h
│       │   ├── transCircleNode.mel
│       │   ├── transCircleNode.sln
│       │   └── transCircleNode.vcxproj
│       ├── Exercise - py/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── transCircleNode.mel
│       │   └── transCircleNode.py
│       ├── Solution - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── transCircleNode.cpp
│       │   ├── transCircleNode.h
│       │   ├── transCircleNode.mel
│       │   ├── transCircleNode.sln
│       │   └── transCircleNode.vcxproj
│       └── Solution - py/
│           ├── AEtransCircleTemplate.mel
│           ├── transCircleNode.mel
│           └── transCircleNode.py
├── 04_NodeAttributes/
│   ├── 04_Assignment.docx
│   ├── 04_NodeAttributes.pptx
│   ├── dynNode/
│   │   ├── Exercise - C++/
│   │   │   ├── DynNode.sln
│   │   │   ├── DynNode.vcxproj
│   │   │   ├── dynNode.cpp
│   │   │   ├── dynNode.h
│   │   │   └── pluginMain.cpp
│   │   ├── Exercise - py/
│   │   │   └── dynNode.py
│   │   ├── Solution - C++/
│   │   │   ├── DynNode.sln
│   │   │   ├── DynNode.vcxproj
│   │   │   ├── dynNode.cpp
│   │   │   ├── dynNode.h
│   │   │   └── pluginMain.cpp
│   │   └── Solution - py/
│   │       └── dynNode.py
│   └── simpleNode - with Typed Attr/
│       ├── Exercise - C++/
│       │   ├── pluginMain.cpp
│       │   ├── simpleNode.cpp
│       │   ├── simpleNode.h
│       │   ├── simpleNode.sln
│       │   └── simpleNode.vcxproj
│       ├── Exercise - py/
│       │   └── simpleNode.py
│       ├── Solution - C++/
│       │   ├── pluginMain.cpp
│       │   ├── simpleNode.cpp
│       │   ├── simpleNode.h
│       │   ├── simpleNode.sln
│       │   └── simpleNode.vcxproj
│       └── Solution - py/
│           └── simpleNode.py
├── 05_DependencyGraph/
│   ├── 05_Assignment.docx
│   ├── 05_DependencyGraph.pptx
│   └── retrieveWeight/
│       ├── Exercise - C++/
│       │   ├── pluginMain.cpp
│       │   ├── retrieveWeight.sln
│       │   ├── retrieveWeight.vcxproj
│       │   ├── retrieveWeightCmd.cpp
│       │   └── retrieveWeightCmd.h
│       ├── Exercise - py/
│       │   └── retrieveWeight.py
│       ├── Solution - C++/
│       │   ├── pluginMain.cpp
│       │   ├── retrieveWeight.sln
│       │   ├── retrieveWeight.vcxproj
│       │   ├── retrieveWeightCmd.cpp
│       │   └── retrieveWeightCmd.h
│       ├── Solution - py/
│       │   └── retrieveWeight.py
│       └── blendShape.ma
├── 06_MiscTools/
│   ├── 06_Assignment.docx
│   ├── 06_MiscTools.pptx
│   ├── sceneMsg/
│   │   ├── Exercise - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── sceneMsgCmd.cpp
│   │   │   ├── sceneMsgCmd.h
│   │   │   ├── sceneMsgCmd.sln
│   │   │   └── sceneMsgCmd.vcxproj
│   │   ├── Exercise - py/
│   │   │   └── sceneMsgCmd.py
│   │   ├── Solution - C++/
│   │   │   ├── pluginMain.cpp
│   │   │   ├── sceneMsgCmd.cpp
│   │   │   ├── sceneMsgCmd.h
│   │   │   ├── sceneMsgCmd.sln
│   │   │   └── sceneMsgCmd.vcxproj
│   │   └── Solution - py/
│   │       └── sceneMsgCmd.py
│   └── setUpTransCircle/
│       ├── Exercise - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── setUpTransCircle.sln
│       │   ├── setUpTransCircle.vcxproj
│       │   ├── setUpTransCircleCmd.cpp
│       │   ├── setUpTransCircleCmd.h
│       │   ├── transCircleNode.cpp
│       │   └── transCircleNode.h
│       ├── Exercise - py/
│       │   └── setUpTransCircle.py
│       ├── Solution - C++/
│       │   ├── AEtransCircleTemplate.mel
│       │   ├── pluginMain.cpp
│       │   ├── setUpTransCircle.sln
│       │   ├── setUpTransCircle.vcxproj
│       │   ├── setUpTransCircleCmd.cpp
│       │   ├── setUpTransCircleCmd.h
│       │   ├── transCircleNode.cpp
│       │   └── transCircleNode.h
│       └── Solution - py/
│           └── setUpTransCircle.py
├── 07_Locator/
│   ├── 07_Assignment.docx
│   ├── 07_Locator.pptx
│   └── arrowLocator/
│       ├── Exercise - C++/
│       │   ├── arrowLocator.sln
│       │   ├── arrowLocator.vcxproj
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       ├── Exercise - py/
│       │   └── arrowLocator.py
│       ├── Solution - C++/
│       │   ├── arrowLocator.sln
│       │   ├── arrowLocator.vcxproj
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       └── Solution - py/
│           └── arrowLocator.py
├── 08_Manipulators/
│   ├── 08_Assignment.docx
│   ├── 08_Manipulators.pptx
│   └── arrowLocatorManip/
│       ├── Exercise - C++/
│       │   ├── arrowLocatorManip.sln
│       │   ├── arrowLocatorManip.vcxproj
│       │   ├── arrowLocatorManipNode.cpp
│       │   ├── arrowLocatorManipNode.h
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       ├── Exercise - py/
│       │   └── arrowLocatorManip.py
│       ├── Solution - C++/
│       │   ├── arrowLocatorManip.sln
│       │   ├── arrowLocatorManip.vcxproj
│       │   ├── arrowLocatorManipNode.cpp
│       │   ├── arrowLocatorManipNode.h
│       │   ├── arrowLocatorNode.cpp
│       │   └── arrowLocatorNode.h
│       └── Solution - py/
│           └── arrowLocatorManip.py
├── 09_PythonAPI/
│   ├── 09_Assignment.docx
│   ├── 09_Python 2.0.pptx
│   ├── 09_Python Scripting Exercise.pptx
│   ├── 09_PythonAPI.pptx
│   ├── 09_ReadingC++Docs.pptx
│   ├── helloWorld/
│   │   ├── Exercise - py/
│   │   │   └── helloWorldCmd.py
│   │   └── Solution - py/
│   │       └── helloWorldCmd.py
│   └── sineNode/
│       ├── Exercise - py/
│       │   └── sineNode.py
│       ├── Solution - py/
│       │   └── sineNode.py
│       └── sineNode-setup.mel
├── 10_PythonAdvanced/
│   ├── 10_PythonAdvanced.ppt
│   ├── DemoInstructions.docx
│   └── examples/
│       ├── ShotServer.py
│       ├── alt_str.py
│       ├── cppCentroid.cpp
│       ├── dist.py
│       ├── guipdb.py
│       ├── guipdb1.py
│       └── pyCentroid.py
├── AdditionalDocuments/
│   ├── Introduction to Maya API Summary.pptx
│   └── MELvsPython.ppt
└── README.md
Download .txt
SYMBOL INDEX (486 symbols across 121 files)

FILE: 01_API_Overview/helloWorld/Exercise - py/helloWorldCmd.py
  class scriptedCommand (line 21) | class scriptedCommand(OpenMayaMPx.MPxCommand):
  function initializePlugin (line 30) | def initializePlugin(mobject):
  function uninitializePlugin (line 40) | def uninitializePlugin(mobject):

FILE: 01_API_Overview/helloWorld/Solution - py/helloWorldCmd.py
  class scriptedCommand (line 20) | class scriptedCommand(OpenMayaMPx.MPxCommand):
    method __init__ (line 21) | def __init__(self):
    method doIt (line 23) | def doIt(self,argList):
  function cmdCreator (line 27) | def cmdCreator():
  function initializePlugin (line 31) | def initializePlugin(mobject):
  function uninitializePlugin (line 40) | def uninitializePlugin(mobject):

FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.cpp
  function MStatus (line 24) | MStatus dagInfo::doIt(const MArgList& )

FILE: 02_Commands/dagInfo/Exercise - C++/dagInfo.h
  function class (line 15) | class dagInfo : public MPxCommand

FILE: 02_Commands/dagInfo/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 34) | MStatus uninitializePlugin( MObject obj )

FILE: 02_Commands/dagInfo/Exercise - py/dagInfo.py
  function __init__ (line 20) | def __init__(self):
  function cmdCreator (line 105) | def cmdCreator():
  function initializePlugin (line 109) | def initializePlugin(mobject):
  function uninitializePlugin (line 117) | def uninitializePlugin(mobject):

FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.cpp
  function MStatus (line 24) | MStatus dagInfo::doIt(const MArgList& )

FILE: 02_Commands/dagInfo/Solution - C++/dagInfo.h
  function class (line 15) | class dagInfo : public MPxCommand

FILE: 02_Commands/dagInfo/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 34) | MStatus uninitializePlugin( MObject obj )

FILE: 02_Commands/dagInfo/Solution - py/dagInfo.py
  class dagInfo (line 15) | class dagInfo(OpenMayaMPx.MPxCommand):
    method __init__ (line 17) | def __init__(self):
    method doIt (line 23) | def doIt(self, args):
  function myMatrix_str (line 96) | def myMatrix_str(self):
  function cmdCreator (line 101) | def cmdCreator():
  function initializePlugin (line 105) | def initializePlugin(mobject):
  function uninitializePlugin (line 113) | def uninitializePlugin(mobject):

FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.cpp
  function MSyntax (line 24) | MSyntax instanceRotate::cmdSyntax()
  function MStatus (line 38) | MStatus instanceRotate::doIt( const MArgList& argList)
  function MStatus (line 86) | MStatus instanceRotate::redoIt()
  function MStatus (line 132) | MStatus instanceRotate::undoIt()

FILE: 02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.h
  type AXIS (line 20) | enum AXIS {AXIS_X = 1, AXIS_Y = 2, AXIS_Z = 3}
  function class (line 29) | class instanceRotate : public MPxCommand

FILE: 02_Commands/instanceRotate/Exercise - C++/pluginMain.cpp
  function MStatus (line 11) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 02_Commands/instanceRotate/Exercise - py/instanceRotateCmd.py
  class instanceRotate (line 27) | class instanceRotate(OpenMayaMPx.MPxCommand):
    method __init__ (line 33) | def __init__(self):
    method doIt (line 59) | def doIt(self, args):
    method redoIt (line 88) | def redoIt(self, args):
    method undoIt (line 124) | def undoIt(self, args):
    method rotate (line 147) | def rotate( self, dp ):
  function cmdCreator (line 213) | def cmdCreator():
  function syntaxCreator (line 220) | def syntaxCreator():
  function initializePlugin (line 228) | def initializePlugin(mobject):
  function uninitializePlugin (line 236) | def uninitializePlugin(mobject):

FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.cpp
  function MSyntax (line 24) | MSyntax instanceRotate::cmdSyntax()
  function MStatus (line 38) | MStatus instanceRotate::doIt( const MArgList& argList)
  function MStatus (line 85) | MStatus instanceRotate::redoIt()
  function MStatus (line 128) | MStatus instanceRotate::undoIt()

FILE: 02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.h
  type AXIS (line 20) | enum AXIS {AXIS_X = 1, AXIS_Y = 2, AXIS_Z = 3}
  function class (line 29) | class instanceRotate : public MPxCommand

FILE: 02_Commands/instanceRotate/Solution - C++/pluginMain.cpp
  function MStatus (line 11) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 02_Commands/instanceRotate/Solution - py/instanceRotateCmd.py
  class instanceRotate (line 27) | class instanceRotate(OpenMayaMPx.MPxCommand):
    method __init__ (line 33) | def __init__(self):
    method doIt (line 59) | def doIt(self, args):
    method redoIt (line 88) | def redoIt(self, args):
    method undoIt (line 123) | def undoIt(self, args):
    method rotate (line 148) | def rotate( self, dp ):
  function cmdCreator (line 200) | def cmdCreator():
  function syntaxCreator (line 207) | def syntaxCreator():
  function initializePlugin (line 215) | def initializePlugin(mobject):
  function uninitializePlugin (line 223) | def uninitializePlugin(mobject):

FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.cpp
  function MSyntax (line 39) | MSyntax nodeInfo::newSyntax()
  function MStatus (line 51) | MStatus nodeInfo::parseArgs( const MArgList& args )

FILE: 02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.h
  function class (line 19) | class nodeInfo : public MPxCommand

FILE: 02_Commands/nodeInfo/Exercise - C++/pluginMain.cpp
  function MStatus (line 11) | MStatus initializePlugin( MObject obj )
  function MStatus (line 38) | MStatus uninitializePlugin( MObject obj)

FILE: 02_Commands/nodeInfo/Exercise - py/nodeInfoCmd.py
  class nodeInfoCmd (line 22) | class nodeInfoCmd(OpenMayaMPx.MPxCommand):
    method __init__ (line 24) | def __init__(self):
    method parseArgs (line 30) | def parseArgs ( self, args ):
  function cmdCreator (line 109) | def cmdCreator():
  function syntaxCreator (line 116) | def syntaxCreator():
  function initializePlugin (line 122) | def initializePlugin(mobject):
  function uninitializePlugin (line 131) | def uninitializePlugin(mobject):

FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.cpp
  function MSyntax (line 39) | MSyntax nodeInfo::newSyntax()
  function MStatus (line 48) | MStatus nodeInfo::parseArgs( const MArgList& args )
  function MStatus (line 62) | MStatus nodeInfo::doIt( const MArgList& args )

FILE: 02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.h
  function class (line 19) | class nodeInfo : public MPxCommand

FILE: 02_Commands/nodeInfo/Solution - C++/pluginMain.cpp
  function MStatus (line 11) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj)

FILE: 02_Commands/nodeInfo/Solution - py/nodeInfoCmd.py
  class nodeInfoCmd (line 20) | class nodeInfoCmd(OpenMayaMPx.MPxCommand):
    method __init__ (line 22) | def __init__(self):
    method parseArgs (line 28) | def parseArgs ( self, args ):
    method doIt (line 36) | def doIt(self, args):
  function cmdCreator (line 109) | def cmdCreator():
  function syntaxCreator (line 116) | def syntaxCreator():
  function initializePlugin (line 122) | def initializePlugin(mobject):
  function uninitializePlugin (line 130) | def uninitializePlugin(mobject):

FILE: 03_Nodes/simpleNode/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/simpleNode/Exercise - C++/simpleNode.cpp
  function MStatus (line 34) | MStatus simpleNode::initialize()
  function MStatus (line 82) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/simpleNode/Exercise - C++/simpleNode.h
  function class (line 22) | class simpleNode : public MPxNode

FILE: 03_Nodes/simpleNode/Exercise - py/simpleNode.py
  class simpleNode (line 26) | class simpleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 32) | def __init__(self):
    method compute (line 40) | def compute(self,plug,dataBlock):
  function nodeCreator (line 74) | def nodeCreator():
  function nodeInitializer (line 81) | def nodeInitializer():
  function initializePlugin (line 121) | def initializePlugin(mobject):
  function uninitializePlugin (line 132) | def uninitializePlugin(mobject):

FILE: 03_Nodes/simpleNode/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/simpleNode/Solution - C++/simpleNode.cpp
  function MStatus (line 32) | MStatus simpleNode::initialize()
  function MStatus (line 79) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/simpleNode/Solution - C++/simpleNode.h
  function class (line 22) | class simpleNode : public MPxNode

FILE: 03_Nodes/simpleNode/Solution - py/simpleNode.py
  class simpleNode (line 25) | class simpleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 30) | def __init__(self):
    method compute (line 38) | def compute(self,plug,dataBlock):
  function nodeCreator (line 73) | def nodeCreator():
  function nodeInitializer (line 80) | def nodeInitializer():
  function initializePlugin (line 119) | def initializePlugin(mobject):
  function uninitializePlugin (line 128) | def uninitializePlugin(mobject):

FILE: 03_Nodes/sineNode/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/sineNode/Exercise - C++/simpleNode.cpp
  function MStatus (line 34) | MStatus simpleNode::initialize()
  function MStatus (line 100) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/sineNode/Exercise - C++/simpleNode.h
  function class (line 23) | class simpleNode : public MPxNode

FILE: 03_Nodes/sineNode/Exercise - py/sineNode.py
  class sineNode (line 19) | class sineNode(OpenMayaMPx.MPxNode):
    method __init__ (line 23) | def __init__(self):
  function nodeCreator (line 39) | def nodeCreator():
  function nodeInitializer (line 44) | def nodeInitializer():
  function initializePlugin (line 58) | def initializePlugin(mobject):
  function uninitializePlugin (line 68) | def uninitializePlugin(mobject):

FILE: 03_Nodes/sineNode/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/sineNode/Solution - C++/simpleNode.cpp
  function MStatus (line 32) | MStatus simpleNode::initialize()
  function MStatus (line 95) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/sineNode/Solution - C++/simpleNode.h
  function class (line 23) | class simpleNode : public MPxNode

FILE: 03_Nodes/sineNode/Solution - py/sineNode.py
  class sineNode (line 21) | class sineNode(OpenMayaMPx.MPxNode):
    method __init__ (line 25) | def __init__(self):
    method compute (line 27) | def compute(self,plug,dataBlock):
  function nodeCreator (line 40) | def nodeCreator():
  function nodeInitializer (line 44) | def nodeInitializer():
  function initializePlugin (line 60) | def initializePlugin(mobject):
  function uninitializePlugin (line 69) | def uninitializePlugin(mobject):

FILE: 03_Nodes/transCircleNode/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 32) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/transCircleNode/Exercise - C++/transCircleNode.cpp
  function MStatus (line 42) | MStatus transCircle::initialize()
  function MStatus (line 155) | MStatus transCircle::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/transCircleNode/Exercise - C++/transCircleNode.h
  function class (line 30) | class transCircle : public MPxNode

FILE: 03_Nodes/transCircleNode/Exercise - py/transCircleNode.py
  class transCircleNode (line 23) | class transCircleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 43) | def __init__(self):
    method compute (line 51) | def compute(self,plug,dataBlock):
  function nodeCreator (line 114) | def nodeCreator():
  function nodeInitializer (line 121) | def nodeInitializer():
  function initializePlugin (line 221) | def initializePlugin(mobject):
  function uninitializePlugin (line 232) | def uninitializePlugin(mobject):

FILE: 03_Nodes/transCircleNode/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 38) | MStatus uninitializePlugin( MObject obj )

FILE: 03_Nodes/transCircleNode/Solution - C++/transCircleNode.cpp
  function MStatus (line 40) | MStatus transCircle::initialize()
  function MStatus (line 143) | MStatus transCircle::compute( const MPlug& plug, MDataBlock& data )

FILE: 03_Nodes/transCircleNode/Solution - C++/transCircleNode.h
  function class (line 30) | class transCircle : public MPxNode

FILE: 03_Nodes/transCircleNode/Solution - py/transCircleNode.py
  class transCircleNode (line 24) | class transCircleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 42) | def __init__(self):
    method compute (line 50) | def compute(self,plug,dataBlock):
  function nodeCreator (line 106) | def nodeCreator():
  function nodeInitializer (line 113) | def nodeInitializer():
  function initializePlugin (line 205) | def initializePlugin(mobject):
  function uninitializePlugin (line 214) | def uninitializePlugin(mobject):

FILE: 04_NodeAttributes/dynNode/Exercise - C++/dynNode.cpp
  function MStatus (line 63) | MStatus dynNode::initialize()
  function MStatus (line 106) | MStatus dynNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 04_NodeAttributes/dynNode/Exercise - C++/dynNode.h
  function class (line 26) | class dynNode : public MPxNode

FILE: 04_NodeAttributes/dynNode/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 04_NodeAttributes/dynNode/Exercise - py/dynNode.py
  class dynNode (line 25) | class dynNode(OpenMayaMPx.MPxNode):
    method __init__ (line 31) | def __init__(self):
    method compute (line 71) | def compute(self,plug,data):
  function nodeCreator (line 109) | def nodeCreator():
  function nodeInitializer (line 117) | def nodeInitializer():
  function initializePlugin (line 152) | def initializePlugin(mobject):
  function uninitializePlugin (line 161) | def uninitializePlugin(mobject):

FILE: 04_NodeAttributes/dynNode/Solution - C++/dynNode.cpp
  function MStatus (line 60) | MStatus dynNode::setDependentsDirty(const MPlug &dirtyPlug, MPlugArray &...
  function MStatus (line 83) | MStatus dynNode::initialize()
  function MStatus (line 126) | MStatus dynNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 04_NodeAttributes/dynNode/Solution - C++/dynNode.h
  function class (line 26) | class dynNode : public MPxNode

FILE: 04_NodeAttributes/dynNode/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 04_NodeAttributes/dynNode/Solution - py/dynNode.py
  class dynNode (line 26) | class dynNode(OpenMayaMPx.MPxNode):
    method __init__ (line 31) | def __init__(self):
    method compute (line 39) | def compute(self,plug,data):
    method postConstructor (line 79) | def postConstructor(self):
    method setDependentsDirty (line 109) | def setDependentsDirty(self, dirtyPlug, plugArray):
  function nodeCreator (line 128) | def nodeCreator():
  function nodeInitializer (line 136) | def nodeInitializer():
  function initializePlugin (line 171) | def initializePlugin(mobject):
  function uninitializePlugin (line 180) | def uninitializePlugin(mobject):

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.cpp
  function MStatus (line 33) | MStatus simpleNode::initialize()
  function MStatus (line 97) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.h
  function class (line 23) | class simpleNode : public MPxNode

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Exercise - py/simpleNode.py
  class simpleNode (line 23) | class simpleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 30) | def __init__(self):
    method compute (line 38) | def compute(self,plug,dataBlock):
  function nodeCreator (line 71) | def nodeCreator():
  function nodeInitializer (line 78) | def nodeInitializer():
  function initializePlugin (line 133) | def initializePlugin(mobject):
  function uninitializePlugin (line 142) | def uninitializePlugin(mobject):

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 40) | MStatus uninitializePlugin( MObject obj )

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.cpp
  function MStatus (line 32) | MStatus simpleNode::initialize()
  function MStatus (line 90) | MStatus simpleNode::compute( const MPlug& plug, MDataBlock& data )

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.h
  function class (line 23) | class simpleNode : public MPxNode

FILE: 04_NodeAttributes/simpleNode - with Typed Attr/Solution - py/simpleNode.py
  class simpleNode (line 24) | class simpleNode(OpenMayaMPx.MPxNode):
    method __init__ (line 30) | def __init__(self):
    method compute (line 38) | def compute(self,plug,dataBlock):
  function nodeCreator (line 71) | def nodeCreator():
  function nodeInitializer (line 78) | def nodeInitializer():
  function initializePlugin (line 127) | def initializePlugin(mobject):
  function uninitializePlugin (line 136) | def uninitializePlugin(mobject):

FILE: 05_DependencyGraph/retrieveWeight/Exercise - C++/pluginMain.cpp
  function MStatus (line 13) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeightCmd.cpp
  function MStatus (line 17) | MStatus retrieveWeightCmd::doIt(const MArgList&)

FILE: 05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeightCmd.h
  function class (line 14) | class retrieveWeightCmd	: public MPxCommand

FILE: 05_DependencyGraph/retrieveWeight/Exercise - py/retrieveWeight.py
  class retrieveWeight (line 17) | class retrieveWeight(OpenMayaMPx.MPxCommand):
    method __init__ (line 18) | def __init__(self):
    method doIt (line 21) | def doIt(self, args):
  function nodeCreator (line 68) | def nodeCreator():
  function initializePlugin (line 72) | def initializePlugin(mobject):
  function uninitializePlugin (line 81) | def uninitializePlugin(mobject):

FILE: 05_DependencyGraph/retrieveWeight/Solution - C++/pluginMain.cpp
  function MStatus (line 13) | MStatus initializePlugin( MObject obj )
  function MStatus (line 37) | MStatus uninitializePlugin( MObject obj )

FILE: 05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeightCmd.cpp
  function MStatus (line 17) | MStatus retrieveWeightCmd::doIt(const MArgList&)

FILE: 05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeightCmd.h
  function class (line 14) | class retrieveWeightCmd	: public MPxCommand

FILE: 05_DependencyGraph/retrieveWeight/Solution - py/retrieveWeight.py
  class retrieveWeight (line 18) | class retrieveWeight(OpenMayaMPx.MPxCommand):
    method __init__ (line 19) | def __init__(self):
    method doIt (line 22) | def doIt(self, args):
  function nodeCreator (line 68) | def nodeCreator():
  function initializePlugin (line 72) | def initializePlugin(mobject):
  function uninitializePlugin (line 81) | def uninitializePlugin(mobject):

FILE: 06_MiscTools/sceneMsg/Exercise - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 33) | MStatus uninitializePlugin( MObject obj )

FILE: 06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.cpp
  function MStatus (line 18) | MStatus sceneMsgCmd::doIt(const MArgList & args)
  function MStatus (line 23) | MStatus sceneMsgCmd::redoIt()
  function MStatus (line 42) | MStatus sceneMsgCmd::undoIt()
  function openCallback (line 52) | void openCallback(void* clienData)
  function newCallback (line 57) | void newCallback(void* clienData)
  function saveCheckCallback (line 62) | void saveCheckCallback(bool *retCode, void* clienData)

FILE: 06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.h
  function class (line 14) | class sceneMsgCmd : public MPxCommand

FILE: 06_MiscTools/sceneMsg/Exercise - py/sceneMsgCmd.py
  function removeCallback (line 20) | def removeCallback(ID):
  function sceneMsgCmd (line 31) | def sceneMsgCmd():
    method __init__ (line 53) | def __init__(self):
    method doIt (line 56) | def doIt(self,argList):
    method redoIt (line 59) | def redoIt(self):
    method undoIt (line 72) | def undoIt(self):
  function openCallback (line 36) | def openCallback(clienData):
  function newCallback (line 39) | def newCallback(clienData):
  function saveCheckCallback (line 43) | def saveCheckCallback(retCode, clienData):
  class sceneMsgCmd (line 51) | class sceneMsgCmd(OpenMayaMPx.MPxCommand):
    method __init__ (line 53) | def __init__(self):
    method doIt (line 56) | def doIt(self,argList):
    method redoIt (line 59) | def redoIt(self):
    method undoIt (line 72) | def undoIt(self):
  function nodeCreator (line 77) | def nodeCreator():
  function initializePlugin (line 81) | def initializePlugin(mobject):
  function uninitializePlugin (line 90) | def uninitializePlugin(mobject):

FILE: 06_MiscTools/sceneMsg/Solution - C++/pluginMain.cpp
  function MStatus (line 12) | MStatus initializePlugin( MObject obj )
  function MStatus (line 33) | MStatus uninitializePlugin( MObject obj )

FILE: 06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.cpp
  function MStatus (line 18) | MStatus sceneMsgCmd::doIt(const MArgList & args)
  function MStatus (line 23) | MStatus sceneMsgCmd::redoIt()
  function MStatus (line 42) | MStatus sceneMsgCmd::undoIt()
  function openCallback (line 51) | void openCallback(void* clienData)
  function newCallback (line 56) | void newCallback(void* clienData)
  function saveCheckCallback (line 61) | void saveCheckCallback(bool *retCode, void* clienData)

FILE: 06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.h
  function class (line 14) | class sceneMsgCmd : public MPxCommand

FILE: 06_MiscTools/sceneMsg/Solution - py/sceneMsgCmd.py
  function removeCallback (line 21) | def removeCallback(ID):
  function sceneMsgCmd (line 31) | def sceneMsgCmd():
    method __init__ (line 54) | def __init__(self):
    method doIt (line 57) | def doIt(self,argList):
    method redoIt (line 60) | def redoIt(self):
    method undoIt (line 73) | def undoIt(self):
  function openCallback (line 36) | def openCallback(clienData):
  function newCallback (line 39) | def newCallback(clienData):
  function saveCheckCallback (line 43) | def saveCheckCallback(retCode, clienData):
  class sceneMsgCmd (line 52) | class sceneMsgCmd(OpenMayaMPx.MPxCommand):
    method __init__ (line 54) | def __init__(self):
    method doIt (line 57) | def doIt(self,argList):
    method redoIt (line 60) | def redoIt(self):
    method undoIt (line 73) | def undoIt(self):
  function nodeCreator (line 78) | def nodeCreator():
  function initializePlugin (line 82) | def initializePlugin(mobject):
  function uninitializePlugin (line 91) | def uninitializePlugin(mobject):

FILE: 06_MiscTools/setUpTransCircle/Exercise - C++/pluginMain.cpp
  function MStatus (line 13) | MStatus initializePlugin( MObject obj )
  function MStatus (line 41) | MStatus uninitializePlugin( MObject obj )

FILE: 06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircleCmd.cpp
  function MStatus (line 31) | MStatus setUpTransCircle::doIt( const MArgList& argList)
  function MStatus (line 117) | MStatus setUpTransCircle::undoIt()
  function MStatus (line 122) | MStatus setUpTransCircle::redoIt()

FILE: 06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircleCmd.h
  function class (line 17) | class setUpTransCircle : public MPxCommand

FILE: 06_MiscTools/setUpTransCircle/Exercise - C++/transCircleNode.cpp
  function MStatus (line 37) | MStatus transCircle::initialize()
  function MStatus (line 110) | MStatus transCircle::compute( const MPlug& plug, MDataBlock& data )

FILE: 06_MiscTools/setUpTransCircle/Exercise - C++/transCircleNode.h
  function class (line 12) | class transCircle : public MPxNode

FILE: 06_MiscTools/setUpTransCircle/Exercise - py/setUpTransCircle.py
  class transCircle (line 21) | class transCircle(OpenMayaMPx.MPxNode):
    method __init__ (line 39) | def __init__(self):
    method compute (line 46) | def compute(self, plug, data):
  function nodeInitializer (line 88) | def nodeInitializer():
  function nodeCreator (line 160) | def nodeCreator():
  function cmdCreator (line 164) | def cmdCreator():
  class setUpTransCircle (line 175) | class setUpTransCircle(OpenMayaMPx.MPxCommand):
    method __init__ (line 177) | def __init__(self):
    method doIt (line 181) | def doIt(self,argList):
    method isUndoable (line 271) | def isUndoable(self):
    method undoIt (line 274) | def undoIt(self):
    method redoIt (line 277) | def redoIt(self):
  function initializePlugin (line 281) | def initializePlugin(mobject):
  function uninitializePlugin (line 297) | def uninitializePlugin(mobject):

FILE: 06_MiscTools/setUpTransCircle/Solution - C++/pluginMain.cpp
  function MStatus (line 13) | MStatus initializePlugin( MObject obj )
  function MStatus (line 41) | MStatus uninitializePlugin( MObject obj )

FILE: 06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircleCmd.cpp
  function MStatus (line 31) | MStatus setUpTransCircle::doIt( const MArgList& argList)
  function MStatus (line 113) | MStatus setUpTransCircle::undoIt()
  function MStatus (line 118) | MStatus setUpTransCircle::redoIt()

FILE: 06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircleCmd.h
  function class (line 17) | class setUpTransCircle : public MPxCommand

FILE: 06_MiscTools/setUpTransCircle/Solution - C++/transCircleNode.cpp
  function MStatus (line 37) | MStatus transCircle::initialize()
  function MStatus (line 110) | MStatus transCircle::compute( const MPlug& plug, MDataBlock& data )

FILE: 06_MiscTools/setUpTransCircle/Solution - C++/transCircleNode.h
  function class (line 12) | class transCircle : public MPxNode

FILE: 06_MiscTools/setUpTransCircle/Solution - py/setUpTransCircle.py
  class transCircle (line 16) | class transCircle(OpenMayaMPx.MPxNode):
    method __init__ (line 34) | def __init__(self):
    method compute (line 41) | def compute(self, plug, data):
  function nodeInitializer (line 83) | def nodeInitializer():
  function nodeCreator (line 155) | def nodeCreator():
  function cmdCreator (line 159) | def cmdCreator():
  class setUpTransCircle (line 170) | class setUpTransCircle(OpenMayaMPx.MPxCommand):
    method __init__ (line 172) | def __init__(self):
    method doIt (line 176) | def doIt(self,argList):
    method isUndoable (line 238) | def isUndoable(self):
    method undoIt (line 241) | def undoIt(self):
    method redoIt (line 245) | def redoIt(self):
  function initializePlugin (line 249) | def initializePlugin(mobject):
  function uninitializePlugin (line 265) | def uninitializePlugin(mobject):

FILE: 07_Locator/arrowLocator/Exercise - C++/arrowLocatorNode.cpp
  function MStatus (line 48) | MStatus arrowLocator::initialize()
  function MBoundingBox (line 150) | MBoundingBox arrowLocator::boundingBox() const
  class arrowLocatorOverride (line 171) | class arrowLocatorOverride : public MHWRender::MPxDrawOverride
  function MBoundingBox (line 228) | MBoundingBox arrowLocatorOverride::boundingBox(
  function MUserData (line 239) | MUserData* arrowLocatorOverride::prepareForDraw(
  function MStatus (line 324) | MStatus initializePlugin( MObject obj )
  function MStatus (line 354) | MStatus uninitializePlugin( MObject obj)

FILE: 07_Locator/arrowLocator/Exercise - C++/arrowLocatorNode.h
  function class (line 37) | class arrowLocatorData : public MUserData
  function class (line 46) | class arrowLocator : public MPxLocatorNode

FILE: 07_Locator/arrowLocator/Exercise - py/arrowLocator.py
  class arrowLocator (line 34) | class arrowLocator(OpenMayaMPx.MPxLocatorNode):
    method __init__ (line 37) | def __init__(self):
    method compute (line 41) | def compute(self, plug, data):
    method draw (line 52) | def draw(self, view, path, style, status):
    method isBounded (line 122) | def isBounded(self):
    method boundingBox (line 128) | def boundingBox(self):
  function nodeCreator (line 137) | def nodeCreator():
  function nodeInitializer (line 141) | def nodeInitializer():
  function initializePlugin (line 157) | def initializePlugin(mobject):
  function uninitializePlugin (line 167) | def uninitializePlugin(mobject):

FILE: 07_Locator/arrowLocator/Solution - C++/arrowLocatorNode.cpp
  function MStatus (line 57) | MStatus arrowLocator::initialize()
  function MBoundingBox (line 154) | MBoundingBox arrowLocator::boundingBox() const
  class arrowLocatorOverride (line 176) | class arrowLocatorOverride : public MHWRender::MPxDrawOverride
  function MBoundingBox (line 233) | MBoundingBox arrowLocatorOverride::boundingBox(
  function MUserData (line 244) | MUserData* arrowLocatorOverride::prepareForDraw(
  function MStatus (line 328) | MStatus initializePlugin( MObject obj )
  function MStatus (line 358) | MStatus uninitializePlugin( MObject obj)

FILE: 07_Locator/arrowLocator/Solution - C++/arrowLocatorNode.h
  function class (line 37) | class arrowLocatorData : public MUserData
  function class (line 46) | class arrowLocator : public MPxLocatorNode

FILE: 07_Locator/arrowLocator/Solution - py/arrowLocator.py
  class arrowLocator (line 35) | class arrowLocator(OpenMayaMPx.MPxLocatorNode):
    method __init__ (line 38) | def __init__(self):
    method compute (line 42) | def compute(self, plug, data):
    method draw (line 53) | def draw(self, view, path, style, status):
    method isBounded (line 120) | def isBounded(self):
    method boundingBox (line 126) | def boundingBox(self):
  function nodeCreator (line 135) | def nodeCreator():
  function nodeInitializer (line 139) | def nodeInitializer():
  function initializePlugin (line 153) | def initializePlugin(mobject):
  function uninitializePlugin (line 163) | def uninitializePlugin(mobject):

FILE: 08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManipNode.cpp
  function MStatus (line 54) | MStatus arrowLocatorManip::initialize()
  function MStatus (line 65) | MStatus arrowLocatorManip::createChildren()
  function MStatus (line 92) | MStatus arrowLocatorManip::connectToDependNode(const MObject &dependNode)

FILE: 08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManipNode.h
  function class (line 17) | class arrowLocatorManip : public MPxManipContainer

FILE: 08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorNode.cpp
  function MStatus (line 49) | MStatus arrowLocator::compute( const MPlug& plug, MDataBlock& data )
  function MStatus (line 59) | MStatus arrowLocator::initialize()
  function MBoundingBox (line 177) | MBoundingBox arrowLocator::boundingBox() const
  class arrowLocatorOverride (line 202) | class arrowLocatorOverride : public MHWRender::MPxDrawOverride
  function MBoundingBox (line 259) | MBoundingBox arrowLocatorOverride::boundingBox(
  function MUserData (line 270) | MUserData* arrowLocatorOverride::prepareForDraw(
  function MStatus (line 364) | MStatus initializePlugin( MObject obj )
  function MStatus (line 408) | MStatus uninitializePlugin( MObject obj)

FILE: 08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorNode.h
  function class (line 39) | class arrowLocatorData : public MUserData
  function class (line 48) | class arrowLocator : public MPxLocatorNode

FILE: 08_Manipulators/arrowLocatorManip/Exercise - py/arrowLocatorManip.py
  class arrowLocatorManip (line 41) | class arrowLocatorManip(OpenMayaMPx.MPxManipContainer):
    method __init__ (line 42) | def __init__(self):
    method createChildren (line 50) | def createChildren(self):
    method connectToDependNode (line 75) | def connectToDependNode(self, node):
    method draw (line 113) | def draw(self, view, path, style, status):
  class arrowLocator (line 151) | class arrowLocator(OpenMayaMPx.MPxLocatorNode):
    method __init__ (line 154) | def __init__(self):
    method compute (line 158) | def compute(self, plug, data):
    method draw (line 169) | def draw(self, view, path, style, status):
    method isBounded (line 236) | def isBounded(self):
    method boundingBox (line 242) | def boundingBox(self):
  function ManipNodeCreator (line 252) | def ManipNodeCreator():
  function ManipNodeInitializer (line 258) | def ManipNodeInitializer():
  function nodeCreator (line 262) | def nodeCreator():
  function nodeInitializer (line 266) | def nodeInitializer():
  function initializePlugin (line 290) | def initializePlugin(mobject):
  function uninitializePlugin (line 306) | def uninitializePlugin(mobject):

FILE: 08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManipNode.cpp
  function MStatus (line 54) | MStatus arrowLocatorManip::initialize()
  function MStatus (line 65) | MStatus arrowLocatorManip::createChildren()
  function MStatus (line 90) | MStatus arrowLocatorManip::connectToDependNode(const MObject &dependNode)
  function MManipData (line 131) | MManipData arrowLocatorManip::centerPointCallback(unsigned int manipIndex)

FILE: 08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManipNode.h
  function class (line 17) | class arrowLocatorManip : public MPxManipContainer

FILE: 08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorNode.cpp
  function MStatus (line 48) | MStatus arrowLocator::compute( const MPlug& plug, MDataBlock& data )
  function MStatus (line 55) | MStatus arrowLocator::initialize()
  function MBoundingBox (line 173) | MBoundingBox arrowLocator::boundingBox() const
  class arrowLocatorOverride (line 200) | class arrowLocatorOverride : public MHWRender::MPxDrawOverride
  function MBoundingBox (line 257) | MBoundingBox arrowLocatorOverride::boundingBox(
  function MUserData (line 268) | MUserData* arrowLocatorOverride::prepareForDraw(
  function MStatus (line 349) | MStatus initializePlugin( MObject obj )
  function MStatus (line 393) | MStatus uninitializePlugin( MObject obj)

FILE: 08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorNode.h
  function class (line 39) | class arrowLocatorData : public MUserData
  function class (line 48) | class arrowLocator : public MPxLocatorNode

FILE: 08_Manipulators/arrowLocatorManip/Solution - py/arrowLocatorManip.py
  class arrowLocatorManip (line 37) | class arrowLocatorManip(OpenMayaMPx.MPxManipContainer):
    method __init__ (line 38) | def __init__(self):
    method createChildren (line 46) | def createChildren(self):
    method connectToDependNode (line 68) | def connectToDependNode(self, node):
    method draw (line 108) | def draw(self, view, path, style, status):
    method plugToManipConversion (line 120) | def plugToManipConversion( self, manipIndex ):
  class arrowLocator (line 146) | class arrowLocator(OpenMayaMPx.MPxLocatorNode):
    method __init__ (line 149) | def __init__(self):
    method compute (line 153) | def compute(self, plug, data):
    method draw (line 164) | def draw(self, view, path, style, status):
    method isBounded (line 231) | def isBounded(self):
    method boundingBox (line 237) | def boundingBox(self):
  function ManipNodeCreator (line 247) | def ManipNodeCreator():
  function ManipNodeInitializer (line 253) | def ManipNodeInitializer():
  function nodeCreator (line 257) | def nodeCreator():
  function nodeInitializer (line 261) | def nodeInitializer():
  function initializePlugin (line 285) | def initializePlugin(mobject):
  function uninitializePlugin (line 301) | def uninitializePlugin(mobject):

FILE: 09_PythonAPI/helloWorld/Exercise - py/helloWorldCmd.py
  class scriptedCommand (line 24) | class scriptedCommand(OpenMayaMPx.MPxCommand):
  function cmdCreator (line 34) | def cmdCreator():
  function initializePlugin (line 39) | def initializePlugin(mobject):
  function uninitializePlugin (line 49) | def uninitializePlugin(mobject):

FILE: 09_PythonAPI/helloWorld/Solution - py/helloWorldCmd.py
  class scriptedCommand (line 24) | class scriptedCommand(OpenMayaMPx.MPxCommand):
    method __init__ (line 25) | def __init__(self):
    method doIt (line 27) | def doIt(self,argList):
  function cmdCreator (line 31) | def cmdCreator():
  function initializePlugin (line 35) | def initializePlugin(mobject):
  function uninitializePlugin (line 44) | def uninitializePlugin(mobject):

FILE: 09_PythonAPI/sineNode/Exercise - py/sineNode.py
  class sineNode (line 22) | class sineNode(OpenMayaMPx.MPxNode):
    method __init__ (line 27) | def __init__(self):
  function nodeCreator (line 44) | def nodeCreator():
  function nodeInitializer (line 49) | def nodeInitializer():
  function initializePlugin (line 66) | def initializePlugin(mobject):
  function uninitializePlugin (line 76) | def uninitializePlugin(mobject):

FILE: 09_PythonAPI/sineNode/Solution - py/sineNode.py
  class sineNode (line 21) | class sineNode(OpenMayaMPx.MPxNode):
    method __init__ (line 25) | def __init__(self):
    method compute (line 27) | def compute(self,plug,dataBlock):
  function nodeCreator (line 40) | def nodeCreator():
  function nodeInitializer (line 44) | def nodeInitializer():
  function initializePlugin (line 60) | def initializePlugin(mobject):
  function uninitializePlugin (line 69) | def uninitializePlugin(mobject):

FILE: 10_PythonAdvanced/examples/ShotServer.py
  class Shot (line 81) | class Shot:
    method __init__ (line 82) | def __init__(self):
  class ShotRequest (line 90) | class ShotRequest:
    method __init__ (line 91) | def __init__(self):
  function saveShotDefaults (line 99) | def saveShotDefaults(shotInfo):
  function loadShotDefaults (line 112) | def loadShotDefaults():
  function startServer (line 132) | def startServer():
  function stopServer (line 168) | def stopServer():
  function _getNextShot (line 192) | def _getNextShot(oldShot):
  function makeSampleShot (line 215) | def makeSampleShot():
  function dumpShot (line 226) | def dumpShot(shot):
  function requestNewShot (line 239) | def requestNewShot(oldShot):

FILE: 10_PythonAdvanced/examples/alt_str.py
  function MVector_str (line 52) | def MVector_str(self):
  function compressedMIntArray_str (line 81) | def compressedMIntArray_str(self):
  function compressSeq (line 103) | def compressSeq(count, value):

FILE: 10_PythonAdvanced/examples/cppCentroid.cpp
  function PyObject (line 48) | static PyObject* cppCentroid_mesh(PyObject*, PyObject* args)
  function PyMODINIT_FUNC (line 113) | PyMODINIT_FUNC initcppCentroid()

FILE: 10_PythonAdvanced/examples/dist.py
  function distance (line 2) | def distance(p1, p2):

FILE: 10_PythonAdvanced/examples/guipdb.py
  class DebuggerStandardInput (line 58) | class DebuggerStandardInput:
    method readline (line 59) | def readline( self ):
    method read (line 62) | def read( self ):
    method _getUserDebugResponse (line 65) | def _getUserDebugResponse(self):
  class DebuggerStandardOutput (line 86) | class DebuggerStandardOutput:
    method __init__ (line 87) | def __init__(self, orig_stdout):
    method write (line 90) | def write(self, msgoutput):
    method writelines (line 97) | def writelines(self, msgSeq):
    method flush (line 101) | def flush(self):
  function run (line 106) | def run(command):

FILE: 10_PythonAdvanced/examples/guipdb1.py
  class DebuggerStandardInput (line 58) | class DebuggerStandardInput:
    method readline (line 59) | def readline( self ):
    method read (line 65) | def read( self ):
    method _getUserDebugResponse (line 68) | def _getUserDebugResponse(self):
  class DebuggerStandardOutput (line 89) | class DebuggerStandardOutput:
    method __init__ (line 90) | def __init__(self, orig_stdout):
    method write (line 93) | def write(self, msgoutput):
    method writelines (line 100) | def writelines(self, msgSeq):
    method flush (line 104) | def flush(self):
  function run (line 109) | def run(command):

FILE: 10_PythonAdvanced/examples/pyCentroid.py
  function mesh (line 43) | def mesh(meshName):
Condensed preview — 220 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (867K chars).
[
  {
    "path": ".gitignore",
    "chars": 2260,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": "01_API_Overview/helloWorld/Exercise - py/helloWorldCmd.py",
    "chars": 1356,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "01_API_Overview/helloWorld/Solution - py/helloWorldCmd.py",
    "chars": 1189,
    "preview": "# Copyright (C) \n# \n# File: helloWorld.py\n#\n# Author: Autodesk Developer Network\n\n# Python script to execute to test the"
  },
  {
    "path": "02_Commands/dagInfo/Exercise - C++/dagInfo.cpp",
    "chars": 2889,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"dagInfo.h\"\n\n#include <may"
  },
  {
    "path": "02_Commands/dagInfo/Exercise - C++/dagInfo.h",
    "chars": 691,
    "preview": "//\n// Copyright (C) \n// \n// File: dagInfo.h\n//\n// MEL Command: dagInfo\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma "
  },
  {
    "path": "02_Commands/dagInfo/Exercise - C++/dagInfo.sln",
    "chars": 834,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/dagInfo/Exercise - C++/dagInfo.vcxproj",
    "chars": 9790,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/dagInfo/Exercise - C++/pluginMain.cpp",
    "chars": 1100,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MFnPlugin.h>\n#"
  },
  {
    "path": "02_Commands/dagInfo/Exercise - py/dagInfo.py",
    "chars": 4393,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "02_Commands/dagInfo/Solution - C++/dagInfo.cpp",
    "chars": 2848,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"dagInfo.h\"\n\n#include <may"
  },
  {
    "path": "02_Commands/dagInfo/Solution - C++/dagInfo.h",
    "chars": 691,
    "preview": "//\n// Copyright (C) \n// \n// File: dagInfo.h\n//\n// MEL Command: dagInfo\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma "
  },
  {
    "path": "02_Commands/dagInfo/Solution - C++/dagInfo.sln",
    "chars": 834,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/dagInfo/Solution - C++/dagInfo.vcxproj",
    "chars": 9790,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/dagInfo/Solution - C++/pluginMain.cpp",
    "chars": 1100,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MFnPlugin.h>\n#"
  },
  {
    "path": "02_Commands/dagInfo/Solution - py/dagInfo.py",
    "chars": 4256,
    "preview": "# Copyright (C) \n# \n# File: dagInfo.py\n#\n# Author: Autodesk Developer Network\n\nimport sys\nimport maya.OpenMaya as OpenMa"
  },
  {
    "path": "02_Commands/dagInfo/multiInstance.ma",
    "chars": 67020,
    "preview": "//Maya ASCII 2012 scene\n//Name: multiInstance.ma\n//Last modified: Sun, Sep 25, 2011 11:03:05 PM\n//Codeset: 1252\nrequires"
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - C++/instanceRotate.sln",
    "chars": 848,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - C++/instanceRotate.vcxproj",
    "chars": 9692,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.cpp",
    "chars": 6525,
    "preview": "//\n// Copyright (C) \n// \n// File: instanceRotateCmd.cpp\n//\n// MEL Command: instanceRotate\n//\n// Author: Maya Plug-in Wiz"
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - C++/instanceRotateCmd.h",
    "chars": 2570,
    "preview": "//\n// Copyright (C) \n// \n// File: instanceRotateCmd.h\n//\n// MEL Command: instanceRotate\n//\n// Author: Maya Plug-in Wizar"
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - C++/pluginMain.cpp",
    "chars": 1282,
    "preview": "//\n// Copyright (C) \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"instanceRotateCmd.h\""
  },
  {
    "path": "02_Commands/instanceRotate/Exercise - py/instanceRotateCmd.py",
    "chars": 7923,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "02_Commands/instanceRotate/Solution - C++/instanceRotate.sln",
    "chars": 848,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/instanceRotate/Solution - C++/instanceRotate.vcxproj",
    "chars": 9684,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.cpp",
    "chars": 6223,
    "preview": "//\n// Copyright (C) \n// \n// File: instanceRotateCmd.cpp\n//\n// MEL Command: instanceRotate\n//\n// Author: Maya Plug-in Wiz"
  },
  {
    "path": "02_Commands/instanceRotate/Solution - C++/instanceRotateCmd.h",
    "chars": 2577,
    "preview": "//\n// Copyright (C) \n// \n// File: instanceRotateCmd.h\n//\n// MEL Command: instanceRotate\n//\n// Author: Maya Plug-in Wizar"
  },
  {
    "path": "02_Commands/instanceRotate/Solution - C++/pluginMain.cpp",
    "chars": 1282,
    "preview": "//\n// Copyright (C) \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"instanceRotateCmd.h\""
  },
  {
    "path": "02_Commands/instanceRotate/Solution - py/instanceRotateCmd.py",
    "chars": 7429,
    "preview": "#\n# Copyright (C) \n# \n# File: instanceRotateCmd.py\n#\n# MEL Command: instanceRotate\n#\n# Author: Maya Plug-in Wizard 2.0\n#"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.cpp",
    "chars": 3755,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MIOStream.h>\n#includ"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.h",
    "chars": 781,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.sln",
    "chars": 842,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - C++/nodeInfoCmd.vcxproj",
    "chars": 9674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - C++/pluginMain.cpp",
    "chars": 1272,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"nodeInfoCmd.h\"\n#include <"
  },
  {
    "path": "02_Commands/nodeInfo/Exercise - py/nodeInfoCmd.py",
    "chars": 4173,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.cpp",
    "chars": 3419,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MIOStream.h>\n#includ"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.h",
    "chars": 1076,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.sln",
    "chars": 842,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - C++/nodeInfoCmd.vcxproj",
    "chars": 9674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - C++/pluginMain.cpp",
    "chars": 1249,
    "preview": "// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"nodeInfoCmd.h\"\n#include <"
  },
  {
    "path": "02_Commands/nodeInfo/Solution - py/nodeInfoCmd.py",
    "chars": 3875,
    "preview": "# \n# File: \n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n#\nimport sys\nimport maya.OpenMaya as OpenMay"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - C++/pluginMain.cpp",
    "chars": 1336,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - C++/simpleNode.cpp",
    "chars": 4446,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - C++/simpleNode.h",
    "chars": 1745,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - C++/simpleNode.vcxproj",
    "chars": 9800,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/simpleNode/Exercise - py/simpleNode.py",
    "chars": 5145,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - C++/pluginMain.cpp",
    "chars": 1463,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - C++/simpleNode.cpp",
    "chars": 4564,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - C++/simpleNode.h",
    "chars": 1700,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - C++/simpleNode.vcxproj",
    "chars": 9800,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/simpleNode/Solution - py/simpleNode.py",
    "chars": 4956,
    "preview": "#\n# Copyright (C) \n# \n# File: simpleNode.cpp\n#\n# Dependency Graph Node: simpleNode\n#\n# Author: Maya Plug-in Wizard 2.0\n#"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - C++/pluginMain.cpp",
    "chars": 1336,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - C++/simpleNode.cpp",
    "chars": 5186,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - C++/simpleNode.h",
    "chars": 1877,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - C++/simpleNode.vcxproj",
    "chars": 9754,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/sineNode/Exercise - py/sineNode.py",
    "chars": 1975,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "03_Nodes/sineNode/Solution - C++/pluginMain.cpp",
    "chars": 1463,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/sineNode/Solution - C++/simpleNode.cpp",
    "chars": 5361,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "03_Nodes/sineNode/Solution - C++/simpleNode.h",
    "chars": 1834,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "03_Nodes/sineNode/Solution - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/sineNode/Solution - C++/simpleNode.vcxproj",
    "chars": 9546,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/sineNode/Solution - py/sineNode.py",
    "chars": 1972,
    "preview": "#\n# Copyright (C) \n# \n# File: sineNode.py\n#\n# Dependency Graph Node: sineNode\n#\n# Author: \n#\n\nimport math, sys\n\nimport m"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/AEtransCircleTemplate.mel",
    "chars": 2381,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/pluginMain.cpp",
    "chars": 994,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/transCircleNode.cpp",
    "chars": 7699,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"tran"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/transCircleNode.h",
    "chars": 2339,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/transCircleNode.mel",
    "chars": 2123,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/transCircleNode.sln",
    "chars": 850,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - C++/transCircleNode.vcxproj",
    "chars": 9968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - py/AEtransCircleTemplate.mel",
    "chars": 4421,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - py/transCircleNode.mel",
    "chars": 2123,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Exercise - py/transCircleNode.py",
    "chars": 9518,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/AEtransCircleTemplate.mel",
    "chars": 4418,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/pluginMain.cpp",
    "chars": 1279,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/transCircleNode.cpp",
    "chars": 8119,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"tran"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/transCircleNode.h",
    "chars": 2272,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Dependency Graph Node: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/transCircleNode.mel",
    "chars": 2123,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/transCircleNode.sln",
    "chars": 850,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - C++/transCircleNode.vcxproj",
    "chars": 10011,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - py/AEtransCircleTemplate.mel",
    "chars": 4421,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - py/transCircleNode.mel",
    "chars": 2123,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "03_Nodes/transCircleNode/Solution - py/transCircleNode.py",
    "chars": 10049,
    "preview": "#\n# Copyright (C) \n# \n# File: transCircleNode.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n#\nimpor"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - C++/DynNode.sln",
    "chars": 834,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - C++/DynNode.vcxproj",
    "chars": 9631,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - C++/dynNode.cpp",
    "chars": 5640,
    "preview": "//\n// Copyright (C) \n// \n// File: dynNode.cpp\n//\n// Dependency Graph Node: dynNode\n//\n// Author: Maya Plug-in Wizard 2.0"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - C++/dynNode.h",
    "chars": 2034,
    "preview": "//\n// Copyright (C) \n// \n// File: dynNode.h\n//\n// Dependency Graph Node: dynNode\n//\n// Author: Maya Plug-in Wizard 2.0\n/"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - C++/pluginMain.cpp",
    "chars": 1351,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "04_NodeAttributes/dynNode/Exercise - py/dynNode.py",
    "chars": 6404,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - C++/DynNode.sln",
    "chars": 834,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - C++/DynNode.vcxproj",
    "chars": 10127,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - C++/dynNode.cpp",
    "chars": 6522,
    "preview": "//\n// Copyright (C) \n// \n// File: dynNode.cpp\n//\n// Dependency Graph Node: dynNode\n//\n// Author: Maya Plug-in Wizard 2.0"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - C++/dynNode.h",
    "chars": 2125,
    "preview": "//\n// Copyright (C) \n// \n// File: dynNode.h\n//\n// Dependency Graph Node: dynNode\n//\n// Author: Maya Plug-in Wizard 2.0\n/"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - C++/pluginMain.cpp",
    "chars": 1351,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "04_NodeAttributes/dynNode/Solution - py/dynNode.py",
    "chars": 7236,
    "preview": "#\n# Copyright (C) \n# \n# File: dynNode.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n#\n\nimport maya."
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/pluginMain.cpp",
    "chars": 1463,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.cpp",
    "chars": 5056,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.h",
    "chars": 1834,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - C++/simpleNode.vcxproj",
    "chars": 9783,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Exercise - py/simpleNode.py",
    "chars": 5714,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/pluginMain.cpp",
    "chars": 1463,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.cpp",
    "chars": 5139,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.cpp\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wiza"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.h",
    "chars": 1834,
    "preview": "//\n// Copyright (C) \n// \n// File: simpleNode.h\n//\n// Dependency Graph Node: simpleNode\n//\n// Author: Maya Plug-in Wizard"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.sln",
    "chars": 840,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - C++/simpleNode.vcxproj",
    "chars": 9783,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "04_NodeAttributes/simpleNode - with Typed Attr/Solution - py/simpleNode.py",
    "chars": 5591,
    "preview": "#\n# Copyright (C) \n# \n# File: simpleNode.cpp\n#\n# Dependency Graph Node: simpleNode\n#\n# Author: Maya Plug-in Wizard 2.0\n#"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - C++/pluginMain.cpp",
    "chars": 1166,
    "preview": "//\n// Copyright (C) \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include \"retrieveWeightCmd.h"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeight.sln",
    "chars": 848,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeight.vcxproj",
    "chars": 9692,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeightCmd.cpp",
    "chars": 1887,
    "preview": "//\n// Copyright (C) \n// \n// File: retrieveWeightCmd.cpp\n//\n// MEL Command: dagScan\n//\n// Author: Maya Plug-in Wizard 2.0"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - C++/retrieveWeightCmd.h",
    "chars": 397,
    "preview": "//\n// Copyright (C) \n// \n// File: retrieveWeightCmd.h\n//\n// MEL Command: retrieveWeight\n//\n// Author: Maya Plug-in Wizar"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Exercise - py/retrieveWeight.py",
    "chars": 2563,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - C++/pluginMain.cpp",
    "chars": 1166,
    "preview": "//\n// Copyright (C) \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include \"retrieveWeightCmd.h"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeight.sln",
    "chars": 848,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeight.vcxproj",
    "chars": 9692,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeightCmd.cpp",
    "chars": 1981,
    "preview": "//\n// Copyright (C) \n// \n// File: retrieveWeightCmd.cpp\n//\n// MEL Command: retrieveWeight\n//\n// Author: Maya Plug-in Wiz"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - C++/retrieveWeightCmd.h",
    "chars": 397,
    "preview": "//\n// Copyright (C) \n// \n// File: retrieveWeightCmd.h\n//\n// MEL Command: retrieveWeight\n//\n// Author: Maya Plug-in Wizar"
  },
  {
    "path": "05_DependencyGraph/retrieveWeight/Solution - py/retrieveWeight.py",
    "chars": 2400,
    "preview": "#\n# Copyright (C) \n# \n# File: retrieveWeight.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n\n\nimport"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - C++/pluginMain.cpp",
    "chars": 1283,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.cpp",
    "chars": 1480,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"sceneMsgCmd.h\"\n\n/*static*/ MCallba"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.h",
    "chars": 738,
    "preview": "//\n// Copyright (C) \n// \n// File: \n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n#include <maya/MPxCommand.h>\n#"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.sln",
    "chars": 842,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - C++/sceneMsgCmd.vcxproj",
    "chars": 9828,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "06_MiscTools/sceneMsg/Exercise - py/sceneMsgCmd.py",
    "chars": 2565,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - C++/pluginMain.cpp",
    "chars": 1321,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.cpp",
    "chars": 1792,
    "preview": "//\n// Copyright (C) \n// \n// File: sceneMsgCmd.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include \"sceneMsgCmd.h\"\n\n/*s"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.h",
    "chars": 751,
    "preview": "//\n// Copyright (C) \n// \n// File: sceneMsgCmd.h\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n#include <maya/MP"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.sln",
    "chars": 842,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - C++/sceneMsgCmd.vcxproj",
    "chars": 9828,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "06_MiscTools/sceneMsg/Solution - py/sceneMsgCmd.py",
    "chars": 2587,
    "preview": "#\n# Copyright (C) \n# \n# File: sceneMsgCmd.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n\n\nimport ma"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/AEtransCircleTemplate.mel",
    "chars": 3496,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/pluginMain.cpp",
    "chars": 1450,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircle.sln",
    "chars": 852,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircle.vcxproj",
    "chars": 9794,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircleCmd.cpp",
    "chars": 3794,
    "preview": "//\n// Copyright (C) \n// \n// File: setUpTransCircleCmd.cpp\n//\n// MEL Command: setUpTransCircle\n//\n#include \"setUpTransCir"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/setUpTransCircleCmd.h",
    "chars": 588,
    "preview": "//\n// Copyright (C) \n// \n// File: setUpTransCircleCmd.h\n//\n// MEL Command: setUpTransCircle\n//\n// Author: Maya Plug-in W"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/transCircleNode.cpp",
    "chars": 4370,
    "preview": "//\n// Copyright (C) \n// \n// File: transCircleNode.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MString.h>"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - C++/transCircleNode.h",
    "chars": 1097,
    "preview": "//\n// Copyright (C) \n// \n// File: transCircleNode.h\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n#include <may"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Exercise - py/setUpTransCircle.py",
    "chars": 11660,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n# For this exercise, search for the TODO keywords and follow t"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/AEtransCircleTemplate.mel",
    "chars": 3496,
    "preview": "//-\n// ==========================================================================\n// Copyright (C) 1995 - 2006 Autodesk,"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/pluginMain.cpp",
    "chars": 1450,
    "preview": "//\n// Copyright (C)  \n// \n// File: pluginMain.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n\n#include <maya/MFnPlugin.h>\n"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircle.sln",
    "chars": 852,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircle.vcxproj",
    "chars": 9794,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircleCmd.cpp",
    "chars": 4008,
    "preview": "//\n// Copyright (C) \n// \n// File: setUpTransCircleCmd.cpp\n//\n// MEL Command: setUpTransCircle\n//\n#include \"setUpTransCir"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/setUpTransCircleCmd.h",
    "chars": 588,
    "preview": "//\n// Copyright (C) \n// \n// File: setUpTransCircleCmd.h\n//\n// MEL Command: setUpTransCircle\n//\n// Author: Maya Plug-in W"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/transCircleNode.cpp",
    "chars": 4370,
    "preview": "//\n// Copyright (C) \n// \n// File: transCircleNode.cpp\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#include <maya/MString.h>"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - C++/transCircleNode.h",
    "chars": 1097,
    "preview": "//\n// Copyright (C) \n// \n// File: transCircleNode.h\n//\n// Author: Maya Plug-in Wizard 2.0\n//\n#pragma once\n\n#include <may"
  },
  {
    "path": "06_MiscTools/setUpTransCircle/Solution - py/setUpTransCircle.py",
    "chars": 10621,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\nimport sys, math\n\nimport maya.OpenMaya as OpenMaya\nimport maya"
  },
  {
    "path": "07_Locator/arrowLocator/Exercise - C++/arrowLocator.sln",
    "chars": 844,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "07_Locator/arrowLocator/Exercise - C++/arrowLocator.vcxproj",
    "chars": 10104,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "07_Locator/arrowLocator/Exercise - C++/arrowLocatorNode.cpp",
    "chars": 10162,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.cpp\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug"
  },
  {
    "path": "07_Locator/arrowLocator/Exercise - C++/arrowLocatorNode.h",
    "chars": 1723,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.h\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug-i"
  },
  {
    "path": "07_Locator/arrowLocator/Exercise - py/arrowLocator.py",
    "chars": 5474,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "07_Locator/arrowLocator/Solution - C++/arrowLocator.sln",
    "chars": 844,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "07_Locator/arrowLocator/Solution - C++/arrowLocator.vcxproj",
    "chars": 10104,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "07_Locator/arrowLocator/Solution - C++/arrowLocatorNode.cpp",
    "chars": 10387,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.cpp\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug"
  },
  {
    "path": "07_Locator/arrowLocator/Solution - C++/arrowLocatorNode.h",
    "chars": 1723,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.h\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug-i"
  },
  {
    "path": "07_Locator/arrowLocator/Solution - py/arrowLocator.py",
    "chars": 5160,
    "preview": "#\n# Copyright (C) \n# \n# File: arrowLocator.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n\n\nimport s"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManip.sln",
    "chars": 854,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManip.vcxproj",
    "chars": 10072,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManipNode.cpp",
    "chars": 5891,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorManipNode.cpp\n//\n// Dependency Graph Node: arrowLocatorManip\n//\n// Author:"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorManipNode.h",
    "chars": 1334,
    "preview": "#ifndef _arrowLocatorManipNode\n#define _arrowLocatorManipNode\n//\n// Copyright (C) \n// \n// File: arrowLocatorManipNode.h\n"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorNode.cpp",
    "chars": 11611,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.cpp\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - C++/arrowLocatorNode.h",
    "chars": 1662,
    "preview": "#ifndef _arrowLocatorNode\n#define _arrowLocatorNode\n//\n// Copyright (C) \n// \n// File: arrowLocatorNode.h\n//\n// Dependenc"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Exercise - py/arrowLocatorManip.py",
    "chars": 11234,
    "preview": "# Copyright (C) \n# \n# Author: Autodesk Developer Network\n\n#For this exercise, search for the TODO keywords and follow th"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManip.sln",
    "chars": 854,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManip.vcxproj",
    "chars": 10557,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManipNode.cpp",
    "chars": 5925,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorManipNode.cpp\n//\n// Dependency Graph Node: arrowLocatorManip\n//\n// Author:"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorManipNode.h",
    "chars": 1334,
    "preview": "#ifndef _arrowLocatorManipNode\n#define _arrowLocatorManipNode\n//\n// Copyright (C) \n// \n// File: arrowLocatorManipNode.h\n"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorNode.cpp",
    "chars": 11214,
    "preview": "//\n// Copyright (C) \n// \n// File: arrowLocatorNode.cpp\n//\n// Dependency Graph Node: arrowLocator\n//\n// Author: Maya Plug"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - C++/arrowLocatorNode.h",
    "chars": 1698,
    "preview": "#ifndef _arrowLocatorNode\n#define _arrowLocatorNode\n//\n// Copyright (C) \n// \n// File: arrowLocatorNode.h\n//\n// Dependenc"
  },
  {
    "path": "08_Manipulators/arrowLocatorManip/Solution - py/arrowLocatorManip.py",
    "chars": 10999,
    "preview": "#\n# Copyright (C) \n# \n# File: arrowLocatorManip.py\n#\n# Dependency Graph Node: \n#\n# Author: Maya Plug-in Wizard 2.0\n\n\nimp"
  },
  {
    "path": "09_PythonAPI/helloWorld/Exercise - py/helloWorldCmd.py",
    "chars": 1433,
    "preview": "#\n# Copyright (C) \n# \n# File: helloWorld.py\n#\n# Dependency Graph Node: arrowLocator\n#\n# Author: \n#\n\n#- Python script to "
  },
  {
    "path": "09_PythonAPI/helloWorld/Solution - py/helloWorldCmd.py",
    "chars": 1176,
    "preview": "#\n# Copyright (C) \n# \n# File: helloWorld.py\n#\n# Dependency Graph Node: arrowLocator\n#\n# Author: \n#\n\n#- Python script to "
  },
  {
    "path": "09_PythonAPI/sineNode/Exercise - py/sineNode.py",
    "chars": 2480,
    "preview": "#\n# Copyright (C) \n# \n# File: sineNode.py\n#\n# Dependency Graph Node: sineNode\n#\n# Author: \n#\n\n#- TODO: Import all the ne"
  },
  {
    "path": "09_PythonAPI/sineNode/Solution - py/sineNode.py",
    "chars": 1972,
    "preview": "#\n# Copyright (C) \n# \n# File: sineNode.py\n#\n# Dependency Graph Node: sineNode\n#\n# Author: \n#\n\nimport math, sys\n\nimport m"
  },
  {
    "path": "09_PythonAPI/sineNode/sineNode-setup.mel",
    "chars": 175,
    "preview": "polySphere;\ncreateNode spSineNode -n sine1;\nconnectAttr time1.outTime sine1.input;\nconnectAttr time1.outTime pSphere1.tr"
  },
  {
    "path": "10_PythonAdvanced/examples/ShotServer.py",
    "chars": 7686,
    "preview": "\n#-\n# ==========================================================================\n# Copyright (C) 2008 Autodesk, Inc. and"
  },
  {
    "path": "10_PythonAdvanced/examples/alt_str.py",
    "chars": 4149,
    "preview": "\n#-\n# ==========================================================================\n# Copyright (C) 2008 Autodesk, Inc. and"
  },
  {
    "path": "10_PythonAdvanced/examples/cppCentroid.cpp",
    "chars": 3449,
    "preview": "\n//-\n// ==========================================================================\n// Copyright (C) 2008 Autodesk, Inc. "
  },
  {
    "path": "10_PythonAdvanced/examples/dist.py",
    "chars": 221,
    "preview": "# Simple test function for demonstrating pdb debugger.\ndef distance(p1, p2):\n\tdist = 0\n\tif len(p1) == len(p2):\n\t\tfor i i"
  },
  {
    "path": "10_PythonAdvanced/examples/guipdb.py",
    "chars": 3925,
    "preview": "#-\n# ==========================================================================\n# Copyright (C) 2008 Autodesk, Inc. and/"
  },
  {
    "path": "10_PythonAdvanced/examples/guipdb1.py",
    "chars": 3940,
    "preview": "#-\n# ==========================================================================\n# Copyright (C) 2008 Autodesk, Inc. and/"
  },
  {
    "path": "10_PythonAdvanced/examples/pyCentroid.py",
    "chars": 2650,
    "preview": "#-\n# ==========================================================================\n# Copyright (C) 2008 Autodesk, Inc. and/"
  },
  {
    "path": "README.md",
    "chars": 1127,
    "preview": "Maya-Training-Material\n======================\n\nAbout this materials...\n-----------------------\nThis is the Maya API trai"
  }
]

// ... and 33 more files (download for full content)

About this extraction

This page contains the full source code of the ADN-DevTech/Maya-Training-Material GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 220 files (15.2 MB), approximately 219.6k tokens, and a symbol index with 486 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!