REM #c回転方向 左廻り:1 右廻り:無指定 /_/a
REM #c最内側の半径を入力:r(mm) /_/b
REM #c追加する半径との数値差を入力:dr1(mm) /_/c
REM #c数値差を順次増加させる値を入力:dr2(mm) /_/d
REM #c渦巻き数を入力 /_/e
REM #1基準点を指示
BEGIN{
$x1=Array.new
$x2=Array.new
$kaiten=0
$r=50
$dr1=1
$dr2=0
$n=10
while ARGV.length > 1
case argument=ARGV.pop
when/^\/a/
$kaiten=argument[2..-1].to_i
when/^\/b/
$r=argument[2..-1].to_f
when/^\/c/
$dr1=argument[2..-1].to_f
when/^\/d/
$dr2=argument[2..-1].to_f
when/^\/e/
$n=argument[2..-1].to_i
end
end }
while ARGF.gets
xy =split
if xy[0]=="hp1"
ax=xy[1].to_f
ay=xy[2].to_f
end
end
printf("ci %e %e %e %e %e %e %e\n",ax,ay,$r,180,360,1,0)
$x1.push(ax-$r)
$x2.push(ax+$r)
n=0
r=$r+$dr1+$dr2/4
($n-1).times{
if $kaiten==1
zure=(1+n)*$dr2/4
else
zure=(-1-n)*$dr2/4
end
printf("ci %e %e %e %e %e %e %e\n",ax+zure,ay,r,180,360,1,0)
$x1.push(ax+zure-r)
$x2.push(ax+zure+r)
n+=1
r+=$dr1+$dr2/4+$dr2*n }
#times 実行文の末尾
if $kaiten==1
n=$x1.size-1
m=$x1.size-2
else
n=$x1.size-2
m=$x1.size-1
end
($n-1).times{
x=$x1[n]+($x2[m]-$x1[n])/2
r=($x2[m]-$x1[n])/2
printf("ci %e %e %e %e %e %e %e\n",x,ay,r,0,180,1,0)
n-=1
m-=1 }
上記rubyらしいですが
私のやりたい渦巻き円弧と似たような事が出来る書式があったので
勉強がてら試したいと思います。
鍋CADスクリプトと似たような書式なので混乱しそうですが。
修正点は
1、上側円弧の中心が指定位置にいるので、r1の数値の半分ずらす。
2、回数を半径に変更する
3、今の所r2は0以外使用しないので削除(ピッチ一定で増大させない)
4、加工精度を上げる為に、180度分割を90度分割or45度分割
5、内側から外側の逆も出来るようにする
修正点の内容が多いですが、課題とします。