| 記事内容:[|]
外部変形にチャレンジしてみました。 2線の後端と先端を違径ダクトで接続します。
尚、この外部変形の実行には、mswin32 版 Ruby のインストールが必要です。 以下で入手できます。 http://www61.tok2.com/home2/gravelroad/libraries.html
バッチファイルとスクリプトファイルは、念の為、 コピペ後、全角スペースを半角スペースに一括置換してください。
◎バッチファイル(ファイル名 違径ダクト.bat)
@REM 2線を指示して違径ダクトを作成 @echo off REM #jww REM #cd REM #h0 REM #1lnダクトを作図する線1を指示してください REM #2lnダクトを作図する線2を指示してください REM #c線1後端のダクトサイズを入力してください REM #c線2先端のダクトサイズを入力してください REM #e copy jwc_temp.txt temp.txt > nul ruby -Ks 違径ダクト.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 違径ダクト.rb)
BEGIN{ $haba=30 $size1=ARGV[1].to_f $size2=ARGV[2].to_f while ARGV.length > 1 ARGV.pop end } def main date=[] while ARGF.gets xy =split if xy[0]=~/^[0-9]/ or xy[0]=~ /^-/ xy.collect!{ |item| item.to_f } if xy[0]>xy[2] xy[0],xy[2],= xy[2],xy[0] xy[3],xy[1],= xy[1],xy[3]
end if xy[0] == xy[2] if xy[1]>xy[3] xy[1],xy[3] = xy[3],xy[1] end end date< end end a=date[0] b=date[1] if a[0]==a[2] if a[1]>b[3] yokosen(a[0]-$size1/2-$haba,a[0] +$size1/2+$haba,a[1]) yokosen(a[0]-$size1/2,a[0]+$size1/2,a[1]-$haba) tatesen(a[1],a[1]-$haba,a[0]-$size1/2) tatesen(a[1],a[1]-$haba,a[0]+$size1/2)
yokosen(a[2]-$size2/2-$haba,b[2] +$size2/2+$haba,b[3]) yokosen(a[2]-$size2/2,a[2]+$size2/2,b[3]+$haba) tatesen(b[3],b[3]+$haba,a[2]-$size2/2) tatesen(b[3],b[3]+$haba,a[2]+$size2/2)
sen(a[0]-$size1/2,a[1]-$haba,b[2]-$size2/2,b[3] +$haba) sen(a[0]+$size1/2,a[1]-$haba,b[2]+$size2/2,b[3] +$haba) elsif b[3]>a[1] yokosen(a[2]-$size1/2-$haba,a[2] +$size1/2+$haba,a[3]) yokosen(a[2]-$size1/2,a[2]+$size1/2,a[3]+$haba) tatesen(a[3],a[3]+$haba,a[2]-$size1/2) tatesen(a[3],a[3]+$haba,a[2]+$size1/2)
yokosen(b[0]-$size2/2-$haba,b[0] +$size2/2+$haba,b[1]) yokosen(b[0]-$size2/2,b[0]+$size2/2,b[1]-$haba) tatesen(b[1],b[1]-$haba,b[0]-$size2/2) tatesen(b[1],b[1]-$haba,b[0]+$size2/2)
sen(a[2]-$size1/2,a[3]+$haba,b[0]-$size2/2,b [1]-$haba) sen(a[2]+$size1/2,a[3]+$haba,b[0]+$size2/2,b [1]-$haba) end else xa=a[2]-a[0];ya=a[3]-a[1];xya=Math.sqrt(xa**2+ya**2) dxa=xa/xya;dya=ya/xya xb=b[2]-b[0];yb=b[3]-b[1];xyb=Math.sqrt(xb**2+yb**2) dxb=xb/xyb;dyb=yb/xyb
if a[0]>b[2] sen(a[0]-($size1/2+$haba)*dya, a[1]+($size1/2+$haba)*dxa, a[0]+($size1/2+$haba)*dya, a[1]-($size1/2+$haba)*dxa)
sen(a[0]-$size1/2*dya-$haba*dxa, a[1]+$size1/2*dxa-$haba*dya, a[0]+$size1/2*dya-$haba*dxa, a[1]-$size1/2*dxa-$haba*dya)
sen(a[0]-$size1/2*dya, a[1]+$size1/2*dxa, a[0]-$size1/2*dya-$haba*dxa, a[1]+$size1/2*dxa-$haba*dya)
sen(a[0]+$size1/2*dya, a[1]-$size1/2*dxa, a[0]+$size1/2*dya-$haba*dxa, a[1]-$size1/2*dxa-$haba*dya)
sen(b[2]-($size2/2+$haba)*dyb, b[3]+($size2/2+$haba)*dxb, b[2]+($size2/2+$haba)*dyb, b[3]-($size2/2+$haba)*dxb)
sen(b[2]-$size2/2*dyb+$haba*dxb, b[3]+$size2/2*dxb+$haba*dyb, b[2]+$size2/2*dyb+$haba*dxb, b[3]-$size2/2*dxb+$haba*dyb)
sen(b[2]-$size2/2*dyb, b[3]+$size2/2*dxb, b[2]-$size2/2*dyb+$haba*dxb, b[3]+$size2/2*dxb+$haba*dyb)
sen(b[2]+$size2/2*dyb, b[3]-$size2/2*dxb, b[2]+$size2/2*dyb+$haba*dxb, b[3]-$size2/2*dxb+$haba*dyb)
sen(a[0]+$size1/2*dya-$haba*dxa, a[1]-$size1/2*dxa-$haba*dya, b[2]+$size2/2*dyb+$haba*dxb, b[3]-$size2/2*dxb+$haba*dyb)
sen(a[0]-$size1/2*dya-$haba*dxa, a[1]+$size1/2*dxa-$haba*dya, b[2]-$size2/2*dyb+$haba*dxb, b[3]+$size2/2*dxb+$haba*dyb)
elsif b[0]>a[2] sen(b[0]-($size2/2+$haba)*dyb, b[1]+($size2/2+$haba)*dxb, b[0]+($size2/2+$haba)*dyb, b[1]-($size2/2+$haba)*dxb)
sen(b[0]-$size2/2*dyb-$haba*dxb, b[1]+$size2/2*dxb-$haba*dyb, b[0]+$size2/2*dyb-$haba*dxb, b[1]-$size2/2*dxb-$haba*dyb)
sen(b[0]-$size2/2*dyb, b[1]+$size2/2*dxb, b[0]-$size2/2*dyb-$haba*dxb, b[1]+$size2/2*dxb-$haba*dyb)
sen(b[0]+$size2/2*dyb, b[1]-$size2/2*dxb, b[0]+$size2/2*dyb-$haba*dxb, b[1]-$size2/2*dxb-$haba*dyb)
sen(a[2]-($size1/2+$haba)*dya, a[3]+($size1/2+$haba)*dxa, a[2]+($size1/2+$haba)*dya, a[3]-($size1/2+$haba)*dxa)
sen(a[2]-$size1/2*dya+$haba*dxa, a[3]+$size1/2*dxa+$haba*dya, a[2]+$size1/2*dya+$haba*dxa, a[3]-$size1/2*dxa+$haba*dya)
sen(a[2]-$size1/2*dya, a[3]+$size1/2*dxa, a[2]-$size1/2*dya+$haba*dxa, a[3]+$size1/2*dxa+$haba*dya)
sen(a[2]+$size1/2*dya, a[3]-$size1/2*dxa, a[2]+$size1/2*dya+$haba*dxa, a[3]-$size1/2*dxa+$haba*dya)
sen(b[0]+$size2/2*dyb-$haba*dxb, b[1]-$size2/2*dxb-$haba*dyb, a[2]+$size1/2*dya+$haba*dxa, a[3]-$size1/2*dxa+$haba*dya)
sen(b[0]-$size2/2*dyb-$haba*dxb, b[1]+$size2/2*dxb-$haba*dyb, a[2]-$size1/2*dya+$haba*dxa, a[3]+$size1/2*dxa+$haba*dya) end end end def tatesen(y1, y2, x1) printf("%e %e %e %e\n", x1, y1, x1, y2) end def yokosen(x1, x2, y1) printf("%e %e %e %e\n", x1, y1, x2, y1) end def sen( x1, y1, x2, y2 ) printf("%e %e %e %e\n", x1, y1, x2, y2) end main()
|