なんちゃってMathematicaを作る - その21 [なんちゃってMathematica]
思い出したようにときどき続けている「なんちゃってMathematica」シリーズ。ここのところプロットライブラリの設計を続けている。前回までで、座標表現を3種類用意すること、その3つを混在して使うことを許すこと、そしてその結果発生する問題の解決策を考えた。
座標表現の話題はこのくらいにして、今日はプロットの基本オブジェクトであるPrimitiveに関してもう一度整理する。
の8つにする。
option primitive以外のPrimitiveはすべて
ただし、文字列のフォントだけは、文字列オブジェクトを生成したときに独立に指定することにする。そうでないと描画するときまで文字列のAABBが確定できなくなって、normalized→view座標変換がうまくいかなくなる。残念だけどこれはしょうがない。optionを一度パースすればいいけど、それはカッコ悪いしめんどくさい。それにそういう遠いところを参照しにいくようなコードってバグの温床だし。
option primitiveは独立に存在しても描画にはなにも影響しないけど、group primitiveの中ではそれ以降のprimitiveの描画に影響を与える、ということにする。つまりgroupの中が
ただし、こういったplot symbolも文字列と同じで大きさの指定だけはoptionでは指定できない、ということになる。つまり文字列とplot symbolは大きさはオブジェクトを作るときに決まっていて、色はoptionで指定される、ということになる。ちょっといまいち。まあしょうがない。
line primitiveは折れ線やスムージングた曲線、あるいは長方形や三角形などのsymbolオブジェクトもこれで作る。symbolオブジェクトを表す場合にはlineは閉じて中を塗りつぶさないといけない。これはoptionで指定することにする。
それと、multiLineというのを追加しよう。これは、NSBezierPathでは曲線を描いている途中でmoveToPoint:メソッドを呼ぶと別れた線分が描ける。これに対応するもので、座標軸の目盛(Tick Mark)などをひとつの線分として扱うためのものである。こうしておくとIllustratorなんかに読み込んだとき、小さな線分がバラバラにならずにすむ。
座標表現の話題はこのくらいにして、今日はプロットの基本オブジェクトであるPrimitiveに関してもう一度整理する。
5 Primitives再考
5.1 PrimitiveとOption
primitiveはpoint | 点、最終的には描画されない |
line | 曲線 |
multiLine | 複合曲線 |
ellipse | 楕円 |
text | 文字列 |
raster | ビットマップ画像 |
group | グループ |
option | オプション |
- 座標値
- (もし必要なら)オプション
- optionがnilかどうか見る
- optionが設定されていればoption辞書をスタックに積む
- 内容を描画する
- スタックトップを取り除く
ただし、文字列のフォントだけは、文字列オブジェクトを生成したときに独立に指定することにする。そうでないと描画するときまで文字列のAABBが確定できなくなって、normalized→view座標変換がうまくいかなくなる。残念だけどこれはしょうがない。optionを一度パースすればいいけど、それはカッコ悪いしめんどくさい。それにそういう遠いところを参照しにいくようなコードってバグの温床だし。
option primitiveは独立に存在しても描画にはなにも影響しないけど、group primitiveの中ではそれ以降のprimitiveの描画に影響を与える、ということにする。つまりgroupの中が
- line1
- option(線幅を1ptに)
- line2
- option(線幅を10ptに)
- line3
5.2 Primitiveのその他の性質
点(point)はそれ自身描画されない、ということにした。たとえばグラフに目に見える点をうつ、というような場合はpoint primitiveに対して塗りつぶし円のprimitiveを相対指定することで実現する。こうしておけば点の位置を正確に指定できる(円の中心を点の位置とする)し、点以外の星形や三角形なんか(plot symbolと呼ぶ)も同じ方法で指定できる。そういう形状をライブラリとして作っておいて、コピーしたものの相対座標をpoint primitiveに指定すればいい。そういう形状は描画領域にかかわらず同じ大きさで表示されるべきなのでview座標で形が指定されるはずであるが、表示位置はplot座標で決まるはずである。ただし、こういったplot symbolも文字列と同じで大きさの指定だけはoptionでは指定できない、ということになる。つまり文字列とplot symbolは大きさはオブジェクトを作るときに決まっていて、色はoptionで指定される、ということになる。ちょっといまいち。まあしょうがない。
line primitiveは折れ線やスムージングた曲線、あるいは長方形や三角形などのsymbolオブジェクトもこれで作る。symbolオブジェクトを表す場合にはlineは閉じて中を塗りつぶさないといけない。これはoptionで指定することにする。
それと、multiLineというのを追加しよう。これは、NSBezierPathでは曲線を描いている途中でmoveToPoint:メソッドを呼ぶと別れた線分が描ける。これに対応するもので、座標軸の目盛(Tick Mark)などをひとつの線分として扱うためのものである。こうしておくとIllustratorなんかに読み込んだとき、小さな線分がバラバラにならずにすむ。
2012-04-08 20:47
nice!(0)
コメント(0)
トラックバック(0)
コメント 0