> 下記URLで説明されている「グラフの大きさをウインドウの大きさに追従させる」方法が正しく機能しないので、
> 心当たりのある方からの情報と積極的調査をお願いします。
> http://www-kekb.kek.jp/Documentation/SAD/index.php?FFS%20Level%2F%CE%E3%C2%EA
>
> 具体的症例は、URL掲載の例題通り以下のコマンドで描いたグラフは、ウィンドウを拡大しても、中に描かれた図が期待に反して追従しません。環境は、 SAD Ver.1.0.10.4.2a06、Tk$Version= {8,5} です。
> FFS;
> $DisplayFunction = CanvasDrawer;
> w = Window[];
> c1 = Canvas[w, Height -> 100, Width -> 150,
> Side -> "left",
> Expand -> True, Fill -> "both"];
> c2 = Canvas[w, Height -> 100, Width -> 150,
> Side -> "left",
> Expand -> True, Fill -> "both"];
> pl:=(
> Canvas$Widget = c1;
> Plot[Sin[x],{x,-Pi,Pi}];
> Canvas$Widget = c2;
> Plot[Cos[x],{x,-Pi,Pi}]);
> pl;
> Bind[w, "<Configure>", pl];
> TkWait[];
>
Packages/Canvas.n内部で、Canvas Widgetの Geometryをキャッシュしているためです。
このキャッシュが実装されたのは、Packages/Canvas.n Revision 1.461(2008-10-07 05:44:27 JST)です
キャッシュを無効化すれば、CanvasDrawerによる描画に Canvas Widgetの Geometry変化が反映されますが、
Canvas Drawerの描画の結果に依存してWidgetのパッキング状態が変化するので、収束させるには
1. Canvas Drawerによる再描画(Show[])
2. X Serverへの描画結果の反映/Frameの再パッキング(Update[])
を何度か繰り返す必要があります(典型的には、2-3回)
キャッシュを無効化するパッチは以下の通り
Index: Packages/Canvas.n
===================================================================
--- Packages/Canvas.n (revision 2958)
+++ Packages/Canvas.n (working copy)
@@ -138,7 +138,7 @@
Min[GoldenRatio*CanvasAspectRatio/$DefaultCanvasAspectRatio,
GoldenRatio+CanvasAspectRatio-$DefaultCanvasAspectRatio]);
- CanvGeo[]:=(CanvGeo[]=Module[{{w,h}=WidgetInfo[CanvasWidget,{Width,Height}]},
+ CanvGeo[]:=(Module[{{w,h}=WidgetInfo[CanvasWidget,{Width,Height}]},
If[w<4,
CanvasWidget[CGet[Width,Height]],
{w,h}]]);