REM 一括面取り.bat
REM 面取りを一括で行う
CHCP 932
echo off
REM #jww
REM #cd
goto %1
REM #hm【一括面取り】 |辺寸法|R寸法|面寸法|
REM #:1
REM #h2
REM #hc 【辺寸法】面取りする範囲を選択
REM #c 【辺寸法】面取り寸法 無指定:10.0 /_a
REM #e
REM #:2
REM #h2
REM #hc 【R寸法】面取りする範囲を選択
REM #c 【R寸法】面取り寸法 無指定:10.0 /_a
REM #e
REM #:3
REM #h2
REM #hc 【面寸法】面取りする範囲を選択
REM #c 【面寸法】面取り寸法 無指定:10.0 /_a
REM #e
:1
:2
:3
copy jwc_temp.txt temp.txt
REM C:\ruby187b\bin\ruby -Ks -x %~f0 %1 %2 %3
ruby -Ks -x %~f0 %1 %2 %3
GOTO END
REM #~
◎コメント
◎最終更新:2023-12-18
◎バッチファイル名は自由
◎以下 ruby スクリプト部分
#! ruby
# encoding: SJIS
$stdout=open("jwc_temp.txt","w")
$stderr=open("tmp_err.txt","w")
include Math
require "matrix"
class Array
def to_v
a=self.map{|e| e.to_f}
return [Vector[a[0],a[1]],Vector[a[2],a[3]]].sort_by{|e| e.to_a}
end
def to_af
return self.map{|e| e.kind_of?(Vector) ? e.to_a : e}.flatten
end
end
opt=ARGV[0].to_i
men=10.0
ARGV.each{|e|
if %r|^a(.*)|=~e
men=$1.to_f
end}
men=men/(2**0.5) if opt==3
ar=open("temp.txt").readlines.map{|e| e.chomp}
ln=ar.select{|e| /^ [\d-]/=~e}.
map{|e| e.split(" ")}.uniq
ln=ln.map{|e| e.to_v}
ln=ln.select{|e| (e[1]-e[0]).r>men*2}
lv=ln.select{|e| e[0][0]==e[1][0]}
lh=ln.select{|e| e[0][1]==e[1][1]}
ar,i=[],0
while lh[i]
hs=lh[i]
(lh-hs).select{|he| (he[0][0]==hs[0][0] && he[1][0]==hs[1][0])}.
map{|he|
if (lv.include?([hs[0],he[0]]) && lv.include?([hs[1],he[1]])) or
(lv.include?([hs[0].*(-1),he[0].*(-1)]) && lv.include?([hs[1].*(-1),he[1].*(-1)]))
ar += [[he,[hs[0],he[0]]],[he,[hs[1],he[1]]],[hs,[hs[0],he[0]]],[hs,[hs[1],he[1]]]]
end}
i=i+1
end
ar=ar.uniq
ar=ar.map{|e| e.map{|f| f.sort_by{|g| g.to_a}}}
#a2=a1.map{|e|
ac=ar.map{|e|
eh,ev=e[0],e[1]
if eh[0]==ev[0]
e1=eh[0]+(eh[1]-eh[0])*men*((eh[1]-eh[0]).r)**(-1.0)
e2=ev[0]+(ev[1]-ev[0])*men*((ev[1]-ev[0]).r)**(-1.0)
e3=[e1[0],e2[1],men,180,270]
elsif eh[0]==ev[1]
e1=eh[0]+(eh[1]-eh[0])*men*((eh[1]-eh[0]).r)**(-1.0)
e2=ev[1]-(ev[1]-ev[0])*men*((ev[1]-ev[0]).r)**(-1.0)
e3=[e1[0],e2[1],men,90,180]
elsif eh[1]==ev[0]
e1=eh[1]-(eh[1]-eh[0])*men*((eh[1]-eh[0]).r)**(-1.0)
e2=ev[0]+(ev[1]-ev[0])*men*((ev[1]-ev[0]).r)**(-1.0)
e3=[e1[0],e2[1],men,270,0]
elsif eh[1]==ev[1]
e1=eh[1]-(eh[1]-eh[0])*men*((eh[1]-eh[0]).r)**(-1.0)
e2=ev[1]-(ev[1]-ev[0])*men*((ev[1]-ev[0]).r)**(-1.0)
e3=[e1[0],e2[1],men,0,90]
end
[e1,e2,e3,eh]}
ah0=ar.transpose[0].to_a
av0=ar.transpose[1].to_a
ahf=ah0.to_a.flatten
avf=av0.to_a.flatten
ah1=ah0.map{|e|
em,en=e[0],e[1]
em=e[0]+(e[1]-e[0])*men*((e[1]-e[0]).r)**(-1.0) if avf.include?(e[0])
en=e[1]+(e[0]-e[1])*men*((e[0]-e[1]).r)**(-1.0) if avf.include?(e[1])
[em,en]}
av1=av0.map{|e|
em,en=e[0],e[1]
em=e[0]+(e[1]-e[0])*men*((e[1]-e[0]).r)**(-1.0) if ahf.include?(e[0])
en=e[1]+(e[0]-e[1])*men*((e[0]-e[1]).r)**(-1.0) if ahf.include?(e[1])
[em,en]}
open("temp.txt").readlines.each{|e|
if /^hq/=~e
puts "hd"
elsif /^ [\d-]/=~e
ee=e.split(" ").to_v
if ah0.include?(ee)
puts " "+ah1[ah0.index(ee)].to_af.join(" ")
if opt==2
ac.select{|e| e[3]==ee}.each{|e|
puts "ci "+e[2].to_af.join(" ")}
else
ac.select{|e| e[3]==ee}.each{|e|
puts " "+[e[0],e[1]].to_af.join(" ")}
end
elsif av0.include?(ee)
puts " "+av1[av0.index(ee)].to_af.join(" ")
else
puts e
end
else
puts e
end
}
__END__
:END
コメント