MOONPhase version 2.9.1
前回の続き、enchantMOON 2.9.0以降のストロークの編集について検証してみた。
言葉がわかりづらいので、勝手に以下のように呼ぶことにする。
- ストロークグループ:externalStrokesのstroke1.json, , のファイル単位の塊
- ストローク:一本の線でつながってる線。strokesオブジェクト。(幅や色の情報を持つ)
- 点:ストロークを構成する点。strokesオブジェクトの中のdata配列に格納。
A.既存ストロークの点を削除
例)0番目のストロークグループの0番目のストロークの最後から10点を削除するコード。
var paper_ID = MOON.getCurrentPage().backing; var paper_strokes = MOON.getStrokeJSON(paper_ID); var No_Group = 0; var No_Stroke = 0: var cnt_delete_point = 10; for (var i=0; i<3*cnt_delete_point; i++){ paper_strokes[No_Group].strokes[No_Stroke].data.pop(); } MOON.setStrokeJSON(paper_ID, paper_strokes);
B.既存ストロークに点を追加
例)0番目のストロークグループの1番目のストロークの最後に点を追加するコード。
var paper_ID = MOON.getCurrentPage().backing; var paper_strokes = MOON.getStrokeJSON(paper_ID); var No_Group = 0; var No_Stroke = 1: var add_point_x = 300; var add_point_y = 300; var add_point_p = 1.0; paper_strokes[No_Group].strokes[No_Stroke].data.push(add_point_x); paper_strokes[No_Group].strokes[No_Stroke].data.push(add_point_y); paper_strokes[No_Group].strokes[No_Stroke].data.push(add_point_p); MOON.setStrokeJSON(paper_ID, paper_strokes);
C.既存ストロークの削除
例)0番目のストロークグループの2番目のストロークを削除。
var paper_ID = MOON.getCurrentPage().backing; var paper_strokes = MOON.getStrokeJSON(paper_ID); var No_Group = 0; var No_Stroke = 2: paper_strokes[No_Group].strokes.splice(No_Stroke,1); MOON.setStrokeJSON(paper_ID, paper_strokes);
D.新規ストロークの追加
例)0番目のストロークグループの0番目のストロークと同じスタイルの直線を0番目のストロークグループの最後に追加するコード。
var paper_ID = MOON.getCurrentPage().backing; var paper_strokes = MOON.getStrokeJSON(paper_ID); var No_Group = 0; var No_Stroke = 0: var add_stroke = JSON.parse(JSON.stringify(paper_strokes[No_Group].strokes[No_Stroke])); //スタイルのコピー add_stroke.data =[100,500,1.0,600,500,1.0]; //データの作成 paper_strokes[No_Group].strokes.push(add_stroke); MOON.setStrokeJSON(paper_ID, paper_strokes);
おまけ.新規ストロークグループの追加
これまで使用した範囲ではstroke2.jsonを見たことがないで想像の範囲です。
一応動きましたが、挙動は怪しいです。
例)0番目のストロークグループの0番目のストロークと同じスタイルの直線を新たに追加したストロークグループに追加するコード。
var paper_ID = MOON.getCurrentPage().backing; var paper_info = MOON.getPaperJSON(paper_ID); var paper_strokes = MOON.getStrokeJSON(paper_ID); var No_Group = 0; var No_Stroke = 0: var next_Group = paper_info.externalStrokes.length; paper_info.externalStrokes[next_Group] = JSON.parse(JSON.stringify(paper_info.externalStrokes[next_Group -1])); paper_info.externalStrokes[next_Group].name = 'stroke' + (next_Group +1) +'.json'; MOON.setPaperJSON(paper_ID, paper_info); paper_strokes = MOON.getStrokeJSON(paper_ID); var add_stroke = JSON.parse(JSON.stringify(paper_strokes[No_Group].strokes[No_Stroke])); //スタイルのコピー add_stroke.data =[100,600,1.0,600,600,1.0]; //データの作成 paper_strokes[No_Group+1].strokes.push(add_stroke); MOON.setStrokeJSON(paper_ID, paper_strokes);
ひとまずこれで終了。