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

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

 

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

:vbscriptで2線の交点に点を打つ
@echo off
if not exist %~dp0eval.vbs echo ExecuteGlobal WScript.StdIn.ReadAll > %~dp0eval.vbs
for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
  copy jwc_temp.txt myfiles > nul
  (
:   echo Option Explicit
    echo On Error Resume Next
:   echo On Error GoTo 0
    more +%%n %0
  ) | cscript //nologo %~dp0eval.vbs > jwc_temp.txt
)
goto:eof

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

#!この次の行からプログラムを書いてください
'1)正規表現
Dim re
Set re = New RegExp
re.IgnoreCase = True '大文字と小文字を区別しない
re.Global = True '文字列全体を検索する

function reSplit(str)
  re.Pattern = "[ ]+"
  reSplit = Split(Trim(re.Replace(str," ")))
end function

function reTest(pat, str)
  re.Pattern = pat
  reTest = re.Test(str)
end function

'4)ユーザ定義関数
function inters(ln1, ln2) '線と線の交点
  Dim m1, m2, u1, u2
  if typename(ln1) = "String" then ln1 = Split(Trim(ln1))
  if typename(ln2) = "String" then ln2 = Split(Trim(ln2))
  if ln1(2) = ln1(0) then m1 = 1e20 else m1 = (ln1(3) - ln1(1)) / (ln1(2) - ln1(0))
  if ln2(2) = ln2(0) then m2 = 1e20 else m2 = (ln2(3) - ln2(1)) / (ln2(2) - ln2(0))
  if m1 <> m2 then
    u1 = ln1(1) - m1 * ln1(0)
    u2 = ln2(1) - m2 * ln2(0)
    inters = Array( (u2 - u1) / (m1 - m2), (m1 * u2 - m2 * u1) / (m1 - m2))
  else
    WScript.Echo "he処理できません"
    WScript.Quit
  end if
end function

Dim line, F
Dim ln(10), i, j
i = 1
With CreateObject("Scripting.FileSystemObject")
  With .OpenTextFile("myfiles")
  Do While Not .AtEndOfStream
    line = .ReadLine: F = reSplit(line)
    if reTest("^[ ]",line) then '指示線
      ln(i) = F
      for j = 0 to 3: ln(i)(j) = Cdbl(ln(i)(j)): next
      i = i + 1
    end if
  Loop
  End With
End With
WScript.Echo "bz"
WScript.Echo "pt " & Join(inters(ln(1), ln(2)))