jw_cad 外部変形 - (687) パワーシェルで階段を割り付ける -

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

 

パワーシェルで階段を割り付ける

:パワーシェルで階段を割り付ける
@echo off
set n=%1
if defined n (
  echo ^%1> %~dpn0.txt
) else (
  if exist %~dpn0.txt (
    for /f "tokens=*" %%a in (%~dpn0.txt) do set n=%%a
  )
)
if not defined n set n=12
for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
  more +%%n %0 | powershell -command -
)
goto:eof

REM #jww
REM #1-%d 始点を指示してください
REM #2%d 終点を指示してください
REM #c 段数 = 
REM #e

#!ここから more +n %0 の n 行目:最初の行は 0 行
function step ($pt1,$pt2,$n,$hk)
{
  $co=[math]::cos($hk*[math]::PI/180)
  $si=[math]::sin($hk*[math]::PI/180)
  $x1,$y1,$x2,$y2=$pt1+$pt2
  $dx=$x2-$x1
  $dy=$y2-$y1
  $ww= $dx*$co+$dy*$si
  $hh=-$dx*$si+$dy*$co
  $aa=$hh/$n
  if ($n -gt 1) { $bb=$ww/($n-1) } else { $n=1; $bb=$ww }
  $xx= $bb*$co-$aa*$si
  $yy= $bb*$si+$aa*$co
  $x2,$y2 = ($x1-$aa*$si), ($y1+$aa*$co)
  $x3,$y3 = $x1,$y1
  for ( $i = 1; $i -le $n; $i++ )
  {
    $x3+=$xx
    $y3+=$yy
    "$x1 $y1 $x2 $y2"
    "$x2 $y2 $x3 $y3"
    $x1,$y1=$x3,$y3
    $x2+=$xx
    $y2+=$yy
  }
}
#$hp = 0,1,2
$hp = @(); foreach ($i in 0..2) { $hp += 0 }

$n = [int] $env:n
if ( ($n -eq 0) -or ($n -eq $null)) { $n = 12 }
gc jwc_temp.txt | %{
  switch -regex -case ($_)
  {
    "^hk" { $hk = [double] ([regex]::split($_,' +')[1]) }
    "^hp[1-9][0-9]?" {
      $0 = [regex]::split($_,' +')
      $hp[ [regex]::match($0[0],"[1-9][0-9]?").value ] = 
      @($0[1,2] | %{ [double] $_ })
    }
  }
}
step $hp[1] $hp[2] $n $hk | sc jwc_temp.txt

#ここまで powershell は 文末に必ず空白行を置いてください