« 2007年6月 | トップページ | 2007年8月 »

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月28日 (土)

ソリッドデータの書出し

四角/円のソリッドデータを書出しするバッチファイルです。                   このままでは外変として使用できませんが・・・・・参考です。m(__)m

--------------------
@REM 四角ソリッドの作図
@echo off
REM
REM #jww
REM #cd
REM #0 基点(左下)を指示
REM #hr
REM #e
REM
jgawk 'BEGIN{x1=0;y1=0;x2=0;y2=5;x3=30;y3=0;x4=30;y4=5;print "sl",x1,y1,x2,y2,x4,y4,x3,y3}' nul>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

--------------------
@REM 円ソリッドの作図
@echo off
REM
REM #jww
REM #cd
REM #0 中心点を指示
REM #hr
REM #e
REM
jgawk 'BEGIN{pi=atan2(0,-1);x1=0;y1=0;r1=5;hp=1;zk=0;a1=0;a3=2*pi;f1=100;print "sc",x1,y1,r1,hp,zk,a1,a3,f1}' nul>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

| | コメント (4) | トラックバック (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)

2007年7月 1日 (日)

配列複写

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]}}}
}    

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

« 2007年6月 | トップページ | 2007年8月 »