2008年4月15日 (火)

R面取り(3辺)

2本の平行線と直交線の3辺をR面取りする外部変形です。

080414_cnr 

平行線1 ⇒ 平行線2 ⇒ 直交線 の順に(L)クリックしてください。

平行線1の指示点から直交線側がトリムされ、平行線1の線色で作図されます。       平行線でない場合、直交線でない場合は、未実行になります。

--------------------
@REM R面取り(3辺)
@echo off
REM
REM #jww
REM #cd
REM #1ln 平行線1を指示してください
REM #2ln 平行線2を指示してください
REm #3ln 直交線を指示してください
REM #hr
REM #e
REM
jgawk -f corner.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
--------------------

<corner_awk>
--------------------
### R面取り(3辺)
###
###初期設定
BEGIN{pi=atan2(0,-1);k=10000}
###座標/角度取得
#指示点座標
/^hp1/{xx=$2;yy=$3}
#線色(平行線1)
/^#/,/^hhp1ln/{if(substr($1,1,2)=="lc"){lc=$1}}
#座標/角度(平行線1)
/^hhp1ln/,/^hhp2ln/{
if(NF==4){if($1>$3){x11=$3;y11=$4;x12=$1;y12=$2}else{x11=$1;y11=$2;x12=$3;y12=$4}}
if(x11==x12){if(y11>y12){y11=$4;y12=$2;ang1=90}else{ang1=90}}
if(y11==y12){ang1=0}
if(x11!=x12 && y11!=y12){a1=(y12-y11)/(x12-x11);b1=y11-a1*x11;an1=atan2(y12-y11,x12-x11);
ang1=an1*180/pi;ang1=ang1*k;ang1=rnd(ang1)/k}
}
#座標/角度(平行線2)
/^hhp2ln/,/^hhp3ln/{
if(NF==4){if($1>$3){x21=$3;y21=$4;x22=$1;y22=$2}else{x21=$1;y21=$2;x22=$3;y22=$4}}
if(x21==x22){if(y21>y22){y21=$4;y22=$2;ang2=90}else{ang2=90}}
if(y21==y22){ang2=0}
if(x21!=x22 && y21!=y22){a2=(y22-y21)/(x22-x21);b2=y21-a2*x21;an2=atan2(y22-y21,x22-x21);
ang2=an2*180/pi;ang2=ang2*k;ang2=rnd(ang2)/k}
}
#座標/角度(直交線)
/^hhp3ln/,/NF==0/{
if(NF==4){if($1>$3){x31=$3;y31=$4;x32=$1;y32=$2}else{x31=$1;y31=$2;x32=$3;y32=$4}}
if(x31==x32){if(y31>y32){y31=$4;y32=$2;ang3=90}else{ang3=90}}
if(y31==y32){ang3=180}
if(x31!=x32 && y31!=y32){a3=(y32-y31)/(x32-x31);b3=y31-a3*x31;an3=atan2(y32-y31,x32-x31);
ang3=an3*180/pi;ang3=ang3*k;ang3=rnd(ang3)/k}
}
#水平方向
{if(x31==x32){xc=x31;yc1=y11;yc2=y21;yc=(yc1+yc2)/2;r=abs(yc1-yc2)/2}
if(xx>xc){x0=xc+r;y0=yc;
xs1=x0;ys1=y11;xe1=x12;ye1=y11;
xs2=x0;ys2=y21;xe2=x22;ye2=y21;
ths=90;the=270}
if(xx<xc){x0=xc-r;y0=yc;
xs1=x0;ys1=y11;xe1=x11;ye1=y11;
xs2=x0;ys2=y21;xe2=x21;ye2=y21;
ths=270;the=90}
}
#垂直方向
{if(y31==y32){yc=y31;xc1=x11;xc2=x21;xc=(xc1+xc2)/2;r=abs(xc1-xc2)/2}
if(y31==y32 && yy>yc){x0=xc;y0=yc+r;
xs1=x11;ys1=y0;xe1=x11;ye1=y12;
xs2=x21;ys2=y0;xe2=x21;ye2=y22;
ths=180;the=0}
if(y31==y32 && yy<yc){x0=xc;y0=yc-r;
xs1=x11;ys1=y0;xe1=x11;ye1=y11;
xs2=x21;ys2=y0;xe2=x21;ye2=y21;
ths=0;the=180}
}
#任意角度
{if(x31!=x32 && y31!=y32){
xc1=(b3-b1)/(a1-a3);yc1=a1*xc1+b1;
xc2=(b3-b2)/(a2-a3);yc2=a2*xc2+b2;
D2=(xc1-xc2)^2+(yc1-yc2)^2;D=sqrt(D2);r=D/2;
xc=(xc1+xc2)/2;yc=(yc1+yc2)/2;
dx=r*cos(an1);dy=r*sin(an1)}
if(x31!=x32 && y31!=y32 && xx>xc1){x0=xc+dx;y0=yc+dy;
xs1=xc1+dx;ys1=yc1+dy;xe1=x12;ye1=y12;
xs2=xc2+dx;ys2=yc2+dy;xe2=x22;ye2=y22;
ths=ang1+90;the=ang1+270}
if(x31!=x32 && y31!=y32 && xx<xc1){x0=xc-dx;y0=yc-dy;
xs1=xc1-dx;ys1=yc1-dy;xe1=x11;ye1=y11;
xs2=xc2-dx;ys2=yc2-dy;xe2=x21;ye2=y21;
ths=ang1+270;the=ang1+90}
}
###作図
END{
dth=abs(ang3-ang1);
if(ang1!=ang2 || dth!=90){print "hq";exit};
print "hd";
print lc;
printf "%.15g %.15g %.15g %.15g\n",xs1,ys1,xe1,ye1;
printf "%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",x0,y0,r,ths,the,1,0;
printf "%.15g %.15g %.15g %.15g\n",xs2,ys2,xe2,ye2
}
###定義関数
#絶対値
function abs(x){if(x<0){return -x}{return x}}
#四捨五入
function rnd(x){if(x>=0){return int(x+0.5)}else{return -int(-x+0.5)}}

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

2008年4月 8日 (火)

2.5D実点/補助線消去

2.5Dデータの実点/補助線を消去する外部変形用バッチファイルです。          消去対象は、線色5実点/線色5補助線種/線色6実点です。

範囲選択から左AM0時「確定 基点(free)」を実行します。 

注)                                                   1.消去対象のレイヤ以外は、非表示または、表示のみにして実行してください。      2.消去対象以外の線色5及び補助線種の図形は、選択から除外してください。                 

Erase

--------------------
@REM 実点/補助線消去
@echo off
REM
REM #jww
REM #cd
REM #h1 範囲選択
REM #hc 実点と補助線を選択してください
REM #hr
REM #e
REM
jgawk 'BEGIN{print "hd"}/^^#/,/NF==0/{if($1=="#"){next}if($1=="lc5"){next}if($1=="lt9"){n=NR;next}if(NR==n+1){next}if($1=="pn6" ^|^| $1=="pn5"){next}if($1=="pt"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

レイヤ間移動/複写 に分岐コマンドとして追加しました。

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

2008年4月 5日 (土)

2.5D角度補助線

2.5Dデータで、側面(立面)に、線色6の補助線種で                      角度補助線を作図する外部変形用バッチファイルです。

作図方法は、                                             傾斜面の下側の点をクリックし、傾斜角を示す線を(L)クリックします。

Tilt

--------------------
@REM 角度補助線作図
@echo off
REM
REM #jww
REM #cd
REM #0 始点を指定してください。(R)
REM #1ln 角度線を指定してください(L)
REM #hr
REM #e
REM
jgawk '/^^#/,/NF==0/{if(NF==4 ^&^& $1^>$3){x1=$1-$3;y1=$2-$4}else{x1=$3-$1;y1=$4-$2}}END{if(y1^<0){x=-x1;y=-y1}else{x=x1;y=y1}print "lc6";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",0,0,x,y}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
pause
del temp.txt                                               --------------------

