0 画像にパスを加えるツール 3
190731
マウスで自由変形
- rectのCPは変形の都度作るように変更、良い感じになった
- transform をパスに直接適用するか、itemに適用するかで挙動が違うことはわかった、ある程度思った通りに動くようになってきた
- 構想としては、単純なrectを自由に変形できるようにしておいて、パーツとして使うパスはこのrectの子供としてsceneに追加することで、このパーツを自由に変形すること
- 実験ではうまくいってるので方向性は良いと思う
- ただし、rectについて、itemに対する変形は子供に伝わるが、rect内のパスを直接変形してしまうと子供に伝わらない
まあ当然だな、やられた - しかし、itemベースのtransformはうまくいかないのだ
回転した状態で横だけ伸ばすと、シアーになる
変形の順番の問題だな、多分
回転は最後にしなくちゃいけない・・・どうやって??? - あと、パスとrectの関係がちょっと難しい。全て0を起点にしてあれば良いんだが・・・
パスパーツは少なくとも保存するときはゼロ起点にしておく必要があるな
scene保存
View.mapToScene( QPoint(0,0) )
これでsceneの起点のview座標が得られるので、viewの方が大きい場合は単純にこれで補正すれば良い
うまく書き出せるようにはなった
190801
Rotate Transform
- CPのパスを作るのはやめる、包含判定はRectで、描画もdrawRectにした
- これでrectアイテムは良かったが、矢印のパスにするとそもそもCPをマウスが認識しなかった
マウスのシェイプ内しかマウスは反応しないので、boundindRect 上のcpはドラッグできない - transform はイロイロ実験したが、rotateとtransformを組み合わせるとうまくいかないことがわかった
xだけ小さく、縦に細長くしてからrotateすると、普通には回転せず、シアーのように回転する - そもそものtransform の理解の問題だと思う、もっと勉強が必要か??
- item を回転させて、縦横は item の path を直接transformすれば思った通りの変形にはなる
実用化を目指すならこの方法が簡単
マウスは難しいから一部キーとの併用にはなると思うけど - エクセルの図形は簡単に変形できて素晴らしい
当たり前のように使ってたけどなあ、むつかしいものだ
190814
- 旅行からの夏休みでしばらくプログラミングはお休みしていた
マウスでグリグリがどうしてもうまくいかなくてちょっと行き詰まってたこともあったんだけど
改めて考えてみたらそんなに複雑ではないと思うようになって開発を再開 - 基本は上に書いたとおり、スケールはitemのパスに直接mapして、回転をitemに適用することにした
- パスの矩形表示とマウスキャプチャが課題の一つだったが、矩形はパスでは無くあくまでdrawのみにして、マウスをgrabしてしまうことにした
- 基本は動いてるけど、回転後のスケールがうまくいかない
マウスの移動量をベクトルにして回転変換したがこれがだめっぽい
マウスをgrabした後のリリースもうまくいかない
ただ方向はこれで良さそうなのでこの方向で進めよう (・∀・)ノ
190815
Transform by mouse
-
マウスでの回転は少し出来た
アイテムの中心点とマウスプレス、ムーブの三点から角度を計算して回転させた
回転角がプラスなのかマイナスなのかの判定が難しそう
90度以上回すと変になり、180度以上は回せないが、なぜでしょう?? -
スケーリングはうまく動作するようになった
itemを回転させても綺麗に動作するのでスケーリングはクリア
問題は私が作ったパスが原点 (0,0) から離れていることだった
これはパスメーカーの仕様なので直したくない
PathItemの派生クラスの中で、パスを読み込んだときに原点を起点とするようにtranslateすることで解決
アイテム内でパスのBoundingRectのx,yを取得して、これが (0,0) になるようにしてやった -
移動がおかしくなってる
これはsuperでデフォルトの機能を使っていたんだが、うまく動かない
前は動いてた
マウスをグラブしたあたりでおしくなったような??
原因がよくわからないが、座標系の問題だろう
常にマウスの座標が来るが、itemの上と外で座標系が違ったりして? -
試しに moveby で自力で実装してみたら、回転しなければ問題なく動くが、回転したとたんおかしくなる
それも少しの回転なら問題ないのに、ある角度を超えると劇的におかしくなる ┐('д')┌
sceneとitemの座標系の問題と思うが・・・・
座標を何かでmapしてやれば良いと思うんだけど
コメント(0)