version 1.87, 2011/11/24 15:43:08
|
version 1.95, 2012/02/29 01:46:52
|
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 49 BEGIN {
|
Line 50 BEGIN {
|
# |
# |
|
|
sub geogebra_startcode { |
sub geogebra_startcode { |
my ($id)=@_; |
my ($id,$width,$height)=@_; |
|
$width=int(1.*$width); |
|
$height=int(1.*$height); |
|
unless ($width) { $width=700; } |
|
unless ($height) { $height=400; } |
return (<<ENDSTARTCODE); |
return (<<ENDSTARTCODE); |
<applet name="ggbApplet_$id" code="geogebra.GeoGebraApplet" archive="geogebra.jar" |
<applet name="ggbApplet_$id" code="geogebra.GeoGebraApplet" archive="geogebra.jar" |
codebase="/adm/geogebra/" width="722" height="447" MAYSCRIPT> |
codebase="/adm/geogebra/" width="$width" height="$height" MAYSCRIPT> |
<param name="java_arguments" value="-Xmx512m -Djnlp.packEnabled=true"/> |
<param name="java_arguments" value="-Xmx512m -Djnlp.packEnabled=true"/> |
ENDSTARTCODE |
ENDSTARTCODE |
} |
} |
Line 406 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 417 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 546 sub start_plotvector {
|
Line 551 sub start_plotvector {
|
$label=~s/\W//gs; |
$label=~s/\W//gs; |
$label=ucfirst($label); |
$label=ucfirst($label); |
unless ($label) { $label="NewVector"; } |
unless ($label) { $label="NewVector"; } |
|
if ($Apache::functionplotresponse::vectorlabels{$label}) { |
|
&Apache::lonxml::warning(&mt('Vector labels must be unique: [_1]',$label)); |
|
} |
|
$Apache::functionplotresponse::vectorlabels{$label}=1; |
if ($target eq 'web') { |
if ($target eq 'web') { |
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
unless (defined($tailx)) { $tailx=$xmin; } |
unless (defined($tailx)) { $tailx=$xmin; } |
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 585 sub end_plotvector {
|
Line 596 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; } |
|
unless ($Apache::functionplotresponse::vectorlabels{$thisvector}) { |
|
&Apache::lonxml::warning(&mt('Vectors must be defined before using them for drawing vector sums: [_1]',$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 1212 sub start_functionplotresponse {
|
Line 1312 sub start_functionplotresponse {
|
undef %Apache::functionplotresponse::previous; |
undef %Apache::functionplotresponse::previous; |
$Apache::functionplotresponse::inputfields=''; |
$Apache::functionplotresponse::inputfields=''; |
$Apache::functionplotresponse::counter=0; |
$Apache::functionplotresponse::counter=0; |
|
# Remember vectors |
|
undef %Apache::functionplotresponse::vectorlabels; |
# Remember rules |
# Remember rules |
undef @Apache::functionplotresponse::functionplotrules; |
undef @Apache::functionplotresponse::functionplotrules; |
undef @Apache::functionplotresponse::functionplotvectorrules; |
undef @Apache::functionplotresponse::functionplotvectorrules; |
Line 1248 sub start_functionplotresponse {
|
Line 1350 sub start_functionplotresponse {
|
.&Apache::edit::end_row() |
.&Apache::edit::end_row() |
.&Apache::edit::start_spanning_row() |
.&Apache::edit::start_spanning_row() |
."\n"; |
."\n"; |
$result.=&Apache::edit::text_arg('Label x-axis:','xlabel', |
$result.=&Apache::edit::text_arg('Width (pixels):','width', |
|
$token,'6').' '. |
|
&Apache::edit::text_arg('Height (pixels):','height', |
|
$token,'6').'<br />'. |
|
&Apache::edit::text_arg('Label x-axis:','xlabel', |
$token,'6').' '. |
$token,'6').' '. |
&Apache::edit::text_arg('Minimum x-value:','xmin', |
&Apache::edit::text_arg('Minimum x-value:','xmin', |
$token,'4').' '. |
$token,'4').' '. |
Line 1271 sub start_functionplotresponse {
|
Line 1377 sub start_functionplotresponse {
|
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'xlabel','xmin','xmax','ylabel','ymin','ymax', |
$safeeval,'width','height','xlabel','xmin','xmax','ylabel','ymin','ymax', |
'xaxisvisible','yaxisvisible','gridvisible','answerdisplay'); |
'xaxisvisible','yaxisvisible','gridvisible','answerdisplay'); |
if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } |
if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } |
|
|
Line 1281 sub start_functionplotresponse {
|
Line 1387 sub start_functionplotresponse {
|
($env{'form.answer_output_mode'} ne 'tex') && |
($env{'form.answer_output_mode'} ne 'tex') && |
($Apache::lonhomework::viewgrades == 'F')) { |
($Apache::lonhomework::viewgrades == 'F')) { |
my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser(); |
my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser(); |
my $windowopen=&Apache::lonhtmlcommon::javascript_docopen(); |
|
my $start_page = &Apache::loncommon::start_page('Rules Log', undef, |
|
{'only_body' => 1, |
|
'bgcolor' => '#FFFFFF', |
|
'js_ready' => 1,}); |
|
my $end_page = &Apache::loncommon::end_page({'js_ready' => 1,}); |
|
$uname =~s/\W//g; |
$uname =~s/\W//g; |
$udom =~s/\W//g; |
$udom =~s/\W//g; |
my $function_name = |
my $function_name = |
join('_','LONCAPA_scriptvars',$uname,$udom, |
join('_','LONCAPA_scriptvars',$uname,$udom, |
$env{'form.counter'},$Apache::lonxml::curdepth); |
$env{'form.counter'},$Apache::lonxml::curdepth); |
my $rules_var ="<script type=\"text/javascript\"> |
&Apache::lonxml::add_script_result( |
// <![CDATA[ |
&Apache::loncommon::modal_adhoc_window($function_name,700,500, |
function $function_name() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.$windowopen;newWindow.document.writeln('$start_page<pre>". |
'<pre>'.$Apache::functionplotresponse::ruleslog.'</pre>', |
$Apache::functionplotresponse::ruleslog. |
&mt('Rules Log'))."<br />"); |
"<\\/pre>$end_page');newWindow.document.close();newWindow.focus()} |
} |
// ]]> |
|
</script><a href=\"javascript:$function_name();void(0);\">".&mt('Rules Log')."</a><br />"; |
|
&Apache::lonxml::add_script_result($rules_var); |
|
} |
|
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 1672 sub functionplotrulecheck {
|
Line 1767 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); |
Line 1986 sub end_functionplotelements {
|
Line 2081 sub end_functionplotelements {
|
# generate the input fields |
# generate the input fields |
$result.=$Apache::functionplotresponse::inputfields; |
$result.=$Apache::functionplotresponse::inputfields; |
# actually start the <applet>-tag |
# actually start the <applet>-tag |
$result.=&geogebra_startcode($internalid); |
$result.=&geogebra_startcode($internalid, |
|
&Apache::lonxml::get_param('width',$parstack,$safeeval,-2), |
|
&Apache::lonxml::get_param('height',$parstack,$safeeval,-2)); |
# load the spline bytecode |
# load the spline bytecode |
$result.=&geogebra_spline_program(); |
$result.=&geogebra_spline_program(); |
# set default parameters |
# set default parameters |