#!/usr/local/bin/perl if ($#ARGV !=1) { die "Usage: $0 inputfile outputfile\n"; } ($infile,$outfile) = @ARGV; 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"; @object_database; @object_face_database; @def_var_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; print "$box_image\n"; @object_database[$counter + 12] = $box_image; } if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $box_transparency = $2; print "$box_transparency\n"; @object_database[$counter + 13] = $box_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $box_anchor = $2; print "$box_anchor\n"; @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/\"(.*)\"/) { $box_text = $1; @object_database[$counter + 11] = $box_text; } 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; print "$cylinder_image\n"; @object_database[$counter + 12] = $cylinder_image; } if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $cylinder_transparency = $2; print "$cylinder_transparency\n"; @object_database[$counter + 13] = $cylinder_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $cylinder_anchor = $2; print "$cylinder_anchor\n"; @object_database[$counter + 14] = $cylinder_anchor; } if ($line =~ m/\"(.*)\"/) { $cylinder_text = $1; @object_database[$counter + 11] = $cylinder_text; } 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; print "$sphere_image\n"; @object_database[$counter + 12] = $sphere_image; } if ($line =~ m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $sphere_transparency = $2; print "$sphere_transparency\n"; @object_database[$counter + 13] = $sphere_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $sphere_anchor = $2; print "$sphere_anchor\n"; @object_database[$counter + 14] = $sphere_anchor; } if ($line =~ m/\"(.*)\"/) { $sphere_text = $1; @object_database[$counter + 11] = $sphere_text; } 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; print "$cone_image\n"; @object_database[$counter + 12] = $cone_image; } if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $cone_transparency = $2; print "$cone_transparency\n"; @object_database[$counter + 13] = $cone_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $cone_anchor = $2; print "$cone_anchor\n"; @object_database[$counter + 14] = $cone_anchor; } if ($line =~ m/\"(.*)\"/) { $cone_text = $1; @object_database[$counter + 11] = $cone_text; } 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); if ($line =~ m/imagetexture(\s+)\'(.*)\'/i) { $line_image = $2; print "$line_image\n"; @object_database[$counter + 12] = $line_image; } if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $line_transparency = $2; print "$line_transparency\n"; @object_database[$counter + 13] = $line_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $line_anchor = $2; print "$line_anchor\n"; @object_database[$counter + 14] = $line_anchor; } if ($line =~ m/\"(.*)\"/) { $line_text = $1; @object_database[$counter + 11] = $line_text; } 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; print "$line_start_label\n"; print "$line_end_label\n"; print "$line_start_label_pos\n"; print "$line_end_label_pos\n"; @object_database[$counter + 10] = 3; } } #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); if ($line =~ m/imagetexture(\s+)\'(.*)\'/i) { $arrow_image = $2; print "$arrow_image\n"; @object_database[$counter + 12] = $arrow_image; } if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $arrow_transparency = $2; print "$arrow_transparency\n"; @object_database[$counter + 13] = $arrow_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $arrow_anchor = $2; print "$arrow_anchor\n"; @object_database[$counter + 14] = $arrow_anchor; } if ($line =~ m/\"(.*)\"/) { $arrow_text = $1; @object_database[$counter + 11] = $arrow_text; } 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; print "$arrow_start_label\n"; print "$arrow_end_label\n"; print "$arrow_start_label_pos\n"; print "$arrow_end_label_pos\n"; @object_database[$counter + 10] = 3; } } $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); if ($line =~ m/imagetexture(\s+)\'(.*)\'/i) { $arc_image = $2; print "$arc_image\n"; @object_database[$counter + 12] = $arc_image; } if ($line =~m/transparency(\s+)([0-9]+(\.[0-9]*)?|\.[0-9]+)/i) { $arc_transparency = $2; print "$line_transparency\n"; @object_database[$counter + 13] = $arc_transparency; } if ($line =~ m/anchor(\s+)\#(.*)\#/i) { $arc_anchor = $2; print "$arc_anchor\n"; @object_database[$counter + 14] = $arc_anchor; } if ($line =~ m/\"(.*)\"/) { $arc_text = $1; @object_database[$counter + 11] = $arc_text; } 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; print "$arc_radius\n"; } 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; print "$arc_start_label\n"; print "$arc_end_label\n"; print "$arc_start_label_pos\n"; print "$arc_end_label_pos\n"; @object_database[$counter + 10] = 3; } if ($line =~ m/->/i) { @object_database[$counter + 20] = 1; print "we have an arc arrow\n"; } else { print "we have an arc line\n"; } if ($line =~ m/(cw|ccw)/i) { $arc_dir = $1; $arc_dir =~ y/A-Z/a-z/; @object_database[$counter + 19] = $arc_dir; print "$arc_dir\n"; } $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 { $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; $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] eq "line")||($object_database[$data_counter] eq "arrow")) { if ($object_database[$data_counter] eq "line") { $object_face_database[$face_counter] = line; } if ($object_database[$data_counter] eq "arrow") { $object_face_database[$face_counter] = arrow; } if ($object_database[$data_counter + 10] eq 3) { my ($face_copy_counter1); my ($face_copy_counter2); my ($label1_search_stop_counter); my ($label2_search_stop_counter); $face_copy_counter1 = $face_counter; $face_copy_counter2 = $face_counter; $label1_search_stop_counter = 0; $label2_search_stop_counter = 0; while (($face_copy_counter1 >= 0) && ($label1_search_stop_counter eq 0)) { $face_copy_counter1 = $face_copy_counter1 - 50; if ($face_copy_counter1 < 0) { print "label $object_database[$data_counter + 21] not found\n"; print "Aborting\n"; exit; } if ($object_database[$data_counter + 21] eq $object_face_database[$face_copy_counter1 + 19]) { $label1_search_stop_counter = 1; if ($object_database[$data_counter + 22] eq "left") { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 1]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 2]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 3]; $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]; } elsif ($object_database[$data_counter + 22] eq "right") { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 4]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 5]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 6]; $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]; } elsif ($object_database[$data_counter + 22] eq "top") { if (($object_face_database[$face_copy_counter1] eq "line") || ($object_face_database[$face_copy_counter1] eq "arrow")) { print "can't specify top of line or arrow\n"; print "use only right or left\n"; print "Aborting\n"; exit; } else { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 7]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 8]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 9]; $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]; } } elsif ($object_database[$data_counter + 22] eq "bottom") { if (($object_face_database[$face_copy_counter1] eq "line") || ($object_face_database[$face_copy_counter1] eq "arrow")) { print "can't specify bottom of line or arrow\n"; print "use only right or left\n"; print "Aborting\n"; exit; } else { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 10]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 11]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 12]; $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]; } } elsif ($object_database[$data_counter + 22] eq "front") { if (($object_face_database[$face_copy_counter1] eq "line") || ($object_face_database[$face_copy_counter1] eq "arrow")) { print "can't specify front of line or arrow\n"; print "use only right or left\n"; print "Aborting\n"; exit; } else { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 13]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 14]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 15]; $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]; } } elsif ($object_database[$data_counter + 22] eq "back") { if (($object_face_database[$face_copy_counter1] eq "line") || ($object_face_database[$face_copy_counter1] eq "arrow")) { print "can't specify back of line or arrow\n"; print "use only right or left\n"; print "Aborting\n"; exit; } else { $object_database[$data_counter + 3] = $object_face_database[$face_copy_counter1 + 16]; $object_database[$data_counter + 4] = $object_face_database[$face_copy_counter1 + 17]; $object_database[$data_counter + 5] = $object_face_database[$face_copy_counter1 + 18]; $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]; } } } } while (($face_copy_counter2 >= 0) && ($label2_search_stop_counter eq 0)) { $face_copy_counter2 -= 50; if ($face_copy_counter2 < 0) { print "label $object_database[$data_counter + 23] not found\n"; print "Aborting\n"; exit; } if ($object_database[$data_counter + 23] eq $object_face_database[$face_copy_counter2 + 19]) { $label2_search_stop_counter = 1; if ($object_database[$data_counter + 24] eq "left") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 1]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 2]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 3]; $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]; } elsif ($object_database[$data_counter + 24] eq "right") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 4]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 5]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 6]; $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]; } elsif ($object_database[$data_counter + 24] eq "top") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 7]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 8]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 9]; $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]; } elsif ($object_database[$data_counter + 24] eq "bottom") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 10]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 11]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 12]; $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]; } elsif ($object_database[$data_counter + 24] eq "front") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 13]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 14]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 15]; $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]; } elsif ($object_database[$data_counter + 24] eq "back") { $object_database[$data_counter + 6] = $object_face_database[$face_copy_counter2 + 16]; $object_database[$data_counter + 7] = $object_face_database[$face_copy_counter2 + 17]; $object_database[$data_counter + 8] = $object_face_database[$face_copy_counter2 + 18]; $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]; } } } } elsif ($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]; } elsif ($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 -50] eq "box")|| ($object_database[$data_counter -50] eq "cylinder")|| ($object_database[$data_counter -50] eq "sphere")|| ($object_database[$data_counter -50] eq "cone")|| ($object_database[$data_counter -50] eq "line")|| ($object_database[$data_counter -50] eq "arrow")) { if ($object_database[$data_counter + 16] eq 1) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 4] + $arrowlength; $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] = $object_face_database[$face_counter - 50 + 6]; $object_database[$data_counter + 6] = $new_position; $object_database[$data_counter + 7] = $object_face_database[$face_counter - 50 + 5]; $object_database[$data_counter + 8] = $object_face_database[$face_counter - 50 + 6]; $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]; } elsif ($object_database[$data_counter + 16] eq 2) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 1] - $arrowlength; $object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 1]; $object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 2]; $object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 3]; $object_database[$data_counter + 6] = $new_position; $object_database[$data_counter + 7] = $object_face_database[$face_counter - 50 + 2]; $object_database[$data_counter + 8] = $object_face_database[$face_counter - 50 + 3]; $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]; } elsif ($object_database[$data_counter + 16] eq 3) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 8] + $arrowlength; $object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 7]; $object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 8]; $object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 9]; $object_database[$data_counter + 6] = $object_face_database[$face_counter - 50 + 7]; $object_database[$data_counter + 7] = $new_position; $object_database[$data_counter + 8] = $object_face_database[$face_counter - 50 + 9]; $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]; } elsif ($object_database[$data_counter + 16] eq 4) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 11] - $arrowlength; $object_database[$data_counter + 3] = $object_face_database[$face_counter - 50 + 10]; $object_database[$data_counter + 4] = $object_face_database[$face_counter - 50 + 11]; $object_database[$data_counter + 5] = $object_face_database[$face_counter - 50 + 12]; $object_database[$data_counter + 6] = $object_face_database[$face_counter - 50 + 10]; $object_database[$data_counter + 7] = $new_position; $object_database[$data_counter + 8] = $object_face_database[$face_counter - 50 + 12]; $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]; } elsif ($object_database[$data_counter + 16] eq 5) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 15] + $arrowlength; $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] = $object_face_database[$face_counter - 50 + 15]; $object_database[$data_counter + 6] = $object_face_database[$face_counter - 50 + 13]; $object_database[$data_counter + 7] = $object_face_database[$face_counter - 50 + 14]; $object_database[$data_counter + 8] = $new_position; $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]; } elsif ($object_database[$data_counter + 16] eq 6) { my ($new_position); $new_position = $object_face_database[$face_counter - 50 + 18] - $arrowlength; $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] = $object_face_database[$face_counter - 50 + 18]; $object_database[$data_counter + 6] = $object_face_database[$face_counter - 50 + 16]; $object_database[$data_counter + 7] = $object_face_database[$face_counter - 50 + 17]; $object_database[$data_counter + 8] = $new_position; $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; $data_counter += 50; $face_counter += 50; } print "@object_database\n\n\n\n"; print "@object_face_database\n\n\n"; print "$size_object_database\n"; print "$data_counter\n"; print "$face_counter\n"; $data_counter = 0; $face_counter = 0; while ($data_counter <= $size_object_database) { if ($object_database[$data_counter] eq "box") { draw_box ("Box", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); } if ($object_database[$data_counter] eq "cylinder") { draw_cylinder ("Cylinder", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); } if ($object_database[$data_counter] eq "sphere") { draw_sphere ("Sphere", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); } if ($object_database[$data_counter] eq "cone") { draw_cone ("Cone", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); } if ($object_database[$data_counter] eq "line") { draw_line ("IndexedLineSet", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); } if ($object_database[$data_counter] eq "arrow") { draw_line ("IndexedLineSet", $object_database[$data_counter + 1], $object_database[$data_counter + 2], $object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8], $object_database[$data_counter + 9], $object_database[$data_counter + 10], $object_database[$data_counter + 11], $object_database[$data_counter + 12], $object_database[$data_counter + 13], $object_database[$data_counter + 14]); draw_arrow_head ($object_database[$data_counter + 3], $object_database[$data_counter + 4], $object_database[$data_counter + 5], $object_database[$data_counter + 6], $object_database[$data_counter + 7], $object_database[$data_counter + 8]); } $data_counter += 50; $face_counter += 50; } sub draw_box { my ($length_label); $length_label = length($_[11]); @box_color_array = draw_object_color($_[9]); if ($_[14] ne "") { print OUTPUT "Anchor {\n"; print OUTPUT "children [\n"; } print OUTPUT "Transform {\n"; print OUTPUT "translation $_[3] $_[4] $_[5]\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; if ($_[12] ne "") { print OUTPUT "texture ImageTexture {url \"$_[12]\"}\n"; } print OUTPUT "material Material {\n"; print OUTPUT "diffuseColor "; print OUTPUT "$box_color_array[0] $box_color_array[1] $box_color_array[2]\n"; if ($_[13] ne "") { print OUTPUT "transparency $_[13]\n"; } print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry "; print OUTPUT "$_[0] {size $_[6], $_[7], $_[8]}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; if ($_[14] ne "") { print OUTPUT "]\n"; print OUTPUT "description \"$_[14]\"\n"; print OUTPUT "url \"$_[14]\"\n"; print OUTPUT "}\n"; } if ($_[11] ne "") { draw_object_text($_[3], $_[4], $_[5], $_[6], $_[7], $_[8], $_[11], $length_label, "box"); } generate_viewpoint($_[3], $_[4], $_[5], "box"); } sub size_box { if ($_[0] ne "") { $object_database[$_[3] + 6] = $_[0]; } else { $object_database[$_[3] + 6] = $def_var_database[1]; } if ($_[1] ne "") { $object_database[$_[3] + 7] = $_[1]; } else { $object_database[$_[3] + 7] = $def_var_database[3]; } if ($_[2] ne "") { $object_database[$_[3] + 8] = $_[2]; } else { $object_database[$_[3] + 8] = $def_var_database[5]; } } sub draw_cylinder { my ($length_label); $length_label = length($_[11]); @cylinder_color_array = draw_object_color($_[9]); if ($_[14] ne "") { print OUTPUT "Anchor {\n"; print OUTPUT "children [\n"; } print OUTPUT "Transform {\n"; print OUTPUT "translation $_[3] $_[4] $_[5]\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; if ($_[12] ne "") { print OUTPUT "texture ImageTexture {url \"$_[12]\"}\n"; } print OUTPUT "material Material {\n"; if ($_[13] ne "") { print OUTPUT "transparency $_[13]\n"; } print OUTPUT "diffuseColor "; print OUTPUT "$cylinder_color_array[0] $cylinder_color_array[1] $cylinder_color_array[2]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry "; print OUTPUT "$_[0] {\n"; print OUTPUT "radius $_[6]\n"; print OUTPUT "height $_[7]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; if ($_[14] ne "") { print OUTPUT "]\n"; print OUTPUT "description \"$_[14]\"\n"; print OUTPUT "url \"$_[14]\"\n"; print OUTPUT "}\n"; } if ($_[11] ne "") { draw_object_text($_[3], $_[4], $_[5], $_[6], $_[7],$_[8],$_[11], $length_label, "cylinder"); } generate_viewpoint($_[3], $_[4], $_[5], "cylinder"); } sub size_cylinder { if ($_[0] ne "") { $object_database[$_[2] + 6] = $_[0]; } else { $object_database[$_[2] + 6] = $def_var_database[7]; } if ($_[1] ne "") { $object_database[$_[2] + 7] = $_[1]; } else { $object_database[$_[2] + 7] = $def_var_database[9]; } } sub draw_sphere { my ($length_label); $length_label = length($_[11]); @sphere_color_array = draw_object_color($_[9]); if ($_[14] ne "") { print OUTPUT "Anchor {\n"; print OUTPUT "children [\n"; } print OUTPUT "Transform {\n"; print OUTPUT "translation $_[3] $_[4] $_[5]\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; if ($_[12] ne "") { print OUTPUT "texture ImageTexture {url \"$_[12]\"}\n"; } print OUTPUT "material Material {\n"; if ($_[13] ne "") { print OUTPUT "transparency $_[13]\n"; } print OUTPUT "diffuseColor "; print OUTPUT "$sphere_color_array[0] $sphere_color_array[1] $sphere_color_array[2]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry "; print OUTPUT "$_[0] {\n"; print OUTPUT "radius "; print OUTPUT "$_[6]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; if ($_[14] ne "") { print OUTPUT "]\n"; print OUTPUT "description \"$_[14]\"\n"; print OUTPUT "url \"$_[14]\"\n"; print OUTPUT "}\n"; } if ($_[11] ne "") { draw_object_text($_[3], $_[4], $_[5], $_[6], $_[7], $_[8], $_[11], $length_label, "sphere"); } generate_viewpoint($_[3], $_[4], $_[5], "sphere"); } sub size_sphere { if ($_[0] ne "") { $object_database[$_[1] + 6] = $_[0]; } else { $object_database[$_[1] + 6] = $def_var_database[11]; } } sub draw_cone { my ($length_label); $length_label = length($_[11]); @cone_color_array = draw_object_color($_[9]); if ($_[14] ne "") { print OUTPUT "Anchor {\n"; print OUTPUT "children [\n"; } print OUTPUT "Transform {\n"; print OUTPUT "translation $_[3] $_[4] $_[5]\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; if ($_[12] ne "") { print OUTPUT "texture ImageTexture {url \"$_[12]\"}\n"; } print OUTPUT "material Material {\n"; if ($_[13] ne "") { print OUTPUT "transparency $_[13]\n"; } print OUTPUT "diffuseColor "; print OUTPUT "$cone_color_array[0] $cone_color_array[1] $cone_color_array[2]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry "; print OUTPUT "$_[0] {\n"; print OUTPUT "bottomRadius $_[6]\n"; print OUTPUT "height $_[7]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; if ($_[14] ne "") { print OUTPUT "]\n"; print OUTPUT "description \"$_[14]\"\n"; print OUTPUT "url \"$_[14]\"\n"; print OUTPUT "}\n"; } if ($_[11] ne "") { draw_object_text($_[3], $_[4], $_[5], $_[6], $_[7], $_[8], $_[11], $length_label, "cone"); } generate_viewpoint($_[3], $_[4], $_[5], "cone"); } sub size_cone { if ($_[0] ne "") { $object_database[$_[2] + 6] = $_[0]; } else { $object_database[$_[2] + 6] = $def_var_database[13]; } if ($_[1] ne "") { $object_database[$_[2] + 7] = $_[1]; } else { $object_database[$_[2] + 7] = $def_var_database[15]; } } sub draw_line { my ($length_label); $length_label = length($_[11]); @line_color_array = draw_object_color($_[9]); if ($_[14] ne "") { print OUTPUT "Anchor {\n"; print OUTPUT "children [\n"; } print OUTPUT "Transform {\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "appearance Appearance {\n"; if ($_[12] ne "") { print OUTPUT "texture ImageTexture {url \"$_[12]\"}\n"; } print OUTPUT "material Material {\n"; if ($_[13] ne "") { print OUTPUT "transparency $_[13]\n"; } print OUTPUT "diffuseColor "; print OUTPUT "$line_color_array[0] $line_color_array[1] $line_color_array[2]\n"; print OUTPUT "emissiveColor "; print OUTPUT "$line_color_array[0] $line_color_array[1] $line_color_array[2]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "geometry "; print OUTPUT "$_[0] {\n"; print OUTPUT "coord Coordinate {\n"; print OUTPUT "point [\n"; print OUTPUT "$_[3] $_[4] $_[5], $_[6] $_[7] $_[8]\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; print OUTPUT "coordIndex [0, 1, -1]\n"; print OUTPUT "}\n"; print OUTPUT "}\n"; print OUTPUT "]\n"; print OUTPUT "}\n"; if ($_[14] ne "") { print OUTPUT "]\n"; print OUTPUT "description \"$_[14]\"\n"; print OUTPUT "url \"$_[14]\"\n"; print OUTPUT "}\n"; } # if ($_[11] ne "") # { draw_object_text($_[3], $_[4], $_[5], $_[6], $_[7], $_[8], $_[11], $length_label, "line"); # } } sub draw_object_text { if ($_[8] eq "box") { $text_position_X; $text_position_Z; $text_position_X = $_[0]-0.3; $text_position_Z = $_[2] + ($_[5]/2) + 0.05; } if (($_[8] eq "cylinder")||($_[8] eq "sphere")||($_[8] eq "cone")) { $text_position_X; $text_position_Z; $text_position_X = $_[0]-0.3; $text_position_Z = $_[2] + $_[3] + 0.05; } if ($_[8] eq "line") { $text_position_X; $text_position_Y; $text_position_Z; if (($_[1] == $_[4])&&($_[2] == $_[5])) { if ($_[3] > $_[0]) { $text_position_X = $_[0] + 0.2; $text_position_Y = $_[1] + 0.1; $text_position_Z = $_[2]; } else { $text_position_X = $_[3] + 0.2; $text_position_Y = $_[4] + 0.1; $text_position_Z = $_[5]; } } else { $text_position_X = ($_[0] + $_[3])/2; $text_position_Y = ($_[1] + $_[4])/2; $text_position_Z = ($_[2] + $_[5])/2; } print OUTPUT "Transform {\n"; print OUTPUT "translation $text_position_X $text_position_Y $text_position_Z\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "geometry Text {\n"; print OUTPUT "string \"$_[6]\"\n"; print OUTPUT "fontStyle FontStyle {\n"; print OUTPUT "size 0.5\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"; } if ($_[8] ne "line") { print OUTPUT "Transform {\n"; print OUTPUT "translation $text_position_X $_[1] $text_position_Z\n"; print OUTPUT "children [\n"; print OUTPUT "Shape {\n"; print OUTPUT "geometry Text {\n"; print OUTPUT "string \"$_[6]\"\n"; print OUTPUT "fontStyle FontStyle {\n"; print OUTPUT "size 0.5\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"; } } sub draw_object_color { @object_color; if ($_[0] eq "") { for ($i=0; $i < 3; $i++) { $object_color[$i] = 1; } } elsif ($_[0] eq "red") { $object_color[0] = 1; $object_color[1] = 0; $object_color[2] = 0; } elsif ($_[0] eq "green")