jw_cad 外部変形 - (1339) mshtaで2線の交点に点を打つ -

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

 

mshtaで2線の交点に点を打つ

:mshtaで2線の交点に点を打つ
@echo off
if exist jwc_temp.txt (
  copy jwc_temp.txt myfiles > nul
  mshta %~f0 < myfiles > jwc_temp.txt
)
goto:eof

REM #jww
REM #1%dln 線を指示してください
REM #2%dln 線を指示してください
REM #bz
REM #e

<script>
function inters(ln1, ln2){
  dx = ln1[2] - ln1[0]
  dy = ln1[3] - ln1[1]
  if (dx == 0) { m1 = 1e20 } else { m1 = dy / dx }
  dx = ln2[2] - ln2[0]
  dy = ln2[3] - ln2[1]
  if (dx == 0) { m2 = 1e20 } else { m2 = dy / dx }
  aa = m1 - m2
  if (aa != 0) {
    u1 = ln1[1] - m1 * ln1[0]
    u2 = ln2[1] - m2 * ln2[0]
    return [(u2 - u1) / aa, (m1 * u2 - m2 * u1) / aa]
  } else {
    return "he処理できません"
  }
}

ln = []
with (new ActiveXObject("Scripting.FileSystemObject")) {
  f = GetStandardStream(0) //stdin
  g = GetStandardStream(1) //stdout
  while (! f.AtEndOfStream) {
    F = ($_ = f.ReadLine()).split(/\s+/)
    if (/^hhp([12])ln/i .test($_)) { i = RegExp.$1 * 1 }
    if (/^\s+/i .test($_)) { //ln 指示線
      if (ln[i] = F) for (j = 0; j < ln[i].length; j++) ln[i][j] *= 1.0;
    }
  }
  f.close()
  g.WriteLine("bz")
  g.WriteLine("pt "+inters(ln[1], ln[2]).join(" "))
}
close()
</script>

 

 

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