--- loncom/homework/imageresponse.pm 2004/01/15 19:51:30 1.45
+++ 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.45 2004/01/15 19:51:30 sakharuk Exp $
+# $Id: imageresponse.pm,v 1.52 2004/03/15 22:09:52 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -31,9 +31,11 @@
package Apache::imageresponse;
use strict;
-use Image::Magick;
-use Apache::randomlylabel;
+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'));
@@ -48,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') {
@@ -64,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;
}
@@ -111,28 +115,36 @@ sub prep_image {
my $part=$Apache::inputtags::part;
my $respid=$Apache::inputtags::response['-1'];
my $id=&Apache::loncommon::get_cgi_id();
- my %x;
- $x{"cgi.$id.BGIMG"}=$image;
+ 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) && defined($y)) {
- $x{"cgi.$id.LINECOUNT"}=4;
+ if (defined($x) && $x=~/\S/ && defined($y) && $y =~/\S/) {
my $length = 6;
my $width = 1;
my $extrawidth = 2;
- $x{"cgi.$id.LINE0"}=
- join(':',(($x-$length),($y-$length),($x+$length),($y+$length),
- "FFFFFF",($width+$extrawidth)));
- $x{"cgi.$id.LINE1"}=
- join(':',(($x-$length),($y+$length),($x+$length),($y-$length),
- "FFFFFF",($width+$extrawidth)));
- $x{"cgi.$id.LINE2"}=
- join(':',(($x-$length),($y-$length),($x+$length),($y+$length),
- "FF0000",($width)));
- $x{"cgi.$id.LINE3"}=
- join(':',(($x-$length),($y+$length),($x+$length),($y-$length),
- "FF0000",($width)));
+ my $xmin=($x-$length);
+ my $xmax=($x+$length);
+ my $ymin=($y-$length);
+ my $ymax=($y+$length);
+
+ $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;
@@ -140,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;
}
}
}
@@ -173,11 +189,8 @@ sub displayfoils {
my $image=$Apache::response::foilgroup{"$name.image"};
&Apache::lonxml::debug("image is $image");
if ( $target eq 'web' && $image !~ /^http:/ ) {
- $image=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$image);
- if (&Apache::lonnet::repcopy($image) ne OK) {
- $image='/home/httpd/html/adm/lonKaputt/lonlogo_broken.gif';
- }
- }
+ $image=&clean_up_image($image);
+ }
&Apache::lonxml::debug("image is $image");
if ( &Apache::response::show_answer() ) {
if ($target eq 'tex') {
@@ -202,6 +215,25 @@ sub displayfoils {
return $result;
}
+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);
@@ -469,15 +505,8 @@ sub end_image {
$Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
}
} else {
- my $temp_file;
- my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
- $temp_file = Apache::File->new('>>'.$filename);
- print $temp_file "$src\n";
- $newsrc=~s/\/home\/httpd\/html\/res//;
- $newsrc=~s/\/home\/([^\/]*)\/public_html\//\/$1\//;
- $newsrc=~s/\/\.\//\//;
- $newsrc=~s/\/([^\/]+)\.(ps|eps)/\//;
- $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ #care about eps dynamical generation
+ $Apache::response::foilgroup{"$name.image"}='\vskip 0 mm '.&Apache::londefdef::eps_generation($src,$file,$width_param);
}
}
return $result;
@@ -601,6 +630,7 @@ sub end_polygon {
$target eq 'analyze') {
my $name = $Apache::imageresponse::curname;
my $area = &Apache::lonxml::endredirection;
+ $area=~s/\s*//g;
&Apache::lonxml::debug("out is $area for $name");
if ( $Apache::imageresponse::conceptgroup
&& !&Apache::response::showallfoils()) {