レイヤ間移動/複写レイヤ名設定 に分岐コマンドとして追加しました。

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

2008年3月19日 (水)

任意角度の矩形作図

直交線上にある3点を指定して、任意角度の矩形を作図する外部変形です。                     相談室で話題になっていましたので・・・・・。                           トレースする3点がないと、実用的ではないです。

直角で交わる点を始点にしない場合、平行四辺形が作図されますので注意。           水平/垂直でも作図は可能です。矩形は、曲線属性化されます。

Rec_2 

一行スプリクトですので、jgawk~>temp.txtまで改行を入れないでください。         

--------------------
@REM 矩形の作図
@echo off
REM
REM #jww
REM #cd
REM #0 始点を指定してください
REM #1 1点目を指定してください
REM #2 2点目を指定してください
REM #hr
REM #e
jgawk 'BEGIN{x[0]=0;y[0]=0}/^^hp1/{x[1]=$2;y[1]=$3}/^^hp2/{x[3]=$2;y[3]=$3;x[2]=x[1]+x[3];y[2]=y[1]+y[3]}END{print "pl";for(i=0;i^<=2;i++){printf "%%.15g %%.15g %%.15g %%.15g\n",x[i],y[i],x[i+1],y[i+1]}printf "%%.15g %%.15g %%.15g %%.15g\n",x[3],y[3],x[0],y[0]}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

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

2008年3月12日 (水)

Excel データの作図(拡張版)

距離と角度から、Excel で座標データを計算し、作図する外部変形の拡張版です。    分岐コマンドから、2種類の作図が可能です。

Excel シートの作成方法は、こちらで                           

線種/線色は、lt */lc * で変更することができます。                     レイヤは、ly * を変更してください。                                  縮尺は、スプリクト9行目のS=10 を変更する必要があります。                  1/100の時、S=100です。

この外部変形の作成にあたっては、                                盗朱さんのアドバイスをいただきました。感謝です。

Bunnki

Jww2 Jww3

<cord2.bat>
--------------------
@REM Excel to Jww 座標出力
@echo off
goto %1
REM
REM #jww
REM #cd
REM #hm|敷地図 (L)|座標点 (R)|
REM #:1
REM #:2
REM #0 原点を指定してください
REM #hr
REM #e
REM
:1
:2
jgawk -vN=%1 -f cord2.awk cord.csv>jwc_temp.txt
REM del cord.csv
goto end
:end

<cord2.awk>
--------------------
###Excel to Jww 座標出力(レイヤ別)
###
BEGIN{
#カンマ区切り(CSV用)
FS=",";
#文字列設定
dq="\"";deg="°";min="'";sec="”";sh="/";sp=" ";wd=10;
#縮尺(S=1/10)
S=10;
#文字位置調整
cdx=0;cdy=3*S;
#文字方向指定(水平)
ddx=5
}
###
#座標値取得
/^#/,/^##/{
if($1=="#"){ns=NR;ch1=$3;ch2=$4;cht=dq ch1 ch2}
if(NF==10){
chn[NR]=$2;x[NR]=$3;y[NR]=$4;L[NR]=$5;d[NR]=$6;m[NR]=$7;s[NR]=$8;
chr[NR]=dq chn[NR] sp L[NR] sh d[NR] deg m[NR] min s[NR] sec}
if($1=="##"){ne=NR;next}
}
END{
###表題の作図
print "ly3";printf "%s %d %d %d %d %s\n","ch",-20*S,5*S,ddx,0,cht;
#####
#中心線の作図
print "ly1";
print "lc2";
print "lt5";
printf "%d %d %d %d\n",-wd*S,0,wd*S,0;
printf "%d %d %d %d\n",0,-wd*S,0,wd*S;
#####
###原点/座標点の作図
print "ly2";
printf "%s %d %d\n","pt",0,0;
for(i=ns+1;i<=ne;i++)
{printf "%s %.15g %.15g\n","pt",x[i],y[i]}
###符号/距離/角度表示
print "ly3";
for(i=ns+1;i<=ne;i++)
{xc=x[i]+cdx;yc=y[i]+cdy;
printf "%s %.15g %.15g %.15g %.15g %s\n","ch",xc,yc,ddx,0,chr[i]}
###敷地作図
#線種指定
if(N==1){
print "ly0";
print "lc3";
print "lt5";
for(i=ns+1;i<=ne-1;i++)
{printf "%.15g %.15g %.15g %.15g\n",x[i],y[i],x[i+1],y[i+1]}
printf "%.15g %.15g %.15g %.15g\n",x[ne],y[ne],x[ns+1],y[ns+1]
}}

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

2008年3月 9日 (日)

Excel データの作図

ExcelからCSV形式で保存した座標データをJwwで作図する外部変形です。                  

距離と角度から、座標データを求めるExcel シートを作成してみました。

Excel_2 

注)データ入力が完了したら、Excel 形式で必ずバックアップを保存してください。 

外部変形用バッチファイルのあるフォルダにCSV形式で保存します。                          ファイル名は、cord.csv とします。                                  

CSV形式の保存には、Excel マクロを利用します。マクロの解説はこちら

Csv_save_2   

CSVファイルをメモ帳で開くとテキストデータを確認できます。                  外部変形で使用するのは、#~## までのデータです。                      

Csvfile   

Jwwを起動して外部変形を実行し、基準点の位置を指定します。              表示内容等は、awkスプリクトを変更してご利用ください。

Jww

バッチファイルは、cord.csv を上書きする設定にしています。                 CSV保存時に、上書きメッセージをスキップしたい場合、                           最終行の"REM"を削除してください。 

拡張版を公開しましたので、バッチファイル/スプリクトは、こちらへ

<cord.bat>
--------------------
@REM Excel to Jww 座標出力
@echo off
REM
REM #jww
REM #cd
REM #0 原点を指定してください
REM #hr
REM #e
REM
jgawk -f cord.awk cord.csv>jwc_temp.txt
REM del cord.csv

<cord.awk>
--------------------
###Excel to Jww 座標出力
###
BEGIN{
#カンマ区切り(CSV用)
FS=",";
#文字列設定
dq="\"";deg="°";min="'";sec="”";sh="/";
#縮尺(S=1/10)
S=10;
#文字位置調整
cdx=0;cdy=3*S;
#文字方向指定(水平)
ddx=5
}
###
#座標値取得
/^#/,/^##/{
if($1=="#"){ch1=$3;ch2=$4;cht=dq ch1 sh ch2}
if(NF==10){
chn[NR]=$2;x[NR]=$3;y[NR]=$4;L[NR]=$5;d[NR]=$6;m[NR]=$7;s[NR]=$8;
chr[NR]=dq chn[NR] sh L[NR] sh d[NR] deg m[NR] min s[NR] sec}
if($1=="##"){n=NR;next}
}
END{
###表題の作図
{printf "%s %d %d %d %d %s\n","ch",-20*S,5*S,ddx,0,cht}
###点の作図
for(i=4;i<=n;i++)
{printf "%s %.15g %.15g\n","pt",x[i],y[i]}
###符号/距離/角度表示
for(i=4;i<=n;i++)
{xc=x[i]+cdx;yc=y[i]+cdy;
printf "%s %.15g %.15g %.15g %.15g %s\n","ch",xc,yc,ddx,0,chr[i]}
###基点/測定点間作図
#線種/線色指定
print "lc2";
print "lt7";
for(i=4;i<=n;i++)
{printf "%.15g %.15g %.15g %.15g\n",0,0,x[i],y[i]}
###境界線作図
#線種指定
print "lc3";
print "lt5";
for(i=4;i<=n-1;i++)
{printf "%.15g %.15g %.15g %.15g\n",x[i],y[i],x[i+1],y[i+1]}
printf "%.15g %.15g %.15g %.15g\n",x[n],y[n],x[4],y[4]
}

