Errata

Current errata for the book. As a guide to the corrections, any text in green should be added. Any text in red with strikethrough should be removed. Any text in blue replaces the existing text.

 

Location

Existing Text

Correction/Addition

page 18, paragraph 4, line 5

makeNurbsSphere

makeNurbsSphere

page 22, paragraph 3, line 2

makeMyNurbsSphere

makeMyNurbsSphere

page 22, paragraph 5, line 5

... volume of given sphere.

... volume of a given sphere.

page 29, paragraph 3, line 1

Direct acyclic graph

Directed acyclic graph

page 31, paragraph 2, line 5

... assumes the transform node does ...

... assumes the transform node doesn't ...

page 31, figure 2.16
page 32, figure 2.18

 

(There is no need for the arrow(s) since there is no flow of information. The figure simply shows that a node above another is a parent; a node below another is a child.)

page 46, paragraph 1, line 1

attributeAffects (input, output)

attributeAffects(input, output) (no space)

page 68, paragraph 1, line 2

upper-

upper-

page 72, paragraph 10, line 3

// Third element set to 3

// Third element set to 7

page 76, paragraph 5, line 3

Since you didn't explicitly specify the type of the variable, Maya assumed that it was an integer, since the value 3 is clearly an integer.

Since you didn't explicitly specify the type of the variable, Maya assumed that it was an integer, since the value 5 is clearly an integer.

page 76, paragraph 7, line 4

// Result: 3.34

// Result: 3.43

page 89, paragraph 2, line 6

if( $a == 10 && $b = 2 )

if( $a == 10 && $b == 2 )

page 101, paragraph 1, line 1

... always preferable explicitly ...

... always preferable to explicitly ...

page 112, paragraph 5, line 1

If don't have ...

If you don't have ...

page 114, paragraph 4, line 2

MAYA_SCRIPTS_PATH

MAYA_SCRIPTS_PATH

page 114, paragraph 4, line 6

set MAYA_SCRIPTS_PATH=$MAYA_SCRIPTS_PATH;c:\myScripts

set MAYA_SCRIPTS_PATH=$MAYA_SCRIPTS_PATH;c:\myScripts

page 114, paragraph 5, line 1

MAYA_SCRIPTS_PATH

MAYA_SCRIPTS_PATH

page 115, paragraph 1, line 4

MAYA_SCRIPTS_PATH=custom_script_directory

MAYA_SCRIPTS_PATH=custom_script_directory

page 116, paragraph 10

 

Mac OS X:
system("open -e learning.mel");

page 125, paragraph 9, line 1-2

float $ver = float( `about -version` );
if( $ver < 4.0 )

string $ver = `about -version`;
string $verParts[];
tokenize( $ver, ".", $verParts );
if( int($verParts[0]) < 4 )

page 126, paragraph 10, line 1,
paragraph 11, line 1,
paragraph 13, line 1

MAYA_SCRIPTS_PATH

MAYA_SCRIPTS_PATH

page 137, paragraph 2, line 5

if( size($pt) != 3 &&size($mtx) != 16 )

if( size($pt) != 3 || size($mtx) != 16 )

page 143, paragraph 6, line 1

$pt = spaceToSpace( $pt, "world", "", "nurbsCone1", "local" );

$pt = spaceToSpace( $pt, "world", "", "local", "nurbsCone1" );

page 144, paragraph 6, line 1

vector $s = <<1.5, 2.3, 1.4>>;

vector $sc = <<1.5, 2.3, 1.4>>;

page 145, paragraph 5, line 4

addAttr -longName "points" -attributeType int $obj;

addAttr -longName "points" -attributeType long $obj;

page 145, paragraph 5, line 7

-enumNames "Weapon:Potion:Obstacle" $obj;

-enumNames "Weapon:Potion:Obstacle" $obj;

page 147, paragraph 8, line 6

It also possible ...

It is also possible ...

page 150, paragraph 1, line 1

float $cTime = currentTime -query;

float $cTime = `currentTime -query`;

page 151, paragraph 3, line 3

The animation range remains at 0, 48.

The animation range remains at 1, 48.

page 152, paragraph 9, line 1

playblast -file test.mov;

playblast -filename test.mov;

page 157, paragraph 3, line 1

keyframe -query -time 250 -eval ball.translateX;

keyframe -time 250 -query -eval ball.translateX;

page 164, paragraph 2

The angle of a tangent defines ...

Since a tangent is a vector, it has both a direction and a length. By default, each key's in and out tangents are locked together; both tangents will rotate and scale equally. When the tangents are unlocked, they can rotate and scale independently of each other. To change the lengths of the tangents, the curve must be turned into a weighted curve and the key's weight locking must be turned off.

