jw_cad 外部変形 - (738) gawkで線の複線を引く -

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

 

gawkで線の複線を引く

:gawkで線の複線を引く
@echo off
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 #1ln 線を指示してください
REM #2 基準点を指示してください
REM #bz
REM #e

#!ここから more +n %0 の n 行目:最初の行は 0 行
function lnlength(x) { return ($0 = x) ? sqrt( ($3 - $1) ^ 2 + ($4 - $2) ^ 2) : 0 }
function lnslope(x) { return ($0 = x) ? atan2($4 - $2, $3 - $1) : 0 }
function ln_hpdist(ln, hp,  x) {
  $0 = ln
  x = hp FS $1 FS $2
  return lnlength(x) * sin(lnslope(ln) - lnslope(x))
}
function lnmove(ln, b,  d, co, si) {
  d = lnslope(ln)
  co = cos(d)
  si = sin(d)
  $0 = ln
  $1 -= b * si
  $2 += b * co
  $3 -= b * si
  $4 += b * co
  return $0
}
BEGIN { CONVFMT = OFMT = "%.15g" }
/^hq/ { print "bz" }
/^hp2/ { p2 = $2 FS $3 }
/^[ ]/ && NF == 4 {
  ln = $0
  print lnmove(ln, ln_hpdist(ln, p2))
}