各要素をレイヤ分けするスプリクトにしてみました。                       また、コメント欄を空白セルにすると何も表記しないようにしました。 08/03/10

符号表記を元に戻し(21行目)、距離と符号の間は、半角スペースにしました。              アレンジする場合は、sp=" "(5行目)を変更してください。08/03/11

--------------------
###Excel to Jww 座標出力(レイヤ別)
###
BEGIN{
#カンマ区切り(CSV用)
FS=",";
#文字列設定
dq="\"";deg="°";min="'";sec="”";sh="/";sp=" ";
#縮尺(S=1/10)
S=10;
#文字位置調整
cdx=0;cdy=3*S;
#文字方向指定(水平)
ddx=5
}
###
#座標値取得
/^#/,/^##/{
if($1=="#"){ch1=$3;ch2=$4;cht=dq ch1 ch2}
if(NF==10){
chn[NR]=$2;x[NR]=$3;y[NR]=$4;L[NR]=$5;d[NR]=$6;m[NR]=$7;s[NR]=$8;
chr[NR]=dq chn[NR] sp L[NR] sh d[NR] deg m[NR] min s[NR] sec}
if($1=="##"){n=NR;next}
}
END{
###表題の作図
{print "ly3";printf "%s %d %d %d %d %s\n","ch",-20*S,5*S,ddx,0,cht}
###点の作図
print "ly2";
for(i=4;i<=n;i++)
{printf "%s %.15g %.15g\n","pt",x[i],y[i]}
###符号/距離/角度表示
print "ly3";
for(i=4;i<=n;i++)
{xc=x[i]+cdx;yc=y[i]+cdy;
printf "%s %.15g %.15g %.15g %.15g %s\n","ch",xc,yc,ddx,0,chr[i]}
###基点/測定点間作図
#レイヤ/線種/線色指定
print "ly1";
print "lc2";
print "lt7";
for(i=4;i<=n;i++)
{printf "%.15g %.15g %.15g %.15g\n",0
,0,x[i],y[i]}
###境界線作図
#レイヤ/線種/線色指定
print "ly0";
print "lc3";

print "lt5";
for(i=4;i<=n-1;i++)
{printf "%.15g %.15g %.15g %.15g\n",x[i],y[i],x[i+1],y[i+1]}
printf "%.15g %.15g %.15g %.15g\n",x[n],y[n],x[4],y[4]
}

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

2008年3月 1日 (土)

2.5Dレイヤ名設定(改)

すでに公開している外部変形 「2.5Dレイヤ名設定」 の高さ/奥行き取得方法を     すべて3辺選択に変更しました。

外変用バッチファイル角度補助線の分岐コマンドを追加しました。 08/04/05

分岐コマンドに "Next" を追加しました。                             外部変形 "レイヤ間移動/複写"に移動します。                         相互に利用する"バッチファイル名"に注意してください。 08/04/06

外変移動後、「未実行」が表示されないようにしました。 08/04/08

Layer_name_n

「#lh h1 , h2 」の基本的な操作方法は変わりませんが、                      3辺の選択方法によって、以下のレイヤ名が設定されます。                                       

A) 基準線h0 → 基準線h0を選択(h1) → h2を選択  ⇒ 「#lh 0 , h2 」             B) 基準線h0 → h1を選択 → 基準線h0を選択(h2) ⇒ 「#lh h1 , 0 」           C) 基準線h0 → h1を選択 → h1を選択(h2) ⇒ 「#lh h1 , h1 」

* 「#lh 0 , h2 」と「#lh h1 , 0 」 は、#lh ***.** と同等のレイヤ名設定になります。

* 「#lh h1 , h1 」は、#lv ***.** と同等の作図データになりますが、               同一平面に2つの面が作図されることになります。                             2.5Dだけで使用する場合は、作図実行後、重複線の整理を行ってください。                           

<lyr_set_3l_n.bat>
--------------------
@REM レイヤ/レイヤグループ名設定(3辺取得型)
@echo off
goto %1
REM
REM #jww
REM #cd
REM #hm|+H1,H2 (L)|-H1,H2 (R)|LV (3)|基点設定 (4)|角度補助線(5)|Next (6)|
REM
REM #:1
REM #:2
REM #1ln 基準線h0を指定してください(L)
REM #2ln 高さ(奥行き)h1の指示線をクリック(L)
REM #3ln 高さ(奥行き)h2の指示線をクリック(L)
REM #hr
REM #e
REM
REM #:3
REM #1ln 基準線h0を指定してください(L)
REM #2ln 高さh1の指示線をクリック(L)
REM #hr
REM #e
REM
REM #:4
REM #1 線色6実点位置を指定してください(R)
REM #2 線色5実点位置を指定してください(R)
REM #3 線色5補助線種の方向を指示してください(R)
REM #hr
REM #e
REM
REM #:5
REM #0 始点を指定してください。(R)
REM #1ln 角度線を指定してください(L)
REM #hr
REM #e
REM
REM #:6
REM #h/layer_ch_n.bat
REM #e
REM
:1
:2
jgawk '/^^#/,/NF==0/{if(NF==4){print $0}}' jwc_temp.txt>temp.txt
jgawk -vN=%1 -f lyr_set_3l.awk temp.txt>jwc_temp.txt
del temp.txt
goto end
:3
jgawk '/^^#/,/NF==0/{if(NF==4){print $0}}' jwc_temp.txt>temp.txt
jgawk -vN=%1 -f lyr_set_3l.awk temp.txt>jwc_temp.txt
del temp.txt
goto end
:4
jgawk '/^^hp1/{print "pn6";printf "%%s %%.15g %%.15g\n","pt",$2,$3};/^^hp2/{x0=$2;y0=$3;print "pn5";printf "%%s %%.15g %%.15g\n","pt",x0,y0};/^^hp3/{x1=$2;y1=$3;print "lc5";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",x0,y0,x1,y1}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:5
jgawk '/^^#/,/NF==0/{if(NF==4 ^&^& $1^>$3){x1=$1-$3;y1=$2-$4}else{x1=$3-$1;y1=$4-$2}}END{if(y1^<0){x=-x1;y=-y1}else{x=x1;y=y1}print "lc6";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",0,0,x,y}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:6
echo #>jwc_temp.txt

:end
--------------------

