Anim8or to x plugin

Miscellaneous Forums/Content Creation Tools/Anim8or to x plugin

Can someone please fix this so it exports an object as shiny if it has materials on it?

/*
* .X Plug-in by Joe Cooning
* Joe Cooning Produx
* 2006
*/

/*
 * Directives to install script as export plugin in Object editor.
 *
 * Required directives:
 *
 *   #plugin("object", "export", <app-name>, <file-extension>);
 *   #file(<file-var>, [ "text" | "binary" ]);
 *   #return(<int-var>);
 *
 * <file-extension> - string, including initial '.'
 * <app-name> - comment for export file open dialog.
 * <file-var> - name of file variable.  Must be declared later.
 * <int-var>  - int variable with result.  1 = success, 0 = failure.
 *
 */

#plugin("object", "export", "Directx", ".x");
#file($output, "text");
#return($result);

file $output;
int $result;

object $curObject;

$curObject = project.curObject;
$output.print("xof 0302txt 0064\nHeader {\n1;\n0;\n1;\n}\n\n");

shape $shape, $shapes[1], $childShapes[1];
tridata $mdata;
int $numPoints, $numFaces, $numMaterials;
int $totalPoints;
int $ii, $jj;
point3 $point, $normal, $tr1, $tr2, $tr3, $tr4;
point2 $uv;
float4x4 $transformMat;
string $matName, $texFile;
material $material;
texture $tex;

/* The shapes in $shapes are processed in reverse order so */
/* reverse the array of values that GeetShapes returns:    */

$curObject.GetShapes($childShapes);
$shapes.size = 0;
while ($childShapes.size > 0)
    $shapes.push($childShapes.pop());

while ($shapes.size > 0) {
    $shape = $shapes.pop();

    /* If $shape is a group push child shapes onto stack: */

    if ($shape.GetKind() == SHAPE_KIND_GROUP) {
        $shape.GetShapes($childShapes);
        $output.print("// Group "%s" has %d children:\n",
                      $shape.name, $childShapes.size);
        while ($childShapes.size > 0) {
            $shapes.push($childShapes.pop());
        }
    } else if ($shape.GetKind() == SHAPE_KIND_PATH ||
               $shape.GetKind() == SHAPE_KIND_MODIFIER ||
               $shape.GetKind() == SHAPE_KIND_TEXT)
    {
        /* No 3D mesh to output. */
    } else {

	  $mdata = $shape.GetTriangleData();

	  $output.print("Frame %s {\nFrameTransformMatrix {\n", $shape.name);

	  $transformMat = $shape.GetGlobalTransform();
	  $tr4=$transformMat.Project((0.0,0.0,0.0));
	  $tr1=$transformMat.Project((1.0,0.0,0.0))-$tr4;
	  $tr2=$transformMat.Project((0.0,1.0,0.0))-$tr4;
	  $tr3=$transformMat.Project((0.0,0.0,1.0))-$tr4;
	  $output.print("%.6f, %.6f, %.6f, 0.000000,\n%.6f, %.6f, %.6f, 0.000000,\n%.6f, %.6f, %.6f, 0.000000,\n%.6f, %.6f, %.6f, 1.000000;;\n}\n",$tr1,$tr2,$tr3,$tr4);

        $output.print("Mesh %s {\n", $shape.name);

        $numPoints = $mdata.GetNumPoints();
        $output.print("%d;\n", $numPoints);
        for $ii = 0 to $numPoints-1 do {
            $point = $mdata.GetPoint($ii);
		$point.z =$point.z * -1;
            $output.print("%.6f; %.6f; %.6f;", $point);
		if ($ii<$numPoints-1){
		  $output.print(",\n");
		} else {
		  $output.print(";\n");
		}
        }

        $numFaces = $mdata.GetNumTriangles();
        $output.print("%d;\n", $numFaces);
        for $ii = 0 to $numFaces - 1 do {
		$output.print("3;%d,%d,%d;", $mdata.GetIndex($ii*3 + 2), $mdata.GetIndex($ii*3 + 1), $mdata.GetIndex($ii*3));
		if ($ii<$numFaces-1){
		   $output.print(",\n");
		} else {
		  $output.print(";\n");
		}
        }

	  $output.print("MeshMaterialList {\n");
        $numMaterials = $mdata.GetNumMaterials();
	  $output.print("%d;\n", $numMaterials);
	  $output.print("%d;\n", $numFaces);
	  for $ii = 0 to $numFaces - 1 do {
		$output.print("%d", $mdata.GetMatIndex($ii));
		if ($ii<$numFaces - 1) {
		  $output.print(",\n");
		} else {
		  $output.print(";\n");
		}
	  }
        for $ii = 0 to $numMaterials - 1 do {
            $material = $mdata.GetMaterial($ii);
		$tex = $material.GetTexture(TEXTURE_DIFFUSE);
            $matName = $material.name;
            if ($matName == " -- default --") {
                $matName = "___default___";
            }
            $output.print("Material %s {\n", $matName);
            $output.print("%.6f, %.6f, %.6f, %.6f;;\n", $material.diffuse, $material.alpha);
		$output.print("%.6f;\n", $material.Ks);
            $output.print("%.6f, %.6f, %.6f;;\n", $material.specular); 
            $output.print("%.6f, %.6f, %.6f;;\n", $material.emissive);
		$texFile = $tex.GetFileName();
            if ($texFile != ""){
		    $output.print("TextureFilename {\n"%s.%s";\n}\n", $texFile.GetRoot(), $texFile.GetExt());
		}
		$output.print("}\n");
	  }
	  $output.print("}\n\n");

        $output.print("MeshNormals {\n%d;\n", $numPoints);
        for $ii = 0 to $numPoints - 1 do {
          $normal = $mdata.GetNormal($ii);
	    $normal.z = $normal.z * -1;
          $output.print("%.6f; %.6f; %.6f;", $normal);
	    if ($ii<$numPoints-1){
		$output.print(",\n");
	    } else {
		$output.print(";\n");
	    }
        }
        $output.print("%d;\n", $numFaces);
        for $ii = 0 to $numFaces - 1 do {
		$output.print("3; %d,%d,%d;", $mdata.GetIndex($ii*3 + 2), $mdata.GetIndex($ii*3 + 1), $mdata.GetIndex($ii*3));
		if ($ii<$numFaces-1){
		   $output.print(",\n");
		} else {
		  $output.print(";\n");
		}
        }
        $output.print("}\n");

        $output.print("MeshTextureCoords {\n%d;\n", $numPoints);
        for $ii = 0 to $numPoints - 1 do {
            $uv = $mdata.GetTexCoord($ii);
		$uv.y = 1.0-$uv.y;
            $output.print("%.5f; %.5f;", $uv);
		if ($ii<$numPoints - 1){
		  $output.print(",\n");
		} else {
		  $output.print(";\n");
		}
        }
        $output.print("}\n");
	  $output.print("}\n}\n");

    }
}

$result = 1;        /* Assume export will succeed. */


anyone?