فهرست مطالب :
Introduction To Maya Python Project: Contrast a MEL and a Python API version of a Flatten Mesh scriptGoal: This introductory chapter explains what the book is about and will excite readers about the possibilities Python affords them in Maya. We provide them a simple script, both a MEL version and a Python API version, that flattens a dense mesh to show them a quick example of some of the dramatic performance boosts they will learn how to harness. Fundamentally, this chapter will help highlight why readers bought the book, what they can expect to learn, and why it is so cool! Part 1. Command-Level Python in Maya Chapter 1. The Maya Command Engine and User InterfaceProject: Input simple commands using script editorGoal: This chapter briefly describes the basic low-level structure of Maya by focusing on its command engine. A more detailed description of the architecture appears later in the section dealing with the API. Following this description, we briefly examine Maya\'s three programming interfaces and what each is best suited for. Finally, we introduce readers to Maya\'s script editor and command line so they can begin entering simple commands and know where to find their output. Chapter 2. Python Basics Project: Translating basic MEL operations into PythonGoal: This chapter provides a brief overview of the Python language for new users. We first examine the principles of Python syntax (declarations, white space, operators) and compare Python to MEL (variable typing, semicolons). We then introduce Python\'s core object types and explain how reference counting works in relation to mutable/immutable data types and simple/complex data types. Finally, we explain what modules are and how they differ from the source command in MEL. We explain what import does, how to load and reload modules (math and sys), and where the command looks for modules. Finally, this chapter shows the reader where to find Python\'s online documentation for more information. Chapter 3. Start Programming in Maya Python Project: Create and modify various Maya nodesGoal: This chapter introduces the Maya cmds module and assists readers in creating basic Python programs. We compare Python to MEL examples by first explaining all of the keywords for establishing flow control in Python including conditionals, loops, and exception handling. Second, we describe what functions are and how to create them in Python. We discuss how to create arguments, assign default values, how to return data, override functions, and use lambda.Chapter 4. Object-Oriented Programming in Maya Python Project: Create a script that adds noise to animation using classes to store keysGoal: This chapter shows one of the key advantages of Python over MEL by introducing the concept of object-oriented programming. We briefly explain what objects are and what the constituent parts of classes are. Readers will learn how to define a class from scratch and how to inherit from an existing class. The project is a script that stores animation key data in a custom class in order to add noise to an animation curve.Chapter 5. Working With Files Project: Save and load a pose using filesGoal: This chapter demonstrates the basics of writing data out to a file and reading it back in to another scene. The project saves a character\'s pose to a text file and reads it back in to apply it to another character. We will explain how to search hierarchies and write the position, rotation, and scale values to a file.Chapter 6. Writing Complex Programs in Maya Python Project: Create a script that implements step-through debugging and performs different operations on different types of objects (sphere, cube, locator)Goal: This chapter gets the reader ready to start doing more complex work in Maya Python. We explain how to configure the Maya environment and provide suggestions for text editors that are well-suited to working with Python. Additionally, we provide tips for debugging scripts in Maya Python. Specifically, we cover the use of exception handling and status messages as well as using the pydb module to step through code. Part 2. Designing Maya User Interfaces with PythonChapter 1. Principles of Maya Tool DesignProject: Analyze various existing tools and interfaces that ship with MayaGoal: This chapter centers around the theory behind designing good Maya tools and interfaces. It analyzes Maya\'s existing user interface to provide guidelines for making tools that work predictably and are easy to use. It also explores higher-level concepts for code organization to ensure that tools and user interfaces can be easily extended. Areas of focus include location and inclusion of common buttons and options, use of selection order and descriptive naming, as well as separation of functionality and form.Chapter 2. Basic User Interfaces with Maya PythonProject: Align ToolGoal: This chapter introduces readers to the basics of creating a Maya UI using the cmds module including windows, panels, controls, layouts, and menus. The project is a simple tool that allows users to align one object with another based on a set of options (position and/or rotation along one, two, or three axes).Chapter 3. External User Interfaces and mayapyProject: Rename Object in FilesGoal: This chapter explains how to use the mayapy application to operate in Maya without having to open its user interface. Readers will learn about the basics of creating applications that operate using Maya from the outside. Readers will walk through an example that lets them make mass changes to a large number of files without having to even open Maya\'s UI.Chapter 4. Advanced User Interfaces with Maya Python and QTProject: External batch rigging tool with UIGoal: This chapter introduces readers to the concept of using external UI libraries to create custom user interfaces. We first discuss why some developers use external UI libraries and then shift focus onto a brief overview of the popular QT toolset (PyQT module and GUI Builder). The project has readers create an external user interface with PyQT that works with mayapy to batch rig a number of files (add IK handles to selected limbs).Part 3. Fundamentals of the Maya Python APIChapter 1. Understanding C++ and the API DocumentationProject: Walk through the MVector class in the API documentationGoal: This chapter introduces the concept of the API and briefly describes what it is and how it differs from the scripts that readers have written up to this point as well as how it fits into the overall Maya architecture. The chapter walks readers through the C++ API\'s documentation so they are able to locate information when they need it, explains how to identify what functionality is not accessible to Python, and summarizes some of the major differences between the Python and C++ APIs including the MScriptUtil and MStatus classes.Chapter 2. Writing Scripts that Implement the APIProject: Align ToolGoal: This chapter has readers import the OpenMaya module and write scripts that use basic API functionality. The chapter further explains what classes are not usable from within a script (e.g. MPx classes) and how to use the MScriptUtil class to deal with pointers and references in the API. The project is a simple tool that allows users to align one object with another based on a set of options (position and/or rotation along one, two, or three axes and coordinate space).Chapter 3. Programming a CommandProject: Select All in FrustumGoal: This chapter revisits Maya\'s command engine and explains it in more detail, including its undo/redo mechanism. Readers walk through the basic parts of a command and learn how to write their own simple commands that take and parse arguments. The project is a command that lets users select all objects within the view frustum of a type specified via a command flag.Part 4. The Maya Python API and the Dependency GraphChapter 1. Data Flow in MayaProject: Multiply Utility NodeGoal: This chapter explains Maya\'s dependency graph architecture in great detail. It provides examples of how messages and data are propagated throughout the scenegraph, how nodes operate on the data, and what ramifications this structure has. We explain the concept of working with plugs, attributes, and datahandles by showing an example of a simple multiply utility node which uses ordinary and array attributes for input and output.Chapter 2. Programming a Dependency Graph NodeProject: Build Rotation nodeGoal: This chapter explains the anatomy of a dependency graph node. Readers will walk through an example wherein they create their own nodes and each part of the process is explained in detail. The project is a node that builds the rotation for an object from a specified aim vector and up vector in the scene. Readers will also learn how to make a custom attribute editor panel for their node.Chapter 3. Programming Special Types of NodesProject: Multi-Shape Locator and Inflate DeformerGoal: This chapter discusses special types of nodes that can be created in the API, including locators with their own custom shapes and manipulators, as well as deformers. The projects explaining the special requirements of these nodes are a locator that can render as a variety of different shapes (box, sphere, square, circle, etc.) and a deformer node that inflates an object by translating its vertices along their normals.Chapter 4. Improving Performance of Custom NodesProject: Convert Python Inflate node into C++Goal: This chapter discusses the performance limitations of custom Python nodes as compared to their C++ counterparts. It profiles the Inflate Deformer node from the previous chapter to illustrate which Python operations slow down computation and how to work around them. Finally, this chapter shows how readers can use their knowledge of the API and good coding practice to easily convert their custom Python nodes into C++ if necessary.