Table of Contents

This is the entire table of contents for the Complete Maya Programming book.

CONTENTS

PREFACE

SOURCE FILES

1. INTRODUCTION

1.1 MAYA'S PROGRAMMABILITY

1.1.1 Customization

1.1.2 Integration

1.1.3 Automation

1.1.4 Extensions

1.2 PROGRAMMING INTERFACES

1.2.1 MEL

1.2.2 C++

1.2.3 Mel or C++?

Ease of Use

Specific Functionality

Cross-Platform Portability

Speed

Disclosure

2. FUNDAMENTAL MAYA CONCEPTS

2.1 MAYA ARCHITECTURE

2.1.1 Overview

2.2 THE DEPENDENCY GRAPH

2.2.1 3D Application Design

Past Approaches

Maya Approach

2.2.2 The Scene

2.2.3 Visualizing the Dependency Graph

2.2.4 Data Flow

2.2.5 Nodes

2.2.6 Attributes

2.2.7 Compute Function

Dependent Attributes

Time

2.2.8 Connecting Nodes

2.2.9 DAG Nodes

Transforms and Shapes

Parenting

DAG Paths

The Underworld

Instances

2.2.10 Dependency Graph Updating

Push-Pull Approach

Updating in Practice

Keyframe Animation Updating

3. MEL

3.1 INTRODUCTION

3.1.1 Behind the Scenes

3.2 THE MEL PROGRAMMING LANGUAGE

3.2.1 Commands

Issuing Commands

Command Arguments

Command Help

Command Query

Command Edit

Command Modes

3.2.2 Variables

Variable Types

Automatic Variable Types

Automatic Type Conversions

3.2.3 Comments

3.2.4 Operators

Assignment Operator

Arithmetic Operators

Booleans

Relational Operators

Logical Operators

Operator Precedence

3.2.5 Looping

For

While

Do-While

Infinite Loops

Continue

Break

3.2.6 Procedures

3.2.7 Scope

Global and Local

Initialization of Globals

Conflicts

Global Procedures

Script Editor

3.2.8 Additional Execution Methods

Command Results

Eval Command

3.2.9 Efficiency

Explicit Type Declaration

Array Sizes

3.2.10 Additional Constructs

Assignment Chaining

In-place Arithmetic Operators

Increment and Decrement Operators

Conditional Operator

Switch Statement

For-in Statement

3.3 SCRIPTING

3.3.1 Text Editor

3.3.2 Storing Scripts

Default Script Directories

Custom Script Directories

Automatic Startup

3.3.3 Development Preparation

3.3.4 Sourcing

3.3.5 Debugging and Testing

Save Before Executing!

Showing Line Numbers

Tracing Script Execution

Displaying Warnings and Errors

Runtime Checking

Determining Types

3.3.6 Versioning

3.3.7 Deployment

Updating

3.4 OBJECTS

3.4.1 Basics

ListAll Script

3.4.2 Hierarchies

3.4.3 Transforms

Transformation Matrices

Spaces

ObjToWorld Script

SpaceToSpace Script

3.4.4 Attributes

Dynamic Attributes

Attribute Information

3.5 ANIMATION

3.5.1 Time

3.5.2 Playback

3.5.3 Animation Curves

Functions

Keyframing

Evaluation

Infinity

Keys

Examples

3.5.4 Skeletons

OutputJoints Script

ScaleSkeleton Script

CopySkeletonMotion Script

3.5.5 Motion Paths

3.6 GRAPHICAL USER INTERFACES

3.6.1 Introduction

3.6.2 Fundamental Concepts

3.6.3 Windows

3.6.4 Layouts

ColumnLayout

RowLayout

GridLayout

FormLayout

FrameLayout

TabLayout

ScrollLayout

MenuBarLayout

3.6.5 Controls

Menus

Buttons

Check Boxes

Radio Buttons

Text

Lists

Groups

Images

Panels

Tools

3.6.6 Connecting Controls

Attribute Groups

NameField

Other Elements

3.6.7 User Feedback

Help

Displaying Progress

3.7 EXPRESSIONS

3.7.1 Learning Expressions

Wiggle

Flash

Magnet

3.7.2 Expression Guidelines

Attribute Assignment Only

Supported Attribute Types

Avoid setAttr and getAttr Commands

Connected Attributes

Automatic Deletion

3.7.3 Debugging Expressions

Error Checking

Tracing

Disabling

Broken Connections

Object Renaming

3.7.4 Particle Expressions

Creation and Runtime Expression Evaluation

Per Object and Per Particle Attributes

Vector Components

3.7.5 Advanced Expressions

Combining Expressions with Keyframe Animation

4. C++ API

4.1 INTRODUCTION

4.2 FUNDAMENTAL CONCEPTS

4.2.1 Abstracted Layer

4.2.2 Classes

Naming Convention

Design

4.2.3 MObject

4.2.4 MFn Function Sets

Custom Function Sets

4.3 DEVELOPING PLUGINS

4.3.1 Plugin Development under Windows

Setup

Execution

Editing

Debugging

Release

4.3.2 Initialization and Uninitialization

HelloWorld2 Plugin

4.3.3 Errors

Checking

Reporting

Integration

4.3.4 Loading and Unloading

4.3.5 Deployment

Updating

4.4 COMMANDS

4.4.1 Creating Commands

4.4.2 Posts1 Plugin

4.4.3 Adding Arguments

4.4.4 Posts2 Plugin

4.4.5 Posts3 Plugin

4.4.6 Providing Help

Automatic Help

Posts4 Plugin

4.4.7 Undo and Redo

Maya’s Undo/Redo Mechanism

MPxCommand Support for Undo/Redo

Undoable and Non-undoable Commands

Posts5 Plugin

4.4.8 Edit and Query

Clock Plugin

4.5 NODES

4.5.1 GoRolling Plugin

4.5.2 Melt Plugin

4.5.3 GroundShadow Plugin

4.5.4 Attributes

Creating

Compound Attributes

Default Values

Attribute Properties

Dynamic Attributes

4.5.5 Compute Function

4.5.6 Plugs

4.5.7 Datablocks

4.5.8 Node Design Guidelines

Simplicity

Context

Locality

Networks of Nodes

4.6 LOCATORS

4.6.1 BasicLocator Plugin

4.7 MANIPULATORS

4.7.1 BasicLocator2 Plugin

4.8 DEFORMERS

4.8.1 SwirlDeformer Plugin

4.8.2 Dependency Graph Changes

4.8.3 Accessories

4.8.4 SwirlDeformer2 Plugin

4.9 ADVANCED C++ API

4.9.1 General

Referencing Nodes

Proxies

Networked and Non-Networked Plugs

4.9.2 Dependency Graph

Contexts

Datablocks

Propogation Flags

Handling Pass-Through

Cyclic Dependencies

APPENDIX A - Additional Resources

ONLINE RESOURCES

Companion Website

Additional Websites

Alias | Wavefront

Highend3D

Bryan Ewert

MAYA APPLICATION

Documentation

Learning MEL

Learning C++ API

MEL Reference

C++ API Reference

Examples

MEL Examples

C++ API Examples

APPENDIX B - MEL FOR C PROGRAMMERS

APPENDIX C - FURTHER READING

Mathematics

Programming

General

C++ Language

Computer Graphics

General

Modeling

Animation

Image Synthesis

GLOSSARY

INDEX

ABOUT THE AUTHOR