#!/usr/bin/perl

print "#VRML V2.0 utf8\n\n";

$flnm = $ARGV[0];

open(STUPA,$flnm);
$line = <STUPA>;
@pcs = split(' ',$line);
$Radius = $pcs[0];
$EndSpace = $pcs[1];
$BufferSpace = $pcs[2];
$NStupa = $pcs[3];
close STUPA;

print "# $Radius $EndSpace $BufferSpace $NStupa\n";

#Fit everything in 45 degrees (i.e. in a quarter circle)
$Degavailable = 90 - ($NStupa-1)*$BufferSpace - (2*$EndSpace);
print "#Available Degrees = $Degavailable\n";
$Step = $Degavailable/$NStupa;
print "#Step Degrees = $Step\n";

# Convert everything to radians
$Step *= 3.141/180.0;
$EndSpace *= 3.141/180.0;
$BufferSpace *= 3.141/180.0;
$d = $EndSpace;

#--------------------------------------------------------
print "PROTO STUPATexture [ ] {\n";
print "  Appearance {\n";
print "    texture     ImageTexture { url \"IMG/256/stupa.png\" }\n";
print "    textureTransform    TextureTransform { scale 1 1}\n";
print "  }\n";
print "}\n";
$xa = $Radius * sin($d);
$za = $Radius * cos($d);
$ht = 3.0;
$xb = $Radius * sin($d + $Step);
$zb = $Radius * cos($d + $Step);
$lgt = sqrt(($xa-$xb)*($xa-$xb) + ($za-$zb)*($za-$zb))/2.0;
print "PROTO STUPAGeometry [ ] {\n";
print "  IndexedFaceSet {\n";
print "    solid FALSE\n";
print "    coord Coordinate {\n";
print "      point [\n";
print "       -$lgt 0.0 0.0 ,\n";
print "        $lgt 0.0 0.0 ,\n";
print "        $lgt $ht 0.0 ,\n";
print "       -$lgt $ht 0.0 ,\n";
print "      ]\n";
print "    }\n";
print "    coordIndex [ 0, 1, 2, 3, -1 ]\n";
print "    texCoord TextureCoordinate {\n";
print "      point [ 0 0, 1 0, 1 1, 0 1 ]\n";
print "    }\n";
print "  }\n";
print "}\n";

print "DEF Q1 Transform {\n";
print " children [\n";
$d = $EndSpace + $Step/2.0;
for $i (1 .. $NStupa) {
    print "  Transform {\n";
    print "   rotation 0.0 1.0 0.0 $d\n";
    print "   children [\n";
    print "   Transform {\n";
    print "    translation 0.0 0.0 $Radius\n";
    print "    children [\n";
    print "     Billboard {\n";
    print "    	 children Shape {\n";
    print "        appearance STUPATexture { }\n";
    print "    	   geometry STUPAGeometry{ }\n";
    print "    	 }\n";
    print "     }\n";
    print "   ]}\n";
    print "  ]}\n\n";
    $d = $d + $Step + $BufferSpace;
}
print "  ]\n}\n\n";
#--------------------------------------------------------

# Replicate the object in remaining quadrants
print "Transform {\n";
print "  rotation 0.0 1.0 0.0 1.571\n";
print "  children [\n";
print "    USE Q1\n";
print "    Transform {\n";
print "      rotation 0.0 1.0 0.0 1.571\n";
print "      children [\n";
print "        USE Q1\n";
print "        Transform {\n";
print "          rotation 0.0 1.0 0.0 1.571\n";
print "          children [\n";
print "            USE Q1\n";
print "          ]\n";
print "        }\n";
print "      ]\n";
print "    }\n";
print "  ]\n";
print "}\n";

