from 付箋の選択・圧縮 UI設計 付箋・パスの投げ縄選択

  • 細い線でパスを描く

  • 離したら

  • 当たり判定

    • ×選択パスの各点からのhitTest
      • →パスの中が選ばれない
    • 付箋は4隅、パスは各点から選択範囲パスに対してhitTest
      • オブジェクトの数が増えると重たくなりそう
    • パスとパスのブーリアン演算を使う案
    • https://github.com/lsst-epo/paper-select-tool/tree/master
      • これは「与えられたArray({point: Point})の各pointでhitTestする」というだけのもの
    • →まずブーリアン演算で実装してみる
      • 十分な速度で動くかどうかを検証
      • 100付箋のintersectはiPadでも20msecで動く
      • intersectではなく完全に包含されている場合の当たり判定が、予定していたブーリアン演算でうまく動かない
        • これはおそらく、intersectはPathとShapeに対して定義されているのに
        • subtractはPathとPathであることを仮定した実装になっていて
        • 内部でargがPathだと思って呼び出したメソッドが存在しなくて死んでいるのだな
      • 対処
        • 完全に内包されている場合、相手がShapeならShapeの重心に対する点でのhitTestで確実にPathに当たるはず
        • 相手がPathである場合にsubtractが使えるのであれば問題ない
        • パスがfillされてないといけないのでcloneしてopacity: 0でfill。
      • 付箋との間の当たり判定は問題なく動くようになった
      • パスとの当たり判定も動く

image

pRegroup-done-2019