« 2007年5月 | トップページ | 2007年7月 »

2007年6月30日 (土)

曲線属性

複数のレイヤに作図された閉鎖図形を同時に曲線属性にするバッチファイルです。     Jwwで日本地図作成中の方のご要望で作成してみました。(^o^)     

操作は、矩形選択から左AM0時「確定 基点(free)」です。

1.書込みレイヤグループのレイヤのみ有効、図形はレイヤ毎に作図してください。    2.線以外の図形を選択すると、"hd"コマンドで消去されるので注意。                              3.書込み線種/線色で実行してください。

--------------------
@REM 曲線属性化
@echo off
REM
REM #jww
REM #cd
REM #h1 矩形選択
REM #hr
REM #e
REM
jgawk 'BEGIN{print "hd";print "pl"};/^^#/,/NF==0/{if($1=="#"){next}if(substr($1,1,2)=="ly"){print;print "pl"}if(NF==4){printf "%%.15g %%.15g %%.15g %%.15g\n",$1,$2,$3,$4}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

| | コメント (9) | トラックバック (0)

2007年6月25日 (月)

寸法編集(直径記号)

寸法値の前に直径記号(φ)を追加するスクリプトです。                         複数の寸法値を同時に変更可能。編集後、寸法図形は解除されます。

外変用バッチファイルは、REM  #h1 を使用します。

--------------------
#直径記号
#設定
BEGIN{fai="φ";chw=2;sp=0.25;print "hd"}
#
#縮尺
/^hs/{for(i=0;i<=9;i++) S[i]=$(i+2);
S["a"]=$12;S["b"]=$13;S["c"]=$14;
S["d"]=$15;S["e"]=$16;S["f"]=$17}
/^lg/{lg=substr($1,3);sc=S[lg]}
#寸法値読取
/^cs/{dim=substr($6,2,15);dq=substr($6,1,1);
#寸法値編集
chdim=fai dim;ch=dq chdim;
#寸法値長さ
dn=length(dim);dl=dn*chw+(dn-1)*sp;
#文字長さ
chn=length(chdim);chl=chn*chw+(chn-1)*sp;
#文字座標移動/表示
if($5==0){dx=sc*(chl-dl)/2;print "ch",$2-dx,$3,$4,$5,ch}
else{dy=sc*(chl-dl)/2;print "ch",$2,$3-dy,$4,$5,ch}
}
#寸法線再表示
/^#/,/NF==0/{
if($1=="#"){next}
if($1=="msg"){next}
if(NF==1){print}
if(NF==4){print}
if($1=="pt"){print}
}

| | コメント (0) | トラックバック (0)

2007年6月23日 (土)

スリットの作図

エンコーダ用のスリットを作図する外変です。                          使う機会は、ほとんどないと思いますが・・・・・、For文の使い方を試してみました。

070623_3   

<slit.bat>
--------------------
@REM スリットの作図
@echo off

REM #jww
REM #cd
REM #0 原点を指定
REM #c 内径を入力(RI)
REM #c 外径を入力(RO)
REM #c スリット数(N)
REM #hr
REM #e

jgawk -vRI=%1 -vRO=%2 -vN=%3 -f slit.awk nul>jwc_temp.txt
--------------------

<slit.awk>
--------------------
#スリットの作図
#設定
BEGIN{ri=RI;ro=RO;n=N;pi=atan2(0,-1);th=2*pi/n}
#データ書出し
END{for(i=0;i<=n-1;i++)
{lth=i*th-th/4;uth=i*th+th/4;lang=180*lth/pi;uang=180*uth/pi;
lxs=ri*cos(lth);lys=ri*sin(lth);lxe=ro*cos(lth);lye=ro*sin(lth);
uxs=ri*cos(uth);uys=ri*sin(uth);uxe=ro*cos(uth);uye=ro*sin(uth);
printf "%.15g %.15g %.15g %.15g\n",lxs,lys,lxe,lye;
printf "%.15g %.15g %.15g %.15g\n",uxs,uys,uxe,uye;
printf "%s %g %g %.15g %.15g %.15g %g %g\n","ci",0,0,ri,lang,uang,1,0;
printf "%s %g %g %.15g %.15g %.15g %g %g\n","ci",0,0,ro,lang,uang,1,0}
}

| | コメント (0) | トラックバック (0)

2007年6月17日 (日)

寸法編集(カンマ付)

寸法編集、カンマ付に対応させてみました。                            

070617

