Page 145 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼外部変形 ひび割れ線の長さ hide 15/12/15(火) 20:43 ┣Re(1):外部変形 ひび割れ線の長さ ゆう 15/12/16(水) 8:46 ┗Re(1):外部変形 ひび割れ線の長さ kojima 15/12/16(水) 20:17 ┗Re(2):外部変形 ひび割れ線の長さ hide 15/12/17(木) 21:38 ─────────────────────────────────────── ■題名 : 外部変形 ひび割れ線の長さ ■名前 : hide ■日付 : 15/12/15(火) 20:43 -------------------------------------------------------------------------
複数の連続線を範囲選択して、個々の連続線の延長を書き出す外部変形はないでしょうか?外部変形 線寸法 のような感じのものです。ひび割れ補修工事に使用したいです。良い情報があったらお願いします。 |
▼hideさん: こんにちは A 外部変形を使わない方法としては ひび割れ部分の線を描く場合に 1 「寸法値」にチェックを入れて書きます。 2 「寸法図形分解」をします。 3 範囲選択して文字集計をしてファイルに書きだし、あるいは図面にかき出し。 4 ファイルの場合はエクセルに読み込んで集計。 図面に書き出した場合はJWWから表計算で計算。 B 外部変形を使う方法として http://siegel.cocolog-nifty.com/siegels_blog/2007/11/06_d7f4.html に「line_sum06.lzh」がありますので これが便利かと思います。 |
こんな感じですか? バッチファイルにrubyスクリプトを記述した外部変形・ コピペ後、全角スペースを半角スペースに一括置換してください。 @REM 連続線毎の線長記入 @echo off REM #jww REM #cd REM #h1 REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt > jwc_temp.txt pause goto end #!ruby -Ks include Math #線の長さを返す def ln_l(sen) return hypot(sen[3]-sen[1],sen[2]-sen[0]) end #連続線を抽出し、連続線の長さを記入 def loop_renzoku(sen) l=0 a=sen.shift renzoku=[a];l += ln_l(a) begin b=sen.find{|item2|[item2[0],item2[1]]==[a[2],a[3]] or [item2[2],item2[3]]==[a[2],a[3]]} if b if renzoku[-1][2]==b[0] && renzoku[-1][3]==b[1] a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3] a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] end sen.delete_if{|item2|item2==b} renzoku<<a;l += ln_l(a) end end while(b) if renzoku[-1][2]==renzoku[0][0] && renzoku[-1][3]==renzoku[0][1] arg=atan2(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) printf("ch %.11f %.11f %.11f %.11f \"%.3fm\n",renzoku[0][0],renzoku[0][1],cos(arg),sin(arg),l/1000) else begin a=renzoku[0] b=sen.find{|item2|[item2[0],item2[1]]==[a[0],a[1]] or [item2[2],item2[3]]==[a[0],a[1]]} if b if renzoku[0][0]==b[0] && renzoku[0][1]==b[1] a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] elsif renzoku[0][0]==b[2] && renzoku[0][1]==b[3] a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] end sen.delete_if{|item2|item2==b} renzoku.unshift(a);l += ln_l(a) end end while(b) arg=atan2(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) printf("ch %.11f %.11f %.11f %.11f \"%.3fm\n",renzoku[0][0],renzoku[0][1],cos(arg),sin(arg),l/1000) end end ln_a=[] while ARGF.gets xy=$_.split if xy[0] =~ /^\d|^-/ xy.collect!{|item|item.to_f} ln_a<<xy end end while ln_a.size>0 loop_renzoku(ln_a) end __END__ :end |
▼kojimaさん: >こんな感じですか? >バッチファイルにrubyスクリプトを記述した外部変形・ >コピペ後、全角スペースを半角スペースに一括置換してください。 > > >@REM 連続線毎の線長記入 >@echo off >REM #jww >REM #cd >REM #h1 >REM #e >copy jwc_temp.txt temp.txt > nul >ruby -x %~f0 temp.txt > jwc_temp.txt >pause >goto end >#!ruby -Ks >include Math >#線の長さを返す >def ln_l(sen) > return hypot(sen[3]-sen[1],sen[2]-sen[0]) >end >#連続線を抽出し、連続線の長さを記入 >def loop_renzoku(sen) > l=0 > a=sen.shift > renzoku=[a];l += ln_l(a) > begin > > b=sen.find{|item2|[item2[0],item2[1]]==[a[2],a[3]] or [item2[2],item2[3]]==[a[2],a[3]]} > if b > if renzoku[-1][2]==b[0] && renzoku[-1][3]==b[1] > a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] > elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3] > a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] > end > sen.delete_if{|item2|item2==b} > renzoku<<a;l += ln_l(a) > end > end while(b) > if renzoku[-1][2]==renzoku[0][0] && renzoku[-1][3]==renzoku[0][1] > arg=atan2(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) > printf("ch %.11f %.11f %.11f %.11f \"%.3fm\n",renzoku[0][0],renzoku[0][1],cos(arg),sin(arg),l/1000) > else > begin > a=renzoku[0] > b=sen.find{|item2|[item2[0],item2[1]]==[a[0],a[1]] or [item2[2],item2[3]]==[a[0],a[1]]} > if b > if renzoku[0][0]==b[0] && renzoku[0][1]==b[1] > a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] > elsif renzoku[0][0]==b[2] && renzoku[0][1]==b[3] > a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] > end > sen.delete_if{|item2|item2==b} > renzoku.unshift(a);l += ln_l(a) > end > end while(b) > arg=atan2(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) > printf("ch %.11f %.11f %.11f %.11f \"%.3fm\n",renzoku[0][0],renzoku[0][1],cos(arg),sin(arg),l/1000) > end >end >ln_a=[] >while ARGF.gets > xy=$_.split > if xy[0] =~ /^\d|^-/ > xy.collect!{|item|item.to_f} > ln_a<<xy > end >end >while ln_a.size>0 > loop_renzoku(ln_a) >end >__END__ >:end ゆうさん kojimaさん ,返信ありがとうございます。 まさにこの通りの外部変形です。 ちゃんと実行できました。 ありがたく使わせてもらいます。 最近の公共工事では、橋梁等の ひび割れ補修工事が増えており、 この種の工事関係者の人たちにとって、この外部変形はとっても重宝すると思います。 。 貴重なご指導、ありがとうございました。 また、機会があったら、よろしくお願いします |