/* Name: Torus Primitive Plugin Copyright: 2006 Author: Tyson Collins Date: 06/06/06 23:48 Description: Plugin for Anim8or v0.95 that adds a torus primitive */ #plugin("object", "mesh", "Torus"); #parameter("Sides", int, 12, 3, 30); #parameter("Rings", int, 20, 1, 1000); #parameter("Ring Diameter", float, 10.0, 0.001, 99999, scale); #parameter("Hole Diameter", float, 20.0, 0.0, 99999, scale, scale_x); #return($torus); #button(25, 25, 2, 0x0000000000, 0x0000000000, 0x0000007c00, 0x0000038380, 0x00000c0060, 0x0000100010, 0x0000200008, 0x0000200008, 0x0000407c04, 0x0000418304, 0x0000820082, 0x0000820082, 0x0000818302, 0x0000807c02, 0x0000400004, 0x0000400004, 0x0000200008, 0x0000200008, 0x0000100010, 0x00000c0060, 0x0000038380, 0x0000007c00, 0x0000000000, 0x0000000000, 0x0000000000); shape $torus; int $sides,$rings,$swap,$ring,$lastRing,$thisRing,$i; float $ringdiameter,$indiameter,$angle; point3 $vtx[80]; point3 $p; int $vtxIndex[80]; $sides = parameter("Sides"); $rings = parameter("Rings"); $ringdiameter = parameter("Ring Diameter"); $indiameter = parameter("Hole Diameter"); $torus.Open(); for $i = 0 to $sides-1 do { $vtx[$i].x = sin((2*3.14159*$i)/$sides)*$ringdiameter + $indiameter; $vtx[$i].y = cos((2*3.14159*$i)/$sides)*$ringdiameter; $vtx[$i].z = 0.0; $vtxIndex[$i] = $torus.AddPoint($vtx[$i]); } $vtxIndex[$sides+1] = $vtxIndex[0]; $lastRing = 0; $thisRing = $rings+1; for $ring = 1 to $rings-1 do { $angle = (2*3.14159)*($ring * (1.0/$rings)); for $i = 0 to $sides-1 do { $p.y = $vtx[$i].y; $p.x = cos($angle)*$vtx[$i].x + sin($angle)*$vtx[$i].z; $p.z = -sin($angle)*$vtx[$i].x + cos($angle)*$vtx[$i].z; $vtxIndex[$thisRing + $i] = $torus.AddPoint($p); } $vtxIndex[$thisRing + $sides] = $vtxIndex[$thisRing]; for $i = 0 to $sides - 1 do { $torus.OpenFace(0, 0); $torus.VertexN($vtxIndex[$lastRing + $i]); $torus.VertexN($vtxIndex[$thisRing + $i]); $torus.VertexN($vtxIndex[$thisRing + $i + 1]); $torus.VertexN($vtxIndex[$lastRing + $i + 1]); $torus.CloseFace(); } $swap = $lastRing; $lastRing = $thisRing; $thisRing = $swap; } for $i = 0 to $sides-2 do { $torus.OpenFace(0, 0); $torus.VertexN($vtxIndex[$lastRing + $i]); $torus.VertexN($i); $torus.VertexN($i+1); $torus.VertexN($vtxIndex[$lastRing + $i+1]); $torus.CloseFace(); } $torus.OpenFace(0, 0); $torus.VertexN(0); $torus.VertexN($vtxIndex[$lastRing]); $torus.VertexN($vtxIndex[$lastRing + $sides-1]); $torus.VertexN($sides-1); $torus.CloseFace(); $torus.Close();