« 2.5D台形出窓 | トップページ | GSUファイル間複写 »

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

|

« 2.5D台形出窓 | トップページ | GSUファイル間複写 »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/94529/40327573

この記事へのトラックバック一覧です: 2.5Dレイヤ名設定(改):

« 2.5D台形出窓 | トップページ | GSUファイル間複写 »