--- 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" />