今度はブラシパターンが回転するようにした。
タブペンの動きにあわせてブラシの向きが変わるので、こういうむらのある線になる。
ペイントツール プロトタイプ09。
WindowsApplication1.zip
起動はここからClickOnceで。ClickOnceはIE系で。
WindowsApplication1
操作
- 左ドラッグ(右でも可)
- 線を描く。
概要
線の向きにあわせてブラシパターン(i.png)を回転。というか、.NET Frameworkにあるライブラリに描画先領域を表す3座標を指示するだけ。
Graphics*1のDrawImageでは描画先を指示するだけで拡大・縮小・回転・変形・反転が同時にできるので、筆圧を線の太さに反映する処理と、線の向きをブラシパターンの回転角に反映する処理と、描画をDrawImageだけで行っている。この例では2度DrawImageを使ってるけど。
線の向き
直近の2座標から得たx増分とy増分を使って線の向きを求めている。
System.Math.Atan()でアークタンジェントを求めるだけ。
回転
描画先領域の左上、右上、それに左下の座標*2が必要。
筆圧を反映させて(ブラシパターンを拡大/縮小して)からブラシパターンの3頂点の座標*3を得て、それらを回転させている。
任意の座標を(ラジアン角)だけ回転させて、回転後の座標を求める式はこちら。
は回転の中心点。
で、回転後の座標群をCanvas(描画先)上の座標として扱って、描画。マウスポインターのある座標がブラシパターンの中央になるように調整して。
プロトタイプ09では拡大/縮小をBrush側で、回転をCanvas側(実はLayerだけど)で行っている。
それぞれでGraphics*4のDrawImageを使っているが、Brush側の処理は省略できそう。
BrushはDrawImageをせずに、その引数だけを生成できればいい。