jw_cad 外部変形 - (918) 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 #2 基準点を指示してください
REM #bz
REM #e
*/

function lnmove(ln, b, pmy) {
  if (pmy == "" || pmy == null) pmy = 1;
  d  = lnslope(ln)
  co = Math.cos(d) * b * pmy
  si = Math.sin(d) * b * pmy
  ln[0] -= si
  ln[1] += co
  ln[2] -= si
  ln[3] += co
  return ln
}
function lnfukusen(ln, hp) {
  return lnmove(ln, ln_hpdist(ln, hp))
}
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])
}
function ln_hpdist(ln, hp) {
  y = hp.concat(ln.slice(0, 2))
  return lnlength(y) * Math.sin( lnslope(ln) - lnslope(y) )
}

f = WScript.StdIn
while (! f.AtEndOfStream) {
  F = ($_ = f.ReadLine()).split(/\s+/)
  if (/^\s+/i .test($_)) { //ln 指示線 1
    if (ln1 = F) for (i = 0; i < ln1.length; i++) ln1[i] *= 1.0;
  }
  if (/^hp2/i .test($_)) { //hp 指示点 2
    if (p2 = F.slice(1, 3)) for (i = 0; i < p2.length; i++) p2[i] *= 1.0;
  }
}
g = WScript.StdOut
g.WriteLine("bz")
g.WriteLine(lnfukusen(ln1, p2).join(" "))