<lyr_set_3l.awk>
--------------------
#レイヤ/レイヤグループ名設定
########## 3辺取得型 ##########
#####
#初期設定
BEGIN{
#傾き一致:6桁
j=100000;
#小数点桁数(2桁)
k=100;
#単位(mm:1/m:1000)
un=1;
#記号設定
lgn="lgn";lyn="lyn";lh="#lh";lv="#lv";cma=",";
#円周率
pi=atan2(0,-1)}
#####
#端点座標取得
NR==1{if($1>$3){x01=$3;y01=$4;x02=$1;y02=$2}else{x01=$1;y01=$2;x02=$3;y02=$4}
if(y01==y02){an1=0}if(x01==x02){an1=90}else{an1=(y02-y01)/(x02-x01)}}
NR==2{if($1>$3){x11=$3;y11=$4;x12=$1;y12=$2}else{x11=$1;y11=$2;x12=$3;y12=$4}
if(y11==y12){an2=0}if(x11==x12){an2=90}else{an2=(y12-y11)/(x12-x11)}}
NR==3{if($1==""){next}
if($1>$3){x21=$3;y21=$4;x22=$1;y22=$2}else{x21=$1;y21=$2;x22=$3;y22=$4}
if(y21==y22){an3=0}if(x21==x22){an3=90}else{an3=(y22-y21)/(x22-x21)}}
#平行線確認
{ak1=an1-an2;ak1=ak1*j;ak1=rnd(ak1)/j;
if(N==3){next}else{ak2=an2-an3;ak2=ak2*j;ak2=rnd(ak2)/j;
ak3=an3-an1;ak3=ak3*j;ak3=rnd(ak3)/j}}
#####
END{
#未実行判定
if(ak1!=0 || ak2!=0 || ak3!=0){print "hq"}
#高さ取得(水平線)
#+H1,H2
if(N==1 && y01==y02 && y11==y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lh;ht=lyn h h1 cma h1;print ht}
if(N==1 && y01==y02 && y11!=y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(y21-y01)/un;h2=h2*k;h2=rnd(h2)/k;h=lh;
ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==2 && y01==y02 && y11==y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h=lh;ht=lyn h h1 cma h1;print ht}
if(N==2 && y01==y02 && y11!=y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(y21-y01)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
#奥行き取得(垂直線)
#+H1,H2
if(N==1 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(x21-x01)/un;h2=h2*k;h2=rnd(h2)/k;
h=lh;ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==2 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(x21-x01)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
#奥行き取得(任意角度線)
#+H1,H2
if(N==1 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;y22=a0*x11+b2;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(y22-y00)*sin(ath)/un;h2=h2*k;h2=rnd(h2)/k;
h=lh;ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==2 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;y22=a0*x11+b2;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(y22-y00)*sin(ath)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
#LG基準高さ
#LV
if(N==3){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lv;ht=lgn h h1;print ht}
}
#####
#ユーザー定義関数
#四捨五入
function rnd(x){if(x>=0){return int(x+0.5)}else{return -int(-x+0.5)}}

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

2008年2月23日 (土)

2.5Dレイヤ間移動/複写(改)

2.5Dの側面(立面)作図では、レイヤを分けた後、基点と方向の指定が必要なので、          レイヤ間移動/複写に実点/補助線作図を外変用バッチファイルにまとめました。

それぞれの使い方は、レイヤ間移動/複写実点/補助線作図を見てください。

分岐コマンドに 角度補助線 を追加しました。 08/04/05

分岐コマンドに "Next" を追加しました。                               外部変形 "レイヤ名設定" に移動できます。                                                    相互に利用する"バッチファイル名"に注意してください。 08/04/06 

分岐コマンドに 実点/補助線消去 を追加しました。                              外変移動後に「未実行」を表示しないようにしました。 08/04/08

Layer_ch_e

< layer_ch_n.bat >                                                     --------------------
@REM レイヤ間移動/複写
@echo off
goto %1
REM
REM #jww
REM #cd
REM #hm|移動 (L)|複写 (R)|基点設定 (3)|角度補助線(4)|消去 (5)|Next (6)|
REM
REM #:1
REM #:2
REM #h1 範囲選択
REM #hc 図形を矩形選択してください
REM #hr
REM #e
REM
REM #:3
REM #1 線色6実点位置を指定してください
REM #2 線色5実点位置を指定してください
REM #3 線色5補助線種の方向を指定してください
REM #hr
REM #e
REM
REM #:4
REM #0 始点を指定してください(R)
REM #1ln 角度線を指定してください(L)
REM #hr
REM #e
REM
REM #:5
REM #h1 範囲選択
REM #hc 実点と補助線を選択してください
REM #hr
REM #e
REM
REM #:6
REM #h/lyr_set_3l_n.bat
REM #e
REM
REM 移動
:1
jgawk 'BEGIN{print "hd"};/^^#/,/NF==0/{if(substr($1,1,2)=="ly"){next}if(substr($1,1,2)=="lg"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
REM 複写
:2
jgawk '/^^#/,/NF==0/{if(substr($1,1,2)=="ly"){next}if(substr($1,1,2)=="lg"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
REM 基点設定
:3
jgawk '/^^hp1/{print "pn6";printf "%%s %%.15g %%.15g\n","pt",$2,$3};/^^hp2/{x0=$2;y0=$3;print "pn5";printf "%%s %%.15g %%.15g\n","pt",x0,y0};/^^hp3/{x1=$2;y1=$3;print "lc5";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",x0,y0,x1,y1}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
REM 角度補助線
:4
jgawk '/^^#/,/NF==0/{if(NF==4 ^&^& $1^>$3){x1=$1-$3;y1=$2-$4}else{x1=$3-$1;y1=$4-$2}}END{if(y1^<0){x=-x1;y=-y1}else{x=x1;y=y1}print "lc6";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",0,0,x,y}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
REM 消去
:5
jgawk 'BEGIN{print "hd"}/^^#/,/NF==0/{if($1=="#"){next}if($1=="lc5"){next}if($1=="lt9"){n=NR;next}if(NR==n+1){next}if($1=="pn6" ^|^| $1=="pn5"){next}if($1=="pt"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:6
echo #>jwc_temp.txt
:end

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

2.5Dレイヤ名設定

2.5Dの高さ/奥行きデータをレイヤ名(レイヤグループ名) に設定する外部変形です。
レイヤ名の使い方は、こちらで

<概要>
・側面(立面) は、線色6の実点/線色5の実点・補助線種を併用します。           使い方は、こちらで
・入力単位はmm、高さ/奥行きは、小数点第3位を四捨五入。
・各分岐コマンドは、属性取得から書込みレイヤに移動して実行します。
・高さ/奥行きを取得する線が平行でない場合、「未実行」となります。

<分岐コマンド>

Bunnki

◇+H/-H : 2辺を選択してレイヤの高さ/奥行きを指定
◇基点設定:3点を指定して、線色6の実点/線色5の実点・補助線を作図
◇+H1,H2/-H1,H2 : 3辺を選択して、基準線からの2面の高さ/奥行きを指定
◇LV : 2辺を選択してレイヤグループの基準高さを指定

注)
1.+H/-H/+H1,H2/-H1,H2 の選択は下図を参考にしてください。
2.レイヤ名に「#lv ***,**」を設定する場合は、「+H1,H2」からh1線を2回選択します。

Direction

<lyr_set.bat>
--------------------
@REM レイヤ/レイヤグループ名設定
@echo off
goto %1
REM
REM #jww
REM #cd
REM #hm|+H (L)|-H (R)|基点設定 (3)|-H1,H2 (4)|-H1,H2 (5)|LV (6)|
REM
REM #:1
REM #:2
REM #:6
REM #1ln 基準線h0を指定してください(L)
REM #2ln 高さh1の指示線をクリック(L)
REM #hr
REM #e
REM
REM #:3
REM #1 線色6実点位置を指定してください(R)
REM #2 線色5実点位置を指定してください(R)
REM #3 線色5補助線種の方向を指示してください(R)
REM #hr
REM #e
REM
REM #:4
REM #:5
REM #1ln 基準線h0を指定してください(L)
REM #2ln 高さ(奥行き)h1の指示線をクリック(L)
REM #3ln 高さ(奥行き)h2の指示線をクリック(L)
REM #hr
REM #e
REM
:1
:2
:6
jgawk '/^^#/,/NF==0/{if(NF==4){print $0}}' jwc_temp.txt>temp.txt
jgawk -vN=%1 -f lyr_set.awk temp.txt>jwc_temp.txt
del temp.txt
goto end
:3
jgawk '/^^hp1/{print "pn6";printf "%%s %%.15g %%.15g\n","pt",$2,$3};/^^hp2/{x0=$2;y0=$3;print "pn5";printf "%%s %%.15g %%.15g\n","pt",x0,y0};/^^hp3/{x1=$2;y1=$3;print "lc5";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",x0,y0,x1,y1}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:4
:5
jgawk '/^^#/,/NF==0/{if(NF==4){print $0}}' jwc_temp.txt>temp.txt
jgawk -vN=%1 -f lyr_set.awk temp.txt>jwc_temp.txt
del temp.txt
goto end
:end
--------------------

<lyr_set.awk>
--------------------
#####レイヤ名/レイヤグループ名設定#####
#初期設定
BEGIN{
#傾き一致:6桁
j=100000;
#小数点桁数(2桁)
k=100;
#単位(mm:1)
un=1;
#記号設定
lgn="lgn";lyn="lyn";lh="#lh";lv="#lv";cma=",";
#円周率
pi=atan2(0,-1)}
#####
#端点座標取得
NR==1{if($1>$3){x01=$3;y01=$4;x02=$1;y02=$2}else{x01=$1;y01=$2;x02=$3;y02=$4}
if(y01==y02){an1=0}if(x01==x02){an1=90}else{an1=(y02-y01)/(x02-x01)}}
NR==2{if($1>$3){x11=$3;y11=$4;x12=$1;y12=$2}else{x11=$1;y11=$2;x12=$3;y12=$4}
if(y11==y12){an2=0}if(x11==x12){an2=90}else{an2=(y12-y11)/(x12-x11)}}
NR==3{if($1==""){next}
if($1>$3){x21=$3;y21=$4;x22=$1;y22=$2}else{x21=$1;y21=$2;x22=$3;y22=$4}
if(y21==y22){an3=0}if(x21==x22){an3=90}else{an3=(y22-y21)/(x22-x21)}}
#平行線確認
{ak1=an1-an2;ak1=ak1*j;ak1=rnd(ak1)/j;
if(N==1 || N==2 || N==6){next}else{ak2=an2-an3;ak2=ak2*j;ak2=rnd(ak2)/j;
ak3=an3-an1;ak3=ak3*j;ak3=rnd(ak3)/j}}
#####
END{
###未実行出力
if(ak1!=0 || ak2!=0 || ak3!=0){print "hq"}
###高さ/奥行き取得(水平線)
#+H
if(N==1 && y01==y02){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lh;ht=lyn h h1;print ht}
#-H
if(N==2 && y01==y02){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h=lh;ht=lyn h h1;print ht}
#+H1,H2/#lv設定
if(N==4 && y01==y02 && y11==y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lv;ht=lyn h h1;print ht}
#+H1,H2
if(N==4 && y01==y02 && y11!=y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(y21-y01)/un;h2=h2*k;h2=rnd(h2)/k;h=lh;
ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==5 && y01==y02 && y11!=y21){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(y21-y01)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
###奥行き取得(垂直線)
#+H
if(N==1 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lh;ht=lyn h h1;print ht}
#-H
if(N==2 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1
h=lh;ht=lyn h h1;print ht}
#+H1,H2
if(N==4 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(x21-x01)/un;h2=h2*k;h2=rnd(h2)/k;
h=lh;ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==5 && x01==x02){h1=(x11-x01)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(x21-x01)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
###奥行き取得(任意角度)
#+H
if(N==1 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;
h=lh;ht=lyn h h1;print ht}
#-H
if(N==2 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h=lh;ht=lyn h h1;print ht}
#+H1,H2
if(N==4 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;y22=a0*x11+b2;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;
h2=(y22-y00)*sin(ath)/un;h2=h2*k;h2=rnd(h2)/k;
h=lh;ht=lyn h h1 cma h2;print ht}
#-H1,H2
if(N==5 && x01!=x02 && y01!=y02){dy=y02-y01;dx=x02-x01;
a0=dy/dx;ang=atan2(dy,dx);ath=pi/2-ang;
b0=y01-a0*x01;b1=y11-a0*x11;b2=y21-a0*x21;
y00=a0*x11+b0;y22=a0*x11+b2;
h1=(y11-y00)*sin(ath)/un;h1=h1*k;h1=rnd(h1)/k;h1=-h1;
h2=(y22-y00)*sin(ath)/un;h2=h2*k;h2=rnd(h2)/k;h2=-h2;
h=lh;ht=lyn h h1 cma h2;print ht}
###レイヤG高さ
#LV
if(N==6){h1=(y11-y01)/un;h1=h1*k;h1=rnd(h1)/k;
h=lv;ht=lgn h h1;print ht}
}
#####
#ユーザー定義関数
#四捨五入
function rnd(x){if(x>=0){return int(x+0.5)}else{return -int(-x+0.5)}}

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

2008年2月13日 (水)

レイヤ間移動/複写

図形を別レイヤに移動/複写する外変用バッチファイルです。

2.5Dデータを作成する時のレイヤ分け等にご利用ください。                    同一縮尺のレイヤグループであれば、基点を設定せずに移動/複写が可能。                                       

<操作手順>                                               1.移動/複写する図形を矩形選択                                                                     ・同一レイヤグループ内の図形のみ選択が可能です。                       ・範囲選択のコントロールバーから、線色/線種を指定することが可能です。                                2.レイヤグループバー/レイヤバーから移動先レイヤを書込みレイヤに指定します。                      ・選択図形を含むレイヤグループと異なるレイヤグループを指定することも可能                      3.左AM 0 時「確定 基点(free)」を実行                           

--------------------
@REM レイヤ間移動/複写
@echo off
goto %1
REM
REM #jww
REM #cd
REM #hm|移動 (L)|複写 (R)|
REM
REM #:1
REM #:2
REM #h1 範囲選択してください
REM #hr
REM #e
REM

REM 移動
:1
jgawk 'BEGIN{print "hd"};/^^#/,/NF==0/{if(substr($1,1,2)=="ly"){next}if(substr($1,1,2)=="lg"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end

REM 複写
:2
jgawk '/^^#/,/NF==0/{if(substr($1,1,2)=="ly"){next}if(substr($1,1,2)=="lg"){next}else{print $0}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end

:end

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

2008年2月11日 (月)

外部変形-zP25D06

siegel さんのブログ『精進寺』で、                                 金桜さん作 「外部変形-zP25D06」が公開されました。(作者様、ありがとうございます)

*マウス指示した直線のグループレイヤ/レイヤ高さを                  2.5D用のレイヤグループ名/レイヤ名に設定することができます。

その他詳細は、siegel's BLOG 『精進寺』でどうぞ

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

2.5D実点/補助線作図

2.5D用の実点/補助線を作図する外変用バッチファイルです。

080211

操作手順は、次の通りです。                                              1.線色6実点位置を指定                                         2.線色5実点位置を指定                                       3.線色5補助線種の方向を指定

--------------------
@REM 実点/補助線作図
@echo off
REM
REM #jww
REM #cd
REM #1 線色6実点位置を指定してください
REM #2 線色5実点位置を指定してください
REM #3 線色5補助線種の方向を指定してください
REM #hr
REM #e
REM
jgawk '/^^hp1/{print "pn6";printf "%%s %%.15g %%.15g\n","pt",$2,$3};/^^hp2/{x0=$2;y0=$3;print "pn5";printf "%%s %%.15g %%.15g\n","pt",x0,y0};/^^hp3/{x1=$2;y1=$3;print "lc5";print "lt9";printf "%%.15g %%.15g %%.15g %%.15g\n",x0,y0,x1,y1}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

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

2008年1月22日 (火)

正多角形に変換

円/円弧を正多角形/正多角形の一部に変換する外部変形です。

注)1.円弧変換の不具合を修正しました。    2/2                         2.軸角を含む円弧データに対応しました。 2/5 管理人     

2.5Dから3D-dxf を利用する場合にどうぞ。                        

作図方法は、範囲選択から 左AM 0 時「確定 基点(free)」です。              同一レイヤグループのレイヤは、同時に実行可能。                       変換した図形は、曲線属性化されます。                                                                辺の数を変更したい場合は、スプリクト"polygon.awk "の N=90を修正してください。

<polygon.bat>
--------------------
@REM 正多角形変換
@echo off
REM
REM #jww
REM #cd
REM #h1 矩形選択
REM #hr
REM #e
REM
jgawk -f polygon.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

<polygon.awk>
--------------------
#正多角形変換
#初期設定
BEGIN{N=90;pi=atan2(0,-1);thd=360/N;thr=2*pi/N;print "hd"}
#
#円/正多角形
/^#/,/NF==0/{
if($1=="#"){next}
if($1!="ci"){print $0;next}
if($1=="ci" && NF==4){
xc=$2;yc=$3;R=$4;
print "pl";
for(i=0;i<=N;i++){ang=i*thr;x[i]=xc+R*cos(ang);y[i]=yc+R*sin(ang)}
for(j=0;j<=N-1;j++){printf "%.15g %.15g %.15g %.15g\n",x[j],y[j],x[j+1],y[j+1]}
next}
#円弧/線分割
if($1=="ci" && $7==1 && NF==8){
xc=$2;yc=$3;R=$4;an1=$5;an2=$6;hk=$8*pi/180;th1=an1*pi/180;th2=an2*pi/180+hk;
print "pl";
if(an2<an1){thw=360-an1+an2;th1=th1-2*pi}else{thw=an2-an1}
}
nf=thw/thd;n=rndup(nf);
for(i=0;i<=n-1;i++){ang=i*thr+th1+hk;xa[i]=xc+R*cos(ang);
ya[i]=yc+R*sin(ang);xa[n]=xc+R*cos(th2);ya[n]=yc+R*sin(th2)}
for(j=0;j<=n-1;j++){printf "%.15g %.15g %.15g %.15g\n",xa[j],ya[j],xa[j+1],ya[j+1]}
next}
#END
#ユーザー定義関数
function rndup(x){if(x-int(x)>0){return int(x)+1}else{return int(x)}}

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

2008年1月17日 (木)

円中心補助線

円・円弧の中心位置を補助線色で作図する外部変形です。

円・円弧を含む2.5Dデータから3D-dxf を利用する時にどうぞ。                      一般の作図では、使い道はないと思います。

080117  

作図方法は、範囲選択から 左AM 0 時「確定 基点(free)」です。              同一レイヤグループのレイヤは、同時に作図可能。

注)一行スクリプトをなので、jgawk ~ >temp.txt まで、改行はありません。

REM --------------------
@REM 円中心補助線(2.5D用)
@echo off
REM
REM #jww
REM #cd
REM #h1 矩形選択
REM #hr
REM #e
REM
jgawk 'BEGIN{s=3};/^^#/,/NF==0/{if($1=="#"){next}if(substr($1,1,2)=="ly"){print}if($1=="ci" )if(NF==4){print "lc9";printf "%%.15g %%.15g %%.15g %%.15g\n",$2,$3,$2+$4,$3;printf "%%.15g %%.15g %%.15g %%.15g\n",$2,$3,$2,$3+s}if(NF==8){print "lc9";printf "%%.15g %%.15g %%.15g %%.15g\n",$2,$3,$2+s,$3;printf "%%.15g %%.15g %%.15g %%.15g\n",$2,$3,$2,$3+s}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt 

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

2007年11月24日 (土)

長穴の作図

円弧の中心点と、幅を指定して長穴を作図する外部変形です。

071124

・書込み線色/線種で作図                                     ・任意角度で作図が可能  

<l_hole.bat>
--------------------
@REM 長穴の作図
@echo off
REM
REM #jww
REM #cd
REM #c 幅を入力してください |前回値/スキップ|
REM #0 始点を指示してください (L)/(R)
REM #1 終点を指示してください (L)/(R)
REM #hr
REM #e
REM
copy jwc_temp.txt+vw.txt
jgawk -vVW=%1 -f l_hole.awk jwc_temp.txt>temp.txt
rename vw.txt vvw.txt
jgawk -vVW=%1 'BEGIN{if(VW+0!=0){print "vw",VW;exit}};NR==1{print $0}' vvw.txt>vw.txt
copy temp.txt jwc_temp.txt
del temp.txt
del vvw.txt
--------------------

<l_hole.awk>
--------------------
#長穴の作図(中心点)
#πの設定
BEGIN{pi=atan2(0,-1)}
#終点座標の取得・角度計算
/^hp1/{x1=$2;y1=$3;{if(x1==0){an=pi/2;ang=180;ane=0}
{an=atan2(y1,x1);ang=an*180/pi;ans=ang+90;ane=ang+270}}}
#幅の取得
/^vw/{vw=$2}
{if(VW+0==0){VW=vw};r=VW/2}
#座標計算
{xan=r*sin(an);yan=r*cos(an);x01=xan;y01=-yan;x02=-xan;y02=yan;
x11=x1+xan;y11=y1-yan;x12=x1-xan;y12=y1+yan}
#作図
END{printf ("%s %d %d %.15g %.15g %.15g %d %d\n","ci",0,0,r,ans,ane,1,0);
printf ("%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",x1,y1,r,ane,ans,1,0);
printf ("%.15g %.15g %.15g %.15g\n",x01,y01,x11,y11);
printf ("%.15g %.15g %.15g %.15g\n",x02,y02,x12,y12)}                                                                         

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

2007年10月28日 (日)

円の分割

円を通る直線の交点で2つの円弧に分割する外部変形です。                 例)円の一部を破線に変更する前に使用した場合

071028_1

<divide.bat>
--------------------
@REM 円分割
@echo off
REM
REM #jww
REM #cd
REM #1ci 円を指示してください
REM #2ln 線を指示してください
REM #hr
REM #e
REM
jgawk -f divide.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

<divide.awk>
--------------------
#円分割
BEGIN{pi=atan2(0,-1);hn=1;ax=0}
#
#線種/線色情報の取得
/^#/,/^hhp2/{ck1=substr($1,1,2);if(ck1=="lc"){lcl=$1}}
/^#/,/^hhp2/{ck2=substr($1,1,2);if(ck2=="lt"){ltl=$1}}
/^hhp2/,/^hhp1/{ck3=substr($1,1,2);if(ck3=="lc"){lcc=$1}}
/^hhp2/,/^hhp1/{ck4=substr($1,1,2);if(ck4=="lt"){ltc=$1}}
#円/線の座標取得
NF==4{if($1=="ci"){j=$2;k=$3;r=$4}else{x1=$1;y1=$2;x2=$3;y2=$4}}
END{
#垂直線で分割
if(x1==x2){x3=x1;x4=x1;
e=x1-j;R=r^2-e^2;Y=sqrt(R);y3=Y+k;y4=-Y+k}
#任意角度線で分割
else{p=(y2-y1)/(x2-x1);q=y1-p*x1;
a=p^2+1;b=2*(p*q-j-k*p);c=j^2+q^2-2*k*q+k^2-r^2;
M=b^2-4*a*c;m=sqrt(M);
x3=(-b+m)/2/a;x4=(-b-m)/2/a;
y3=p*x3+q;y4=p*x4+q;}
#
#円弧角の計算
dx1=x4-j;dy1=y4-k;th1=atan2(dy1,dx1);th1=th1*180/pi;
dx2=x3-j;dy2=y3-k;th2=atan2(dy2,dx2);th2=th2*180/pi;
#再作図
print "hd";print lcl;print ltl;
printf "%.15g %.15g %.15g %.15g\n",x1,y1,x2,y2;
print lcc;print ltc;
printf "%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",j,k,r,th1,th2,hn,ax;
printf "%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",j,k,r,th2,th1,hn,ax}

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

