外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
gawkでソリッド図形のH形鋼断面を描く
:gawkでソリッド図形のH形鋼断面を描く
@echo off
set s=%*
if defined s (
echo ^%*> %~dpn0.txt
) else (
if exist %~dpn0.txt (
for /f "tokens=*" %%a in (%~dpn0.txt) do set s=%%a
)
)
if not defined s set s=400 200 8 13 16
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 #99#
REM #c H B T1 T2 R =
REM #e
#!ここから more +n %0 の n 行目:最初の行は 0 行
function offset(w, h, pt, opt) {
opt = 5
return w * ( (9 - pt) % 3 - (9 - opt) % 3) / 2 FS h * (int( (9 - pt) / 3) - int( (9 - opt) / 3)) / 2
}
function jish(A, B, Tw, Tf, r, hk, pt, pk, i, j, k, u, v) {
$0 = pk; x0 = $1; y0 = $2
p0 = offset(B, A, pt)
red = 0
green = 128
blue = 128
print "lc10", red + 256 * green + 256 * 256 * blue
print "pl"
p[0] = Tw/2 FS A/2-Tf
p[1] = Tw/2+r FS A/2-Tf-r
p[2] = B/2 FS A/2-Tf
p[3] = B/2 FS A/2
u = 4; v = 5
co = cos(d = hk * PI / 180); si = sin(d)
for (j = 0; j <= 3; j++) {
for (i = 0; i < u; i++) {
k = (j % 2 == 0 ? i : u - i - 1)
$0 = p[k] FS p0
$1 = (j % 3 != 0 ? -$1 : $1)
$2 = (j > 1 ? -$2 : $2)
pc =($1 + $3) * co - ($2 + $4) * si + x0 FS ($1 + $3) * si + ($2 + $4) * co + y0
if (k == 1) {
a = (v-- % 4) * 90
print "sc", pc, r, 1, hk * PI / 180, a * PI / 180, PI / 2, -1
}
pp[i + j * u] = pc
}
}
print "sl", pp[0], pp[7], pp[8], pp[15]
print "sl", pp[2], pp[3], pp[4], pp[5]
print "sl", pp[10],pp[11],pp[12],pp[13]
print "#"
}
BEGIN { CONVFMT = OFMT = "%.15g"; PI = atan2(1, 1) * 4 }
/^hk/ { hk = $2 }
/^hp[1-9][0-9]?/ {
gsub(/(ln|ci|ch|-)$/, "", $1)
hp[substr($1, 3)] = $2 FS $3; n++
}
END {
$0 = ENVIRON["s"]
H = $1; B = $2; T1 = $3; T2 = $4; r = $5 ? $5 : 0
for (i = 1; i <= n; i++) {
jish(H, B, T1, T2, r, hk, pt = 5, hp[i])
}
}