Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function getMatrixForNode(nodeItem, frame, composition)
- {
- var c = composition.indexOf(nodeItem);
- if ( c < 0 )
- {
- // Shouldn't happen
- MessageBox.information( "Could not find bone in composition!" );
- return;
- }
- var nodeName = nodeItem.nodeName;
- var nodeType = nodeItem.nodeType;
- // Parent bone.
- var parent_matrix = identity_matrix();
- var c2 = c;
- var parent = node.parentNode(nodeName);
- while ( c2-- )
- {
- var prevItem = composition[c2];
- if (prevItem.depth < nodeItem.depth)
- {
- parent_matrix = getMatrixForNode(prevItem, frame, composition);
- break;
- }
- }
- var matrix = identity_matrix();
- var isPegOrElement = ( nodeType == kCompReadType ) || ( nodeType == kCompPegType );
- var isElement = ( nodeType == kCompReadType );
- if ( isPegOrElement )
- {
- var tx;
- var ty;
- var positionPrefix = ( isElement ? "offset" : "position" );
- tx = transformX(node.getTextAttr( nodeName, frame, positionPrefix + ".x" ));
- ty = transformY(node.getTextAttr( nodeName, frame, positionPrefix + ".y"));
- var pivot = node.getPivot( nodeName, frame);
- var px = transformX(pivot.x);
- var py = transformY(pivot.y);
- var separateScale = node.getTextAttr( nodeName, frame, "scale.separate");
- var sx;
- var sy;
- if ( separateScale == "On" )
- {
- sx = node.getTextAttr( nodeName, frame, "scale.x");
- sy = node.getTextAttr( nodeName, frame, "scale.y");
- }
- else
- {
- sx = node.getTextAttr( nodeName, frame, "scale.xy");
- sy = node.getTextAttr( nodeName, frame, "scale.xy");
- }
- var theta = node.getTextAttr( nodeName, frame, "rotation.anglez");
- var skew = node.getTextAttr(nodeName, frame, "skew");
- //this isn't correct right now
- var shx = 1 - Math.cos(skew * 3.14159 / 180.0);
- var shy = Math.sin(skew * 3.14159 / 180.0);
- //go to pivot point
- translate_matrix(matrix, tx + px, ty + py);
- //apply rotation, scale, etc.
- rotate_matrix(matrix, theta * 3.14159 / 180.0 );
- scale_matrix(matrix, sx, sy);
- //shear_matrix(matrix, shx, shy);
- //reverse the pivot
- translate_matrix(matrix, -px, -py);
- }
- else if ( nodeType == kCompBoneModuleType || nodeType == kCompBendyBoneModuleType || nodeType == kCompGameBoneModuleType )
- {
- var orientation = Number(node.getTextAttr( nodeName, frame, "restOrientation" ));
- var tx = Number(node.getTextAttr( nodeName, frame, "restOffset.x" ));
- var ty = Number(node.getTextAttr( nodeName, frame, "restOffset.y" ));
- translate_matrix(matrix, transformX(tx), transformY(ty));
- rotate_matrix(matrix, orientation * 3.14159 / 180.0 );
- }
- return mult_matrix(parent_matrix, matrix);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement