enchantMOON の消しゴムは広範囲を消すのが大変なので、矩形で範囲を指定して消せるものを作ってみた。
と言っても、矩形の左上と右下を指定してシールをタップすると、その範囲内の線が削除されるだけの本当に簡単なもの。
シールのコードは GitHub に置いておきました。
もし使ってみたいとか興味のある方はどうぞ。
実際に enchantMOON で使えるようにする方法(インストール方法?)は先日のカンファレンスの資料を見ればわかる(かな?)
Updated:2013/09/01
とりあえず下のリンクを enchantMOON でクリックするか、ココで説明されている URL を開くシールで URL を入力するとシール台帳にダウンロードできます。
- まず消す範囲(長方形)を指定します。
範囲の指定方法は、消したい長方形の、左上、右下の順番にドット(線でもOK)を打ちます。 - 指定し終わったらシールをタップすると、ちょっと考えた後に指定範囲内の線が消えます。
- 消したらアンドゥはできません!
大事な物はどこかにバックアップ取るなどしてから! - 速い線だと残ったり消し過ぎたりが生じます。
- 線量が多いとやたらと時間がかかります。
- しばらく待ってみても何も起きない場合は、たぶんエラーが起きているので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 消しゴム作ってくれないかな〜。