[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000656] call for design of the ruby plotter



堀之内です。

今、NumArray 充実化に加えて、川那辺くんに描画機能の設計を
頼んでおり、一緒に検討しようとしてます。NumArrayは振る舞い
という点では仕様は最初からかなり固まっていたのですが、
描画機能のほうはとても大きな自由度があります。というのも、
当初は dcl を ruby 的に使い良くする wrapper さえ書けばいいかと
思っていたのですが、dclに出来るだけとらわれない形で、対話的に
利用すると言う観点からあらまほしき形を探るべきだとの認識に至っ
たからです。こうなると、どう設計するかで、どんな使い勝手の
ものが出来るかや、維持・拡張性が大きく変わります。

例えば dcl を、データに視覚可する下位のツールと考えることも
できるしょう。例えば a-z のフォントは 26 個の整数に視覚表現
を与えますが、dclもそんな風に考えると随分自由度があるような
気がするでしょう。フォントはワープロの一部でしかないです。

そこでまず、どんな風に「使える」ものが欲しいかを、
「ユーザーとしての立場」から皆さんに上げて頂きたいと思います。
dclを使う場合の技術的制約はとりあえず考えないで下さい。それ
は後で検討すればいいのです。どんな機能を将来的に実装して行く
かを良く考えることは、その機能をすぐ実装するか否かに関わらず、
設計上の大きな指針となるはずです。それをおろそかにすると後で
苦労するでしょう(NumArrayでさえそれで苦労してるもんね
> 川那辺君 :-)。

ということで皆さんよろしく。まず皮切りに私の要望を並べたて
てみます。まだあるかもしれませんが、とりあえず。こんなの 
dcl で出来るの?と思うかもしれませんが、気にしないで下さい。
しかも、rubyなら意外と結構できそうです。参考書は
「オブジェクト指向における再利用のためのデザインパターン」
(Gamma他、ソフトバンクパブリッシング)です。本プロジェクト
の必読書です。といっても私もまだ少ししか読んでないので、こ
れから頑張ります。

では、要望です。


● 1次元図、2次元図、3次元図が描ける。具体的にどのような絵
   が描けるかはツールによって異なる(dclならコンター、色塗り、
   折れ線他多数)。

● dclなどの下位の描画ツールに出来るだけ依存しないインターフェースを
   を持ち、ツールの交換を可能にする。

● さらに、複数のツールが同時に使えるとなお良い(dclとopenGLの
   組み合わせとか)。(しかし複数のツールを単に併用するのでなく
   協調させようと思うと、それぞれが描く図を完全にブラックボック
   スと出来なくなることに注意する必要がある...)

● 図の大小や配置が変えられる(画面分割とか)。自由にレイアウト
   できる。

● history, undo&redo機能

● 特に変えなければ以後有効という形でグラフィックパラメターの設定ができ
  る。一括してデフォルトに戻せる。設定にも history 機能をサポート。なお
  パラメターには下位のツールに依存しない共通なものと、各ツールに固有な
  ものがあり得る。それを許容できるべきである。

● グラフィックパラメターの一時的な設定もできる(描画一回限り有効で自
   動的にクリアされる。何をもって一回とするかは場合によりけり)

● 出力デバイスが複数選べる(X等の画面、PS、ビットマップ etc)。画面出
   力以外では、ヒストリー機能は限られてもよい。

● 出力デバイスを切り替えられる

● 画面に書いたものをPSに出すとか出来る。現在の画面を出せるだけでなく、
   ある程度過去に遡って出せると良い。

● 紙の上での大きさは変えられる。たとえば画面いっぱいの絵を紙の半分
   に書き出したりポートレートやランドスケープを出力時に変更できる
   とよい。

● マウス位置取りこみが可能 (2次元平面内で一個以上の点列の位置を
   device,Normalized,User等の各座標系での値を配列として取りこむ)

● マウスにより長方形を描く要領で描画ウィンドーを生成出来る

● マウスにより描画オブジェクトを「選択」出来る

● マウスで選択したオブジェクトを加工したり、テキストを貼りつけたり
   出来る

---
堀之内 武
京大宙空電波科学研究センター