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