#--------------------
#寸法値編集
BEGIN{if(N+0 == 0) exit;n=N;k=10;
#接頭語/カンマ/ピリオドの設定
mu="X";eq="=";cma=",";pd=".";
#文字幅/文字間隔の設定(cn4の場合)
chw=2;sp=0.25;
#選択図形の消去
print "hd"}
#
#縮尺
/^hs/{for(i=0;i<=9;i++) S[i]=$(i+2);
S["a"]=$12;S["b"]=$13;S["c"]=$14;
S["d"]=$15;S["e"]=$16;S["f"]=$17}
/^lg/{lg=substr($1,3);sc=S[lg]}
#寸法値読取(カンマ付対応)
/^cs/{dim=substr($6,2,15);dq=substr($6,1,1);dl0=length(dim)
split(dim,ca,",");ddt=length(ca[1]);
if(ca[2]+0==0 && ddt==1 && dl0>=2) {cm=1;cadim=ca[1]*1000}
if(ca[2]+0!=0){cm=1;cadim=ca[1] ca[2]}
if(ca[2]+0==0 && ddt>=2){cadim=ca[1]}
#ピッチ計算/四捨五入/(カンマ対応)
pch=cadim/n;pch=k*pch;pch=rnd(pch)/k;
split(pch,p,".");pdt=length(p[1]);
if(cm!=1){capch=pch}
if(cm==1 && pdt<=3){capch=pch}
if(cm==1 && pdt>=4 && p[2]+0==0){d1=substr(p[1],1,pdt-3);
d2=substr(p[1],pdt-2,3);capch=d1 cma d2}
if(cm==1 && pdt>=4 && p[2]+0!=0){d1=substr(p[1],1,pdt-3);
d2=substr(p[1],pdt-2,3);capch=d1 cma d2 pd p[2]}

#寸法値編集
chdim=n mu capch eq dim;ch=dq chdim;
#寸法値長さ
dn=length(dim);dl=dn*chw+(dn-1)*sp;
#文字長さ
chn=length(chdim);chl=chn*chw+(chn-1)*sp;
#文字座標移動/表示
if($5==0) {dx=sc*(chl-dl)/2;print "ch",$2-dx,$3,$4,$5,ch}
else{dy=sc*(chl-dl)/2;print "ch",$2,$3-dy,$4,$5,ch}}
#寸法線再表示
/^#/,/^NF==0/{if($1=="#"){next}if($1=="msg"){next}if(NF==1){print $1}
if(NF==4){print}if($1=="pt"){print}}
#
#四捨五入
function rnd(x){if(x>0) return int(x+0.5)}

| | コメント (0) | トラックバック (0)

2007年6月12日 (火)

六角形の作図

中心点と対辺の間隔を指定して六角形を作図する外変です。                   外変用バッチファイルとスクリプトファイルの他に、前回値を保存するテキストファイル wd.txt が必要になります。wd.txt 内には、何も記述しなくてOKです。 

<hex.bat>
---------------
@REM 六角形の作図
@echo off
goto %1

REM #jww
REM #cd
REM #hm|縦(L)|横(R)|
REM
REM #:1
REM #:2
REM #0 中心点を指示してください
REM #c 対辺の間隔を入力してください|前回値/スキップ|
REM #hr
REM #e
:1
:2
jgawk -vN=%1 -vWD=%2 -f hex.awk jwc_temp.txt wd.txt>jwc_temp.txt
rename wd.txt wwd.txt
jgawk -vWD=%2 'BEGIN{if(WD+0!=0){print "wd",WD;exit}};NR==1{print}' wwd.txt>wd.txt
del wwd.txt
goto end
:end

<hex.awk>
---------------
#六角形
BEGIN{rt3=sqrt(3)}
#座標計算
/^wd/{wd=$2}{if(WD+0==0)WD=wd}{x=WD/2;y=rt3*x/3;yt=2*rt3*x/3}
#作図
END{
#縦方向
{if(N==1)
{printf "%.15g %.15g %.15g %.15g\n",x,-y,x,y
printf "%.15g %.15g %.15g %.15g\n",x,y,0,yt
printf "%.15g %.15g %.15g %.15g\n",0,yt,-x,y
printf "%.15g %.15g %.15g %.15g\n",-x,y,-x,-y
printf "%.15g %.15g %.15g %.15g\n",-x,-y,0,-yt
printf "%.15g %.15g %.15g %.15g\n",0,-yt,x,-y}}
#横方向
{if(N==2)
{printf "%.15g %.15g %.15g %.15g\n",yt,0,y,x
printf "%.15g %.15g %.15g %.15g\n",y,x,-y,x
printf "%.15g %.15g %.15g %.15g\n",-y,x,-yt,0
printf "%.15g %.15g %.15g %.15g\n",-yt,0,-y,-x
printf "%.15g %.15g %.15g %.15g\n",-y,-x,y,-x
printf "%.15g %.15g %.15g %.15g\n",y,-x,yt,0}}
}

| | コメント (0) | トラックバック (0)

2007年6月10日 (日)

寸法編集

情報交換室で sugi さんが、Ruby外変をすでに公開されていますが、
管理人の学習用にawk 版スクリプトを作成してみました。

注)                                                   傾き寸法/カンマ付寸法値には対応していません。
文字幅/文字間隔は、2mm(半角)/0.5mmで設定                         
編集後は寸法図形が解除されます。

外変用バッチファイルには、下記のREM文(例)とawk実行文が必要です。

REM #h1 寸法線を矩形選択
REM #c 分割数の入力                                        jgawk -vN=%1 -f *****.awk jwc_temp.txt>temp.txt

