@REM 複数の単独線に点を等距離配置
@echo off
REM #jww
REM #cd
REM #c分割距離 無指定:100 /_/a
REM #h1
REM #hc線を範囲指定してください
REM #1各線の始点を指示してください
REM #99#
rem #c
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 線分割.rb temp.txt %1 > jwc_temp.txt
◎スクリプトファイル(ファイル名 線分割.rb)
include Math
kaisu=0;kyori=100;hp=[];w=0
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
kyori=argument[2..-1].to_f
end
end
while ARGF.gets
xy=split
if xy[0]=~/^hp/
hp<<[xy[1].to_f,xy[2].to_f]
end
if xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
if xy[0]>xy[2]
xy[0],xy[2],xy[1],xy[3]=xy[2],xy[0],xy[3],xy[1]
elsif xy[0]==xy[2]
if xy[1]>xy[3]
xy[1],xy[3]=xy[3],xy[1]
end
end
x=xy[2]-xy[0]
y=xy[3]-xy[1]
l=sqrt(x**2+y**2)
arg=atan2(y,x)
ruikei=kyori
n=(l/kyori).to_i
bunkatu_x=[]
bunkatu_y=[]
@REM 線を一括して等距離分割(切断)する
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #ht40
REM #zz
REM #zc
REM #zw
REM #c切断距離 無指定:100 /_/a
REM #c切断間隔(図寸) 無指定:0/_/b
REM #h1
REM #hc線を範囲指定してください
rem #c
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 線切断.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 線切断.rb)
include Math
puts "hd"
kankaku=0;kaisu=0;kyori=100;hp=[];by=[];w=0;k=0
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
kyori=argument[2..-1].to_f
when /\/b/
kankaku=argument[2..-1].to_f
end
end
while ARGF.gets
xy=split
if xy[0]=~/^hq/
elsif xy[0]=~/^hs/
xy[1..-1].each{|item|by< elsif xy[0]=~/^lg/
print $_
zusun=by[xy[0][2,1].hex]
elsif xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
if xy[0]>xy[2]
xy[0],xy[2],xy[1],xy[3]=xy[2],xy[0],xy[3],xy[1]
elsif xy[0]==xy[2]
if xy[1]>xy[3]
xy[1],xy[3]=xy[3],xy[1]
end
end
x=xy[2]-xy[0]
y=xy[3]-xy[1]
l=sqrt(x**2+y**2)
arg=atan2(y,x)
ruikei=kyori
n=(l/kyori).to_i
bunkatu_x=[]
bunkatu_y=[]
if n>0 && kankaku*zusun*2 n.times{x1=xy[0]+(ruikei-kankaku*zusun)*cos(arg)
x2=xy[0]+(ruikei+kankaku*zusun)*cos(arg)
bunkatu_x< y1=xy[1]+(ruikei-kankaku*zusun)*sin(arg)
y2=xy[1]+(ruikei+kankaku*zusun)*sin(arg)
bunkatu_y< ruikei += kyori
}
printf("%.10f %.10f %.10f %.10f\n",
xy[0],xy[1],bunkatu_x[0],bunkatu_y[0])
printf("%.10f %.10f %.10f %.10f\n",
bunkatu_x[-1],bunkatu_y[-1],xy[2],xy[3])
1.step(bunkatu_x.size-2,2){|i|
printf("%.10f %.10f %.10f %.10f\n",
bunkatu_x[i],bunkatu_y[i],bunkatu_x[i+1],bunkatu_y[i+1]) if n>1
}
kaisu +=n+1
elsif kankaku*zusun*2>kyori
print $_
k +=1
elsif n==0
print $_
w +=1
end
else
print $_
end
end
if k>0 or w>0
printf("h#切断間隔が切断距離より長い線、又は切断距離より短い線は処理されません\n")
else
if kaisu>0
printf("h##{kaisu}本に切断しました\n")
else
printf("h#処理できる線はありません\n")
end
end