2007年10月21日 (日)

延長線の作図

R面取りされた角部に延長線を作図する外部変形です。

コーナーRをクリックすると延長線が作図されます。

071020

<ext.bat>
-------------------
@REM 延長線
@echo off
REM
REM #jww
REM #cd
REM #1ci コーナーRを指示してください
REM #hr
REM #e
REM
jgawk -f ext.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

2007.11.25 始点座標の計算で、不要なprint文を削除しました。

<ext.awk>
--------------------
#延長線の作図
#
BEGIN{pi=atan2(0,-1)}
#円弧データの取得
/^ci/{x0=$2;y0=$3;R=$4;th1=$5;th2=$6;
#始点座標の計算
th1=th1*pi/180;th2=th2*pi/180;
x1=x0+R*cos(th1);y1=y0+R*sin(th1);
x2=x0+R*cos(th2);y2=y0+R*sin(th2);
#傾き/定数の計算
a1=sin(th1+pi/2)/cos(th1+pi/2);a2=sin(th2+pi/2)/cos(th2+pi/2);
b1=y1-a1*x1;b2=y2-a2*x2;
#交点座標の計算
x3=(b2-b1)/(a1-a2);
y3=(a2*b1-a1*b2)/(a2-a1)}
#
END{print "lc1";
printf "%.15g %.15g %.15g %.15g\n",x1,y1,x3,y3;
printf "%.15g %.15g %.15g %.15g\n",x2,y2,x3,y3}

