--- loncom/homework/functionplotresponse.pm	2011/11/18 16:39:22	1.70
+++ loncom/homework/functionplotresponse.pm	2011/11/18 18:54:21	1.73
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # Functionplot responses
 #
-# $Id: functionplotresponse.pm,v 1.70 2011/11/18 16:39:22 www Exp $
+# $Id: functionplotresponse.pm,v 1.73 2011/11/18 18:54:21 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -402,29 +402,32 @@ sub plotobject_script {
 #
 
 sub plotvector_script {
-   my ($id,$label,$xs,$ys,$xe,$ye)=@_;
+   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.ggbApplet1.evalCommand("Gravitystart=(20,0)");
-document.ggbApplet1.setVisible("Gravitystart",false);
-document.ggbApplet1.setLabelVisible("Gravitystart",false);
-document.ggbApplet1.evalCommand("Gravityend=(20,-5)");
-document.ggbApplet1.setLabelVisible("Gravityend",false);
-document.ggbApplet1.evalCommand("Gravity=Vector[Gravitystart, Gravityend]");
-document.ggbApplet1.setLabelVisible("Gravity",true);
-document.ggbApplet1.setLineThickness("Gravity",8);
-// Displays the Angle
-document.ggbApplet1.evalCommand("Gravitypoint=(110,y(Gravitystart))"); //The x-value for this should be 2*(xmax-xmin)+xmax;
-document.ggbApplet1.evalCommand("GravityAngle=Angle[Gravitypoint,Gravitystart,Gravityend]");
-document.ggbApplet1.setLabelVisible("GravityAngle",true);
-document.ggbApplet1.setLabelStyle("GravityAngle",VALUE=2);
-// Keeps track of points we care about (This should use the same listener function we use in graph problems)
-//document.ggbApplet1.registerObjectUpdateListener('Gravitystart','updatePointCoordinates');
-//document.ggbApplet1.registerObjectUpdateListener('Gravityend','updatePointCoordinates');
-//document.ggbApplet1.registerObjectUpdateListener('GravityAngle','updatePointCoordinates');
+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
 }
 
@@ -526,6 +529,61 @@ sub end_plotobject {
    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" />