SSブログ

太さの変わるBezier曲線の生成 - その2 [考え中 - 太さの変わるBezier曲線]

こないだ急に始めた、タブレットを使ってPhotoshopでブラシを使って描くような太さの変わる線をBezier曲線で描くソフトを作る話。前回、方針ととりあえずの問題点を整理した。もう少し具体的な内容を考えてみる。

基本的な考え方

描画モデル

具体的にどうやって線を引くのか、モデルを作ってみる。

0927fig4.png
図-4のように
  • 楕円のブラシを考える
  • 楕円の長軸と短軸をa、b、座標軸に対する長軸の角度をφとする
  • ペンの位置ごとに筆圧に比例した楕円を置く
  • 楕円の大きさは筆圧に比例するが、長短軸比、角度は変化しない
  • 楕円に接する滑らかな線を引く
  • その線を外形とする閉じた形状をブラシで描画された線とする
と考えることにする。これはPhotoshopなどのブラシによる描画の考え方と一致するはずである(Photoshopでのブラシはビットマップだけど)。なお、ペンの傾きを指定できるタブレットの場合は、それによって長短軸比と角度を変えるようにしたいけど、どういうふうに変えればいいかは研究の余地有り。

手順

「大まかな方針」として書いたけどもう少し具体的に、どうやって進めるかをまとめておく。

  1. タブレットのペンを追跡できるNSViewのサブクラスを作っておく
  2. 描画されるNSBazierPathのデータベースを作っておく
  3. マウスダウンイベントがあるとペン位置のトラックを始める
  4. NSEventで送られてくるペンの位置と筆圧を記録する
  5. ドラッグイベントの間はユーザへのフィードバックのための表示を行う
  6. ドラッグイベントが終わったらペン位置を順に折れ線でつなぐ
  7. それぞれのペン位置で、折れ線に垂直でかつ筆圧に比例したオフセットを持つ点(二つ)をとる
  8. 端点の形状を作るための点を追加する
  9. 折れ線を囲むようにオフセットした点をつなぐ
  10. 制御点を追加して滑らかにする
  11. ユーザフィードバック用の描画を消去する
  12. NSBezierPathとしてNSViewに描画する
  13. データベースに、描画されたNSBezierPathを追加する
ということをやることにする。前回問題点としてあげた、いくつかのポイントがある。
  • タブレットを追跡できるNSViewの具体的なコーディング方針
  • ユーザフィードバックの具体的な方法
  • カリグラフィに対応したオフセットの生成法
  • スムージングのための具体的な制御点の追加方法
  • 端点用の制御点の追加方法
などである。

さっさとアルゴリズムの検討に入りたいけど、今日はもう遅いので寝ることにする。


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

献立09/29献立09/30 ブログトップ

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