jw_cad 外部変形 - (798) rubyで線の複線を引く -

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

 

rubyで線の複線を引く

:rubyで線の複線を引く
@echo off
ruby -x %0 jwc_temp.txt
goto:eof

REM #jww
REM #1ln 線を指示してください
REM #2 基準点を指示してください
REM #bz
REM #e

#!ruby -Ks -an -i.bak
def ln_hpdist(ln, hp) #線と点の最短距離を返す
  x = hp + ln[0..1]
  return lnlength(x) * sin(lnslope(ln) - lnslope(x))
end
def lnlength(ln) #線長を返す
  x1, y1, x2, y2 = *ln
  return hypot(x2 - x1, y2 - y1)
end
def lnslope(ln) #線の角度を返す
  x1, y1, x2, y2 = *ln
  return atan2(y2 - y1, x2 - x1)
end
def lnmove(ln, b, pmy = 1) #線 ln を直交距離 b だけ pmy の方向に平行移動する
  x1, y1, x2, y2 = *ln
  d  = lnslope(ln)
  co = b * cos(d) * pmy
  si = b * sin(d) * pmy
  return x1 - si, y1 + co, x2 - si, y2 + co
end
BEGIN { include Math }
case $_
  when /^hq/ then puts "bz"
  when /^hp2/ then hp2 = $F[1, 2].map{|x| x.to_f}
  when /^[ ]/ then ln1 = $F.map{|x| x.to_f}
    puts "%s %s %s %s" % lnmove(ln1, ln_hpdist(ln1, hp2), 1)
end
__END__