jw_cad 外部変形 - (747) gawkで階段を割り付ける -

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

 

gawkで階段を割り付ける

:gawkで階段を割り付ける
@echo off
set n=%1
call %~dp0set "n" "%*" %~dpn0.txt
for /f %%n in ('gawk "/^#!/ { print NR }" %0') do (
  copy jwc_temp.txt myfiles > nul
  more +%%n %0 | gawk -f - myfiles > jwc_temp.txt
)
goto:eof

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

#!ここから more +n %0 の n 行目:最初の行は 0 行
function rad(x) { return x * atan2(1, 0) / 90 }
function deg(x) { return x / atan2(1, 0) * 90 }
BEGIN {
  CONVFMT = OFMT = "%.15g"
  n = ENVIRON["n"] * 1; if (n <= 0) n = 12
  c = 1 #c = 0 で均等割り
}
/^hk/ { hk = $2 }
/^hp[1-9][0-9]?/ {
  gsub(/(ln|ci|ch|-)$/, "", $1); hp[substr($1, 3)] = $2 FS $3 }
END {
  $0 = hp[1] FS hp[2] #$0 = $1 $2 $3 $4 = x1 FS y1 FS x2 FS y2
  co = cos(d = rad(hk))
  si = sin(d)
  a = (h = ($4 - $2) * co - ($3 - $1) * si) / n
  b = (w = ($3 - $1) * co + ($4 - $2) * si) / (n > c ? (n - c) : 1)
  printf("K1\n%s %s\n", deg(atan2($2, $1)), sqrt($1 * $1 + $2 * $2))
  for (i = 1; i <= n; i++) {
    printf("%s %s\n%s %s\n", 90 + hk, a, hk, b)
  }
}

 

○set.bat

set %~1=%~2
if defined %~1 (
  echo ^%~2> %3
) else (
  if exist %3 (
    for /f "tokens=*" %%a in (%3) do set %~1=%%a
  )
)