version 1.65, 2011/10/13 01:54:12
|
version 1.73, 2011/11/18 18:54:21
|
Line 1
|
Line 1
|
# LearningOnline Network with CAPA |
# LearningOnline Network with CAPA |
# option list style responses |
# Functionplot responses |
# |
# |
# $Id$ |
# $Id$ |
# |
# |
Line 35 use Apache::run;
|
Line 35 use Apache::run;
|
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot','spline', |
&Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot','spline', |
|
'plotobject','plotvector', |
'functionplotrule','functionplotruleset', |
'functionplotrule','functionplotruleset', |
'functionplotelements')); |
'functionplotelements')); |
} |
} |
Line 76 sub geogebra_default_parameters {
|
Line 77 sub geogebra_default_parameters {
|
<param name="boxborder" value="false" /> |
<param name="boxborder" value="false" /> |
<param name="centerimage" value="true" /> |
<param name="centerimage" value="true" /> |
<param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_export.jar, geogebra_algos.jar, geogebra_javascript.jar, geogebra_properties.jar, jlatexmath.jar, jlm_cyrillic.jar, jlm_greek.jar" /> |
<param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_export.jar, geogebra_algos.jar, geogebra_javascript.jar, geogebra_properties.jar, jlatexmath.jar, jlm_cyrillic.jar, jlm_greek.jar" /> |
<param name="cache_version" value="3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0, 3.9.219.0" /> |
<param name="cache_version" value="4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0" /> |
<param name="framePossible" value="false" /> |
<param name="framePossible" value="false" /> |
|
|
<param name="showResetIcon" value="false" /> |
<param name="showResetIcon" value="false" /> |
Line 164 sub update_register {
|
Line 165 sub update_register {
|
sub set_point_coordinate { |
sub set_point_coordinate { |
my ($id,$variable,$x,$y,$fixed)=@_; |
my ($id,$variable,$x,$y,$fixed)=@_; |
my $mult=($fixed?'a*':''); |
my $mult=($fixed?'a*':''); |
|
# Get rid of wild exponents, make sure it's a number |
|
$x=1.*$x; |
|
$y=1.*$y; |
|
# GeoGebra does not understand "E" |
|
$x=~s/[e|E]/\*10\^/; |
|
$x=~s/\+//; |
|
$y=~s/[e|E]/\*10\^/; |
|
$y=~s/\+//; |
return (<<ENDSETVARIABLE); |
return (<<ENDSETVARIABLE); |
document.ggbApplet_$id.evalCommand("a=1"); |
document.ggbApplet_$id.evalCommand("a=1"); |
document.ggbApplet_$id.evalCommand("$variable=$mult($x,$y)"); |
document.ggbApplet_$id.evalCommand("$variable=$mult($x,$y)"); |
Line 371 sub plot_script {
|
Line 380 sub plot_script {
|
} |
} |
|
|
# |
# |
|
# Subroutine to produce objects |
|
# |
|
|
|
sub plotobject_script { |
|
my ($id,$label,$x,$y)=@_; |
|
unless ($label) { |
|
$Apache::functionplotresponse::counter++; |
|
$label='O'.$Apache::functionplotresponse::counter; |
|
} |
|
return "document.ggbApplet_$id.evalCommand('a=1');\n". |
|
"document.ggbApplet_$id.setVisible('a', false);\n". |
|
"document.ggbApplet_$id.setLabelVisible('a', false);\n". |
|
"document.ggbApplet_$id.evalCommand('$label=a*($x,$y)');\n". |
|
"document.ggbApplet_$id.setVisible('$label', true);\n". |
|
"document.ggbApplet_$id.setLabelVisible('$label', true);\n"; |
|
} |
|
|
|
# |
|
# Subroutine to produce vectors |
|
# |
|
|
|
sub plotvector_script { |
|
my ($id,$label,$xs,$ys,$xe,$ye,$xmin,$xmax)=@_; |
|
unless ($label) { |
|
$Apache::functionplotresponse::counter++; |
|
$label='V'.$Apache::functionplotresponse::counter; |
|
} |
|
my $startlabel=$label.'Start'; |
|
my $endlabel=$label.'End'; |
|
my $pointlabel=$label.'Point'; |
|
my $pointx=2.*($xmax-$xmin)+$xmax; |
|
my $anglelabel=$label.'Angle'; |
|
return(<<ENDVECTOR); |
|
document.ggbApplet_$id.evalCommand("$startlabel=($xs,$ys)"); |
|
document.ggbApplet_$id.setVisible("$startlabel",false); |
|
document.ggbApplet_$id.setLabelVisible("$startlabel",false); |
|
document.ggbApplet_$id.evalCommand("$endlabel=($xe,$ye)"); |
|
document.ggbApplet_$id.setLabelVisible("$endlabel",false); |
|
document.ggbApplet_$id.evalCommand("$label=Vector[$startlabel,$endlabel]"); |
|
document.ggbApplet_$id.setLabelVisible("$label",true); |
|
document.ggbApplet_$id.setLineThickness("$label",8); |
|
document.ggbApplet_$id.evalCommand("$pointlabel=($pointx,y($startlabel))"); |
|
document.ggbApplet_$id.evalCommand("$anglelabel=Angle[$pointlabel,$startlabel,$endlabel]"); |
|
document.ggbApplet_$id.setLabelVisible("$anglelabel",true); |
|
document.ggbApplet_$id.setLabelStyle("$anglelabel",VALUE=2); |
|
document.ggbApplet_$id.registerObjectUpdateListener('$startlabel','updatePointCoordinates_$id'); |
|
document.ggbApplet_$id.registerObjectUpdateListener('$endlabel','updatePointCoordinates_$id'); |
|
document.ggbApplet_$id.registerObjectUpdateListener('$anglelabel','updatePointCoordinates_$id'); |
|
ENDVECTOR |
|
} |
|
|
|
# |
# Answer spline display |
# Answer spline display |
# |
# |
# points: x,y,slope_x,slope_y |
# points: x,y,slope_x,slope_y |
Line 423 sub generate_spline {
|
Line 484 sub generate_spline {
|
$result.='document.ggbApplet_'.$id.'.evalCommand("Spline'.$order.'['.join(',',@coords).']");'."\n"; |
$result.='document.ggbApplet_'.$id.'.evalCommand("Spline'.$order.'['.join(',',@coords).']");'."\n"; |
return $result; |
return $result; |
} |
} |
|
|
|
# |
|
# Object |
|
# |
|
|
|
sub start_plotobject { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
my $result=''; |
|
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
|
my $x=&Apache::lonxml::get_param('x',$parstack,$safeeval); |
|
my $y=&Apache::lonxml::get_param('y',$parstack,$safeeval); |
|
my $label=&Apache::lonxml::get_param('label',$parstack,$safeeval); |
|
$label=~s/\W//gs; |
|
$label=ucfirst($label); |
|
unless ($label) { $label="NewObject"; } |
|
if ($target eq 'web') { |
|
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
|
unless (defined($x)) { $x=$xmin; } |
|
unless (defined($y)) { $y=$ymin; } |
|
$result.=&plotobject_script($internalid,$label,$x,$y); |
|
} elsif ($target eq 'edit') { |
|
$result=&Apache::edit::tag_start($target,$token,'Plot Object'). |
|
&Apache::edit::text_arg('Label on Plot:','label', |
|
$token,'16'). |
|
&Apache::edit::text_arg('x:','x', |
|
$token,'8'). |
|
&Apache::edit::text_arg('y:','y', |
|
$token,'8'). |
|
&Apache::edit::end_row(); |
|
} elsif ($target eq 'modified') { |
|
my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'label','x','y'); |
|
if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } |
|
} |
|
return $result; |
|
} |
|
|
|
sub end_plotobject { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
my $result=''; |
|
if ($target eq 'edit') { |
|
$result=&Apache::edit::end_table(); |
|
} |
|
return $result; |
|
} |
|
|
|
# |
|
# Vector |
|
# |
|
|
|
sub start_plotvector { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
my $result=''; |
|
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
|
my $tailx=&Apache::lonxml::get_param('tailx',$parstack,$safeeval); |
|
my $taily=&Apache::lonxml::get_param('taily',$parstack,$safeeval); |
|
my $tipx=&Apache::lonxml::get_param('tipx',$parstack,$safeeval); |
|
my $tipy=&Apache::lonxml::get_param('tipy',$parstack,$safeeval); |
|
|
|
my $label=&Apache::lonxml::get_param('label',$parstack,$safeeval); |
|
$label=~s/\W//gs; |
|
$label=ucfirst($label); |
|
unless ($label) { $label="NewVector"; } |
|
if ($target eq 'web') { |
|
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
|
unless (defined($tailx)) { $tailx=$xmin; } |
|
unless (defined($taily)) { $taily=$ymin; } |
|
unless (defined($tipx)) { $tipx=$xmin; } |
|
unless (defined($tipy)) { $tipy=$ymin; } |
|
$result.=&plotvector_script($internalid,$label,$tailx,$taily,$tipx,$tipy,$xmin,$xmax); |
|
} elsif ($target eq 'edit') { |
|
$result=&Apache::edit::tag_start($target,$token,'Plot Vector'). |
|
&Apache::edit::text_arg('Label on Plot:','label', |
|
$token,'16'). |
|
&Apache::edit::text_arg('Tail x:','tailx', |
|
$token,'8'). |
|
&Apache::edit::text_arg('Tail y:','taily', |
|
$token,'8'). |
|
&Apache::edit::text_arg('Tip x:','tipx', |
|
$token,'8'). |
|
&Apache::edit::text_arg('Tip y:','tipy', |
|
$token,'8'). |
|
|
|
&Apache::edit::end_row(); |
|
} elsif ($target eq 'modified') { |
|
my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'label','tailx','taily','tipx','tipy'); |
|
if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } |
|
} |
|
return $result; |
|
} |
|
|
|
sub end_plotvector { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
my $result=''; |
|
if ($target eq 'edit') { |
|
$result=&Apache::edit::end_table(); |
|
} |
|
return $result; |
|
} |
|
|
|
|
|
|
# |
# |
# <backgroundplot function="..." fixed="yes/no" /> |
# <backgroundplot function="..." fixed="yes/no" /> |
# |
# |
Line 973 sub compare_rel {
|
Line 1135 sub compare_rel {
|
|
|
sub addlog { |
sub addlog { |
my ($text)=@_; |
my ($text)=@_; |
|
$text=~s/\'/\\\'/g; |
$Apache::functionplotresponse::ruleslog.=$text.'<br />'; |
$Apache::functionplotresponse::ruleslog.=$text.'<br />'; |
} |
} |
|
|
Line 981 sub actualval {
|
Line 1144 sub actualval {
|
return $xmin+$i/400.*($xmax-$xmin); |
return $xmin+$i/400.*($xmax-$xmin); |
} |
} |
|
|
|
sub fpr_val { |
|
my ($arg)=@_; |
|
return &actualval($Apache::functionplotresponse::functionplotrulelabels{$arg}, |
|
$Apache::functionplotresponse::fpr_xmin, |
|
$Apache::functionplotresponse::fpr_xmax); |
|
} |
|
|
sub fpr_f { |
sub fpr_f { |
my ($arg)=@_; |
my ($arg)=@_; |
return $Apache::functionplotresponse::func[&array_index($Apache::functionplotresponse::fpr_xmin, |
return $Apache::functionplotresponse::func[&array_index($Apache::functionplotresponse::fpr_xmin, |