Diff for /loncom/homework/functionplotresponse.pm between versions 1.90 and 1.94

version 1.90, 2011/12/10 18:10:56 version 1.94, 2012/02/29 01:24:47
Line 38  BEGIN { Line 38  BEGIN {
   &Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot','spline',    &Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot','spline',
                                                             'plotobject','plotvector',                                                              'plotobject','plotvector',
                                                             'functionplotvectorrule','functionplotvectorsumrule',                                                              'functionplotvectorrule','functionplotvectorsumrule',
                                                               'drawvectorsum',
                                                             'functionplotcustomrule',                                                              'functionplotcustomrule',
                                                             'functionplotrule','functionplotruleset',                                                              'functionplotrule','functionplotruleset',
                                                             'functionplotelements'));                                                              'functionplotelements'));
Line 410  sub plotobject_script { Line 411  sub plotobject_script {
 #  #
   
 sub plotvector_script {  sub plotvector_script {
    my ($id,$label,$xs,$ys,$xe,$ye,$xmin,$xmax)=@_;     my ($id,$label,$xs,$ys,$xe,$ye,$xmin,$xmax,$fixed)=@_;
    unless ($label) {     unless ($label) {
       $Apache::functionplotresponse::counter++;        $Apache::functionplotresponse::counter++;
       $label='V'.$Apache::functionplotresponse::counter;        $label='V'.$Apache::functionplotresponse::counter;
Line 421  sub plotvector_script { Line 422  sub plotvector_script {
    my $pointx=2.*($xmax-$xmin)+$xmax;     my $pointx=2.*($xmax-$xmin)+$xmax;
    my $anglelabel=$label.'Angle';     my $anglelabel=$label.'Angle';
    return      return 
        &new_point_coordinate($id,$startlabel,$xs,$ys,0).         &new_point_coordinate($id,$startlabel,$xs,$ys,$fixed).
        &new_point_coordinate($id,$endlabel,$xe,$ye,0).         &new_point_coordinate($id,$endlabel,$xe,$ye,$fixed).
        (<<ENDVECTOR);         (<<ENDVECTOR);
 document.ggbApplet_$id.evalCommand("$label=Vector[$startlabel,$endlabel]");  document.ggbApplet_$id.evalCommand("$label=Vector[$startlabel,$endlabel]");
 document.ggbApplet_$id.setLabelVisible("$label",true);  document.ggbApplet_$id.setLabelVisible("$label",true);
Line 556  sub start_plotvector { Line 557  sub start_plotvector {
       unless (defined($taily)) { $taily=$ymin; }        unless (defined($taily)) { $taily=$ymin; }
       unless (defined($tipx)) { $tipx=$xmin; }        unless (defined($tipx)) { $tipx=$xmin; }
       unless (defined($tipy)) { $tipy=$ymin; }        unless (defined($tipy)) { $tipy=$ymin; }
       $result.=&plotvector_script($internalid,$label,$tailx,$taily,$tipx,$tipy,$xmin,$xmax);        my $fixed=0;
         if ((&Apache::response::show_answer()) || (&Apache::response::check_status()>=2)) { $fixed=1; }
         $result.=&plotvector_script($internalid,$label,$tailx,$taily,$tipx,$tipy,$xmin,$xmax,$fixed);
    } elsif ($target eq 'edit') {     } elsif ($target eq 'edit') {
         $result=&Apache::edit::tag_start($target,$token,'Plot Vector').          $result=&Apache::edit::tag_start($target,$token,'Plot Vector').
              &Apache::edit::text_arg('Label on Plot:','label',               &Apache::edit::text_arg('Label on Plot:','label',
Line 589  sub end_plotvector { Line 592  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; }
                   my $vectorx=$thisvector.'X';
                   my $vectory=$thisvector.'Y';
                   $result.=(<<ENDADDVEC);
   document.ggbApplet_$internalid.evalCommand("$vectorx=x($thisvector)");
   document.ggbApplet_$internalid.evalCommand("$vectory=y($thisvector)");
   document.ggbApplet_$internalid.evalCommand("Include$thisvector$label=Checkbox[]");
   ENDADDVEC
                   push(@sumx,"If[Include$thisvector$label,$vectorx,0]");
                   push(@sumy,"If[Include$thisvector$label,$vectory,0]");
               }
               $result.="document.ggbApplet_$internalid.evalCommand(".'"'."xTot$label=".join('+',@sumx).'");'."\n";
               $result.="document.ggbApplet_$internalid.evalCommand(".'"'."yTot$label=".join('+',@sumy).'");'."\n";
               my $show=0;
               if ($showvalue=~/yes/i) {
                   $show=1;
               }
               $result.=(<<ENDMAKEVECTOR);
   document.ggbApplet_$internalid.evalCommand("$label=Vector[($tailx,$taily),($tailx+xTot$label,$taily+yTot$label)]");
   document.ggbApplet_$internalid.setLabelVisible("$label",true);
   document.ggbApplet_$internalid.setLineThickness("$label",8);
   document.ggbApplet_$internalid.setColor("$label",255,0,0);
   document.ggbApplet_$internalid.setLabelStyle("$label",VALUE=$show);
   ENDMAKEVECTOR
           }
       } elsif ($target eq 'edit') {
           $result=&Apache::edit::tag_start($target,$token,'Draw Vector Sum').
                &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::select_arg('Show Value:','showvalue',
                                     ['yes','no'],$token).'<br />'.
                &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;
   }
   
   
   
 #  #
 # <backgroundplot function="..." fixed="yes/no" />  # <backgroundplot function="..." fixed="yes/no" />
Line 1669  sub functionplotrulecheck { Line 1757  sub functionplotrulecheck {
 #  #
 # Evaluate the value  # Evaluate the value
 #  #
    if ($value=~/\D/) {     if (($value=~/\D/) && ($value ne 'undef')) {
       $Apache::functionplotresponse::fpr_xmin=$xmin;        $Apache::functionplotresponse::fpr_xmin=$xmin;
       $Apache::functionplotresponse::fpr_xmax=$xmax;        $Apache::functionplotresponse::fpr_xmax=$xmax;
       $value=&Apache::run::run($value,$safeeval);        $value=&Apache::run::run($value,$safeeval);

Removed from v.1.90  
changed lines
  Added in v.1.94


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