ベクタパス作成ツール 2 version 4

2019/07/19 10:42 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
hogettaベクタパス作成ツール 2
# オブジェクトベースに書き直し
190718
- 日中調べたことを家で実験、概ね思ったとおりなので、Qtのパスオブジェクトを直接操作する方向で進めることが出来そう
- 保存も出来たので今後幅が広がると思う
**今更だけどQtは凄いです**

## パスオブジェクトのエレメント
- パスのエレメントのメンバーは type,x,y の三つだけ、これを出力した結果が以下で、前回の矢印のパスのデータです
- タイプの種類は次の通り
QPainterPath.MoveToElement 0 
QPainterPath.LineToElement 1 
QPainterPath.CurveToElement 2 
QPainterPath.CurveToDataElement 3 
座標をポイント p とコントロールポイント cp にわけたとして、cpは全て3だと思ってたけどそこは違う
矢印がpになるが、ベジェでいうと

format: 0 x: 251.0 y: 45.0     <---
format: 2 x: 288.0 y: 118.0
format: 3 x: 341.0 y: 191.0
format: 3 x: 356.0 y: 233.0  <---
format: 2 x: 322.0 y: 209.0
format: 3 x: 301.0 y: 200.0
format: 3 x: 281.0 y: 193.0  <---
format: 2 x: 279.0 y: 263.0
format: 3 x: 241.0 y: 432.0
format: 3 x: 173.0 y: 488.0  <---
format: 2 x: 214.0 y: 416.0
format: 3 x: 226.0 y: 239.0
format: 3 x: 221.0 y: 193.0  <---
format: 2 x: 198.0 y: 199.0
format: 3 x: 179.0 y: 207.0
format: 3 x: 145.0 y: 224.0  <---
format: 2 x: 179.0 y: 186.0
format: 3 x: 223.0 y: 125.0
format: 3 x: 251.0 y: 45.0

```
    def pathsave(self):
        fname=os.path.join(os.path.dirname(__file__) , 'qtsave')
        f = QFile(fname)
        f.open( QIODevice.WriteOnly )
        ds = QDataStream(f)
        ds.__lshift__(self.path)
        f.close() 
    def pathload(self):
        self.path=mypath(QPointF(0,0))
        fname=os.path.join(os.path.dirname(__file__) , 'qtsave')
        f = QFile(fname)
        f.open( QIODevice.ReadOnly)
        ds = QDataStream(f)
        ds.__rshift__(self.path)
        f.close() 
        self.path.makepointrect()
        self.update()
``````


---
--> [PyQt でベクターオブジェクト作成ツールを作る #](https://mimemo.io/m/3Rx1XoR367le95E)

ベクタパス作成ツール       

オブジェクトベースに書き直し

190718

  • 日中調べたことを家で実験、概ね思ったとおりなので、Qtのパスオブジェクトを直接操作する方向で進めることが出来そう
  • 保存も出来たので今後幅が広がると思う
    今更だけどQtは凄いです

パスオブジェクトのエレメント

  • パスのエレメントのメンバーは type,x,y の三つだけ、これを出力した結果が以下で、前回の矢印のパスのデータです
  • タイプの種類は次の通り
    QPainterPath.MoveToElement 0
    QPainterPath.LineToElement 1
    QPainterPath.CurveToElement 2
    QPainterPath.CurveToDataElement 3
    座標をポイント p とコントロールポイント cp にわけたとして、cpは全て3だと思ってたけどそこは違う
    矢印がpになるが、ベジェでいうと

format: 0 x: 251.0 y: 45.0 <---
format: 2 x: 288.0 y: 118.0
format: 3 x: 341.0 y: 191.0
format: 3 x: 356.0 y: 233.0 <---
format: 2 x: 322.0 y: 209.0
format: 3 x: 301.0 y: 200.0
format: 3 x: 281.0 y: 193.0 <---
format: 2 x: 279.0 y: 263.0
format: 3 x: 241.0 y: 432.0
format: 3 x: 173.0 y: 488.0 <---
format: 2 x: 214.0 y: 416.0
format: 3 x: 226.0 y: 239.0
format: 3 x: 221.0 y: 193.0 <---
format: 2 x: 198.0 y: 199.0
format: 3 x: 179.0 y: 207.0
format: 3 x: 145.0 y: 224.0 <---
format: 2 x: 179.0 y: 186.0
format: 3 x: 223.0 y: 125.0
format: 3 x: 251.0 y: 45.0

    def pathsave(self):
        fname=os.path.join(os.path.dirname(__file__) , 'qtsave')
        f = QFile(fname)
        f.open( QIODevice.WriteOnly )
        ds = QDataStream(f)
        ds.__lshift__(self.path)
        f.close() 
    def pathload(self):
        self.path=mypath(QPointF(0,0))
        fname=os.path.join(os.path.dirname(__file__) , 'qtsave')
        f = QFile(fname)
        f.open( QIODevice.ReadOnly)
        ds = QDataStream(f)
        ds.__rshift__(self.path)
        f.close() 
        self.path.makepointrect()
        self.update()

--> PyQt でベクターオブジェクト作成ツールを作る #

ベクタパス作成ツール