« join メソッド | トップページ | 2.5D解説 »

2018年12月16日 (日)

配列複写(矩形)

矩形配列複写の外部変形です。
・ソリッド図形、曲線/寸法/建具/ハッチ属性に対応
・横文字を対象図形に追加
※複写後、円/円弧は、曲線属性から除外されます。
※移動量/複写回数を誤入力すると、"未実行"になります。

@if(0==1) //配列複写(矩形)
@echo off
REM #jww
REM #cd
REM #zz 線幅の設定・変更の書込み・読込みを指定
REM #h1 範囲内のデータのみを選択
REM #hc 図形を範囲選択してください
REM #ht10 ブロック図形除外
REM #c 移動量(X:Y)を入力してください 例)25:35
REM #c 複写数(m:n)を入力してください 例)3:5 
REM #e
cscript //nologo //e:jscript %0 %1 %2
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
//対象図形:同一レイヤグループ
//          線/曲線、点/円/円弧/楕円/楕円弧/横文字、ソリッド図形
//移動量、複写回数を誤入力すると"未実行"
//複写回数は、各方向50回に制限
/////
//コマンドライン引数
arg=WScript.Arguments
tdxy=arg(0) //移動量
tnxy=arg(1) //複写回数
//ファイルオープン
fso=new ActiveXObject("Scripting.FileSystemObject")
w=fso.CreateTextFile("temp.txt")
r=fso.OpenTextFile("jwc_temp.txt")
//初期設定
sp=" " //スペース
lmt=50 //複写数Max.
n=0;i=0;j=0;k=0;u=0
cu_l=[],data=[],arry=[],cp_xy=[]
//移動量、複写回数
dxy=tdxy.split(":");dx=dxy[0];dy=dxy[1]
nxy=tnxy.split(":");nx=nxy[0];ny=nxy[1]
//複写回数制限
if(nx>lmt){nx=lmt}
if(ny>lmt){ny=lmt}
/////
//"jwc_temp.txt"の読込み
while (!r.AtEndOfLine){
line=r.ReadLine()
//図形情報の書出し(hk~#まで)
if(n<1){
 if(/hq/.test(line)){} //"hq"スキップ
 else{
 w.WriteLine(line)
 if(/l[yct]/.test(line)){
 cu_l.push(line)}
 if(/#/.test(line)){
 n=n+1}
 }            
 } //if(n<1)
//選択図形データを配列に格納(#以降)
 else{ 
 data.push(line)
 }
 }
//配列複写の計算
for(i=0;i<nx;i++)for(j=0;j<ny;j++){
 if(i==0 && j==0){}
 else{ 
//現在レイヤ/線色/線種を書出し
 for(m=0;m<cu_l.length;m++){
 w.WriteLine(cu_l[m])
 }
//各移動量計算、複写データ書出し
 for(k=0;k<data.length;k++){
 arry=data[k]
//線
 if(/^ /.test(arry)){
 cp_xy=arry.split(/\s+/)
 for(u=0;u<3;u+=2){
 cp_xy[u]=parseFloat(cp_xy[u])+i*dx
 cp_xy[u+1]=parseFloat(cp_xy[u+1])+j*dy
 }
 w.WriteLine(cp_xy.join(sp))
 }
//円・点・円ソリッド・横文字
 else if(/c[ihs]|pt|s[ceog]/.test(arry)){
 cp_xy=arry.split(/\s+/)
 cp_xy[1]=parseFloat(cp_xy[1])+i*dx
 cp_xy[2]=parseFloat(cp_xy[2])+j*dy
 w.WriteLine(cp_xy.join(sp))
 }
//ソリッドデータ
 else if(/sl/.test(arry)){
 cp_xy=arry.split(/\s+/)
 for(u=1;u<cp_xy.length-1;u+=2){
 cp_xy[u]=parseFloat(cp_xy[u])+i*dx
 cp_xy[u+1]=parseFloat(cp_xy[u+1])+j*dy
 }
 w.WriteLine(cp_xy.join(sp))
 }
//各種属性情報書出し
 else{
 w.WriteLine(arry)
 }
 } //for k
 } //else
 } //for i,j
//ファイルクローズ
r.Close();w.Close()
/////
//2018.12.15 by somem

|

« join メソッド | トップページ | 2.5D解説 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 配列複写(矩形):

« join メソッド | トップページ | 2.5D解説 »