SSブログ

Mac用プロットライブラリ-4 [考え中 - プロットライブラリ]

プロットライブラリの設計の続き。

線や四角形など、プロットに使う基本的な形状、Primitiveをどうするか。

Primitives


2次元の折れ線や3次元の面などユーザから見れば点列でよいのだが、実際に描画する場合、単純化したデータに一旦分解した方が実装は簡単になる。この単純化したデータ構造をprimitiveと呼ぶことにする。

primitiveには2次元、3次元とも

  1. point
  2. line(polygon)
  3. ellipse
  4. text
  5. raster
  6. group
  7. 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なんかに比べれば低レベルの描画は非常に簡単になる。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立11/24また七が浜 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。