Diff for /loncom/homework/functionplotresponse.pm between versions 1.69 and 1.70

version 1.69, 2011/10/27 00:36:37 version 1.70, 2011/11/18 16:39:22
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 379  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)=@_;
      unless ($label) {
         $Apache::functionplotresponse::counter++;
         $label='V'.$Apache::functionplotresponse::counter;
      }
      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');
   ENDVECTOR
   }
   
   #
 # Answer spline display  # Answer spline display
 #   # 
 # points: x,y,slope_x,slope_y  # points: x,y,slope_x,slope_y
Line 431  sub generate_spline { Line 481  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;
   }
   
   
 #  #
 # <backgroundplot function="..." fixed="yes/no" />  # <backgroundplot function="..." fixed="yes/no" />
 #  #

Removed from v.1.69  
changed lines
  Added in v.1.70


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>