Mac用プロットライブラリ-4 [考え中 - プロットライブラリ]
プロットライブラリの設計の続き。
線や四角形など、プロットに使う基本的な形状、Primitiveをどうするか。
Primitives
2次元の折れ線や3次元の面などユーザから見れば点列でよいのだが、実際に描画する場合、単純化したデータに一旦分解した方が実装は簡単になる。この単純化したデータ構造をprimitiveと呼ぶことにする。
primitiveには2次元、3次元とも
- point
- line(polygon)
- ellipse
- text
- raster
- group
- style
の7種類にする。最初の4つは読んで字のごとしで、raster primitiveはビットマップイメージのこと、groupは2次元primitiveの集合のことである。複数のprimitiveを描画する場合、かならずgroupにしなければならない。groupの中では順番が意味を持つ。つまりgroupの後ろにあるprimitiveほど上に描画される。groupは入れ子にできる。
groupを単一のprimitiveと見なすことで2次元プロットの描画結果を3次元プロットに貼付けることが出来るようにしよう。
また、最後のstyleはprimitiveの状態を変更するためのものでそれ自身描画はされない。線幅、線や塗りつぶしの色、陰付けなどを指定するためのPrimitiveである。その指定はstyleが含まれたgroupの中のその後ろに位置するprimitiveすべてに影響する。groupが入れ子になっている場合、内側のstyleはその外には影響を及ぼさない。
これは先に言ったOptionと競合する。Optionを使うなら線幅、塗りつぶしの色なんかはすべてOptionで設定すべきだろう。しかし、groupを使って入れ子にできるとなれば、スタイルの設定もスタックにできるようにすべきだろう。そのほうがQuartzとの相性もいい。Mathematicaはスタイルを使い分けてるな。Optionで設定できるスタイルと外で設定するスタイルと。普通の線幅や色は外で設定している、というか全体をラップするGraphicsやGraphics3DしかOptionを持たず、RectangleやLineはOptionがない。このへん、Mathematicaの描画システムのPostScript(MathematicaはAbbreviated PostScript(簡略体)と言ってる)が反映している。う〜ん、どうするか。この決定は後回しにしよう。
2次元の折れ線は内部的にlineに変換される。2次元のバーグラフのバーも一本一本が外枠を表すlineに内部的に変換される。3次元の、例えば立方体もそれぞれの面を表す6つのlineの集合に変換される。
primitiveは定型的なプロットをしたいだけであれば内部的なデータ構造として無視して良い。より微妙な制御をしたいとき、plot objectにデータとして渡すことができるようにする。このへんの感じもMathematicaと同じにする。
いずれにせよ、Primitiveは直接Quartzの命令に変換できるものだけにする。つまりPrimitiveの描画はそのままQuartzに渡せば表示できてしまうものに限る。そうすればX11なんかに比べれば低レベルの描画は非常に簡単になる。
コメント 0