jw_cad 外部変形 - (809) rubyでソリッド図形のH形鋼断面を描く -

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

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)
  red, g, blue = 0, 128, 128
  puts "lc10 %s" % [red + 256 * g + 256 * 256 * blue]
  puts "pl"
  drad = d * PI / 180
  p = [
      [tw / 2    , h / 2 - tf - r*0],
      [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
  pp = []
  sc = "sc"+" %s"*8
  for j in 0..3
    a = 90 * ((1 - j) % 4)
    for i in 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
        puts sc % (pc + [r, 1, drad, a * PI / 180, PI / 2, -1])
      end
      pp[i + j * u] = pc
    end
  end
  sl = "sl" + " %s" * 8
  puts sl % pp.values_at( 0,  9, 10, 19).flatten
  puts sl % pp.values_at( 3.. 6).flatten
  puts sl % pp.values_at(13..16).flatten
  puts "#"
end
BEGIN {
  include Math
  h, b, t1, t2, r = ENV["s"].split(/\s+/).map { |x| x.to_f }
}
case $_
  when /^hk/
    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__