jw_cad 外部変形 - (1338) mshtaで線の複線を引く -

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

 

mshtaで線の複線を引く

:mshtaで線の複線を引く
@echo off
if exist jwc_temp.txt (
  copy jwc_temp.txt myfiles > nul
  mshta %~f0 < myfiles > jwc_temp.txt
)
goto:eof

REM #jww
REM #1ln 線を指示してください。
REM #2 基準点を指示してください。
REM #bz
REM #e

<script>
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) )
}

with (new ActiveXObject("Scripting.FileSystemObject")) {
  f = GetStandardStream(0) //stdin
  g = GetStandardStream(1) //stdout
  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;
    }
  }
  f.close()
  g.WriteLine("bz")
  g.WriteLine(lnfukusen(ln1, p2).join(" "))
}
close()
</script>

 

 

スクリプト言語jscript を使用しています。