外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
rubyでH形鋼断面を描く
:rubyでH形鋼断面を描く
@echo off
set s=%*
if defined s (
echo ^%*> %~dpn0.txt
) else (
if exist %~dpn0.txt (
for /f "tokens=*" %%a in (%~dpn0.txt) do set s=%%a
)
)
if not defined s set s=400 200 8 13 16
ruby -x %0 jwc_temp.txt
goto:eof
REM #jww
REM #1%d 位置を指示して下さい
REM #99#
REM #c H B T1 T2 R =
REM #e
#!ruby -Ks -an -i.bak
def mov(p1, p2)
x1, y1, x2, y2 = (p1 + p2)
return x1 + x2, y1 + y2
end
def rot(x, d)
x1, y1 = x
co = cos(d)
si = sin(d)
return x1 * co - y1 * si, x1 * si + y1 * co
end
def offset(w, h, pt, opt = 5)
return w * ((9 - pt) % 3 - (9 - opt) % 3) / 2, h * (((9 - pt) / 3).to_i - ((9 - opt) / 3).to_i) / 2
end
def jish(h, b, tw, tf, r, d = 0, pt = 5, hp)
x0, y0 = offset(b, h, pt)
drad = d * PI / 180
p = [
[tw / 2 , h / 2 - tf - r],
[tw / 2 + r, h / 2 - tf - r],
[tw / 2 + r, h / 2 - tf],
[ b / 2 , h / 2 - tf],
[ b / 2 , h / 2]
]
u = p.size
for j in 0..3
a = 90 * ((1 - j) % 4) + d
for i in (j == 0 ? 1 : 0)...u
k = j % 2 == 0 ? i : u - i - 1
x, y = p[k]
x = -x if j % 3 > 0
y = -y if j > 1
pc = mov(rot([x + x0, y + y0], drad), hp)
if k == 1 && r > 0
pc = ["ci"] + pc + [r, 0, 90, 1, a]
end
puts pc.join(" ")
end
end
x, y = p[0]
puts mov(rot([x + x0, y + y0], drad), hp).join(" ")
end
BEGIN {
include Math
h, b, t1, t2, r = ENV["s"].split(/\s+/).map { |x| x.to_f }
}
case $_
when /^hk/ then hk = $F[1].to_f
when /^hp[1-9]/
jish(h, b, t1, t2, r, hk, [$F[1].to_f, $F[2].to_f])
end
__END__