Mac用プロットライブラリ-8 [考え中 - プロットライブラリ]
ちんたら進めてる(進んでないか)大まかな設計の続き。でももうじじいのおネムの時間だからちょっとだけ。
実装は4つのレイヤに分けることにしようと思う。
あるlayerオブジェクトは一つ下のレイヤのlayerオブジェクトのための処理を行い、そのオブジェクトを生成し、保持するということにしよう。そして最下層のView layerは描画を準備してそのためのNSBezierPathなどを生成し、描画を行う。そうするとそれぞれのレイヤはそれより下位のオブジェクトをマトリョーシカみたいに内包することになる。メモリの無駄が多くて遅くなるだろうけどそうするのが簡単だろう。
メモリの無駄を省くために各レイヤはpurgeできるようにする。purgeとはそのlayerオブジェクトが保持するプロット用のオブジェクトを下位レイヤに変換して渡し、自分が持っていたプロット用のオブジェクトは解放する。これによりメモリを節約できる。再描画や再利用しないならばpurgeしていい。誰がpurgeを発行するか、は微妙だけど。ユーザレベルのインターフェイスにpurgeとかいうメソッドを入れるのはいまいちだよな。再描画しないフラグを設けてそれがあったら自主的にpurgeするとか。でもそしたら「再描画しないフラグ」なんかきっと誰も立てないよな。
まあ、後から考えよう。
それぞれのlayerには2種類のオブジェクトを保持できるようにする。それは
- Contents
- Ornaments
である。Contentsはユーザが指定した折れ線や図形データなどのPlot Objectである。OrnamentsはPlot Labelや座標軸など、Optionとして指定されたPlot Objectである。OrnamentsはPlot形式の変換(折れ線グラフをバーグラクになど)では引き継ぐ必要がなく(プロット形式独自のオブジェクトになるので)、それぞれのプロットで生成しなければならない。
当然それぞれのレイヤは異なる座標を使用する。それはそれぞれ
Automatic Layer | Plot座標 |
Primitive Layer | Plot座標 |
Normalized Layer | Normalized座標 |
View Layer | View座標 |
である。あるレイヤの下の座標を含んでいてもいいけど、上の座標を含んではいけない。例えばAutomatic LayerやPrimitive Layerでは、こないだ決めたように座標値の中にNormalized座標やView座標を含んでいていいけど、Normalized LayerではPlot座標は全部Normalized座標に変換されていないといけない。Primitive LayerはPlot座標をNormalized座標に変換してNormalized Layerに渡す。そのときもともとのデータにNormalized座標やView座標が含まれていた場合はそれに対しては何もせず、そのままNormalized Layerに渡す。Normalized LayerもView座標にはなにもせずNormalized座標をView座標に変換して渡す。最終的には全部がView座標になる。
こんなとこか。
コメント 0