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

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

 

jscriptでソリッド図形のH形鋼断面を描く

/* jscriptでソリッド図形のH形鋼断面を描く
@cls & 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
copy jwc_temp.txt myfiles > nul
cscript //nologo //e:jscript %0 < myfiles > jwc_temp.txt
goto:eof

REM #jww
REM #1%d 位置を指示して下さい
REM #99#
REM #c H B T1 T2 R =
REM #e
*/

function int(a) {
  return a < 0 ? Math.ceil(a) : Math.floor(a)
}

function mov(p1, p2) {
  x1 = p1[0]*1.0
  y1 = p1[1]*1.0
  x2 = p2[0]*1.0
  y2 = p2[1]*1.0
  return [x1 + x2, y1 + y2]
}

function rot(x1, y1, d) {
  co = Math.cos(d)
  si = Math.sin(d)
  return [x1 * co - y1 * si, x1 * si + y1 * co]
}

function offset(w, h, pt) {
  opt = 5
  i1 = int( (9 - pt) / 3)
  i2 = int( (9 - opt) / 3)
  i = i1 - i2
  return [w * ( (9 - pt) % 3 - (9 - opt) % 3) / 2, h * i / 2]
}

function jish(hp, h, b, tw, tf, r, pt, hk) {
  var i, j, k //ローカル変数
  p0 = offset(b, h, pt)

  red = 0
  green = 128
  blue = 128
  WScript.Echo( "lc10 " + (red + 256 * green + 256 * 256 * blue) )
  WScript.Echo( "pl" )

  d = hk * Math.PI / 180
  pp =
  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.length
  for (j = 0; j <= 3; j++) {
    a = 90 * ((1 - j) % 4)
    for (i = 0; i < u; i++) {
      k = j % 2 == 0 ? i : u - i - 1
      x = j % 3 > 0 ? -p[k][0] : p[k][0]
      y = j > 1 ? -p[k][1] : p[k][1]
      pc = mov(rot(x + p0[0], y + p0[1], d), hp)
      if (k == 1 && r > 0) {
        WScript.Echo( "sc " + pc.concat(r, 1, d, a * Math.PI / 180, Math.PI / 2, -1).join(" ") )
      }
      pp[i + j * u] = pc
    }
  }

  WScript.Echo( ["sl", pp[0], pp[9], pp[10], pp[19]].join(" ").replace(/,/g," ") )
  WScript.Echo( ["sl", pp[3], pp[4], pp[5], pp[6]].join(" ").replace(/,/g," ") )
  WScript.Echo( ["sl", pp[13], pp[14], pp[15], pp[16]].join(" ").replace(/,/g," ") )
  WScript.Echo( "#" )
}

hp =

f = WScript.StdIn
while (! f.AtEndOfStream) {
  F = ($_ = f.ReadLine()).split(/\s+/)
  if (/^hk/i .test($_)) { hk = F[1] * 1.0 } //hk 軸角
  if (/^hp[1-9][0-9]?/i .test($_)) { //hp 指示点
    hp[ F[0].match(/[0-9]+/) ] = [ F[1] * 1.0, F[2] * 1.0 ]
  }
}

ENV = new ActiveXObject("WScript.Shell").Environment("Process")
s = ENV('s').split(/\s+/)
h = s[0]*1.0
b = s[1]*1.0
t1 = s[2]*1.0
t2 = s[3]*1.0
r = s[4]*1.0

for (i in hp) {
  jish(hp[i], h, b, t1, t2, r, pt = 5, hk)
}