--- loncom/homework/imageresponse.pm 2004/02/23 23:55:40 1.49 +++ loncom/homework/imageresponse.pm 2004/11/13 16:28:21 1.57 @@ -1,8 +1,7 @@ - # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.49 2004/02/23 23:55:40 albertel Exp $ +# $Id: imageresponse.pm,v 1.57 2004/11/13 16:28:21 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,10 +30,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 +49,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 +66,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; } @@ -72,7 +74,7 @@ sub end_imageresponse { sub start_foilgroup { %Apache::response::foilgroup=(); $Apache::imageresponse::conceptgroup=0; - &Apache::response::setrandomnumber(); + &Apache::response::pushrandomnumber(); return ''; } @@ -82,7 +84,7 @@ sub getfoilcounts { my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2'); # +1 since instructors will count from 1 my $count = $#{ $Apache::response::foilgroup{'names'} }+1; - if (&Apache::response::showallfoils()) { $max=$count; } + #if (&Apache::response::showallfoils()) { $max=$count; } return ($count,$max); } @@ -94,11 +96,11 @@ sub whichfoils { while ((($#whichopt+1) < $max) && ($#names > -1)) { &Apache::lonxml::debug("Have $#whichopt max is $max"); my $aopt; - if (&Apache::response::showallfoils()) { - $aopt=0; - } else { +# if (&Apache::response::showallfoils()) { +# $aopt=0; +# } else { $aopt=int(&Math::Random::random_uniform() * ($#names+1)); - } +# } &Apache::lonxml::debug("From $#names elms, picking $aopt"); $aopt=splice(@names,$aopt,1); &Apache::lonxml::debug("Picked $aopt"); @@ -128,19 +130,19 @@ sub prep_image { $x{"cgi.$id.OBJTYPE"}.='LINE:'; $i=$x{"cgi.$id.OBJCOUNT"}++; - $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymin),($xmax),($ymax), + $x{"cgi.$id.OBJ$i"}=join(':',(($x),($ymin),($x),($ymax), "FFFFFF",($width+$extrawidth))); $x{"cgi.$id.OBJTYPE"}.='LINE:'; $i=$x{"cgi.$id.OBJCOUNT"}++; - $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin), + $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($y),($xmax),($y), "FFFFFF",($width+$extrawidth))); $x{"cgi.$id.OBJTYPE"}.='LINE:'; $i=$x{"cgi.$id.OBJCOUNT"}++; - $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymin),($xmax),($ymax), + $x{"cgi.$id.OBJ$i"}=join(':',(($x),($ymin),($x),($ymax), "FF0000",($width))); $x{"cgi.$id.OBJTYPE"}.='LINE:'; $i=$x{"cgi.$id.OBJCOUNT"}++; - $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin), + $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($y),($xmax),($y), "FF0000",($width))); } if ($mode eq 'answer') { @@ -215,7 +217,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()) { + #&& !&Apache::response::showallfoils() + ) { push(@{ $Apache::response::conceptgroup{'names'} }, $name); } else { push(@{ $Apache::response::foilgroup{'names'} }, $name); @@ -377,7 +387,8 @@ sub end_text { if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { my $name = $Apache::imageresponse::curname; if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils() ) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.text"} = &Apache::lonxml::endredirection; } else { $Apache::response::foilgroup{"$name.text"} = &Apache::lonxml::endredirection; @@ -417,7 +428,8 @@ sub end_image { my $image = &Apache::lonxml::endredirection; &Apache::lonxml::debug("original image is $image"); if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.image"} = $image; } else { $Apache::response::foilgroup{"$name.image"} = $image; @@ -425,7 +437,8 @@ sub end_image { } elsif ($target eq 'analyze') { my $image = &Apache::lonxml::endredirection; if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.image"} = $image; } else { $Apache::response::foilgroup{"$name.image"} = $image; @@ -492,6 +505,7 @@ sub end_image { } elsif ($width ne '') { $width_param = $width*$scaling; } + $width_param=&Apache::randomlabel::adjust_textwidth($width_param); #where can we find the picture? if (-e $newsrc) { if ($path) { @@ -544,9 +558,11 @@ sub end_rectangle { $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()) { + #&& !&Apache::response::showallfoils() + ) { push @{ $Apache::response::conceptgroup{"$name.area"} },"rectangle:$area"; } else { push @{ $Apache::response::foilgroup{"$name.area"} },"rectangle:$area"; @@ -626,7 +642,8 @@ sub end_polygon { $area=~s/\s*//g; &Apache::lonxml::debug("out is $area for $name"); if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { push @{ $Apache::response::conceptgroup{"$name.area"} },"polygon:$area"; } else { push @{ $Apache::response::foilgroup{"$name.area"} },"polygon:$area";