太さの変わるBezier曲線の生成 - その2 [考え中 - 太さの変わるBezier曲線]
こないだ急に始めた、タブレットを使ってPhotoshopでブラシを使って描くような太さの変わる線をBezier曲線で描くソフトを作る話。前回、方針ととりあえずの問題点を整理した。もう少し具体的な内容を考えてみる。
基本的な考え方
描画モデル
具体的にどうやって線を引くのか、モデルを作ってみる。
図-4のように- 楕円のブラシを考える
- 楕円の長軸と短軸をa、b、座標軸に対する長軸の角度をφとする
- ペンの位置ごとに筆圧に比例した楕円を置く
- 楕円の大きさは筆圧に比例するが、長短軸比、角度は変化しない
- 楕円に接する滑らかな線を引く
- その線を外形とする閉じた形状をブラシで描画された線とする
手順
「大まかな方針」として書いたけどもう少し具体的に、どうやって進めるかをまとめておく。
- タブレットのペンを追跡できるNSViewのサブクラスを作っておく
- 描画されるNSBazierPathのデータベースを作っておく
- マウスダウンイベントがあるとペン位置のトラックを始める
- NSEventで送られてくるペンの位置と筆圧を記録する
- ドラッグイベントの間はユーザへのフィードバックのための表示を行う
- ドラッグイベントが終わったらペン位置を順に折れ線でつなぐ
- それぞれのペン位置で、折れ線に垂直でかつ筆圧に比例したオフセットを持つ点(二つ)をとる
- 端点の形状を作るための点を追加する
- 折れ線を囲むようにオフセットした点をつなぐ
- 制御点を追加して滑らかにする
- ユーザフィードバック用の描画を消去する
- NSBezierPathとしてNSViewに描画する
- データベースに、描画されたNSBezierPathを追加する
- タブレットを追跡できるNSViewの具体的なコーディング方針
- ユーザフィードバックの具体的な方法
- カリグラフィに対応したオフセットの生成法
- スムージングのための具体的な制御点の追加方法
- 端点用の制御点の追加方法
さっさとアルゴリズムの検討に入りたいけど、今日はもう遅いので寝ることにする。
2008-09-29 22:51
nice!(0)
コメント(0)
トラックバック(0)
コメント 0