jw_cad 外部変形 - (926) jscriptで線に直交線を引く -

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

 

jscriptで線に直交線を引く

/* jscriptで線に直交線を引く
@cls & echo off
copy jwc_temp.txt myfiles > nul
cscript //nologo //e:jscript %0 < myfiles > jwc_temp.txt
goto:eof

REM #jww
REM #1ln 線を指示してください
REM #bz
REM #e
*/

function sgn(x) {
  return x == 0 ? x : ( x > 0 ? 1 : -1 )
}

function lnlength(x) { //線長を返す
  return Math.sqrt(Math.pow(x[3] - x[1], 2) + Math.pow(x[2] - x[0], 2))
}

function lnslope(x) { //線の角度を返す
  return Math.atan2(x[3] - x[1], x[2] - x[0])
}

f = WScript.StdIn
while (! f.AtEndOfStream) {
  F = ($_ = f.ReadLine()).split(/\s+/)
  if (/^hp1/i .test($_)) {
    if (p1 = F.slice(1, 3)) for (j = 0; j < p1.length; j++) p1[j] *= 1.0;
  }
  if (/^\s+/i.test($_)) { //ln 指示線
    if (ln1 = F) for (j = 0; j < ln1.length; j++) ln1[j] *= 1.0;
  }
}

with (Math) {
  x1 = ln1[0]
  y1 = ln1[1]
  x2 = ln1[2]
  y2 = ln1[3]
  p0 = p1
  p1 = [x1, y1]
  p2 = [x2, y2]
  pc = [(x1 + x2) / 2, (y1 + y2) / 2]
  l1 = lnlength(p0.concat(p1))
  l2 = lnlength(p0.concat(p2))
  l3 = lnlength(p0.concat(pc))
  if ( (sgn(l2 - l1) + sgn(l3 - l1)) == 2) { pc = p1 }
  if ( (sgn(l1 - l2) + sgn(l3 - l2)) == 2) { pc = p2 }
  l = lnlength(ln1) / 2
  d = lnslope(ln1)
  co = cos(d)
  si = sin(d)
  xc = pc[0]
  yc = pc[1]
}

g = WScript.StdOut
g.WriteLine("bz")
g.WriteLine([xc + l * si, yc - l * co, xc - l * si, yc + l * co].join(" "))