外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
tclshでH形鋼断面を描く
:tclshで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 "delims=:" %%n in ('findstr /n "^#!" %0') do (
copy jwc_temp.txt myfiles > nul
more +%%n %0 | tclsh - > jwc_temp.txt
)
goto:eof
REM #jww
REM #1%d 位置を指示して下さい
REM #99#
REM #c H B T1 T2 R =
REM #e
#!この次の行からプログラムを書いてください
proc moveto {x y} { #点x を 相対距離 y [ a, b ] へ移動
lassign "$x $y" 1 2 3 4
return [list [expr $1 + $3] [expr $2 + $4]]
}
proc rot {x d} {
lassign $x x1 y1
set co [expr cos($d)]
set si [expr sin($d)]
return [list [expr $x1 * $co - $y1 * $si] [expr $x1 * $si + $y1 * $co]]
}
proc offset {w h pt opt} {
return [list [expr $w * ( (9 - $pt) % 3 - (9 - $opt) % 3) / 2] [expr $h * int( ( (9 - $pt) / 3) - int( (9 - $opt) / 3)) / 2]]
}
proc jish {hp h b tw tf r {d 0} {pt 5} {opt 5}} {
set p0 [offset $b $h $pt $opt]
lassign $p0 x0 y0
set PI [expr acos(-1)]
set drad [expr $d * $PI / 180]
set p(0) [list [expr $tw / 2] [expr $h / 2 - $tf - $r]]
set p(1) [list [expr $tw / 2 + $r] [expr $h / 2 - $tf - $r]]
set p(2) [list [expr $tw / 2 + $r] [expr $h / 2 - $tf]]
set p(3) [list [expr $b / 2] [expr $h / 2 - $tf]]
set p(4) [list [expr $b / 2] [expr $h / 2]]
set u 5
for {set j 0} {$j <= 3} {incr j} {
set a [expr 90 * ( (1 - $j) % 4) + $d]
for {set i [expr {$j == 0} ? 1 : 0]} {$i < $u} {incr i} {
set k [expr {[expr $j % 2] == 0} ? $i : {[expr $u - $i - 1]}]
lassign $p($k) x y
if {[expr $j % 3] > 0} { set x [expr -$x] }
if {$j > 1} { set y [expr -$y] }
set pc [moveto [rot [list [expr $x + $x0] [expr $y + $y0]] $drad] $hp]
if {$k == 1 && $r > 0} {
lassign $pc x y
set pc [list ci $x $y $r 0 90 1 $a]
}
puts "$pc"
}
}
lassign $p(0) x y
puts [join [moveto [rot [list [expr $x + $x0] [expr $y + $y0]] $drad] $hp] " "]
puts "#"
}
set tcl_precision 16; #文字列を数値演算するとき有効桁数 16 (デフォルト 12)
set f [open myfiles]
foreach 0 [split [read $f] \n] {
switch -regexp -matchvar n -- $0 {
^hk { lassign $0 1 hk }
{^hp(\d+)} {
lassign $0 1 2 3
set hpn [lindex $n 1]
set hp($hpn) "$2 $3"
}
}
}
close $f
lassign $env(s) h b t1 t2 r
for {set i 1} {$i <= $hpn} {incr i} {
jish $hp($i) $h $b $t1 $t2 $r $hk 5
}