enchantMOONでほぼ指定した矩形に消せるシール作った

enchantMOON の消しゴムは広範囲を消すのが大変なので、矩形で範囲を指定して消せるものを作ってみた。
と言っても、矩形の左上と右下を指定してシールをタップすると、その範囲内の線が削除されるだけの本当に簡単なもの。

 シールのコード

シールのコードは GitHub に置いておきました。
もし使ってみたいとか興味のある方はどうぞ。

実際に enchantMOON で使えるようにする方法(インストール方法?)は先日のカンファレンスの資料を見ればわかる(かな?)

Updated:2013/09/01
とりあえず下のリンクを enchantMOON でクリックするか、ココで説明されている URL を開くシールで URL を入力するとシール台帳にダウンロードできます。

 使い方
  1. まず消す範囲(長方形)を指定します。
    範囲の指定方法は、消したい長方形の、左上、右下の順番にドット(線でもOK)を打ちます。
  2. 指定し終わったらシールをタップすると、ちょっと考えた後に指定範囲内の線が消えます。
 注意点
  • 消したらアンドゥはできません!
    大事な物はどこかにバックアップ取るなどしてから!
  • 速い線だと残ったり消し過ぎたりが生じます。
  • 線量が多いとやたらと時間がかかります。
  • しばらく待ってみても何も起きない場合は、たぶんエラーが起きているので3本指スワイプでエラーをキャンセルすると enchantMOON を使える状態に戻ります。
 コードでやってること

やってることは思い切り簡単。

  • 範囲指定の矩形の座標は、最後の 2つの stroke から得る
  • 残りの stroke の座標が矩形に入っているかどうか確認して残すか捨てるか判断
  • stroke の途中で消えてまた現れる場合は、消える時に data以外は全てコピーしておいた空の stroke の data に座標を入れる

ということをチマチマとやっているので、線が増えると途端に遅くなる。
そして stroke を新しく配列用意してとかしているのも、たぶんメモリや時間に悪そう…。

 おまけ

チマチマ範囲を指定して削除なんかしてられないよ!
という人は画面を全部消しちゃうコード。

var page = MOON.getCurrentPage();
var backing = page.backing;
var paperJSON = MOON.getPaperJSON(backing);

paperJSON.strokes = [];

MOON.setPaperJSON(backing,paperJSON);

MOON.finish();

main.js をこれに変えればサクっと画面消去できる。

デバッグというかあれこれ触っているときは、シールを残してページの中身を一気に消したいことが多かったのでついでに作った。
他にもページの ID を表示してくれるシールとか、enchantMOON と Mac を行き来していると色んなものが欲しくて作り始めてしまう。

けど、こんなものがあったなんて!
さっきシールのインストール方法説明しているページないか調べていたら見つけて、ショック…。

いつの間にかこんなに便利になっていたなんて!

 最後に

コードは思いついたままに書きっぱなしなので余計なことが多くて読みにくいと思うけど、とりあえず動いたからもう満足。

というか、enchantMOON のライブラリの中で絶対に stroke を Region にしてくれる機能があると思ったのだけど見つけられなかった…。

それがあれば inRect を inRegion にして範囲指定を Rect でなく Region にできるのに!

誰かそれを見つけてサクっと Region 消しゴム作ってくれないかな〜。

 参考ページ

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)