Page 370 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼複雑な形状に沿って切断するには TKHS2 16/8/17(水) 14:17 ┗Re:複雑な形状に沿って切断するには kojima 16/8/20(土) 16:53 ┗Re:複雑な形状に沿って切断するには TKHS2 16/8/21(日) 9:00 ┣Re:複雑な形状に沿って切断するには kojima 16/8/21(日) 12:08 ┗Re:複雑な形状に沿って切断するには LA 16/8/21(日) 15:24 ┗Re:複雑な形状に沿って切断するには TKHS2 16/8/22(月) 20:25 ┗Re:複雑な形状に沿って切断するには TKHS2 16/8/22(月) 20:42 ─────────────────────────────────────── ■題名 : 複雑な形状に沿って切断するには ■名前 : TKHS2 ■日付 : 16/8/17(水) 14:17 -------------------------------------------------------------------------
はじめまして。消去→一括処理で基準線にそって切断することができると思いますが、ジグザグや多角形等のもっと複雑な形状にそって一括に切断することはできないのでしょうか?よろしくお願いいたします。 |
▼TKHS2さん: >ジグザグや多角形等のもっと複雑な形状にそって一括に切断することはできないのでしょうか? 補助線で描かれた、ジグザグや多角形等であれば、以下の外部変形で可能です。 バッチファイルにRubyスクリプトを記述するタイプの外部変形です。 この外部変形の実行には、Rubyのインストールが必要です。 外部変形を使ったことがない人には、かなり敷居が高いです。 @REM 線を補助線との交点で切断する @echo off REM #jww REM #cd REM #bz REM #ht10 REM #ht30 REM #ht40 REM #zz REM #zw REM #zc REM #h1 REM #c切断長さ(図寸 mm) 無指定:1/_/a REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 > jwc_temp.txt pause goto end #!ruby -Ks include Math d_l=1.0 while ARGV.size>1 case argument=ARGV.pop when /\/a/ d_l=argument[2..-1].to_f end end #小数点3桁以下切り捨ての値を返す def ika3(x) return ((x*1000).to_i)/1000.0 end #線と線の交点を返す def sen_sen_kouten(sen1,sen2) sen1x=sen1[2]-sen1[0] sen1y=sen1[3]-sen1[1] sen1xy=sqrt(sen1x**2+sen1y**2) sen1_arg=atan2(sen1y,sen1x) x1_1=sen1[0] x1_2=sen1[0]+sen1xy y1_1=sen1[1] y1_2=sen1[1] x=sen2[0]-sen1[0] y=sen2[1]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_1=sen1[0]+xy*cos(henkaku) y2_1=sen1[1]+xy*sin(henkaku) x=sen2[2]-sen1[0] y=sen2[3]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_2=sen1[0]+xy*cos(henkaku) y2_2=sen1[1]+xy*sin(henkaku) x=x2_2-x2_1 y=y2_2-y2_1 delta=y/x if ika3(y2_1)>=ika3(y1_1) && ika3(y2_2)<ika3(y1_1) or ika3(y2_1)<ika3(y1_1) && ika3(y2_2)>=ika3(y1_1) y=y1_1-y2_1 dx=y/delta kouten_x=x2_1+dx kouten_y=y1_1 if kouten_x>=x1_1 && kouten_x<x1_2 or kouten_x>x1_1 && kouten_x<=x1_2 x=kouten_x-x1_1 y=kouten_y-y1_1 xy=sqrt(x**2+y**2) kouten_xt=x1_1+xy*cos(sen1_arg) kouten_yt=y1_1+xy*sin(sen1_arg) return [kouten_xt,kouten_yt] else return nil end else return nil end end array=[] while ARGF.gets xy=$_.split if xy[0]=~/^lt/ lt=xy[0] end if xy[0]=~/^\d|^-/ xy.collect!{|item|item.to_f} if lt=="lt9" array<<xy end end end puts "hd","bz" open("temp.txt","r"){|f| while f.gets xy=$_.split if xy[0]=~/^hq/ elsif xy[0]=~/^lt/ lt=xy[0] print $_ elsif xy[0]=~/^\d|^-/ xy.collect!{|item|item.to_f} if xy[0]>xy[2] xy[0],xy[2],xy[1],xy[3]=xy[2],xy[0],xy[3],xy[1] elsif xy[0]==xy[2] xy[1],xy[3]=xy[3],xy[1] if xy[1]>xy[3] end arg=atan2(xy[3]-xy[1],xy[2]-xy[0]) if lt=="lt9" print $_ else kouten_array=[] array.each{|item| if sen_sen_kouten(xy,item) kouten_array<<sen_sen_kouten(xy,item) end } if kouten_array.size==0 print $_ elsif kouten_array.size==1 x1=kouten_array[0][0]-d_l/2*cos(arg) y1=kouten_array[0][1]-d_l/2*sin(arg) x2=kouten_array[0][0]+d_l/2*cos(arg) y2=kouten_array[0][1]+d_l/2*sin(arg) printf(" %.11f %.11f %.11f %.11f\n",xy[0],xy[1],x1,y1) printf(" %.11f %.11f %.11f %.11f\n",x2,y2,xy[2],xy[3]) else kouten_array.sort!{|a,b| l1=hypot(a[0]-xy[0],a[1]-xy[1]) l2=hypot(b[0]-xy[0],b[1]-xy[1]) l1<=>l2 } x1=kouten_array[0][0]-d_l/2*cos(arg) y1=kouten_array[0][1]-d_l/2*sin(arg) x2=kouten_array[-1][0]+d_l/2*cos(arg) y2=kouten_array[-1][1]+d_l/2*sin(arg) printf(" %.11f %.11f %.11f %.11f\n",xy[0],xy[1],x1,y1) printf(" %.11f %.11f %.11f %.11f\n",x2,y2,xy[2],xy[3]) 0.upto(kouten_array.size-2){|i| x1=kouten_array[i][0]+d_l/2*cos(arg) y1=kouten_array[i][1]+d_l/2*sin(arg) x2=kouten_array[i+1][0]-d_l/2*cos(arg) y2=kouten_array[i+1][1]-d_l/2*sin(arg) printf(" %.11f %.11f %.11f %.11f\n",x1,y1,x2,y2) } end end else print $_ end end } |
ご丁寧にありがとうございます。rubyをインストールしてこの内容をバッチファイルに保存して実行したところ、範囲を選択→選択確定→左クリックを押した後、次のようなエラーがでます。 @REMは、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません 'ruby'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません 下記の手順で実行してますが、何か間違っているのでしょうか? 1.ruby(2.3.1-p112-x64)をインストール 2.環境変数pathにruby.exeのディレクトリ指定 3.下記コマンドをUTF-8エンコードでbat形式で保存 4.jwwの外変コマンドで指定 |
この掲示板からコピペすると 各行頭に半角スペースが付加される場合があります。 バッチファイルの行頭に半角スペースがあると正常に動作しません。 @REM 線を補助線との交点で切断する から #!ruby -Ks までの 行頭の半角スペースを削除してください。 |
▼TKHS2さん: こんにちは 実際に外変が認識されて事前操作の部分まで動いているようなので、行頭の空白以外の問題があるような気がします。 多分、 >3.下記コマンドをUTF-8エンコードでbat形式で保存 が原因かな。 UTF-8 ではなく、Shift-JIS で保存して下さい。 |
kojimaさん LAさん ありがとうございます。スペースは詰めて保存してます。こうしないとbatファイルがjwwに認識すらされませんでした。 UTF-8をShift-JIS(ANSI)で保存しところ、@REMなんちゃらは消えましたが、 'ruby'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません はそのままでした。 |
環境変数のPathの追加のときにセミコロンではなくてカンマを使っていたせいでした。こちらを修正したら動作しました。 ありがとうございました。 |