#!/usr/local/bin/perl
if ($#ARGV !=1) {
die "Usage: $0 inputfile outputfile\n";
}
($infile,$outfile) = @ARGV;
$date = `date`;
open(INPUT,"<$infile") || die "Can't input $infile $!";
open(OUTPUT,">$outfile") || die "Can't output $outfile $!";
print OUTPUT "#VRML V2.0 utf8\n";
print OUTPUT "Background {\n";
print OUTPUT "groundAngle [ 0.9, 1.5, 1.57 ]\n";
print OUTPUT "groundColor [ 0.2 0.2 1, 0.4 0.4 1, 0.7 0.7 1, 0.7 0.7 1]\n";
print OUTPUT "skyAngle [ 0.9, 1.5, 1.57 ]\n";
print OUTPUT "skyColor [ 0.9 0.9 1, 0.8 0.8 1, 0.7 0.7 1, 0.7 0.7 1]\n";
print OUTPUT "}\n";
print OUTPUT "Viewpoint {\n";
print OUTPUT "position 1 1 1\n";
print OUTPUT "description \"entry view\"\n";
print OUTPUT "}\n";
@object_database;
@object_face_database;
@def_var_database;
@text_database;
@macro_database;
$boxwid = 1;
@def_var_database[0] = boxwid;
@def_var_database[1] = 1;
$boxht = 1;
@def_var_database[2] = boxht;
@def_var_database[3] = 1;
$boxdep = 1;
@def_var_database[4] = boxdep;
@def_var_database[5] = 1;
$cylinderrad = 1;
@def_var_database[6] = cylinderrad;
@def_var_database[7] = 1;
$cylinderht = 1;
@def_var_database[8] = cylinderht;
@def_var_database[9] = 1;
$sphererad = 1;
@def_var_database[10] = sphererad;
@def_var_database[11] = 1;
$conebotrad = 1;
@def_var_database[12] = conebotrad;
@def_var_database[13] = 1;
$coneht = 1;
@def_var_database[14] = coneht;
@def_var_database[15] = 1;
$arrowlength = 5;
@def_var_database[16] = arrowlength;
@def_var_database[17] = 5;
$linelength = 5;
@def_var_database[18] = linelength;
@def_var_database[19] = 5;
$object_number = 0;
$line_number = 0;
$dir_mode = 1;
$data_counter = 0;
$var_counter = 20;
$macro_counter = 0;
$objectXCord = -10;
$objectYCord = 1;
$objectZCord = 1 ;
$title_flag = 0;
while ($line = )
{
#Default Dimensions-------------------------------------------
if ($line =~
m/^(boxht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(boxwid)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(boxdep)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(cylinderrad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(cylinderht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(sphererad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(conebotrad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(coneht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(arrowlength)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
if ($line =~
m/^(linelength)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($1, $4, $7, $9);
}
#defining variables------------------------------------------------
if (($line =~
m/^(\w+)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
&& ($line !~ m/^boxht|boxwid|boxdep|cylinderht|cylinderrad|sphererad|coneht|conebotrad|arrowlength(\s+)?=(\s+)?([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
assign_operations($1, $4, $7, $9);
}
#giving your own title---------------------------------------------------
if ($line =~ m/^title(\s+)(\"(.*)\")/i)
{
if ($title_flag eq 1)
{
print "You are redefining the title, Aborting\n";
exit;
}
my (@title_array);
$title_flag = 1;
my ($y);
$y = 10;
@title_array = split(/"+/, $2);
foreach $b (@title_array)
{
draw_title($b, $y);
$y = $y - 2;
}
# draw_date($y);
}
#defining direction-------------------------------------------------------
if (($line =~ m/^right/i))
{
$dir_mode = 1;
}
if (($line =~ m/^left/i))
{
$dir_mode = 2;
}
if (($line =~ m/^up/i))
{
$dir_mode = 3;
}
if (($line =~ m/^down/i))
{
$dir_mode = 4;
}
if (($line =~ m/^outside/i))
{
$dir_mode = 5;
}
if (($line =~ m/^inside/i))
{
$dir_mode = 6;
}
#BOX-----------------------------------------------------------
if (($line =~ m/^((\w+):[\s+])?(box)/i)&&($line !~ m/^(box)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
my ($box_text);
my ($box_height);
my ($box_width);
my ($box_depth);
my ($box_color);
my ($box_X);
my ($box_Y);
my ($box_Z);
my ($box_image);
my ($box_transparency);
my ($box_anchor);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$box_image = $2;
@object_database[$counter + 12] = $box_image;
}
if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$box_transparency = $2;
@object_database[$counter + 13] = $box_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$box_anchor = $2;
@object_database[$counter + 14] = $box_anchor;
}
if ($line =~ m/color(\s+)([a-zA-Z]+)/i)
{
$box_color = $2;
$box_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $box_color;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~
m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$box_X = $2;
@object_database[$counter + 3] = $box_X;
$box_Y = $6;
@object_database[$counter + 4] = $box_Y;
$box_Z = $10;
@object_database[$counter + 5] = $box_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~ m/width(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$box_width = $2;
@object_database[$counter + 6] = $box_width;
}
if ($line =~ m/height(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$box_height = $2;
@object_database[$counter + 7] = $box_height;
}
if ($line =~ m/depth(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$box_depth = $2;
@object_database[$counter + 8] = $box_depth;
}
size_box ($object_database[$counter+6], $object_database[$counter+7], $object_database[$counter+8], $counter);
$data_counter += 50;
}
#CYLINDER--------------------------------------------------
if (($line =~ m/^((\w+):[\s+])?(cylinder)/i) && ($line !~ m/^(cylinder)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
my ($cylinder_text);
my ($cylinder_radius);
my ($cylinder_height);
my ($cylinder_color);
my ($cylinder_X);
my ($cylinder_Y);
my ($cylinder_Z);
my ($cylinder_image);
my ($cylinder_transparency);
my ($cylinder_anchor);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$cylinder_image = $2;
@object_database[$counter + 12] = $cylinder_image;
}
if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$cylinder_transparency = $2;
@object_database[$counter + 13] = $cylinder_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$cylinder_anchor = $2;
@object_database[$counter + 14] = $cylinder_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cylinder_X = $2;
@object_database[$counter + 3] = $cylinder_X;
$cylinder_Y = $6;
@object_database[$counter + 4] = $cylinder_Y;
$cylinder_Z = $10;
@object_database[$counter + 5] = $cylinder_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$cylinder_color = $2;
$cylinder_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $cylinder_color;
}
if ($line =~ m/height(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cylinder_height = $2;
@object_database[$counter + 7] = $cylinder_height;
}
if ($line =~ m/radius(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cylinder_radius = $2;
@object_database[$counter + 6] = $cylinder_radius;
}
size_cylinder ($object_database[$counter+6], $object_database[$counter+7], $counter);
$data_counter += 50;
}
#SPHERE-------------------------------------------------------
if (($line =~ m/^((\w+):[\s+])?(sphere)/i) && ($line !~ m/^(sphere)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
my ($sphere_text);
my ($sphere_radius);
my ($sphere_color);
my ($sphere_X);
my ($sphere_Y);
my ($sphere_Z);
my ($sphere_image);
my ($sphere_transparency);
my ($sphere_anchor);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$sphere_image = $2;
@object_database[$counter + 12] = $sphere_image;
}
if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$sphere_transparency = $2;
@object_database[$counter + 13] = $sphere_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$sphere_anchor = $2;
@object_database[$counter + 14] = $sphere_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$sphere_X = $2;
@object_database[$counter + 3] = $sphere_X;
$sphere_Y = $6;
@object_database[$counter + 4] = $sphere_Y;
$sphere_Z = $10;
@object_database[$counter + 5] = $sphere_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$sphere_color = $2;
$sphere_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $sphere_color;
}
if ($line =~ m/radius(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$sphere_radius = $2;
@object_database[$counter + 6] = $sphere_radius;
}
size_sphere ($object_database[$counter+6], $counter);
$data_counter += 50;
}
#CONE---------------------------------------------------------
if (($line =~ m/^((\w+):[\s+])?(cone)/i) && ($line !~ m/^(cone)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
my ($cone_text);
my ($cone_bottomRadius);
my ($cone_height);
my ($cone_color);
my ($cone_X);
my ($cone_Y);
my ($cone_Z);
my ($cone_image);
my ($cone_transparency);
my ($cone_anchor);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$cone_image = $2;
@object_database[$counter + 12] = $cone_image;
}
if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$cone_transparency = $2;
@object_database[$counter + 13] = $cone_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$cone_anchor = $2;
@object_database[$counter + 14] = $cone_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cone_X = $2;
@object_database[$counter + 3] = $cone_X;
$cone_Y = $6;
@object_database[$counter + 4] = $cone_Y;
$cone_Z = $10;
@object_database[$counter + 5] = $cone_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$cone_color = $2;
$cone_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $cone_color;
}
if ($line =~ m/bottomradius(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cone_bottomRadius = $2;
@object_database[$counter + 6] = $cone_bottomRadius;
}
if ($line =~ m/height(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$cone_height = $2;
@object_database[$counter + 7] = $cone_height;
}
size_cone ($object_database[$counter+6], $object_database[$counter+7], $counter);
$data_counter += 50;
}
#LINE OR ARROW------------------------------------------------------
if ((($line =~ m/^((\w+):[\s+])?(line)/i)||($line =~ m/^((\w+):[\s+])?(arrow)/i)) &&
($line !~ m/^(line)(\w+)/i) && ($line !~ m/^(arrow)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
#LINE--------------------------------------------------------
if ($line =~ m/^(line)/i)
{
my ($line_color);
my ($line_text);
my ($line_transparency);
my ($line_anchor);
my ($line_image);
my ($line_start_label);
my ($line_start_label_pos);
my ($line_end_label);
my ($line_end_label_pos);
my ($dashed_line);
my ($line_length);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$line_image = $2;
@object_database[$counter + 12] = $line_image;
}
if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$line_transparency = $2;
@object_database[$counter + 13] = $line_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$line_anchor = $2;
@object_database[$counter + 14] = $line_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$line_at_X = $2;
@object_database[$counter + 3] = $line_at_X;
$line_at_Y = $6;
@object_database[$counter + 4] = $line_at_Y;
$line_at_Z = $10;
@object_database[$counter + 5] = $line_at_Z;
@object_database[$counter + 10] = 2;
}
if ($line =~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$line_start_X = $2;
@object_database[$counter + 3] = $line_start_X;
$line_start_Y = $6;
@object_database[$counter + 4] = $line_start_Y;
$line_start_Z = $10;
@object_database[$counter + 5] = $line_start_Z;
$line_end_X = $14;
@object_database[$counter + 6] = $line_end_X;
$line_end_Y = $18;
@object_database[$counter + 7] = $line_end_Y;
$line_end_Z = $22;
@object_database[$counter + 8] = $line_end_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$line_color = $2;
$line_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $line_color;
}
if ($line =~ m/linelength(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$line_length = $2;
@object_database[$counter + 26] = $line_length;
}
else
{
$line_length = $def_var_database[19];
@object_database[$counter + 26] = $line_length;
}
if (($line =~ m/from(\s+)(\w+).(left|right|top|bottom|front|back)(\s+)to(\s+)(\w+).(left|right|top|bottom|front|back)/i)&&($line !~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
$line_start_label = $2;
$line_end_label = $6;
$line_start_label_pos = $3;
$line_end_label_pos = $7;
#search for object_label
@object_database[$counter + 21] = $line_start_label;
@object_database[$counter + 22] = $line_start_label_pos;
@object_database[$counter + 23] = $line_end_label;
@object_database[$counter + 24] = $line_end_label_pos;
@object_database[$counter + 10] = 3;
}
if ($line =~ m/(dashed)/i)
{
$dashed_line = $1;
$dashed_line =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $dashed_line;
}
}
#ARROW--------------------------------------------------------
if ($line =~ m/^(arrow)/i)
{
my ($counter);
$counter = $data_counter;
my ($arrow_color);
my ($arrow_text);
my ($arrow_transparency);
my ($arrow_anchor);
my ($arrow_image);
my ($arrow_start_label);
my ($arrow_start_label_pos);
my ($arrow_end_label);
my ($arrow_end_label_pos);
my ($dashed_arrow);
my ($centered_arrow);
my ($arrow_length);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$arrow_image = $2;
@object_database[$counter + 12] = $arrow_image;
}
if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$arrow_transparency = $2;
@object_database[$counter + 13] = $arrow_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$arrow_anchor = $2;
@object_database[$counter + 14] = $arrow_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$arrow_at_X = $2;
@object_database[$counter + 3] = $arrow_at_X;
$arrow_at_Y = $6;
@object_database[$counter + 4] = $arrow_at_Y;
$arrow_at_Z = $10;
@object_database[$counter + 5] = $arrow_at_Z;
@object_database[$counter + 10] = 2;
}
if ($line =~ m/arrowlength(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$arrow_length = $2;
@object_database[$counter + 26] = $arrow_length;
}
else
{
$arrow_length = $def_var_database[17];
@object_database[$counter + 26] = $arrow_length;
}
if ($line =~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$arrow_start_X = $2;
@object_database[$counter + 3] = $arrow_start_X;
$arrow_start_Y = $6;
@object_database[$counter + 4] = $arrow_start_Y;
$arrow_start_Z = $10;
@object_database[$counter + 5] = $arrow_start_Z;
$arrow_end_X = $14;
@object_database[$counter + 6] = $arrow_end_X;
$arrow_end_Y = $18;
@object_database[$counter + 7] = $arrow_end_Y;
$arrow_end_Z = $22;
@object_database[$counter + 8] = $arrow_end_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$arrow_color = $2;
$arrow_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $arrow_color;
}
if (($line =~
m/from(\s+)(\w+).(left|right|top|bottom|front|back)(\s+)to(\s+)(\w+).(left|right|top|bottom|front|back)/i)
&&
($line !~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
$arrow_start_label = $2;
$arrow_end_label = $6;
$arrow_start_label_pos = $3;
$arrow_end_label_pos = $7;
#search for object_label
@object_database[$counter + 21] = $arrow_start_label;
@object_database[$counter + 22] = $arrow_start_label_pos;
@object_database[$counter + 23] = $arrow_end_label;
@object_database[$counter + 24] = $arrow_end_label_pos;
@object_database[$counter + 10] = 3;
}
if ($line =~ m/(dashed)/i)
{
$dashed_arrow = $1;
$dashed_arrow =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $dashed_arrow;
}
if ($line =~ m/(centered)/i)
{
$centered_arrow = $1;
$centered_arrow =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $centered_arrow;
}
}
$data_counter += 50;
}
#ARC-----------------------------------------------------------
if (($line =~ m/^((\w+):[\s+])?(arc)/i)&&($line !~ m/^(arc)(\w+)/i))
{
my ($counter);
$counter = $data_counter;
$object_label = $2;
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
my ($arc_color);
my ($arc_text);
my ($arc_transparency);
my ($arc_anchor);
my ($arc_image);
my ($arc_radius);
my ($arc_start_label);
my ($arc_start_label_pos);
my ($arc_end_label);
my ($arc_end_label_pos);
my ($arc_dir);
my ($dashed_arc);
my ($centered_arc);
if ($line =~ m/imagetexture(\s+)\'(.*)\'/i)
{
$arc_image = $2;
@object_database[$counter + 12] = $arc_image;
}
if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
$arc_transparency = $2;
@object_database[$counter + 13] = $arc_transparency;
}
if ($line =~ m/anchor(\s+)\&(.*)\&/i)
{
$arc_anchor = $2;
@object_database[$counter + 14] = $arc_anchor;
}
if ($line =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if ($line =~ m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$arc_at_X = $2;
@object_database[$counter + 3] = $arc_at_X;
$arc_at_Y = $6;
@object_database[$counter + 4] = $arc_at_Y;
$arc_at_Z = $10;
@object_database[$counter + 5] = $arc_at_Z;
@object_database[$counter + 10] = 2;
}
if (($line =~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
&&
($line !~ m/from(\s+)(\w+).(left|right|top|bottom|front|back)(\s+)to(\s+)(\w+).(left|right|top|bottom|front|back)/i))
{
$arc_start_X = $2;
@object_database[$counter + 3] = $arc_start_X;
$arc_start_Y = $6;
@object_database[$counter + 4] = $arc_start_Y;
$arc_start_Z = $10;
@object_database[$counter + 5] = $arc_start_Z;
$arc_end_X = $14;
@object_database[$counter + 6] = $arc_end_X;
$arc_end_Y = $18;
@object_database[$counter + 7] = $arc_end_Y;
$arc_end_Z = $22;
@object_database[$counter + 8] = $arc_end_Z;
@object_database[$counter + 10] = 1;
}
if ($line =~m/color(\s+)([a-zA-Z]+)/i)
{
$arc_color = $2;
$arc_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $arc_color;
}
if ($line =~ m/arcradius(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
$arc_radius = $2;
@object_database[$counter + 18] = $arc_radius;
}
if (($line =~
m/from(\s+)(\w+).(left|right|top|bottom|front|back)(\s+)to(\s+)(\w+).(left|right|top|bottom|front|back)/i)
&&
($line !~ m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?,(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
$arc_start_label = $2;
$arc_end_label = $6;
$arc_start_label_pos = $3;
$arc_end_label_pos = $7;
#search for object_label
@object_database[$counter + 21] = $arc_start_label;
@object_database[$counter + 22] = $arc_start_label_pos;
@object_database[$counter + 23] = $arc_end_label;
@object_database[$counter + 24] = $arc_end_label_pos;
@object_database[$counter + 10] = 3;
}
if ($line =~ m/->/i)
{
@object_database[$counter + 20] = 1;
}
if ($line =~ m/(cw|ccw)/i)
{
$arc_dir = $1;
$arc_dir =~ y/A-Z/a-z/;
@object_database[$counter + 19] = $arc_dir;
}
if ($line =~ m/(dashed)/i)
{
$dashed_arc = $1;
$dashed_arc =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $dashed_arc;
}
if ($line =~ m/(centered)/i)
{
$centered_arc = $1;
$centered_arc =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $centered_arc;
}
$data_counter += 50;
}
if ($line =~ m/^define(\s+)(\w+)(\s+)(')/i)
{
$macro_database[$macro_counter] = $2;
my $temp = $macro_counter + 1;
macro:
while ($line = )
{
if (($line =~ m/^(\s+)?-/i)||($line =~ m/'/i))
{
if ($line =~ m/'/i)
{
last macro;
}
else
{
$macro_database[$temp] = $line;
$temp++;
}
}
}
$macro_counter += 50;
}
if ($line =~ m/^(\w+)(\s+)(\((.*)\))/i)
{
my ($ret_mac_pos);
my ($mac_count);
my ($search_mac);
$mac_count = $macro_counter;
$ret_mac_pos = search_macro($1);
$search_mac = $ret_mac_pos;
my @mac_data;
my $temp_counter = 0;
while ($temp_counter < 50)
{
$mac_data[$ret_mac_pos] = $macro_database[$ret_mac_pos];
$temp_counter++;
$ret_mac_pos++;
}
$mac_count = 1;
$copy_counter = 0;
my (@macro_attr);
my ($b);
my $attr_count = 0;
my $temp_search = $search_mac;
@macro_attr = split(/,+/, $4);
foreach $b (@macro_attr)
{
$search_mac = $temp_search;
my $a = 0;
while ($a < 50)
{
if ($mac_data[$search_mac] =~ m/(\$$copy_counter(:)?)/)
{
if ($2 ne "")
{
$mac_data[$search_mac] = "$mac_data[$search_mac] $b\:label";
print "$mac_data[$search_mac]\n";
}
else
{
$mac_data[$search_mac] = "$mac_data[$search_mac] $b";
print "$mac_data[$search_mac]\n";
}
}
$search_mac++;
$a++;
}
$copy_counter++;
}
my $counting = 0;
while ($counting < 50)
{
develop_macro($mac_data[$temp_search]);
$counting++;
$temp_search++;
}
}
}
sub develop_macro
{
my $counter = $data_counter;
if ($_[0] =~
m/(\s+)?-(\s+)?(boxht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(boxwid)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(boxdep)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(cylinderrad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(cylinderht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(sphererad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(conebotrad)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(coneht)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(arrowlength)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if ($_[0] =~
m/(\s+)?-(\s+)?(linelength)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
{
assign_operations($3, $6, $9, $11);
}
if (($_[0] =~
m/(\s+)?-(\s+)?(\w+)(\s+)=(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)?(\s+)?(\W)?(\s+)?(\w+)?/i)
&& ($_[0] !~
m/(\s+)?-(\s+)?boxht|boxwid|boxdep|cylinderht|cylinderrad|sphererad|coneht|conebotrad|arrowlength(\s+)?=(\s+)?([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
assign_operations($3, $6, $9, $11);
}
if (($_[0] =~ m/(\s+)?-(\s+)?right/i))
{
$dir_mode = 1;
}
if (($_[0] =~ m/(\s+)?-(\s+)?left/i))
{
$dir_mode = 2;
}
if (($_[0] =~ m/(\s+)?-(\s+)?up/i))
{
$dir_mode = 3;
}
if (($_[0] =~ m/(\s+)?-(\s+)?down/i))
{
$dir_mode = 4;
}
if (($_[0] =~ m/(\s+)?-(\s+)?outside/i))
{
$dir_mode = 5;
}
if (($_[0] =~ m/(\s+)?-(\s+)?inside/i))
{
$dir_mode = 6;
}
if (($_[0] =~ m/((\w+):[\s+])?(\bbox\b)/i)||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\bbox\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\bcylinder\b)/i) ||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\bcylinder\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\bsphere\b)/i) ||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\bsphere\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\bcone\b)/i) ||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\bcone\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\bline\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\barrow\b)/i)||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\bline\b)/i)||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\barrow\b)/i)||
($_[0] =~ m/((\w+):[\s+])?(\barc\b)/i) ||
($_[0] =~ m/((\$$[0-9]+):[\s+])?(\barc\b)/i))
{
@object_database[$counter + 17] = $2;
@object_database[$data_counter + 16] = $dir_mode;
$object_number++;
$line_number++;
my ($object_type);
$object_type = $3;
$object_type =~ y/A-Z/a-z/;
@object_database[$counter] = $object_type;
@object_database[$counter + 1] = $object_number;
@object_database[$counter + 2] = $line_number;
if ($_[0] =~ m/(\w+):label/i)
{
@object_database[$counter + 17] = $1;
}
if ($_[0] =~ m/imagetexture(\s+)\'(.*)\'/i)
{
@object_database[$counter + 12] = $2;
}
if ($_[0] =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i)
{
@object_database[$counter + 13] = $2;
}
if ($_[0] =~ m/anchor(\s+)\&(.*)\&/i)
{
@object_database[$counter + 14] = $2;
}
if ($_[0] =~ m/color(\s+)([a-zA-Z]+)/i)
{
my $mac_color = $2;
$mac_color =~ y/A-Z/a-z/;
@object_database[$counter + 9] = $mac_color;
}
if ($_[0] =~ m/text(\s+)(\"(.*)\")/i)
{
my ($text_counter);
$text_counter = 40;
@text_array = split(/"+/, $2);
foreach $b (@text_array)
{
@object_database[$counter + $text_counter] = $b;
$text_counter++;
}
}
if($_[0] =~
m/at(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 3] = $2;
@object_database[$counter + 4] = $6;
@object_database[$counter + 5] = $10;
@object_database[$counter + 10] = 1;
}
if ($_[0] =~ m/width(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 6] = $2;
}
if ($_[0] =~ m/height(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 7] = $2;
}
if ($_[0] =~ m/depth(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 8] = $2;
}
if ($_[0] =~ m/radius(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 6] = $2;
}
if ($_[0] =~
m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 3] = $2;
@object_database[$counter + 4] = $6;
@object_database[$counter + 5] = $10;
@object_database[$counter + 6] = $14;
@object_database[$counter + 7] = $18;
@object_database[$counter + 8] = $22;
@object_database[$counter + 10] = 1;
}
if ($_[0] =~ m/linelength(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 26] = $2;
}
else
{
@object_database[$counter + 26] = $def_var_database[19];
}
if (($_[0] =~
m/from(\s+)(\w+).(left|right|top|bottom|front|back)(\s+)to(\s+)(\w+).(left|right|top|bottom|front|back)/i)
&&
($_[0] !~
m/from(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)to(\s+)(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i(\s+)?\|(\s+)?(-?[0-9]+(\.[0-9]*)?|\.[0-9]+)i/i))
{
@object_database[$counter + 21] = $2;
@object_database[$counter + 22] = $3;
@object_database[$counter + 23] = $6;
@object_database[$counter + 24] = $7;
@object_database[$counter + 10] = 3;
}
if ($_[0] =~ m/(dashed)/i)
{
my ($macro_line);
$macro_line = $1;
$macro_line =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $macro_line;
}
if ($_[0] =~ m/arrowlength(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)i/i)
{
@object_database[$counter + 26] = $2;
}
else
{
@object_database[$counter + 26] = $def_var_database[17];
}
if ($_[0] =~ m/(centered)/i)
{
my $macro_centered_arrow = $1;
$macro_centered_arrow =~ y/A-Z/a-z/;
$object_database[$counter + 25] = $macro_centered_arrow;
}
if ($_[0] =~ m/->/i)
{
@object_database[$counter + 20] = 1;
}
if ($_[0] =~ m/(cw|ccw)/i)
{
my $macro_arc_dir = $1;
$macro_arc_dir =~ y/A-Z/a-z/;
@object_database[$counter + 19] = $macro_arc_dir;
}
if ($object_database[$counter] eq "box")
{
size_box ($object_database[$counter+6], $object_database[$counter+7],
$object_database[$counter+8], $counter);
}
if ($object_database[$counter] eq "cylinder")
{
size_cylinder ($object_database[$counter+6], $object_database[$counter+7], $counter);
}
if ($object_database[$counter] eq "sphere")
{
size_sphere ($object_database[$counter+6], $counter);
}
if ($object_database[$counter] eq "cone")
{
size_cone ($object_database[$counter+6], $object_database[$counter+7], $counter);
}
$data_counter += 50;
}
}
sub search_macro
{
my ($mac_search);
my ($search_count);
my ($macro_flag);
my ($macro_position);
$macro_flag = 0;
$search_count = 0;
$mac_search = @macro_database;
macro_search:
while ($search_count <= $mac_search)
{
if ($macro_database[$search_count] eq $_[0])
{
$macro_flag = 1;
$macro_position = $search_count;
}
$search_count += 50;
}
if ($macro_flag eq 0)
{
print "the $_[0] macro not defined, ABORTING\n";
exit;
}
return $macro_position;
}
$data_counter = 0;
$face_counter = 0;
# first object of the object_database
calc_faces();
sub calc_faces
{
if (($object_database[$data_counter] eq "box")||($object_database[$data_counter] eq "cylinder") ||
($object_database[$data_counter] eq "sphere") || ($object_database[$data_counter] eq "cone"))
{
if (($data_counter eq 0)&&($object_database[$data_counter + 10] ne 1))
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
}
my ($left_face_position_X);
my ($left_face_position_Y);
my ($left_face_position_Z);
my ($right_face_position_X);
my ($right_face_position_Y);
my ($right_face_position_Z);
my ($top_face_position_X);
my ($top_face_position_Y);
my ($top_face_position_Z);
my ($bottom_face_position_X);
my ($bottom_face_position_Y);
my ($bottom_face_position_Z);
my ($front_face_position_X);
my ($front_face_position_Y);
my ($front_face_position_Z);
my ($back_face_position_X);
my ($back_face_position_Y);
my ($back_face_position_Z);
if ($object_database[$data_counter] eq "box")
{
$left_face_position_X = $object_database[$data_counter + 3] - ($object_database[$data_counter + 6]/2);
$left_face_position_Y = $object_database[$data_counter + 4];
$left_face_position_Z = $object_database[$data_counter + 5];
$right_face_position_X = $object_database[$data_counter + 3] + ($object_database[$data_counter + 6]/2);
$right_face_position_Y = $object_database[$data_counter + 4];
$right_face_position_Z = $object_database[$data_counter + 5];
$top_face_position_X = $object_database[$data_counter + 3];
$top_face_position_Y = $object_database[$data_counter + 4] + ($object_database[$data_counter + 7]/2);
$top_face_position_Z = $object_database[$data_counter + 5];
$bottom_face_position_X = $object_database[$data_counter + 3];
$bottom_face_position_Y = $object_database[$data_counter + 4] - ($object_database[$data_counter + 7]/2);
$bottom_face_position_Z = $object_database[$data_counter + 5];
$front_face_position_X = $object_database[$data_counter + 3];
$front_face_position_Y = $object_database[$data_counter + 4];
$front_face_position_Z = $object_database[$data_counter + 5] + ($object_database[$data_counter + 8]/2);
$back_face_position_X = $object_database[$data_counter + 3];
$back_face_position_Y = $object_database[$data_counter + 4];
$back_face_position_Z = $object_database[$data_counter + 5] - ($object_database[$data_counter + 8]/2);
$object_face_database[$face_counter] = box;
$object_face_database[$face_counter + 1] = $left_face_position_X;
$object_face_database[$face_counter + 2] = $left_face_position_Y;
$object_face_database[$face_counter + 3] = $left_face_position_Z;
$object_face_database[$face_counter + 4] = $right_face_position_X;
$object_face_database[$face_counter + 5] = $right_face_position_Y;
$object_face_database[$face_counter + 6] = $right_face_position_Z;
$object_face_database[$face_counter + 7] = $top_face_position_X;
$object_face_database[$face_counter + 8] = $top_face_position_Y;
$object_face_database[$face_counter + 9] = $top_face_position_Z;
$object_face_database[$face_counter + 10] = $bottom_face_position_X;
$object_face_database[$face_counter + 11] = $bottom_face_position_Y;
$object_face_database[$face_counter + 12] = $bottom_face_position_Z;
$object_face_database[$face_counter + 13] = $front_face_position_X;
$object_face_database[$face_counter + 14] = $front_face_position_Y;
$object_face_database[$face_counter + 15] = $front_face_position_Z;
$object_face_database[$face_counter + 16] = $back_face_position_X;
$object_face_database[$face_counter + 17] = $back_face_position_Y;
$object_face_database[$face_counter + 18] = $back_face_position_Z;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
if ($object_database[$data_counter] eq "cylinder")
{
$left_face_position_X = $object_database[$data_counter + 3] - ($object_database[$data_counter + 6]);
$left_face_position_Y = $object_database[$data_counter + 4];
$left_face_position_Z = $object_database[$data_counter + 5];
$right_face_position_X = $object_database[$data_counter + 3] + ($object_database[$data_counter + 6]);
$right_face_position_Y = $object_database[$data_counter + 4];
$right_face_position_Z = $object_database[$data_counter + 5];
$top_face_position_X = $object_database[$data_counter + 3];
$top_face_position_Y = $object_database[$data_counter + 4] + ($object_database[$data_counter + 7]/2);
$top_face_position_Z = $object_database[$data_counter + 5];
$bottom_face_position_X = $object_database[$data_counter + 3];
$bottom_face_position_Y = $object_database[$data_counter + 4] - ($object_database[$data_counter + 7]/2);
$bottom_face_position_Z = $object_database[$data_counter + 5];
$front_face_position_X = $object_database[$data_counter + 3];
$front_face_position_Y = $object_database[$data_counter + 4];
$front_face_position_Z = $object_database[$data_counter + 5] + ($object_database[$data_counter + 6]);
$back_face_position_X = $object_database[$data_counter + 3];
$back_face_position_Y = $object_database[$data_counter + 4];
$back_face_position_Z = $object_database[$data_counter + 5] - ($object_database[$data_counter + 6]);
$object_face_database[$face_counter] = cylinder;
$object_face_database[$face_counter + 1] = $left_face_position_X;
$object_face_database[$face_counter + 2] = $left_face_position_Y;
$object_face_database[$face_counter + 3] = $left_face_position_Z;
$object_face_database[$face_counter + 4] = $right_face_position_X;
$object_face_database[$face_counter + 5] = $right_face_position_Y;
$object_face_database[$face_counter + 6] = $right_face_position_Z;
$object_face_database[$face_counter + 7] = $top_face_position_X;
$object_face_database[$face_counter + 8] = $top_face_position_Y;
$object_face_database[$face_counter + 9] = $top_face_position_Z;
$object_face_database[$face_counter + 10] = $bottom_face_position_X;
$object_face_database[$face_counter + 11] = $bottom_face_position_Y;
$object_face_database[$face_counter + 12] = $bottom_face_position_Z;
$object_face_database[$face_counter + 13] = $front_face_position_X;
$object_face_database[$face_counter + 14] = $front_face_position_Y;
$object_face_database[$face_counter + 15] = $front_face_position_Z;
$object_face_database[$face_counter + 16] = $back_face_position_X;
$object_face_database[$face_counter + 17] = $back_face_position_Y;
$object_face_database[$face_counter + 18] = $back_face_position_Z;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
if($object_database[$data_counter] eq "sphere")
{
$left_face_position_X = $object_database[$data_counter + 3] - ($object_database[$data_counter + 6]);
$left_face_position_Y = $object_database[$data_counter + 4];
$left_face_position_Z = $object_database[$data_counter + 5];
$right_face_position_X = $object_database[$data_counter + 3] + ($object_database[$data_counter + 6]);
$right_face_position_Y = $object_database[$data_counter + 4];
$right_face_position_Z = $object_database[$data_counter + 5];
$top_face_position_X = $object_database[$data_counter + 3];
$top_face_position_Y = $object_database[$data_counter + 4] + ($object_database[$data_counter + 6]);
$top_face_position_Z = $object_database[$data_counter + 5];
$bottom_face_position_X = $object_database[$data_counter + 3];
$bottom_face_position_Y = $object_database[$data_counter + 4] - ($object_database[$data_counter + 6]);
$bottom_face_position_Z = $object_database[$data_counter + 5];
$front_face_position_X = $object_database[$data_counter + 3];
$front_face_position_Y = $object_database[$data_counter + 4];
$front_face_position_Z = $object_database[$data_counter + 5] + ($object_database[$data_counter + 6]);
$back_face_position_X = $object_database[$data_counter + 3];
$back_face_position_Y = $object_database[$data_counter + 4];
$back_face_position_Z = $object_database[$data_counter + 5] - ($object_database[$data_counter + 6]);
$object_face_database[$face_counter] = sphere;
$object_face_database[$face_counter + 1] = $left_face_position_X;
$object_face_database[$face_counter + 2] = $left_face_position_Y;
$object_face_database[$face_counter + 3] = $left_face_position_Z;
$object_face_database[$face_counter + 4] = $right_face_position_X;
$object_face_database[$face_counter + 5] = $right_face_position_Y;
$object_face_database[$face_counter + 6] = $right_face_position_Z;
$object_face_database[$face_counter + 7] = $top_face_position_X;
$object_face_database[$face_counter + 8] = $top_face_position_Y;
$object_face_database[$face_counter + 9] = $top_face_position_Z;
$object_face_database[$face_counter + 10] = $bottom_face_position_X;
$object_face_database[$face_counter + 11] = $bottom_face_position_Y;
$object_face_database[$face_counter + 12] = $bottom_face_position_Z;
$object_face_database[$face_counter + 13] = $front_face_position_X;
$object_face_database[$face_counter + 14] = $front_face_position_Y;
$object_face_database[$face_counter + 15] = $front_face_position_Z;
$object_face_database[$face_counter + 16] = $back_face_position_X;
$object_face_database[$face_counter + 17] = $back_face_position_Y;
$object_face_database[$face_counter + 18] = $back_face_position_Z;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
if($object_database[$data_counter] eq "cone")
{
$left_face_position_X = $object_database[$data_counter + 3] -
(($object_database[$data_counter + 6])-($object_database[$data_counter + 6]/2));
$left_face_position_Y = $object_database[$data_counter + 4];
$left_face_position_Z = $object_database[$data_counter + 5];
$right_face_position_X = $object_database[$data_counter + 3] +
(($object_database[$data_counter + 6])-($object_database[$data_counter + 6])/2);
$right_face_position_Y = $object_database[$data_counter + 4];
$right_face_position_Z = $object_database[$data_counter + 5];
$top_face_position_X = $object_database[$data_counter + 3];
$top_face_position_Y = $object_database[$data_counter + 4] + ($object_database[$data_counter + 7]/2);
$top_face_position_Z = $object_database[$data_counter + 5];
$bottom_face_position_X = $object_database[$data_counter + 3];
$bottom_face_position_Y = $object_database[$data_counter + 4] - ($object_database[$data_counter + 7]/2);
$bottom_face_position_Z = $object_database[$data_counter + 5];
$front_face_position_X = $object_database[$data_counter + 3];
$front_face_position_Y = $object_database[$data_counter + 4];
$front_face_position_Z = $object_database[$data_counter + 5] +
(($object_database[$data_counter + 6])-($object_database[$data_counter + 6]/2));
$back_face_position_X = $object_database[$data_counter + 3];
$back_face_position_Y = $object_database[$data_counter + 4];
$back_face_position_Z = $object_database[$data_counter + 5] -
(($object_database[$data_counter + 6])-($object_database[$data_counter + 6]/2));
$object_face_database[$face_counter] = cone;
$object_face_database[$face_counter + 1] = $left_face_position_X;
$object_face_database[$face_counter + 2] = $left_face_position_Y;
$object_face_database[$face_counter + 3] = $left_face_position_Z;
$object_face_database[$face_counter + 4] = $right_face_position_X;
$object_face_database[$face_counter + 5] = $right_face_position_Y;
$object_face_database[$face_counter + 6] = $right_face_position_Z;
$object_face_database[$face_counter + 7] = $top_face_position_X;
$object_face_database[$face_counter + 8] = $top_face_position_Y;
$object_face_database[$face_counter + 9] = $top_face_position_Z;
$object_face_database[$face_counter + 10] = $bottom_face_position_X;
$object_face_database[$face_counter + 11] = $bottom_face_position_Y;
$object_face_database[$face_counter + 12] = $bottom_face_position_Z;
$object_face_database[$face_counter + 13] = $front_face_position_X;
$object_face_database[$face_counter + 14] = $front_face_position_Y;
$object_face_database[$face_counter + 15] = $front_face_position_Z;
$object_face_database[$face_counter + 16] = $back_face_position_X;
$object_face_database[$face_counter + 17] = $back_face_position_Y;
$object_face_database[$face_counter + 18] = $back_face_position_Z;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
$object_database[$data_counter + 10] = 1;
}
}
if (($object_database[$data_counter] eq "line")||($object_database[$data_counter] eq "arrow"))
{
if ($object_database[$data_counter] eq "line")
{
$object_face_database[$face_counter] = line;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
if ($object_database[$data_counter] eq "arrow")
{
$object_face_database[$face_counter] = arrow;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
}
if ($object_database[$data_counter + 10] eq 3)
{
print "this is a first line, labels are not defined, Aborting\n";
exit;
}
if ($object_database[$data_counter + 10] eq 2)
{
my ($temp);
$temp = $object_database[$data_counter + 3];
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 3] = $temp -
$object_database[$data_counter + 26]/2;
$object_database[$data_counter + 6] = $temp +
$object_database[$data_counter + 26]/2;
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 3] = $temp -
($def_var_database[17]/2);
$object_database[$data_counter + 6] = $temp +
($def_var_database[17]/2);
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 3] = $temp -
($def_var_database[19]/2);
$object_database[$data_counter + 6] = $temp +
($def_var_database[19]/2);
}
}
$object_database[$data_counter + 7] = $object_database[$data_counter + 4];
$object_database[$data_counter + 8] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 1] = $object_database[$data_counter + 3];
$object_face_database[$face_counter + 2] = $object_database[$data_counter + 4];
$object_face_database[$face_counter + 3] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 4] = $object_database[$data_counter + 6];
$object_face_database[$face_counter + 5] = $object_database[$data_counter + 7];
$object_face_database[$face_counter + 6] = $object_database[$data_counter + 8];
}
if ($object_database[$data_counter + 10] eq 1)
{
$object_face_database[$face_counter + 1] = $object_database[$data_counter + 3];
$object_face_database[$face_counter + 2] = $object_database[$data_counter + 4];
$object_face_database[$face_counter + 3] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 4] = $object_database[$data_counter + 6];
$object_face_database[$face_counter + 5] = $object_database[$data_counter + 7];
$object_face_database[$face_counter + 6] = $object_database[$data_counter + 8];
}
else
{
if ($object_database[$data_counter + 16] eq 1)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 6] = -10 +
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 6] = -10 +
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 6] = -10 +
$def_var_database[19];
}
}
$object_database[$data_counter + 7] = 1;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$object_database[$data_counter + 3] = -5;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 6] = -5 -
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 6] = -5 -
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 6] = -5 -
$def_var_database[19];
}
}
$object_database[$data_counter + 7] = 1;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 7] = 1 +
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 7] = 1 +
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 7] = 1 +
$def_var_database[19];
}
}
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 7] = 1 -
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 7] = 1 -
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 7] = 1 -
$def_var_database[19];
}
}
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 8] = 1 +
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 8] = 1 +
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 8] = 1 +
$def_var_database[19];
}
}
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1;
if ($object_database[$data_counter + 26] ne "")
{
$object_database[$data_counter + 8] = 1 -
$object_database[$data_counter + 26];
}
else
{
if ($object_database[$data_counter] eq "arrow")
{
$object_database[$data_counter + 8] = 1 -
$def_var_database[17];
}
if ($object_database[$data_counter] eq "line")
{
$object_database[$data_counter + 8] = 1 -
$def_var_database[19];
}
}
}
$object_face_database[$face_counter + 1] = $object_database[$data_counter + 3];
$object_face_database[$face_counter + 2] = $object_database[$data_counter + 4];
$object_face_database[$face_counter + 3] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 4] = $object_database[$data_counter + 6];
$object_face_database[$face_counter + 5] = $object_database[$data_counter + 7];
$object_face_database[$face_counter + 6] = $object_database[$data_counter + 8];
}
$object_database[$data_counter + 10] = 1;
}
if ($object_database[$data_counter] eq "arc")
{
$object_face_database[$face_counter] = arc;
$object_face_database[$face_counter + 19] = $object_database[$data_counter + 17];
if ($object_database[$data_counter + 10] eq 3)
{
print "this is a first line, labels are not defined, Aborting\n";
exit;
}
if ($object_database[$data_counter + 10] eq 1)
{
$object_face_database[$face_counter + 1] = $object_database[$data_counter + 3];
$object_face_database[$face_counter + 2] = $object_database[$data_counter + 4];
$object_face_database[$face_counter + 3] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 4] = $object_database[$data_counter + 6];
$object_face_database[$face_counter + 5] = $object_database[$data_counter + 7];
$object_face_database[$face_counter + 6] = $object_database[$data_counter + 8];
}
else
{
if (($object_database[$data_counter + 19] eq "ccw")||
($object_database[$data_counter + 19] eq ""))
{
if ($object_database[$data_counter + 16] eq 1)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 + $arrowlength/2;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 - $arrowlength/2;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 - $arrowlength/2;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 + $arrowlength/2;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1 + $arrowlength/2;
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1 - $arrowlength/2;
}
}
if ($object_database[$data_counter + 19] eq "cw")
{
if ($object_database[$data_counter + 16] eq 1)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 + $arrowlength/2;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 - $arrowlength/2;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 + $arrowlength/2;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10 - $arrowlength/2;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1;
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1 - $arrowlength/2;
$object_database[$data_counter + 8] = 1 + $arrowlength/2;
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$object_database[$data_counter + 3] = -10;
$object_database[$data_counter + 4] = 1;
$object_database[$data_counter + 5] = 1;
$object_database[$data_counter + 6] = -10;
$object_database[$data_counter + 7] = 1 + $arrowlength/2;
$object_database[$data_counter + 8] = 1 - $arrowlength/2;
}
}
$object_face_database[$face_counter + 1] = $object_database[$data_counter + 3];
$object_face_database[$face_counter + 2] = $object_database[$data_counter + 4];
$object_face_database[$face_counter + 3] = $object_database[$data_counter + 5];
$object_face_database[$face_counter + 4] = $object_database[$data_counter + 6];
$object_face_database[$face_counter + 5] = $object_database[$data_counter + 7];
$object_face_database[$face_counter + 6] = $object_database[$data_counter + 8];
}
$object_database[$data_counter + 10] = 1;
}
###############Go to the next object in the database
$data_counter += 50;
$face_counter += 50;
$size_object_database = @object_database;
while ($data_counter <= $size_object_database)
{
if (($object_database[$data_counter] eq "box")||($object_database[$data_counter] eq "cylinder") ||
($object_database[$data_counter] eq "sphere") || ($object_database[$data_counter] eq "cone"))
{
if ($object_database[$data_counter + 10] eq 1)
{
calc_faces();
}
else
{
if (($object_database[$data_counter -50] eq "box")||
($object_database[$data_counter -50] eq "cylinder")||
($object_database[$data_counter -50] eq "sphere")||
($object_database[$data_counter -50] eq "cone"))
{
if ($object_database[$data_counter] eq "box")
{
$object_face_database[$face_counter] = box;
my ($new_position);
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] + (($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 +5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 +6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 1] - (($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 2];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 3];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 8] + (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 7];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 9];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 11] - (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 10];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 12];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 15] + (($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 13];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 14];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 18] - (($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 16];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 17];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
elsif ($object_database[$data_counter] eq "cylinder")
{
$object_face_database[$face_counter] = cylinder;
my ($new_position);
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 +5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 +6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 1] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 2];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 3];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 8] + (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 7];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 9];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 11] - (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 10];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 12];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 15] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 13];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 14];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 18] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 16];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 17];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
elsif ($object_database[$data_counter] eq "sphere")
{
$object_face_database[$face_counter] = sphere;
my ($new_position);
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 +5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 +6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 1] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 2];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 3];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 8] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 7];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 9];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 11] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 10];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 12];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 15] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 13];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 14];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 18] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 16];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 17];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
elsif ($object_database[$data_counter] eq "cone")
{
$object_face_database[$face_counter] = cone;
my ($new_position);
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 +5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 +6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 1] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 2];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 3];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 8] + (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 7];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 9];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 11] - (($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 10];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 12];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 15] + $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 13];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 14];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 18] - $object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 16];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 17];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
}
if (($object_database[$data_counter -50] eq "line")||
($object_database[$data_counter -50] eq "arrow"))
{
my ($new_position);
if ($object_database[$data_counter] eq "box")
{
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] +
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 4] -
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 5] +
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 5] -
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 6] +
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 6] -
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
if ($object_database[$data_counter] eq "cylinder")
{
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 4] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 5] +
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 5] -
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 6] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 6] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
if ($object_database[$data_counter] eq "sphere")
{
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 4] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 5] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 5] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 6] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 6] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
if ($object_database[$data_counter] eq "cone")
{
if ($object_database[$data_counter + 16] eq 1)
{
$new_position = $object_face_database[$face_counter - 50 + 4] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 2)
{
$new_position = $object_face_database[$face_counter - 50 + 4] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $new_position;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 3)
{
$new_position = $object_face_database[$face_counter - 50 + 5] +
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 4)
{
$new_position = $object_face_database[$face_counter - 50 + 5] -
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 5)
{
$new_position = $object_face_database[$face_counter - 50 + 6] +
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
elsif ($object_database[$data_counter + 16] eq 6)
{
$new_position = $object_face_database[$face_counter - 50 + 6] -
$object_database[$data_counter + 6];
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position;
calc_faces();
}
}
}
if ($object_database[$data_counter -50] eq "arc")
{
my ($new_position_X);
my ($new_position_Y);
my ($new_position_Z);
if ($object_database[$data_counter] eq "box")
{
if ($object_database[$data_counter + 16] eq 1)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_Y = $object_face_database[$face_counter - 50 + 5] +
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position_Y;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_Y = $object_face_database[$face_counter - 50 + 5] -
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position_Y;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
}
elsif ($object_database[$data_counter + 16] eq 2)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_Y = $object_face_database[$face_counter - 50 + 5] -
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position_Y;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_Y = $object_face_database[$face_counter - 50 + 5] +
(($object_database[$data_counter + 7])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $new_position_Y;
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
}
elsif ($object_database[$data_counter + 16] eq 3)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_X = $object_face_database[$face_counter - 50 + 4] -
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position_X;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_X = $object_face_database[$face_counter - 50 + 4] +
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position_X;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
}
elsif ($object_database[$data_counter + 16] eq 4)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_X = $object_face_database[$face_counter - 50 + 4] +
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position_X;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_X = $object_face_database[$face_counter - 50 + 4] -
(($object_database[$data_counter + 6])/2);
$object_database[$data_counter + 3] = $new_position_X;
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 6];
calc_faces();
}
}
elsif ($object_database[$data_counter + 16] eq 5)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_Z = $object_face_database[$face_counter - 50 + 6] +
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position_Z;
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_Z = $object_face_database[$face_counter - 50 + 6] +
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position_Z;
calc_faces();
}
}
elsif ($object_database[$data_counter + 16] eq 6)
{
if (($object_database[$data_counter -50 + 19] eq "ccw")||
($object_database[$data_counter -50 + 19] eq ""))
{
$new_position_Z = $object_face_database[$face_counter - 50 + 6] -
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position_Z;
calc_faces();
}
elsif ($object_database[$data_counter -50 + 19] eq "cw")
{
$new_position_Z = $object_face_database[$face_counter - 50 + 6] -
(($object_database[$data_counter + 8])/2);
$object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 4];
$object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 5];
$object_database[$data_counter + 5] = $new_position_Z;
calc_faces();