jw_cad 外部変形 - (1390) vbscriptで2重線を引く(2sen) -

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

 

vbscriptで2重線を引く(2sen)

:vbscriptで2重線を引く(2sen)
@echo off
set w=%1
set tome=0
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 %tome% > jwc_temp.txt
)
goto:eof

REM #jww
REM #1-%d 始点を指示してください
REM #2%d 終点を指示してください
REM #k 線の幅| 200(L) | 400(R) | 120 | 150 | 180 | 220 | 250 | 300 | 350 |
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

'2)円周率
Const PI = 3.141592653589793

'3)環境変数
Dim Env
Set Env = CreateObject("WScript.Shell").Environment("Process")

'4)ユーザ定義関数
function atan2(y, x)
  if x = 0 then
    atan2 = atn(1) * 2 * sgn(y)
  else
    atan2 = atn(y / x)
  end if
  if x < 0 then
    if y < 0 then
      atan2 = atan2 - atn(1) * 4
    else
      atan2 = atan2 + atn(1) * 4
    end if
  end if
end function

Dim line, F
Dim p1, p2
With CreateObject("Scripting.FileSystemObject")
  With .OpenTextFile("myfiles")
  Do While Not .AtEndOfStream
    line = .ReadLine: F = reSplit(line)
    if reTest("^hp1",line) then p1 = Array(F(1)*1.0,F(2)*1.0)
    if reTest("^hp2",line) then p2 = Array(F(1)*1.0,F(2)*1.0)
  Loop
  End With
End With

Dim x1, y1, x2, y2
Dim w, d, xw, yw, tome, xt, yt
tome = WScript.Arguments(0)
Dim mode, p, r
mode = 2 '1=留線 直線、0=なし、2=半円
With WScript
  x1 = p1(0): y1 = p1(1)
  x2 = p2(0): y2 = p2(1)
  w = Split("200 200 400 100 125 150 175 250 300 350")(Env("w")*1)
  d = atan2(y2 - y1, x2 - x1)
  yw = w / 2 * cos(d)
  xw =-w / 2 * sin(d)
  xt = tome * cos(d)
  yt = tome * sin(d)
  x1 = x1 + xt: y1 = y1 + yt
  x2 = x2 - xt: y2 = y2 - yt
  .Echo Join(Array(x1 + xw, y1 + yw, x2 + xw, y2 + yw))
  if w > 0 then
    .Echo Join(Array(x1 - xw, y1 - yw, x2 - xw, y2 - yw))
    if mode = 1 then
      .Echo Join(Array(x1 + xw, y1 + yw, x1 - xw, y1 - yw))
      .Echo Join(Array(x2 + xw, y2 + yw, x2 - xw, y2 - yw))
    end if
    if mode = 2 then
      p = d * 180 / PI + 90
      r = w / 2
      .Echo Join(Array("ci", x1, y1, r, p, p + 180, 1, 0))
      .Echo Join(Array("ci", x2, y2, r, p - 180, p, 1, 0))
    end if
  end if
End With