--- loncom/homework/functionplotresponse.pm 2010/11/13 22:30:28 1.38 +++ loncom/homework/functionplotresponse.pm 2010/11/19 20:03:13 1.41 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: functionplotresponse.pm,v 1.38 2010/11/13 22:30:28 www Exp $ +# $Id: functionplotresponse.pm,v 1.41 2010/11/19 20:03:13 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,7 +47,7 @@ sub geogebra_startcode { my ($id)=@_; return (< + codebase="/adm/geogebra/" width="722" height="447" MAYSCRIPT> ENDSTARTCODE } @@ -74,9 +74,8 @@ sub geogebra_default_parameters { - - - + + @@ -159,16 +158,40 @@ sub update_register { } # -# Set a coordinate variable +# Set a point coordinate variable # -sub set_coordinate { +sub set_point_coordinate { my ($id,$variable,$x,$y)=@_; return (< - my $xmin=&Apache::lonxml::get_param('xmin',$parstack,$safeeval); - $xmin=(defined($xmin)?$xmin:-10); - my $xmax=&Apache::lonxml::get_param('xmax',$parstack,$safeeval); - $xmax=(defined($xmax)?$xmax:10); - my $ymin=&Apache::lonxml::get_param('ymin',$parstack,$safeeval); - $ymin=(defined($ymin)?$ymin:-10); - my $ymax=&Apache::lonxml::get_param('ymax',$parstack,$safeeval); - $ymax=(defined($ymax)?$ymax:10); - if ($xmax<=$xmin) { - &Apache::lonxml::warning('Maximum x-value needs to be larger than minimum value.'); - $xmax=$xmin+20; - } - if ($ymax<=$ymin) { - &Apache::lonxml::warning('Maximum y-value needs to be larger than minimum value.'); - $ymax=$ymin+20; - } + my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval); my $xaxisvisible=(&Apache::lonxml::get_param('xaxisvisible',$parstack,$safeeval)=~/on|true|yes|1/i?'true':'false'); my $yaxisvisible=(&Apache::lonxml::get_param('yaxisvisible',$parstack,$safeeval)=~/on|true|yes|1/i?'true':'false'); my $gridvisible=(&Apache::lonxml::get_param('gridvisible',$parstack,$safeeval)=~/on|true|yes|1/i?'true':'false'); @@ -981,14 +1028,7 @@ sub end_functionplotruleset { # # Actually grade # - my $xmin=&Apache::lonxml::get_param('xmin',$parstack,$safeeval,-2); - $xmin=(defined($xmin)?$xmin:-10); - my $xmax=&Apache::lonxml::get_param('xmax',$parstack,$safeeval,-2); - $xmax=(defined($xmax)?$xmax:10); - my $ymin=&Apache::lonxml::get_param('ymin',$parstack,$safeeval,-2); - $ymin=(defined($ymin)?$ymin:-10); - my $ymax=&Apache::lonxml::get_param('ymax',$parstack,$safeeval,-2); - $ymax=(defined($ymax)?$ymax:10); + my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-2); my $ad=''; undef %Apache::functionplotresponse::functionplotrulelabels; @@ -1068,8 +1108,9 @@ sub end_functionplotelements { $result=&Apache::edit::end_table(); } elsif ($target eq 'web') { # Now is the time to render all of the stored splines + my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-2); foreach my $label (keys(%Apache::functionplotresponse::splineorder)) { - $result.=&generate_spline($internalid,$label); + $result.=&generate_spline($internalid,$label,$xmin,$xmax,$ymin,$ymax); } # close the init script $result.=&end_init_script(); @@ -1094,6 +1135,25 @@ sub end_functionplotelements { return $result; } +sub boundaries { + my ($parstack,$safeeval,$level)=@_; + my $xmin=&Apache::lonxml::get_param('xmin',$parstack,$safeeval,$level); + $xmin=(defined($xmin)?$xmin:-10); + my $xmax=&Apache::lonxml::get_param('xmax',$parstack,$safeeval,$level); + $xmax=(defined($xmax)?$xmax:10); + my $ymin=&Apache::lonxml::get_param('ymin',$parstack,$safeeval,$level); + $ymin=(defined($ymin)?$ymin:-10); + my $ymax=&Apache::lonxml::get_param('ymax',$parstack,$safeeval,$level); + $ymax=(defined($ymax)?$ymax:10); + if ($xmax<=$xmin) { + $xmax=$xmin+20; + } + if ($ymax<=$ymin) { + $ymax=$ymin+20; + } + return ($xmin,$xmax,$ymin,$ymax); +} + sub start_functionplotelements { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; @@ -1113,20 +1173,7 @@ sub start_functionplotelements { .&Apache::edit::start_spanning_row() ."\n"; } elsif ($target eq 'web') { - my $xmin=&Apache::lonxml::get_param('xmin',$parstack,$safeeval,-2); - $xmin=(defined($xmin)?$xmin:-10); - my $xmax=&Apache::lonxml::get_param('xmax',$parstack,$safeeval,-2); - $xmax=(defined($xmax)?$xmax:10); - my $ymin=&Apache::lonxml::get_param('ymin',$parstack,$safeeval,-2); - $ymin=(defined($ymin)?$ymin:-10); - my $ymax=&Apache::lonxml::get_param('ymax',$parstack,$safeeval,-2); - $ymax=(defined($ymax)?$ymax:10); - if ($xmax<=$xmin) { - $xmax=$xmin+20; - } - if ($ymax<=$ymin) { - $ymax=$ymin+20; - } + my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-2); my $xaxisvisible=(&Apache::lonxml::get_param('xaxisvisible',$parstack,$safeeval,-2)=~/on|true|yes|1/i?'true':'false'); my $yaxisvisible=(&Apache::lonxml::get_param('yaxisvisible',$parstack,$safeeval,-2)=~/on|true|yes|1/i?'true':'false'); my $gridvisible=(&Apache::lonxml::get_param('gridvisible',$parstack,$safeeval,-2)=~/on|true|yes|1/i?'true':'false');