#!/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"; print OUTPUT "Transform {\n"; print OUTPUT "translation -20 10 -30\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; print OUTPUT "material Material {\n"; print OUTPUT "diffuseColor 1 0 0\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry Text {\n"; print OUTPUT "string \"Copyright 2000. Jasmeet Bhatia and Dr. Paul Juell \"\n"; print OUTPUT "fontStyle FontStyle {\n"; print OUTPUT "size 2\n"; print OUTPUT "family \"SERIF\"\n"; print OUTPUT "style \"ITALIC\"\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; print OUTPUT "Transform {\n"; print OUTPUT "translation -20 8 -30\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; print OUTPUT "material Material {\n"; print OUTPUT "diffuseColor 1 0 0\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry Text {\n"; print OUTPUT "string \"WWWIC, NDSU, Fargo ND\"\n"; print OUTPUT "fontStyle FontStyle {\n"; print OUTPUT "size 2\n"; print OUTPUT "family \"SERIF\"\n"; print OUTPUT "style \"ITALIC\"\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; print OUTPUT "Transform {\n"; print OUTPUT "translation -20 6 -30\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; print OUTPUT "material Material {\n"; print OUTPUT "diffuseColor 1 0 0\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry Text {\n"; print OUTPUT "string \"$date\"\n"; print OUTPUT "fontStyle FontStyle {\n"; print OUTPUT "size 2\n"; print OUTPUT "family \"SERIF\"\n"; print OUTPUT "style \"ITALIC\"\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; @object_database; @object_face_database; @def_var_database; @text_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; $object_number = 0; $line_number = 0; $dir_mode = 1; $data_counter = 0; $var_counter = 18; $objectXCord = -10; $objectYCord = 1; $objectZCord = 1 ; 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/^(boxwid)(\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); } #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); } #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); 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/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); 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/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; } else { } 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; } } $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]; $object_database[$data_counter + 3] = $temp - $arrowlength/2; $object_database[$data_counter + 6] = $temp + $arrowlength/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; $object_database[$data_counter + 6] = -10 + $arrowlength; $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; $object_database[$data_counter + 6] = -5 - $arrowlength; $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; $object_database[$data_counter + 7] = 1 + $arrowlength; $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; $object_database[$data_counter + 7] = 1 - $arrowlength; $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; $object_database[$data_counter + 8] = 1 + $arrowlength; } 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; $object_database[$data_counter + 8] = 1 - $arrowlength; } $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(); } } } if ($object_database[$data_counter] eq "cylinder") { 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]; $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]; $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]; $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]; $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 + 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_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 + 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_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 + 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_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 + 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_Z; calc_faces(); } } } if ($object_database[$data_counter] eq "sphere") { 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 + 6]; $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 + 6]; $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 + 6]; $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 + 6]; $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]; $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]; $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]; $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]; $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 ""))