MOONPhase version 2.9.1
enchantMOONが2.9.0以降ではストロークの編集の仕方が変わったようなので検証してみた。
まずはファイル構成から確認。
新規ページを作成すると以下のようなファイル構成になる。
Data |-MyNotebook1 |-20140422075912433 -----------1.ページのフォルダ |-20140422075912435 -----------2.ストロークのフォルダ | |-canvas.png ------------7.ストロークの画像 | |-info.json -------------8.ストロークの情報 |-info.json -----------3.ページの情報 |-myscript.index -----------4.(ページ内の文字認識の結果かな?) |-screenshot.jpg -----------5.(ページ全体のスクリーンショット) |-thumb.png -----------6.(4のサムネイル。ページ一覧に使うのかな?)
まだなにも描いていない状態の『info.json —–8』をみると以下のようになっている。
{ "version":"1.0", "x":0, "y":0, "width":768, "height":1024, "scale":1.0, "color":-16777216, "externalStrokes":[] }
次に線を一本書くと以下のようになる。
{ "version":"1.0", "x":0, "y":0, "width":768, "height":1024, "scale":1.0, "color":-16777216, "externalStrokes":[{ "name":"stroke1.json", "x":75, "y":82, "width":62, "height":8, "size":219 }], "clip":{ "width":1.0, "color":-1, "type":"pen", "subtype":"", "data":[ 0.0,0.0,3.0,0.0,1024.0,3.0,768.0,1024.0,3.0,768.0,0.0,3.0,0.0,0.0,3.0 ] } }
externalStrokesに情報が追加されている。
(clipという情報も追加されているが、これはまた後で調べよう。)
また、stroke1.jsonというファイルが追加されている。
Data |-MyNotebook1 |-20140422075912433 -----------1.ページのフォルダ |-20140422075912435 -----------2.ストロークのフォルダ | |-canvas.png ------------7.ストロークの画像 | |-info.json -------------8.ストロークの情報 | |-stroke1.json ----------9.外部ストロークの情報 |-info.json -----------3.ページの情報 |-myscript.index -----------4.(ページ内の文字認識の結果かな?) |-screenshot.jpg -----------5.(ページ全体のスクリーンショット) |-thumb.png -----------6.(4のサムネイル。ページ一覧に使うのかな?)
stroke1.jsonの中身はこんな感じ。
{ "strokes":[{ "width":2.0, "color":-1, "type":"pen", "subtype":"flat", "data":[ 81.09375,82.85715,0.42521995, 80.25,83.85715,0.44379276, 79.3125,85.0,0.4682307, 135.5625,88.64286,0.5268817, 135.75,88.14286,0.4408602, 136.03125,87.50001,0.34115347 ] }] }
dataの中身が実際のストロークの情報で、X座標,Y座標,筆圧,X座標,Y座標,筆圧,,,,,,,,,とう形で格納されている。
続いて2本目の線を書くとstroke1.jsonが以下のように変わる。
{ "strokes":[{ "width":2.0, "color":-1, "type":"pen", "subtype":"flat", "data":[ 81.09375,82.85715,0.42521995, 80.25,83.85715,0.44379276, 135.09375,89.00001,0.8357771, 135.5625,88.64286,0.5268817, 135.75,88.14286,0.4408602, 136.03125,87.50001,0.34115347 ] },{ "width":2.0, "color":-1, "type":"pen", "subtype":"flat", "data":[ 81.5625,159.85715,0.4408602, 81.75,162.07144,0.45063537, 82.125,164.14287,0.4623656, 138.75,163.35715,0.5659824, 138.84375,162.7143,0.3773216 ] } ] }
また、info.jsonの中のexternalStrokesの情報も更新されている。
{ "version":"1.0", "x":0, "y":0, "width":768, "height":1024, "scale":1.0, "color":-16777216, "externalStrokes":[{ "name":"stroke1.json", "x":75, "y":82, "width":64, "height":93, "size":492 }], "clip":{ "width":1.0, "color":-1, "type":"pen", "subtype":"", "data":[ 0.0,0.0,3.0,0.0,1024.0,3.0,768.0,1024.0,3.0,768.0,0.0,3.0,0.0,0.0,3.0 ] } }
さあここからいよいよストローク情報の編集にトライしてみる。
var page_info = MOON.getCurrentPage(); //表示中のページのinfo.json読み込み var paper_ID = page_info.backing; //ストロークフォルダのIDを取得(backing) var paper_strokes = MOON.getStrokeJSON(paper_ID); //stroke1~stroke"n".jsonを取得 var paper_stroke1_json = paper_strokes[0].strokes; //stroke1.jsonの情報を取得 var paper_stroke1_data1_json = paper_stroke1_json[0].data; //stroke1.jsonの一本目の線のdataを取得 paper_stroke1_data1_json[0] = 40; //stroke1.jsonの一本目の線の一点目のX座標を変更。 MOON.setStrokeJSON(paper_ID, paper_strokes); //変更したストローク情報を反映
上記を実行すると書いた線が変更されるのが確認できる。
ver.2.8.0以前のsetPaperJsonと比較して劇的に早くなっている気がする。
これまでに作ったシールの最適化をせねば~~~~。
もう少し検証してみた。
このようにシールからストロークを変更した場合、シール実行直後に画面は更新されるが、ストロークフォルダのinfo.jsonはまだ書き換えられていないようだ。但し、何らかのタイミング(ページ遷移?ページ一覧?シール台帳?その他?)で自動的に更新されているようだ。
この辺の情報を扱う場合には何かしらの対応が必要になりそうなので注意。