延長線の交点を作図する場合、ext.awkのEND文に2行追加します。

END{print "pn1";
printf "%s %.15g %.15g\n","pt",x3,y3;
print "lc1";
printf "%.15g %.15g %.15g %.15g\n",x1,y1,x3,y3;
printf "%.15g %.15g %.15g %.15g\n",x2,y2,x3,y3}

071021

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

2007年8月15日 (水)

楕円の作図

長径/短径を指定して楕円を作図する外変です。

作図方法は、中心点指示⇒長径(短径)を指示⇒短径(長径)を指示

070815_5  

070815_2_3

<ellipse.bat>
--------------------
@REM 楕円の作図
@echo off
REM
REM #jww
REM #cd
REM #0 中心位置を指定してください
REM #1 長径(短径)を指示してください
REM #2 短径(長径)を指示してください
REM #hr
REM #e
REM
jgawk -f ellipse.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

<ellipse.awk>
--------------------
#楕円の作図
#初期設定
BEGIN{pi=atan2(0,-1)}
#半径/軸角の取得
/^hp1/{xh=$2;yh=$3;rh=sqrt(xh^2+yh^2);
angh=atan2(yh,xh);angh=angh*180/pi}
/^hp2/{xv=$2;yv=$3;rv=sqrt(xv^2+yv^2)}
END{r=rh;k=rv/rh;ang=angh;
#楕円データの書出し
printf "%s %d %d %.15g %d %d %.15g %.15g\n","ci",0,0,r,0,360,k,ang}

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

2007年8月14日 (火)

円弧長

円弧長を測定する外変です。半径/円弧角/円弧長を同時に表記します。          作図方法は、円弧選択(Lクリック)⇒作図位置を指示。                    円の場合は、円弧角360°で円周長を表記します。                              楕円/楕円弧には対応していません。

注)使用する場合は、自己責任でお願いします。m(__)m                           

070814_2

<arc.bat>
--------------------
@REM 円弧長測定
@echo off
REM
REM #jww
REM #cd
REM #1ci 円弧を指定してください
REM #0 表示位置を指定してください
REM #hr
REM #e
REM
jgawk -f arc.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

<arc.awk>
-------------------------
#円弧長の測定
#初期設定
BEGIN{pi=atan2(0,-1);dq="\"";k2=100;k3=1000;sp=5}
#円弧データの読込み
/^ci/{if(NF==8 && $7==1){x0=$2;y0=$2;r0=$4;th1=$5;th2=$6}
{if(th1>th2){ang0=360-th1+th2}if(th2>th1){ang0=th2-th1}}
{if(NF==4){r0=$4;ang0=360}}
{if(NF==8 && $7!=1){el=1}}}
#測定結果の出力
END{if(el==1){print "ch",0,0,1,0,dq,"楕円です"}
else{r=r0*k3;r=rnd(r)/k3;
ang=ang0*k2;ang=rnd(ang)/k2;
arc=r0*ang0*pi/180;arc=arc*k3;arc=rnd(arc)/k3;
printf "%s %d %d %d %d %s %s %.15g\n","ch",0,0,1,0,dq,"r=",r;
printf "%s %d %d %d %d %s %s %.15g\n","ch",0,-sp,1,0,dq,"ang=",ang;
printf "%s %d %d %d %d %s %s %.15g\n","ch",0,-2*sp,1,0,dq,"rθ=",arc}}
#ユーザー定義関数
#四捨五入
function rnd(x){if(x>0) return int(x+0.5)}

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

2007年7月30日 (月)

イラスト風に間取図

Jw_cadで間取図の一部をイラスト風に作図すると・・・・・。                    趣味で作った外変ですが、興味のある方はお試しください。 

 070730

作図は、水平/垂直方向だけに対応。                                         

--------------------
@REM 間取図
@echo off
goto %1
REM #jww
REM #cd
REM #hm|壁(L)|窓(R)|左ドア(3)|右ドア(4)|柱(5)|
REM
REM #:1
REM #:2
REM #:3
REM #:4
REM #0 1点目を指定してください
REM #1 2点目を指定してください
REM #hr
REM #e
REM #:5
REM #0 中心点を指定してください。
REM #hr
REM #e
:1
:2
:3
:4
jgawk -vN=%1 -f layout.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:5
jgawk -vN=%1 -f layout.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:end
--------------------

