過去ログ

                                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
 -------------------------------------------------------------------------
   はじめまして。消去→一括処理で基準線にそって切断することができると思いますが、ジグザグや多角形等のもっと複雑な形状にそって一括に切断することはできないのでしょうか?よろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : kojima  ■日付 : 16/8/20(土) 16:53  -------------------------------------------------------------------------
   ▼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
}

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : TKHS2  ■日付 : 16/8/21(日) 9:00  -------------------------------------------------------------------------
   ご丁寧にありがとうございます。rubyをインストールしてこの内容をバッチファイルに保存して実行したところ、範囲を選択→選択確定→左クリックを押した後、次のようなエラーがでます。

@REMは、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません
'ruby'は内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません

下記の手順で実行してますが、何か間違っているのでしょうか?
1.ruby(2.3.1-p112-x64)をインストール
2.環境変数pathにruby.exeのディレクトリ指定
3.下記コマンドをUTF-8エンコードでbat形式で保存
4.jwwの外変コマンドで指定

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : kojima  ■日付 : 16/8/21(日) 12:08  -------------------------------------------------------------------------
   この掲示板からコピペすると
各行頭に半角スペースが付加される場合があります。
バッチファイルの行頭に半角スペースがあると正常に動作しません。

@REM 線を補助線との交点で切断する
から
#!ruby -Ks
までの
行頭の半角スペースを削除してください。

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : LA  ■日付 : 16/8/21(日) 15:24  -------------------------------------------------------------------------
   ▼TKHS2さん:
こんにちは


実際に外変が認識されて事前操作の部分まで動いているようなので、行頭の空白以外の問題があるような気がします。


多分、
>3.下記コマンドをUTF-8エンコードでbat形式で保存
が原因かな。
UTF-8 ではなく、Shift-JIS で保存して下さい。

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : TKHS2  ■日付 : 16/8/22(月) 20:25  -------------------------------------------------------------------------
   kojimaさん
LAさん

ありがとうございます。スペースは詰めて保存してます。こうしないとbatファイルがjwwに認識すらされませんでした。

UTF-8をShift-JIS(ANSI)で保存しところ、@REMなんちゃらは消えましたが、
'ruby'は内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません
はそのままでした。

 ───────────────────────────────────────  ■題名 : Re:複雑な形状に沿って切断するには  ■名前 : TKHS2  ■日付 : 16/8/22(月) 20:42  -------------------------------------------------------------------------
   環境変数のPathの追加のときにセミコロンではなくてカンマを使っていたせいでした。こちらを修正したら動作しました。

ありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 370