--- loncom/homework/functionplotresponse.pm 2012/02/28 15:46:55 1.92
+++ loncom/homework/functionplotresponse.pm 2012/02/29 01:46:52 1.95
@@ -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.95 2012/02/29 01:46:52 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'));
@@ -550,6 +551,10 @@ sub start_plotvector {
$label=~s/\W//gs;
$label=ucfirst($label);
unless ($label) { $label="NewVector"; }
+ if ($Apache::functionplotresponse::vectorlabels{$label}) {
+ &Apache::lonxml::warning(&mt('Vector labels must be unique: [_1]',$label));
+ }
+ $Apache::functionplotresponse::vectorlabels{$label}=1;
if ($target eq 'web') {
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3);
unless (defined($tailx)) { $tailx=$xmin; }
@@ -591,6 +596,95 @@ 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 $showvalue=&Apache::lonxml::get_param('showvalue',$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; }
+ unless ($Apache::functionplotresponse::vectorlabels{$thisvector}) {
+ &Apache::lonxml::warning(&mt('Vectors must be defined before using them for drawing vector sums: [_1]',$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','showvalue','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;
+}
+
+
#
#
@@ -1218,6 +1312,8 @@ sub start_functionplotresponse {
undef %Apache::functionplotresponse::previous;
$Apache::functionplotresponse::inputfields='';
$Apache::functionplotresponse::counter=0;
+# Remember vectors
+ undef %Apache::functionplotresponse::vectorlabels;
# Remember rules
undef @Apache::functionplotresponse::functionplotrules;
undef @Apache::functionplotresponse::functionplotvectorrules;