接合点の角度を変えるだけで描画は変わります。
モジュールの修正。
・コメントをつけました。
//
//多角形の描画(座標指定)座標をそのまま描画(回転考慮あり)
//
function polygon_draw(){
shapetype = robotcode[idy][4];
polygonno = parseInt(robotcode[idy][5])-1;
// 接合点テーブルから中点の座標xの取得
if(robotcode[idy][9].substr(0,1) === "S") {
for(i=0; i<joinsumax; i++){
if(jointbl[i].kinds === robotcode[idy][9]){
midpointx = jointbl[i].realadx;
break;
}
}
} else {
// 多角形の中心座標x
midpointx = parseInt(robotcode[idy][9]);
}
// 接合点テーブルから中点の座標yの取得
if(robotcode[idy][10].substr(0,1) === "S") {
for(i=0; i<joinsumax; i++){
if(jointbl[i].kinds === robotcode[idy][10]){
midpointy = jointbl[i].realady;
break;
}
}
} else {
// 多角形の中心座標y
midpointy = parseInt(robotcode[idy][10]);
}
polysax = 0; polysay = 0;
if(robotcode[idy][11].substr(0,1) === "(") {
// 差分データとして保存
polysax = parseInt(robotcode[idy][11].substr(1,4));
polysay = parseInt(robotcode[idy][11].substr(6,4));
} else {
if((robotcode[idy][11].substr(0,1) != "△") && (robotcode[idy][11].substr(0,1) != "(")) {
// 回転角度データをして保存。
dr = parseInt(robotcode[idy][11]);
if((robotcode[idy][1].substr(0,1) === "2") || (robotcode[idy][1].substr(0,1) === "4")) {
dr = 360 - dr;
}
if(dr >= 360) dr - 360;
} else {
dr = 0;
}
}
y1sv = 0; x1sv =0;
// 差異が0でない場合は、中点に差異を加味する。
if(polysay != 0) y1sv = midpointy + polysay;
if(polysax != 0) x1sv = midpointx + polysax;
// 角度が設定されているなら回転させる。
if(dr != 0) {
// 回転する変数を計算
vBase1_c = Math.cos(dr*(Math.PI/180));
vBase1_s = Math.sin(dr*(Math.PI/180));
}
fsw = 1;
for(j=0;j<bw;j++){
if(polygonzh[polygonno][j].flag === 1){
if(dr !=0){
// 座標を回転させる。
xx = polygonzh[polygonno][j].polyx+x1sv - midpointx;
yy = polygonzh[polygonno][j].polyy+y1sv - midpointy;
px = parseInt(xx * vBase1_c - yy * vBase1_s)+midpointx;
py = parseInt(xx * vBase1_s + yy * vBase1_c)+midpointy;
} else {
// 多角形テーブルよりデータと差分を計算し座標を算出
px = polygonzh[polygonno][j].polyx+x1sv;
py = polygonzh[polygonno][j].polyy+y1sv;
}
// 座標を描画する。
if(fsw === 1){
// カラーナンバーをワークに編集する。
wkcolor = parseInt(robotcode[idy][8]);
ctx.beginPath();
ctx.moveTo(px*mgf+dfsx,py*mgf+dfsy);
fsw = 0;
} else {
ctx.lineTo(px*mgf+dfsx,py*mgf+dfsy);
}
}
}
// 多角形を描画出力
if(fsw === 0){
ctx.closePath();
ctx.fillStyle = bordcolor[ocolno][wkcolor];
ctx.fill();
}
}