--------------------
#寸法値編集
BEGIN{if(N+0 == 0) exit;n=N;k=10;
#接頭語の設定
mu="X";eq="=";
#文字幅/文字間隔の設定
chw=2;sp=0.25;
#選択図形の消去
print "hd"}
#
#縮尺
/^hs/{for(i=0;i<=9;i++) S[i]=$(i+2);
S["a"]=$12;S["b"]=$13;S["c"]=$14;
S["d"]=$15;S["e"]=$16;S["f"]=$17}
/^lg/{lg=substr($1,3);sc=S[lg]}
#寸法値読取
/^cs/{dim=substr($6,2,15);dq=substr($6,1,1);
#ピッチ計算/四捨五入
pch=dim/n;pch=k*pch;pch=rnd(pch)/k;
#寸法値編集
chdim=n mu pch eq dim;ch=dq chdim;
#寸法値長さ
dn=length(dim);dl=dn*chw+(dn-1)*sp;
#文字長さ
chn=length(chdim);chl=chn*chw+(chn-1)*sp;
#文字座標移動/表示
if($5==0) {dx=sc*(chl-dl)/2;print "ch",$2-dx,$3,$4,$5,ch}
else{dy=sc*(chl-dl)/2;print "ch",$2,$3-dy,$4,$5,ch}}
#寸法線再表示
/^#/,/^NF==0/{if($1=="#"){next}if($1=="msg"){next}if(NF==1){print $1}
if(NF==4){print}if($1=="pt"){print}}
#
#四捨五入
function rnd(x){if(x>0) return int(x+0.5)

| | コメント (0) | トラックバック (0)

2007年6月 6日 (水)

ストレッチ

ストレッチ機能+寸法編集のスプリクトを試してみました。                      実用には、まったく向いていませんが・・・・・・。

070605

<stretch.bat>
--------------------
@REM ストレッチ
@echo off
REM
REM #jww
REM #cd
REM #h2 図形選択
REM #c 伸縮する値を入力してください
REM #hr
REM #e
REM
jgawk -vDX=%1 -f stretch.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
--------------------

<stretch.awk>
--------------------
#ストレッチ
BEGIN{print "hd";dx=DX}
#寸法値の変更
/^cs/{chr=substr($6,2,20);dq=substr($6,1,1);split(chr,a," ");
dim=a[1];dim=dim+dx;ch=dq dim;
printf "%s %.15g %.15g %.15g %.15g %s\n","ch",$2+dx/2,$3,$4,$5,ch}
/^ch/{chr=substr($6,2,20);dq=substr($6,1,1);split(chr,a," ");
dim=a[1];dim=dim+dx;ch=dq dim;
printf "%s %.15g %.15g %.15g %.15g %s\n","ch",$2+dx/2,$3,$4,$5,ch}
#線データの伸縮
/^#/,/NF==0/{
if($1=="#"){next}
if($1=="msg"){next}
if(NF==1){print $1}
if(NF==4 && $1==$3){printf "%.15g %.15g %.15g %.15g\n",$1+dx,$2,$3+dx,$4}
if(NF==4 && $1>$3 && $2==$4){printf "%.15g %.15g %.15g %.15g\n",$3,$2,$1+dx,$4}
if(NF==4 && $1<$3 && $2==$4){printf "%.15g %.15g %.15g %.15g\n",$1,$2,$3+dx,$4}
if(NF==4 && $1!=$3 && $2!=$4)
{printf "%.15g %.15g %.15g %.15g\n",$1+dx,$2,$3+dx,$4}}
--------------------

| | コメント (0) | トラックバック (0)

2007年6月 3日 (日)

選択図形データの読込み

jwc_temp.txtから、選択図形データを読込むバッチファイルの確認です。

--------------------
@REM 選択図形データの読込み

REM #jww
REM #cd
REM #h2 図形を範囲選択

jgawk '/^#/,/NF==0/{if($1=="#") next;print}' jwc_temp.txt>temp.txt
type temp.txt
pause
del temp.txt
--------------------

パターン1,パターン2{アクション}は、                               パターン1からパターン2まで同じアクションを実行することができます。

NF==0 ⇒ 空白行                                          if($1=="#") next ⇒ 行の先頭が # の場合、アクションを実行せず次の行に。

070603_1

外部変形からバッチファイルを実行すると、

070603_2_1                                    

| | コメント (0) | トラックバック (0)

2007年6月 2日 (土)

文字列の分解

文字列関数 "split" を使って、文字列をスペース区切り毎に分解する            バッチファイルの確認です。

REM ##### 文字列の分解 #####
jgawk 'BEGIN{chr="3 X 500 = 1500";split(chr,ch," ")};END{print ch[1];print ch[2];print ch[3];print ch[4];print ch[5]}' nul>temp.txt
type temp.txt
pause
del temp.txt
REM #####

070602

| | コメント (0) | トラックバック (0)

« 2007年5月 | トップページ | 2007年7月 »