Indexへ
(17195)//【17194】//(17197)
------------------------
【タイトル】よくちん さんへ(線記号変形で2本同時にR面取)
【記事番号】 17194 (*)
【 日時 】04/05/15 09:30
【 発言者 】コジマ

よくちん さんが希望されていたのは、以下のような機能でしょうか?

縦、横 各1本ずつ線を引く。
交点を面取りと同時に、各複線(末端留線付き)を作図する。

以下の外部変形で可能です。

そのままでは、使い勝手がよくないので、クロックメニュー(2)に割当てれば、線記号変形なみにつかえます。(環境設定ファイルで可能)

◎バッチファイル(ファイル名 面取複線.bat)

@REM 面取と複線の一括操作(斜線は未対応)
@echo off
REM #jww
REM #cd
REM #cR面取寸法(最内側)
REM #c板厚(外側複線間隔)
REM #h2
REM #hc面取する部分を選択してください
REM #e
copy jwc_temp.txt temp.txt > nul
cscript //nologo 面取複線.rb temp.txt %1 %2> jwc_temp.txt


◎スクリプトファイル(ファイル名 面取複線.rb)


# 面取と複線の一括操作 外部変形Rubyスクリプト
BEGIN{
print "hd\n"    # 選択したデータの削除
$tate=Array.new
$tatey1=Array.new
$tatey2=Array.new
$yoko=Array.new
$yokox1=Array.new
$yokox2=Array.new
$lyy=Array.new;$lyt=Array.new
$lcy=Array.new;$lct=Array.new
$lty=Array.new;$ltt=Array.new
$men = ARGV[1].to_f    #面取寸法
$t = ARGV[2].to_f    #板厚(外側複線間隔)
while ARGV.length > 1
ARGV.pop
end
}
def main
while ARGF.gets
xy =split   
if xy[0]=="hn";$hnx1=xy[1].to_f;$hny1=xy[2].to_f
        $hnx2=xy[3].to_f;$hny2=xy[4].to_f;end
if xy[0]=~/^pt|^ch|^cs|^cn/;print $_;end
if xy[0]=~/^ly/;$senly=xy[0];end
if xy[0]=~/^lc/;$senlc=xy[0];end
if xy[0]=~/^lt/;$senlt=xy[0];end
if xy[0]=~ /^[0-9]|^-/
  xy.collect!{ |item| item.to_f }# 数値化
if xy[0]==xy[2]
  if xy[3] < xy[1];y=xy[3];xy[3]=xy[1];xy[1]=y;end
    unless $hnx1xy[2] && $hny1xy[3]
    $tate.push(xy[0]);$tatey1.push(xy[1]);$tatey2.push(xy[3])
    $lyt.push($senly);$lct.push($senlc);$ltt.push($senlt);end
  elsif xy[1]==xy[3]
  if xy[2] < xy[0];x=xy[2];xy[2]=xy[0];xy[0]=x;end
    unless $hnx1xy[2] && $hny1xy[3]
    $yoko.push(xy[1]);$yokox1.push(xy[0]);$yokox2.push(xy[2])
    $lyy.push($senly);$lcy.push($senlc);$lty.push($senlt);end
else;print $senly+"\n";print $senlc+"\n";print $senlt+"\n";print $_
end
end
end
if $yokox1[0]<$hnx1 && $yokox2[0]<$hnx2 && $tatey1[0]<$hny1 && $tatey2[0]<$hny2
  print $lyy[0]+"\n";print $lcy[0]+"\n";print $lty[0]+"\n"
  yokosen($yokox1[0],$tate[0]-$men,$yoko[0])
  yokosen($yokox1[0],$tate[0]-$men,$yoko[0]+$t)
  tatesen($yoko[0],$yoko[0]+$t,$yokox1[0])
  print $lyt[0]+"\n";print $lct[0]+"\n";print $ltt[0]+"\n"
  tatesen($tatey1[0],$yoko[0]-$men,$tate[0])
  tatesen($tatey1[0],$yoko[0]-$men,$tate[0]+$t)
  yokosen($tate[0],$tate[0]+$t,$tatey1[0])
  enko($tate[0]-$men,$yoko[0]-$men,$men,0)
  enko($tate[0]-$men,$yoko[0]-$men,$men+$t,0)
end
if $yokox1[0]>$hnx1 && $yokox2[0]>$hnx2 && $tatey1[0]<$hny1 && $tatey2[0]<$hny2
  print $lyy[0]+"\n";print $lcy[0]+"\n";print $lty[0]+"\n"
  yokosen($yokox2[0],$tate[0]+$men,$yoko[0])
  yokosen($yokox2[0],$tate[0]+$men,$yoko[0]+$t)
  tatesen($yoko[0],$yoko[0]+$t,$yokox2[0])
  print $lyt[0]+"\n";print $lct[0]+"\n";print $ltt[0]+"\n"
  tatesen($tatey1[0],$yoko[0]-$men,$tate[0])
  tatesen($tatey1[0],$yoko[0]-$men,$tate[0]-$t)
  yokosen($tate[0],$tate[0]-$t,$tatey1[0])
  enko($tate[0]+$men,$yoko[0]-$men,$men+$t,90)
  enko($tate[0]+$men,$yoko[0]-$men,$men,90)
end
if $yokox1[0]>$hnx1 && $yokox2[0]>$hnx2 && $tatey1[0]>$hny1 && $tatey2[0]>$hny2
  print $lyy[0]+"\n";print $lcy[0]+"\n";print $lty[0]+"\n"
  yokosen($yokox2[0],$tate[0]+$men,$yoko[0])
  yokosen($yokox2[0],$tate[0]+$men,$yoko[0]-$t)
  tatesen($yoko[0],$yoko[0]-$t,$yokox2[0])
  print $lyt[0]+"\n";print $lct[0]+"\n";print $ltt[0]+"\n"
  tatesen($tatey2[0],$yoko[0]+$men,$tate[0])
  tatesen($tatey2[0],$yoko[0]+$men,$tate[0]-$t)
  yokosen($tate[0],$tate[0]-$t,$tatey2[0])
  enko($tate[0]+$men,$yoko[0]+$men,$men,180)
  enko($tate[0]+$men,$yoko[0]+$men,$men+$t,180)
end
if $yokox1[0]<$hnx1 && $yokox2[0]<$hnx2 && $tatey1[0]>$hny1 && $tatey2[0]>$hny2
  print $lyy[0]+"\n";print $lcy[0]+"\n";print $lty[0]+"\n"
  yokosen($yokox1[0],$tate[0]-$men,$yoko[0])
  yokosen($yokox1[0],$tate[0]-$men,$yoko[0]-$t)
  tatesen($yoko[0],$yoko[0]-$t,$yokox1[0])
  print $lyt[0]+"\n";print $lct[0]+"\n";print $ltt[0]+"\n"
  tatesen($tatey2[0],$yoko[0]+$men,$tate[0])
  tatesen($tatey2[0],$yoko[0]+$men,$tate[0]+$t)
  yokosen($tate[0],$tate[0]+$t,$tatey2[0])
  enko($tate[0]-$men,$yoko[0]+$men,$men+$t,270)
  enko($tate[0]-$men,$yoko[0]+$men,$men,270)
end
end
def yokosen( x1,x2, y1)
printf("%e %e %e %e\n", x1, y1, x2, y1)
end
def tatesen( y1,y2, x1)
printf("%e %e %e %e\n", x1, y1, x1, y2)
end
def enko( x,y,r,ziku)
printf("ci %e %e %e %e %e %e %e\n",x,y,r,0,90,1,ziku)
end
main()