テキストの描画開始点を中心としたズーム実行による、Cornerコマンドの描画のずれについて
前提となるアプレットの構成
上記アプレットのように、「画面上の固定された位置」に設定(pin to screen)されていないテキストオブジェクトを用意した。名前をtext1とした。
自由な点オブジェクトEを作成し、「プリファレンス」画面の「位置」タブから、text1の描画開始点を、Eに設定した。
text1の四隅を表す点
Corner[text1, 1]:左下
Corner[text1, 2]:右下
Corner[text1, 3]:右上
Corner[text1, 4]:左上
を作成した。
観察された問題点
GeoGebraをPCデバイスで使用する場合、マウスホイールや(Macにおける)トラックパッドによるスクロール操作で、グラフィックスビューをズームできる(以下このズーム操作を、「スクロールによるズーム操作」という)*1。
上記アプレットの点E上にポインタを置いて、スクロールによるズーム操作を行うと、Corner[text1, 1〜4]が、text1の隅からずれて描画される場合があることが確認された(下図参照)*2。
また、点Eを中心とするズーム操作
ZoomIn[<倍率>, E]
を、倍率1以外で実行した場合も、上図と同様の描画のずれが確認された。
なお、点Eを削除すると、text1の描画開始点として、新たな点が設定される。この点は、「プリファレンス」画面の「位置」タブから確認可能である。
そして、この点を中心とするズーム操作
ZoomIn[ <倍率>, (2.29123, 7.66923)]
を、倍率1以外で実行した場合も、上記と同様のずれが確認された。
問題点のまとめ
以上で観察されたことをまとめると、以下のようになろう。
すなわち、「画面上の固定された位置」に設定(pin to screen)されていないテキストオブジェクトの描画開始点(「プレファレンス」画面の「位置」タブから確認可能)を中心とするズーム操作を、(倍率1以外で)実行した場合、そのテキストに係るCorner[<text>, 1〜4]の座標が、そのテキストの隅の点からずれてしまう場合がある、ということである。
問題の回避方法
この描画のずれは、テキストの描画開始点(上記アプレットでは、点E)をドラッグしたり、描画開始点以外を中心とするズーム操作を行ったり、グラフィックスビューをドラッグすることによるパン操作を行ったりすることで、解消される。
これらの方法は、グラフィックスビューの描画に見かけ上の変更を加えることで、問題を回避するものである。
グラフィックスビューの描画に見かけ上の変更を加えずに、描画のずれを解消する方法はないだろうか。
そこで試してみると、UpdateConstruction[ ]や、ZoomIn[1]を実行しても、描画のずれは解消されなかった。
これに対して、テキストのOn Update スクリプトに、
SetValue[E,Translate[E,(0,1)]]
SetValue[E,Translate[E,(0,-1)]]
と記述すると、グラフィックスビューの描画に見かけ上の変更を加えずに、描画のずれを解消することができた(下図)。
これは、テキストの描画開始点である点Eの座標を、いったん変更し(スクリプト1行目)、ただちに元の座標に戻す(スクリプト2行目)という方法である。さしあたりの方法として記しておく。