######main.bat
@REM 平面用外部変形(main)
@echo off
goto do%1
REM #jww
REM #cd
REM #hm |柱作図|間柱作図|壁線作図|建具枠作図|BAT 編集|
REM #:1
REM #h/C:\平面作図\外変\柱作図.bat
REM #e
REM #:2
REM #h/C:\平面作図\外変\間柱作図.bat
REM #e
REM #:3
REM #h/C:\平面作図\外変\壁線作図.bat
REM #e
REM #:4
REM #h/C:\平面作図\外変\建具枠作図.bat
REM #e
REM #:5
REM #hr
REM #e
:do1
echo h# 柱作図.batに移動しました。 > jwc_temp.txt
goto END
:do2
echo h# 間柱作図.batに移動しました。 > jwc_temp.txt
goto END
:do3
echo h# 壁線作図.batに移動しました。 > jwc_temp.txt
goto END
:do4
echo h# 建具枠作図.batに移動しました。 > jwc_temp.txt
goto END
:do5
start notepad.exe main.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
:END
######以上main.bat
######壁線作図.bat
@REM 壁線作図
@echo off
goto do%1
REM #jww
REM #cd
REM #hm |PB9.5|PB12.5|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|mainに戻る|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #hr
REM #e
REM #:8
REM #h/C:\平面作図\main.bat
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe 壁線作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
:do8
echo h# main.batに移動しました。 > jwc_temp.txt
goto END
#####以上壁線作図
REM #hm |PB12|PB9|PB12+9|PB9+12|PB12+12|PB15+15|PB21+21|K8+8|
REM #:1
REM #h/C:\JWW\外部変形\ruby\間仕切\PB12.BAT
REM #e
次にLGSの巾を選択します。
PB12.BATが下記です。
REM #hc【壁厚】 ボタンを選択して下さい。
REM #hm【壁厚】|W100|W90|W75|W65|W50|W45|
REM #:1
REM #h/C:\JWW\外部変形\ruby\間仕切\100+12.BAT
REM #e
REM #:2
REM #h/C:\JWW\外部変形\ruby\間仕切\90+12.BAT
REM #e
100+12.BATが下記です。
Re(1)を修正しました。
@REM 指示点間複線作図
@echo off
REM #jww
REM #cd
REM #h0
REM #1- 【作図始点を指示】
REM #99#
REM #hr
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
goto END
Re(1)の
def main
$koumoku = ARGV.pop.to_s
include Math
を両側1本のときは
def main
$koumoku = "1"
include Math
---例---
@REM LGS100PB12.5両側作図(コーナー処理)
@echo off
REM #jww
REM #cd
REM #h0
REM #1- 【作図始点を指示】
REM #99#
REM #hr
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
#スクリプトの下記箇所を修正
$11=50
$l2=12.5
$koumoku = ARGV.pop.to_s → $koumoku = "1"に修正
このスレッドも長くなりましたので私の書込みはこれで終わりにしたいと思います。
バッチファイル名は「複線作図02.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe 複線作図02.bat---修正必要)
######下記より
@REM 指示点間複線作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの66行目からです。
rem ------------------------------------------------------------
rem ※注意点
rem 1.この外部変形は指示点間に複線を作図するものです。
rem 2.作図は書込みグループの指定レイヤです。
rem 3.不必要なグループは非表示にしてください。
rem 4.図面軸角0で使用してください。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |2線両側 L|3線両側 R|2線片側|3線片側|BAT 編集|
REM #:1
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:2
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:3
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free
REM #hr
REM #e
REM #:4
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free
REM #hr
REM #e
REM #:5
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do5
start notepad.exe 複線作図02.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
def main
##### 設 定 ######################################################
#
$corn = "on" #屈折点コーナー処理設定(on≡設定有; off≡設定無)
# ※"on"および両側複線 の場合は下記オフセットは無効です。
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#
$off1 = 54.5 #始点からのオフセット設定 [単位 mm]
$off2 = 54.5 #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定-----------
#
$l1 = 32.5 #中心線からの間隔 [単位 mm]
$c1 = "1" #1線目の線色(1〜9) [無指定:書込み線色]
$t1 = "1" #1線目の線種(1〜9) [無指定:書込み線種]
$y1 = "1" #1線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#-----------------------------
$koumoku = ARGV.pop.to_s
if $koumoku == "1"
@line_type = ["2","W"] # W≡複線両側
msg = "2線を指示点間の両側に作図しました。"
elsif $koumoku == "2"
@line_type = ["3","W"]
msg = "3線を指示点間の両側に作図しました。"
elsif $koumoku == "3"
@line_type = ["2","S"] # S≡複線片側
msg = "2線を指示点間の片側に作図しました。"
elsif $koumoku == "4"
@line_type = ["3","S"]
msg = "3線を指示点間の片側に作図しました。"
end
#
#------2線の場合------------
#
if @line_type[0] == "2"
$l2 = 12.5 #2線---1線目からの間隔 [単位 mm]
$c2 = "2" #2線目の線色(1〜9) [無指定:書込み線色]
$t2 = "1" #2線目の線種(1〜9) [無指定:書込み線種]
$y2 = "3" #2線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#------#3線の場合-----------
#
elsif @line_type[0] == "3"
$l2 = 12.5 #2線---1線目からの間隔 [単位 mm]
$c2 = "3" #2線目の線色(1〜9) [無指定:書込み線色]
$t2 = "3" #2線目の線種(1〜9) [無指定:書込み線種]
$y2 = "2" #2線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
$l3 = 9.5 #3線---2線目からの間隔 [単位 mm]
$c3 = "2" #3線目の線色(1〜9) [無指定:書込み線色]
$t3 = "1" #3線目の線種(1〜9) [無指定:書込み線種]
$y3 = "3" #3線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
end
#################################################################
lyct,hps = [],[]
while ARGF.gets
ele = split
if ele[0] =~ /^l[yct]/
lyct << ele[0]
elsif ele[0] =~ /^hp[1-9]/
ele.shift
hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
end
end
if @line_type[1] == "W"
if hps.size == 1
puts "he 2点以上指示してください。"; exit
else
if hps[0] == hps[-1]
$hp_flag = 1
end
end
if $corn == "on"
$off1,$off2 = 0,0
end
elsif @line_type[1] == "S"
p3 = hps.pop
end
lns1,lns2,lns3 = [],[],[]
for idx in 1..hps.size-1
p1,p2 = hps[idx-1],hps[idx]
aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
if aa == 0 && bb == 0
puts "he 同一点が連続して指示されています。"; exit
end
if @line_type[1] == "S"
if aa/bb > 0
if p1[0] > p2[0]
pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
off = $off1
$off1 = -$off2; $off2 = -off
end
elsif aa/bb < 0
if p1[0] < p2[0]
pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
off = $off1
$off1 = -$off2; $off2 = -off
end
end
f1,g1 = p3[0]-p1[0],p3[1]-p1[1]
f2,g2 = aa,bb
@det = f1*g2-f2*g1
if @det == 0
puts "he 複線作図方向指示エラー。"; exit
end
end
dx1,dy1 = $l1.to_f*bb/zz,$l1.to_f*aa/zz
lns1 << fukusen(p1,p2,dx1,dy1,aa,bb,zz)
if @line_type[0] =~ /^[23]/
dx2,dy2 = dx1+$l2.to_f*bb/zz,dy1+$l2.to_f*aa/zz
lns2 << fukusen(p1,p2,dx2,dy2,aa,bb,zz)
if @line_type[0] =~ /^3/
dx3,dy3 = dx2+$l3.to_f*bb/zz,dy2+$l3.to_f*aa/zz
lns3 << fukusen(p1,p2,dx3,dy3,aa,bb,zz)
end
end
end
if $y1 =~ /^[0-9a-fA-F]/
puts "ly#{$y1}"
else
puts lyct[0]
end
if $c1 =~ /^[1-9]/
puts "lc#{$c1}"
else
puts lyct[1]
end
if $t1 =~ /^[1-9]/
puts "lt#{$t1}"
else
puts lyct[2]
end
draw(lns1)
if @line_type[0] =~ /^[23]/
if $y2 =~ /^[0-9a-fA-F]/
puts "ly#{$y2}"
else
puts lyct[0]
end
if $c2 =~ /^[1-9]/
puts "lc#{$c2}"
else
puts lyct[1]
end
if $t2 =~ /^[1-9]/
puts "lt#{$t2}"
else
puts lyct[2]
end
draw(lns2)
end
if @line_type[0] =~ /^3/
if $y3 =~ /^[0-9a-fA-F]/
puts "ly#{$y3}"
else
puts lyct[0]
end
if $c3 =~ /^[1-9]/
puts "lc#{$c3}"
else
puts lyct[1]
end
if $t3 =~ /^[1-9]/
puts "lt#{$t3}"
else
puts lyct[2]
end
draw(lns3)
end
puts lyct[0],"h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
fl1=[t0-dx,t1+dy,t2-dx,t3+dy]
fl2=[t0+dx,t1-dy,t2+dx,t3-dy]
return fl1,fl2
end
def draw(lns)
if $corn == "on" && @line_type[1] == "W"
pts = []
if $hp_flag == 1
lns.unshift(lns[-1])
else
pts << lns[0][0][0,2]+lns[0][1][0,2]
end
for idx in 1..lns.size-1
x1,y1 = linepoint_keisan(lns[idx-1][0],lns[idx][0])
x2,y2 = linepoint_keisan(lns[idx-1][1],lns[idx][1])
pts << [x1,y1,x2,y2]
end
if $hp_flag == 1
ii = 0
else
pts << lns[-1][0][2,2]+lns[-1][1][2,2]
ii = 1
end
for idx in ii..pts.size-1
pts[idx-1].collect!{ |item| sprintf("%0.10f",item).to_f }
pts[idx].collect!{ |item| sprintf("%0.10f",item).to_f }
puts [pts[idx-1][0,2],pts[idx][0,2]].join("\s")
puts [pts[idx-1][2,2],pts[idx][2,2]].join("\s")
end
elsif $corn == "off" or @line_type[1] == "S"
for idx in 0..lns.size-1
lns[idx][0].collect!{ |item| sprintf("%0.10f",item).to_f }
lns[idx][1].collect!{ |item| sprintf("%0.10f",item).to_f }
if @line_type[1] == "W"
puts [lns[idx][0]].join("\s")
puts [lns[idx][1]].join("\s")
elsif @line_type[1] == "S"
if @det < 0
puts [lns[idx][0]].join("\s")
elsif @det > 0
puts [lns[idx][1]].join("\s")
end
end
end
end
end
def linepoint_keisan(axy,bxy)
x1,y1,x2,y2 = axy[0],axy[1],axy[2],axy[3]
x3,y3,x4,y4 = bxy[0],bxy[1],bxy[2],bxy[3]
if axy != bxy
f1,g1 = x2-x1,y2-y1
f2,g2 = x4-x3,y4-y3
det = f2*g1-f1*g2
if det != 0.0
dx,dy = x3-x1,y3-y1
t1,t2 = (f2*dy-g2*dx)/det,(f1*dy-g1*dx)/det
x0,y0 = x1+f1*t1,y1+g1*t1
else
x0,y0 = x3,y3
end
return x0,y0
end
end
main()
:END
########以上です。