配列複写
2次元配列を使用して、水平/垂直方向に配列複写するスプリクトを検証してみました。
外変用バッチファイルに必要なREM文/AWK実行文は、
REM #h1 範囲選択
REM #1 X方向/Y方向移動量(点を指定)
REM #c X方向/列数を入力
REM #c Y方向/行数を入力
jgawk -vNX=%1 -vNY=%2 -f array.awk jwc_temp.txt>temp.txt
<array.awk>
--------------------
#配列複写
BEGIN{m=NX;n=NY}
#X方向/Y方向移動量
/^hp1/{dx=$2;dy=$3;for(i=1;i<=m;i++)for(j=1;j<=n;j++){x[i,j]=(i-1)*dx;y[i,j]=(j-1)*dy}}
/^#/,/NF==0/{
if($1=="#"){next}
if(NF==1){print}
if($1=="cn0"){print}
#線の複写
if(NF==4 && $1!="ci"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%.15g %.15g %.15g %.15g\n",$1+x[i,j],$2+y[i,j],$3+x[i,j],$4+y[i,j]}}}
#円の複写
if(NF==4 && $1=="ci"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%s %.15g %.15g %.15g\n","ci",$2+x[i,j],$3+y[i,j],$4}}}
#円弧・楕円・楕円弧の複写
if(NF==8 && $1=="ci"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%s %.15g %.15g %.15g %.15g %.15g %.15g %.15g\n","ci",$2+x[i,j],$3+y[i,j],$4,$5,$6,$7,$8}}}
#横文字の複写
if(NF==6 && $1=="ch"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%s %.15g %.15g %.15g %.15g %s\n","ch",$2+x[i,j],$3+y[i,j],$4,$5,$6}}}
#縦文字の複写
if(NF==6 && $1=="cv"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%s %.15g %.15g %.15g %.15g %s\n","cv",$2+x[i,j],$3+y[i,j],$4,$5,$6}}}
#点の複写
if(NF==3 && $1=="pt"){for(i=1;i<=m;i++)for(j=1;j<=n;j++)
{if(i==1 && j==1){print " "}
else{printf "%s %.15g %.15g\n","pt",$2+x[i,j],$3+y[i,j]}}}
}
| 固定リンク
« 曲線属性 | トップページ | 曲線属性(拡張版) »
コメント
somemさん、こんにちは。
遅くなりましたが、AutoCADの「配列複写」(矩形状、円形状)のような外変は、確かに少ないですね。
本体機能で、シコシコできるからでしょうか?
投稿: 住職 | 2007年7月16日 (月) 13時42分
住職さん、こんばんは。
「配列複写」、便利な機能なんですが・・・・・。
行と列の数がすぐに思い浮かばないと使えないですね。
Jwwの場合は、複写コマンドの「連続」の方が使い易いかも。m(__)m
投稿: somem | 2007年7月16日 (月) 18時15分