page 167, paragraph 4, line 11

The key's value is scaled by half.

The key's value is scaled by half.

page 171, paragraph 2, line 1

printTangentPostions

printTangentPositions

page 171, paragraph 2, line 31
page 173, paragraph 6, line 2

$ycomps = `keyTangent -query $xreq $animCurve`;

$ycomps = `keyTangent -query $yreq $animCurve`;

page 173, paragraph 3, line 1

Depending on which tangent you need, you repair the ...

Depending on which tangent you need, you prepare the ...

page 174, paragraph 9, line 3

8113845077

81.13845077

page 179, paragraph 1, line 4
page 181, paragraph 9, line 1
page 184, paragraph 2, line 4
page 184, paragraph 7, line 1

string $childNodes[] = `listRelatives -fullPath -type joint -children -allDescendents $rootNode`;

string $childNodes[] = `listRelatives -fullPath -type joint -children -allDescendents $rootNode`;

page 181, paragraph 8, line 1

Get a list of all the child joints.

Get a list of all the child joints using the listRelatives command. This list includes all the descendants and not just the direct children.

It is very important that the complete path to the children be used. Some of the children have the same name so aren't unique and when used in later statements would cause problems. In fact Maya would complain that the node name wasn't unique. However their complete paths (which include their ancestors) are unique, so the complete path is used.

page 185, paragraph 1

It is very important ...

* This paragraph should be moved to page 181 after paragraph 8

page 186, paragraph 12, line 6

string $srcNodes[] = `listRelatives -fullPath -children -allDescendents $srcRootNode`;

string $srcNodes[] = `listRelatives -fullPath -children -allDescendents $srcRootNode`;

page 186, paragraph 12, line 10

string $destNodes[] = `listRelatives -fullPath -children -allDescendents $destRootNode`;

string $destNodes[] = `listRelatives -fullPath -children -allDescendents $destRootNode`;

page 187, paragraph 1, line 41

}

<tab>}

page 187, paragraph 1, line 21

-destination yes

-source yes -destination no

* the inclusion of -source yes isn't necessary since it is on by default but it does help clarify the intention.

page 190, paragraph 10, line 2

-destination yes

-source yes -destination no

* the inclusion of -source yes isn't necessary since it is on by default but it does help clarify the intention.

page 204, paragraph 5, line 4

This reason for ...

The reason for ...

page 211, paragraph 4, line 2

... has a width of 30 and ...

... has a width of 60 and ...

page 214, paragraph 3, line 1

The third button is vertically positioned at 50% of the form's height.

The third button is vertically positioned at 50% of the form's height.

page 215, paragraph 2, line 3

-collapsible

-collapsable

page 231, paragraph 1

The picture command is designed to display .xpm and .bmp (under Windows) images, while the image command can display these formats and a lot more.

Under Windows, the picture command will display .xpm and .bmp files, while under Linux it will display only .xpm files. The image command can display these formats and a lot more.

page 242, paragraph 1, line 11

-attachNone $frame "top"

-attachForm $frame "top"

page 250, paragraph 6, line 3

siren.colorR = siren.colorB = siren.colorC = 1;

siren.colorR = siren.colorG = siren.colorB = 1;

page 256, paragraph 6, line 1

... of type, float ...

... of type, float ...

page 256, paragraph 6, line

... float, int, or boolean ...

... float, int, vector, or boolean ...

page 257, paragraph 7, line 1

commands must be used.

commands must not be used.

page 271, paragraph 8, line 5

This ensures that the animation node isn't automatically removed, since it is always this newly formed connection.

This ensures that the animation node isn't automatically removed, since it is always has this newly formed connection.

page 272, paragraph 8, line 3

... with the plane's x and z position, reduced by a factor 3.

... with the plane's x and z position, reduced by a factor of 3.

page 274, paragraph 4, line 2

To split an edge, ...

To split an face, ...

page 276, paragraph 2, line 4

... standard Maya does.

... standard Maya solver does.

page 285, paragraph 2, line 5

Mobject

MObject

page 286, paragraph 4, line 1

transformNodeObj

transformObj

page 286, paragraph 4, line 2

dagNodeFn

transformFn

page 286, paragraph 6, line 2

FnBase

MFnBase

page 292, paragraph 2, line 1
page 292, paragraph 3, line 1
page 292, paragraph 5, line 2

helloWorld.dll

helloWorld.mll

page 297, line 9

MstatusdoIt

MStatus doIt (insert space)

page 305, paragraph 5, line 2

... no longer need, it ...

... no longer needed, it ...

page 306, paragraph 3, lines 3-5

line 3: if( !`pluginInfo -query -unloadOk $pluginFile` )
line 4: file -f new;
line 5: unloadPlugin $pluginFile;

