--- loncom/homework/imageresponse.pm 2004/02/18 00:23:01 1.48
+++ loncom/homework/imageresponse.pm 2004/03/15 22:09:52 1.52
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# image click response style
#
-# $Id: imageresponse.pm,v 1.48 2004/02/18 00:23:01 albertel Exp $
+# $Id: imageresponse.pm,v 1.52 2004/03/15 22:09:52 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -31,10 +31,11 @@
package Apache::imageresponse;
use strict;
-use Image::Magick;
-use Apache::randomlylabel;
-use Apache::londefdef;
+use Image::Magick();
+use Apache::randomlylabel();
+use Apache::londefdef();
use Apache::Constants qw(:common :http);
+use Apache::lonlocal;
BEGIN {
&Apache::lonxml::register('Apache::imageresponse',('imageresponse'));
@@ -49,6 +50,7 @@ sub start_imageresponse {
'polygon','conceptgroup'));
push (@Apache::lonxml::namespace,'imageresponse');
my $id = &Apache::response::start_response($parstack,$safeeval);
+ undef(%Apache::response::foilnames);
if ($target eq 'meta') {
$result=&Apache::response::meta_package_write('imageresponse');
} elsif ($target eq 'analyze') {
@@ -65,6 +67,7 @@ sub end_imageresponse {
&Apache::lonxml::deregister('Apache::imageresponse',('foilgroup','foil','text','image','rectangle','conceptgroup'));
my $result;
if ($target eq 'edit') { $result=&Apache::edit::end_table(); }
+ undef(%Apache::response::foilnames);
return $result;
}
@@ -112,13 +115,12 @@ sub prep_image {
my $part=$Apache::inputtags::part;
my $respid=$Apache::inputtags::response['-1'];
my $id=&Apache::loncommon::get_cgi_id();
- my %x;
+ my (%x,$i);
$x{"cgi.$id.BGIMG"}=&Apache::lonnet::escape($image);
my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"});
#draws 2 xs on the image at the clicked location
#one in white and then one in red on top of the one in white
if (defined($x) && $x=~/\S/ && defined($y) && $y =~/\S/) {
- $x{"cgi.$id.LINECOUNT"}=4;
my $length = 6;
my $width = 1;
my $extrawidth = 2;
@@ -127,18 +129,22 @@ sub prep_image {
my $ymin=($y-$length);
my $ymax=($y+$length);
- $x{"cgi.$id.LINE0"}=
- join(':',(($xmin),($ymin),($xmax),($ymax),
- "FFFFFF",($width+$extrawidth)));
- $x{"cgi.$id.LINE1"}=
- join(':',(($xmin),($ymax),($xmax),($ymin),
- "FFFFFF",($width+$extrawidth)));
- $x{"cgi.$id.LINE2"}=
- join(':',(($xmin),($ymin),($xmax),($ymax),
- "FF0000",($width)));
- $x{"cgi.$id.LINE3"}=
- join(':',(($xmin),($ymax),($xmax),($ymin),
- "FF0000",($width)));
+ $x{"cgi.$id.OBJTYPE"}.='LINE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymin),($xmax),($ymax),
+ "FFFFFF",($width+$extrawidth)));
+ $x{"cgi.$id.OBJTYPE"}.='LINE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin),
+ "FFFFFF",($width+$extrawidth)));
+ $x{"cgi.$id.OBJTYPE"}.='LINE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymin),($xmax),($ymax),
+ "FF0000",($width)));
+ $x{"cgi.$id.OBJTYPE"}.='LINE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin),
+ "FF0000",($width)));
}
if ($mode eq 'answer') {
my $width = 1;
@@ -146,20 +152,24 @@ sub prep_image {
my @areas = @{ $Apache::response::foilgroup{"$name.area"} };
foreach my $area (@areas) {
if ($area=~/^rectangle:/) {
+ $x{"cgi.$id.OBJTYPE"}.='RECTANGLE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
my ($x1,$y1,$x2,$y2)=
($area=~m/rectangle:\(([0-9]+),([0-9]+)\)\-\(([0-9]+),([0-9]+)\)/);
- my $i=$x{"cgi.$id.BOXCOUNT"}++;
- $x{"cgi.$id.BOX$i"}=join(':',($x1,$y1,$x2,$y2,"FFFFFF",
+ $x{"cgi.$id.OBJ$i"}=join(':',($x1,$y1,$x2,$y2,"FFFFFF",
($width+$extrawidth)));
- $i=$x{"cgi.$id.BOXCOUNT"}++;
- $x{"cgi.$id.BOX$i"}=join(':',($x1,$y1,$x2,$y2,"00FF00",$width));
+ $x{"cgi.$id.OBJTYPE"}.='RECTANGLE:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',($x1,$y1,$x2,$y2,"00FF00",$width));
} elsif ($area=~/^polygon:(.*)/) {
- my $i=$x{"cgi.$id.POLYCOUNT"}++;
- $x{"cgi.$id.POLYOPT$i"}=join(':',("FFFFFF",($width+$extrawidth)));
- $x{"cgi.$id.POLY$i"}=$1;
- $i=$x{"cgi.$id.POLYCOUNT"}++;
- $x{"cgi.$id.POLYOPT$i"}=join(':',("00FF00",$width));
- $x{"cgi.$id.POLY$i"}=$1;
+ $x{"cgi.$id.OBJTYPE"}.='POLYGON:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',("FFFFFF",($width+$extrawidth)));
+ $x{"cgi.$id.OBJEXTRA$i"}=$1;
+ $x{"cgi.$id.OBJTYPE"}.='POLYGON:';
+ $i=$x{"cgi.$id.OBJCOUNT"}++;
+ $x{"cgi.$id.OBJ$i"}=join(':',("00FF00",$width));
+ $x{"cgi.$id.OBJEXTRA$i"}=$1;
}
}
}
@@ -208,7 +218,7 @@ sub displayfoils {
sub clean_up_image {
my ($image)=@_;
if ($image =~ /\s*[_1] appears more than once. Foil names need to be unique.",$name));
+ }
+ $Apache::response::foilnames{$name}++;
if ( $Apache::imageresponse::conceptgroup
&& !&Apache::response::showallfoils()) {
push(@{ $Apache::response::conceptgroup{'names'} }, $name);