<layout.awk>
--------------------
#間取り図
###
BEGIN{wt=120;dt=wt/2;ds=50}
###
#終点座標
/^hp1/{xe=$2;ye=$3}
#壁
{if(N==1 && xe>0 && ye==0)
{x1=dt;y1=-dt;x2=x1;y2=dt;x3=xe-dt;y3=y2;x4=xe-dt;y4=y1}}
{if(N==1 && xe<0 && ye==0)
{x1=-dt;y1=-dt;x2=x1;y2=dt;x3=xe+dt;y3=y2;x4=xe+dt;y4=y1}}
{if(N==1 && xe==0 && ye>0)
{x1=-dt;y1=dt;x2=x1;y2=ye-dt;x3=dt;y3=y2;x4=x3;y4=y1}}
{if(N==1 && xe==0 && ye<0)
{x1=-dt;y1=-dt;x2=x1;y2=ye+dt;x3=dt;y3=y2;x4=dt;y4=y1}}
#引違い戸
{if(N==2 && xe>0 && ye==0)
{x1=dt;y1=-dt;x2=xe-dt;y2=y1;x3=x1;y3=dt;x4=x2;y4=y3;
x5=xe/2-ds;y5=-wt/6;x6=x2;y6=y5;x7=x1;y7=wt/6;x8=xe/2+ds;y8=y7;
x9=xe/2;y9=-dt-ds;x10=x9;y10=dt+ds}}
{if(N==2 && xe<0 && ye==0)
{x1=xe+dt;y1=-dt;x2=-dt;y2=y1;x3=x1;y3=dt;x4=x2;y4=y3;
x5=xe/2-ds;y5=-wt/6;x6=x2;y6=y5;x7=x1;y7=wt/6;x8=xe/2+ds;y8=y7;
x9=xe/2;y9=-dt-ds;x10=x9;y10=dt+ds}}
{if(N==2 && xe==0 && ye>0)
{x1=dt;y1=dt;x2=x1;y2=ye-dt;x3=-dt;y3=y1;x4=x3;y4=y2
x5=wt/6;y5=ye/2-ds;x6=x5;y6=y2;x7=-wt/6;y7=y1;x8=x7;y8=ye/2+ds;
x9=-dt-ds;y9=ye/2;x10=dt+ds;y10=y9}}
{if(N==2 && xe==0 && ye<0)
{x1=dt;y1=ye+dt;x2=x1;y2=-dt;x3=-dt;y3=ye+dt;x4=x3;y4=y2
x5=wt/6;y5=ye/2-ds;x6=x5;y6=y2;x7=-wt/6;y7=y1;x8=x7;y8=ye/2+ds;
x9=-dt-ds;y9=ye/2;x10=dt+ds;y10=y9}}
#左ドア
{if(N==3 && xe>0 && ye==0)
{x1=dt;y1=-dt;x2=xe-dt;y2=y1;x3=x1;y3=dt;x4=x2;y4=y3;
x5=dt+ds;y5=y1;r=xe-wt-ds;x6=x5;y6=y5-r;th0=270;th1=0}}
{if(N==3 && xe<0 && ye==0)
{x1=-dt;y1=dt;x2=xe+dt;y2=y1;x3=x1;y3=-dt;x4=x2;y4=y3;
x5=-dt-ds;y5=y1;r=-xe-wt-ds;x6=x5;y6=y5+r;th0=90;th1=180}}
{if(N==3 && xe==0 && ye>0)
{x1=dt;y1=dt;x2=x1;y2=ye-dt;x3=-dt;y3=y1;x4=x3;y4=y2
x5=x1;y5=dt+ds;r=ye-wt-ds;x6=x5+r;y6=y5;th0=0;th1=90}}
{if(N==3 && xe==0 && ye<0)
{x1=-dt;y1=-dt;x2=x1;y2=ye+dt;x3=dt;y3=y1;x4=x3;y4=y2
x5=x1;y5=-dt-ds;r=-ye-wt-ds;x6=x5-r;y6=y5;th0=180;th1=270}}
#右ドア
{if(N==4 && xe>0 && ye==0)
{x1=dt;y1=dt;x2=xe-dt;y2=y1;x3=x1;y3=-dt;x4=x2;y4=y3;
x5=dt+ds;y5=y1;r=xe-wt-ds;x6=x5;y6=y5+r;th0=0;th1=90}}
{if(N==4 && xe<0 && ye==0)
{x1=-dt;y1=-dt;x2=xe+dt;y2=y1;x3=x1;y3=dt;x4=x2;y4=y3;
x5=-dt-ds;y5=y1;r=-xe-wt-ds;x6=x5;y6=y5-r;th0=180;th1=270}}
{if(N==4 && xe==0 && ye>0)
{x1=-dt;y1=dt;x2=x1;y2=ye-dt;x3=dt;y3=y1;x4=x3;y4=y2
x5=x1;y5=dt+ds;r=ye-wt-ds;x6=x5-r;y6=y5;th0=90;th1=180}}
{if(N==4 && xe==0 && ye<0)
{x1=dt;y1=-dt;x2=x1;y2=ye+dt;x3=-dt;y3=y1;x4=x3;y4=y2
x5=x1;y5=-dt-ds;r=-ye-wt-ds;x6=x5+r;y6=y5;th0=270;th1=0}}
#柱
{if(N==5){x1=-dt;y1=-dt;x2=-dt;y2=dt;x3=dt;y3=y2;x4=x3;y4=y1}}
###
END{
if(N==1 || N==5){printf "%s %.15g %.15g %.15g %.15g %.15g %.15g %.15g %.15g\n","sl",x1,y1,x2,y2,x3,y3,x4,y4}
if(N==2){printf"%.15g %.15g %.15g %.15g\n",x1,y1,x2,y2;
printf"%.15g %.15g %.15g %.15g\n",x3,y3,x4,y4;
printf"%.15g %.15g %.15g %.15g\n",x5,y5,x6,y6;
printf"%.15g %.15g %.15g %.15g\n",x7,y7,x8,y8;
print"lt5";printf"%.15g %.15g %.15g %.15g\n",x9,y9,x10,y10}
if(N==3 || N==4){printf"%.15g %.15g %.15g %.15g\n",x1,y1,x2,y2;
printf"%.15g %.15g %.15g %.15g\n",x3,y3,x4,y4;
printf"%.15g %.15g %.15g %.15g\n",x5,y5,x6,y6;
print"lt5";printf"%s %.15g %.15g %.15g %.15g %.15g %.15g %.15g","ci",x5,y5,r,th0,th1,1,0}}
 

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

2007年7月15日 (日)

線色変更

選択図形から、「指定線色」図形を「書込線色」に変更する外変用バッチファイルです。           

注)                                                   1.ブロック図形は、選択図形から除外して実行してください。                  2線色変更しないレイヤは、非表示または表示のみレイヤにしてください。

<操作手順>                                             外変起動⇒書込線色指定⇒変更する線色番号を入力⇒範囲選択⇒確定(左AM0時)                 

--------------------
@REM 線色変更
@echo off
REM
REM #jww
REM #cd
REM #c 線色番号を指定してください
REM #h1 範囲選択
REM #hr
REM #e
REM
jgawk -vN=%1 'BEGIN{print "hd";n=N;lcn="lc" n};/^^hq/,/^^#/{if(substr($1,1,2)=="lc"){lc=$1}};/^^#/,/NF==0/{if($1=="#"){next}if($1==lcn){print lc}else{print}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
--------------- 

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

2007年7月14日 (土)

線属性変更

選択図形の「線属性」を書込線色/書込線種に変更する外変用バッチファイルです。       変更する「線属性」は、範囲選択前に「線属性設定」で設定してください。                   既作図図形がある場合は、左AM6時「属性取得」が使用できます。

--------------------
@REM 線属性変更
@echo off
REM
REM #jww
REM #cd
REM #h2 範囲選択
REM #hr
REM #e
REM
jgawk 'BEGIN{print "hd"};/^^#/,/NF==0/{if($1=="#"){next}if(substr($1,1,2)=="lc"){next}if(substr($1,1,2)=="lt"){next}else{print}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
--------------

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

2007年7月 7日 (土)

曲線属性(拡張版)

「同一レイヤ内」の「複数の閉鎖図形」を「個別に曲線属性化」に対応しました。      「閉鎖図形」は、線色または、線種を分けて作図することが必要です。

1.直線以外の図形を選択した場合、再作図されないので注意                            2.作図線色/書込み線種で「曲線属性化」                                             3.単独の「閉鎖図形」も対応                                      4.書込みレイヤグループの図形も対応                              5.同一線色/同一線種の図形は、閉鎖図形でない場合でも、                同じグループで「曲線属性化」されます。                                                                                                                                    

REM --------------------
@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(substr($1,1,2)=="lc"){print;print "pl"}if(substr($1,1,2)=="lt"){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
REM --------------------

書込み線色/書込み線種で「曲線属性化」する場合のスクリプトは、

jgawk 'BEGIN{print "hd";print "pl"};/^^#/,/NF==0/{if($1=="#"){next}if(substr($1,1,2)=="ly"){print;print "pl"}if(substr($1,1,2)=="lc"){print "pl"}if(substr($1,1,2)=="lt"){print "pl"}if(NF==4){printf "%%.15g %%.15g %%.15g %%.15g\n",$1,$2,$3,$4}}' jwc_temp.txt>temp.txt

注) jwc_temp.txtに書出された"pl"は、線データの直前だけが有効です。

| | コメント (3) | トラックバック (1)