--- loncom/homework/functionplotresponse.pm	2011/11/19 20:03:58	1.76
+++ loncom/homework/functionplotresponse.pm	2011/11/19 23:35:25	1.77
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # Functionplot responses
 #
-# $Id: functionplotresponse.pm,v 1.76 2011/11/19 20:03:58 www Exp $
+# $Id: functionplotresponse.pm,v 1.77 2011/11/19 23:35:25 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -389,6 +389,7 @@ sub plotobject_script {
       $Apache::functionplotresponse::counter++;
       $label='O'.$Apache::functionplotresponse::counter;
    }
+   &generate_input_field($id,$label,$x,$y);
    return "document.ggbApplet_$id.evalCommand('a=1');\n".
           "document.ggbApplet_$id.setVisible('a', false);\n".
           "document.ggbApplet_$id.setLabelVisible('a', false);\n".
@@ -777,6 +778,11 @@ sub start_functionplotvectorrule {
 
    if ($target eq 'grade') {
 # Simply remember - in order - for later
+
+      my $id=$Apache::inputtags::response[-1];
+      my $partid=$Apache::inputtags::part;
+      my $internalid = $partid.'_'.$id;
+
       my $vector=&Apache::lonxml::get_param('vector',$parstack,$safeeval);
       $vector=~s/\W//gs;
       $vector=ucfirst($vector);
@@ -806,6 +812,7 @@ sub start_functionplotvectorrule {
       push(@Apache::functionplotresponse::functionplotvectorrules,join(':',(
            $label,
            'vector',
+           $internalid,
            $vector,
            $attachpoint,
            $notattachpoint,
@@ -894,12 +901,16 @@ sub start_functionplotvectorsumrule {
    }
    if ($target eq 'grade') {
 # Simply remember - in order - for later
+      my $id=$Apache::inputtags::response[-1];
+      my $partid=$Apache::inputtags::part;
+      my $internalid = $partid.'_'.$id;
       my $object=&Apache::lonxml::get_param('object',$parstack,$safeeval);
       $object=~s/\W//gs;
       $object=ucfirst($object);
       push(@Apache::functionplotresponse::functionplotvectorrules,join(':',(
            $label,
            'sum',
+           $internalid,
            $object,
            &Apache::lonxml::get_param('length',$parstack,$safeeval),
            &Apache::lonxml::get_param('angle',$parstack,$safeeval),
@@ -1359,6 +1370,62 @@ sub fpr_d2fdx2 {
                                                                 $Apache::functionplotresponse::fpr_xmax,
                                                                 $arg)];
 }
+
+
+sub vectorcoords {
+   my ($id,$label)=@_;
+   return ($env{'form.HWVAL_'.$id.'_'.$label.'Start_x'},
+           $env{'form.HWVAL_'.$id.'_'.$label.'End_x'},
+           $env{'form.HWVAL_'.$id.'_'.$label.'Start_y'},
+           $env{'form.HWVAL_'.$id.'_'.$label.'End_y'});
+}
+
+sub objectcoords {
+   my ($id,$label)=@_;
+   return ($env{'form.HWVAL_'.$id.'_'.$label.'_x'},
+           $env{'form.HWVAL_'.$id.'_'.$label.'_y'});
+}
+ 
+sub vectorangle {
+   my ($x,$y)=@_;
+}
+
+sub vectorlength {
+   my ($x,$y)=@_;
+   return sqrt($x*$x+$y*$y);
+}
+
+
+#
+# Evaluate a functionplotvectorrule
+#
+
+sub functionplotvectorrulecheck {
+   my ($rule,$xmin,$xmax,$ymin,$ymax,$safeeval)=@_;
+   my ($label,$type)=split(/\:/,$rule);
+   if ($type eq 'vector') {
+      return &vectorcheck($rule,$xmin,$xmax,$ymin,$ymax,$safeeval);
+   } elsif ($type eq 'sum') {
+      return &sumcheck($rule,$xmin,$xmax,$ymin,$ymax,$safeeval);
+   }
+}
+
+sub vectorcheck {
+   my ($rule,$xmin,$xmax,$ymin,$ymax,$safeeval)=@_;
+   my ($label,$type,$id,$vector,
+       $attachpoint,$notattachpoint,
+       $tailpoint,$tippoint,$nottailpoint,$nottippoint,
+       $length,$angle,$lengthpercenterror,$anglepercenterror)=split(/\:/,$rule);
+}
+
+sub sumcheck {
+   my ($rule,$xmin,$xmax,$ymin,$ymax,$safeeval)=@_;
+   my ($label,$type,$id,$object,$length,$angle,$lengthpercenterror,$lengthabserror,$anglepercenterror)=split(/\:/,$rule);
+}
+
+#
+# Evaluate a functionplotrule
+#
  
 sub functionplotrulecheck {
    my ($rule,$xmin,$xmax,$ymin,$ymax,$safeeval)=@_;
@@ -1583,6 +1650,13 @@ sub end_functionplotruleset {
                  $ad='INCORRECT';
                  last;
               }
+           }
+# And now go through the vector rules
+           foreach my $rule (@Apache::functionplotresponse::functionplotvectorrules) {
+              unless (&functionplotvectorrulecheck($rule,$xmin,$xmax,$ymin,$ymax,$safeeval)) {
+                 $ad='INCORRECT';
+                 last;
+              }
            }
 # If it's not wrong, it's correct 
            unless ($ad) { $ad='EXACT_ANS' };