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);
ひとまずこれで終了。