line 3: if( `pluginInfo -query -loaded $pluginFile` && !`pluginInfo -query -unloadOk $pluginFile` )
line 4: file -f -new;
line 5: unloadPlugin helloWorld.mll;

page 306, paragraph 5, line 7

Last the plugin...

Lastly the plugin...

page 313, paragraph 3, lines 6-8

const int nPosts = 5;
const double radius = 0.5;
const double height = 5.0;
const int nPosts = 5;
const double radius = 0.5;
const double height = 5.0;

const int nPosts = 5;
const double radius = 0.5;
const double height = 5.0;
const int nPosts = 5;
const double radius = 0.5;
const double height = 5.0;

page 311, paragraph 1, line 11

unsigned int i;

unsigned int i;

page 315, paragraph 7, line 6

posts1-number 10 -radius 1

posts2 -number 10 -radius 1

page 316, paragraph 4, line 4

The MArgsList class used ...

The MArgsList class is used ...

page 316, 317,318, 319

MArgsList

replace all instances with:

MArgsList

page 318, paragraph 2, line 2
page 320, paragraph 3, line 2

MArgsDatabase

MArgsDatabase

page 349, paragraph 10, line 1

This same ...

These same ...

page 350, paragraph 1, line 2

rotationX

rotationZ

page 355, paragraph 7, line 9

MAttribute

MFnAttribute

page 358, paragraph 6, line 1

unitializePlugin

uninitializePlugin

page 362, paragraph 1, line 1

nurbSphereShape1

nurbsSphereShape1

page 362, paragraph 1, line 2

nurbSphere1

nurbsSphere1

page 364, paragraph 7, line 2

nurbSphereShape1

nurbsSphereShape1

page 365, paragraph 5, line 3

nurbSphereShape1

nurbsSphereShape1

page 365, paragraph 5, line 4

MDGModifer's

MDGModifier's

page 366, paragraph 2, line 3

However, this is a simpler method.

However, there is a simpler method.

page 372, paragraph 7, line 3

Channel Control

Channel Box

page 373, paragraph 4, line 1

should be displayed

should not be displayed

page 374, paragraph 2, line 1

object's

objects

page 381, paragraph 2, line 1

... is set the ...

... is set to the ...

page 389, paragraph 7, line 1

compFn.addChild( nameAttr )

compFn.addChild( ageAttr )

page 393, paragraph 6, line 3

// Can no hold ...

// Can now hold ...

page 395, paragraph 3, line 2

MdataBlock

MDataBlock

page 399, paragraph 6, line 8

MyNode::scoredAttr

MyNode::scoresAttr

page 406, paragraph 4, line 1

GroundShadowNode::compute

MyNode::compute

page 409, paragraph 4, line 5

You node will most ...

Your node will most ...

page 415, paragraph 2, line 4

... object is the selection ...

... object is in the selection ...

page 420, figure 4.27

labels qType, xWidth, zWidth

labels Type, XWidth, ZWidth

page 422, paragraph 2

Maya current ...

Maya currently ...

page 424, paragraph 10, line 3

baseLocatorManip

basicLocatorManip

page 428, paragraph 4, line 1
page 428, paragraph 6, line 1

finishAddingMaps

finishAddingManips

page 436, paragraph 9, line 5

MitGeometry

MItGeometry

page 441, paragraph 4, line 1

nurbsPlaneShapeOrg

nurbsPlaneShape1Orig

page 447, paragraph 2, line 2

... don't hold on for ...

... don't hold onto it for ...

page 453, paragraph 2, line 3

propograted

propograted

page 459, paragraph 7, line 4

... as well its ...

... as well as its ...

page 461, paragraph 3

MEL does not provide pointers. However all variables are passed into functions by reference.

MEL does not provide pointers. All variables, except arrays, are passed by value into procedures. All arrays are passed by reference.

page 470, paragraph 1, line 1

makeNurbsSphere

makeNurbsSphere

page 472, paragraph 5, line 1

If no explicitly ...

If not explicitly ...

page 472, paragraph 8, line 3

MPxNode::attributeEffects

MPxNode::attributeAffects

page 475, paragraph 7, line 1

... is placeholder ...

... is a placeholder ...

page 476, paragraph 6, line 1

This is a pseudorandom number.

This is a continous function that generates pseudorandom numbers.

page 476, paragraph 10, line 2

... the plug sign ...

... the plus sign ...

page 478, paragraph 8, line 1

When an command ...

When an command ...

 

Reporting errors

Please send an email to David Gould, davidgould@davidgould.com, with any errors, omissions, and so on, that you may find.

Errata Updates

Subscribe to the newsletter to receive a notification when new errata is added.