--- loncom/homework/functionplotresponse.pm 2012/02/28 15:46:55 1.92 +++ loncom/homework/functionplotresponse.pm 2012/02/28 22:42:31 1.93 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # Functionplot responses # -# $Id: functionplotresponse.pm,v 1.92 2012/02/28 15:46:55 www Exp $ +# $Id: functionplotresponse.pm,v 1.93 2012/02/28 22:42:31 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,7 @@ BEGIN { &Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot','spline', 'plotobject','plotvector', 'functionplotvectorrule','functionplotvectorsumrule', + 'drawvectorsum', 'functionplotcustomrule', 'functionplotrule','functionplotruleset', 'functionplotelements')); @@ -591,6 +592,83 @@ sub end_plotvector { } +# +# Vector sum - have GeoGebra draw a sum of specified vectors to help students draw +# + +sub start_drawvectorsum { + 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 $vectorlist=&Apache::lonxml::get_param('vectorlist',$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($vectorlist)) { $vectorlist=''; } + my @vectors=split(/\,/,$vectorlist); + if ($#vectors>0) { + my @sumx=(); + my @sumy=(); + foreach my $thisvector (@vectors) { + $thisvector=~s/\W//gs; + $thisvector=ucfirst($thisvector); + unless ($thisvector) { next; } + my $vectorx=$thisvector.'X'; + my $vectory=$thisvector.'Y'; + $result.=(<'. + &Apache::edit::text_arg('Vector List:','vectorlist', + $token,'40'). + &Apache::edit::end_row(); + } elsif ($target eq 'modified') { + $env{'form.'.&Apache::edit::html_element_name('label')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('label')}); + my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'label','tailx','taily','vectorlist'); + if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } + } + return $result; +} + + +sub end_drawvectorsum { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + if ($target eq 'edit') { + $result=&Apache::edit::end_table(); + } + return $result; +} + + # #