過去ログ

                                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
 -------------------------------------------------------------------------
   複数の連続線を範囲選択して、個々の連続線の延長を書き出す外部変形はないでしょうか?外部変形 線寸法 のような感じのものです。ひび割れ補修工事に使用したいです。良い情報があったらお願いします。

 ───────────────────────────────────────  ■題名 : Re(1):外部変形 ひび割れ線の長さ  ■名前 : ゆう  ■日付 : 15/12/16(水) 8:46  -------------------------------------------------------------------------
   ▼hideさん:

こんにちは

A 外部変形を使わない方法としては

ひび割れ部分の線を描く場合に
1 「寸法値」にチェックを入れて書きます。
2 「寸法図形分解」をします。
3 範囲選択して文字集計をしてファイルに書きだし、あるいは図面にかき出し。
4 ファイルの場合はエクセルに読み込んで集計。
  図面に書き出した場合はJWWから表計算で計算。

B 外部変形を使う方法として

http://siegel.cocolog-nifty.com/siegels_blog/2007/11/06_d7f4.html
に「line_sum06.lzh」がありますので
これが便利かと思います。

 ───────────────────────────────────────  ■題名 : Re(1):外部変形 ひび割れ線の長さ  ■名前 : kojima  ■日付 : 15/12/16(水) 20:17  -------------------------------------------------------------------------
   こんな感じですか?
バッチファイルに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

 ───────────────────────────────────────  ■題名 : Re(2):外部変形 ひび割れ線の長さ  ■名前 : hide  ■日付 : 15/12/17(木) 21:38  -------------------------------------------------------------------------
   ▼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さん
,返信ありがとうございます。
まさにこの通りの外部変形です。
ちゃんと実行できました。
ありがたく使わせてもらいます。
最近の公共工事では、橋梁等の ひび割れ補修工事が増えており、
この種の工事関係者の人たちにとって、この外部変形はとっても重宝すると思います。

貴重なご指導、ありがとうございました。
また、機会があったら、よろしくお願いします

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