GetPolyTriangleArea MEL

From scripting
Jump to: navigation, search
global proc float getPolyTriangleArea( string $mesh, string $vertIndices[] ) {
	vector $verts[3];
	string $transform[] = `listRelatives -p $mesh`;
	float $transformMatrix[] = `xform -q -ws -m $transform[0]`;
	int $i;
	for ($i=0; $i<3; $i++) {
		vector $vert = `getAttr ($mesh+".vt["+ $vertIndices[$i] +"]")`;
		vector $offset = `getAttr ($mesh+".pt["+ $vertIndices[$i] +"]")`;
		$vert = $vert + $offset;
	
		float $v[] = pointMatrixMult($vert, $transformMatrix);
		$verts[$i] = <<$v[0], $v[1], $v[2]>>;
	} 

	vector $v1 = $verts[1] - $verts[0];
	vector $v2 = $verts[2] - $verts[0];
	return abs(cross($v1, $v2)) / 2.0;
}

(Note, this subroutine was greatly influenced by a contributor named YourDaftPunk on CGTalk, located here)


More information on vectors and arrays, read pages 12-16 in YSYT.