Indexへ
(17015)//【17021】→(17022)
------------------------
【タイトル】配管系統図を書くときに
【記事番号】 17021 (*)
【 日時 】06/11/15 10:34
【 発言者 】ひろ

線と線が重なる交点で系統が接続されていない部分は
ひとつずつ線を指定して削除しているんですが
何とか一括して削除する操作方法や作図方法は無いでしょうか?

こういう感じです
+ ←現状
-|- ←希望

よろしくお願いします


Indexへ
(17021)←【17022】→(17024)
------------------------
【タイトル】Re(1):配管系統図を書くときに
【記事番号】 17022 (17021)
【 日時 】06/11/15 11:26
【 発言者 】住職

▼ひろさん:

> + ←現状
>-|- ←希望

線記号変形でしたら、miyaさんの「W_CAD用設備線記号変形集ver1.2」の中に
排水(2)に隠線処理[2mm]があります。
http://forum.nifty.com/farchi/download/cad_data/jw/m12_opt.htm

交差している線で、消す線を指示−>消す位置を指示で、-|- になります。
ご参考まで(作者様、ありがとうございます。)


Indexへ
(17022)←【17024】→(17032)
------------------------
【タイトル】Re(1):配管系統図を書くときに
【記事番号】 17024 (17021)
【 日時 】06/11/15 12:00
【 発言者 】いろいろ

▼ひろさん:
>線と線が重なる交点で系統が接続されていない部分は
>ひとつずつ線を指定して削除しているんですが
>何とか一括して削除する操作方法や作図方法は無いでしょうか?

こんにちわ。
「消去」で「切断間隔」に数値を入れて、
「部分消去」もしくは「一括修理」でいかがでしょうか?
なお、「切断間隔」の数値はJw_cadを閉じても残るので、注意してください。
ご参考までに・・・


Indexへ
(17024)←【17032】→(17053)
------------------------
【タイトル】Re(2):配管系統図を書くときに
【記事番号】 17032 (17024)
【 日時 】06/11/15 14:05
【 発言者 】ひろ

ご紹介頂いた方法、早速試してみます

そもそも「隠線処理」という用語自体知らなかったので
「交点」や「削除」「重なる」などで必死に検索してました
何だか色々な処理方法があるみたいですね

とりあえず
その他→線記号変形C→設備1→切断
に、一括処理などを組み合わせたりすれば
自分の求めていたものができそうです
あとは自力で調べて色々試してみます

とても助かりました
ありがとうございました!


Indexへ
(17032)←【17053】→(17060)
------------------------
【タイトル】Re(1):配管系統図を書くときに
【記事番号】 17053 (17021)
【 日時 】06/11/15 18:46
【 発言者 】コジマ

▼ひろさん:
>線と線が重なる交点で系統が接続されていない部分は
>ひとつずつ線を指定して削除しているんですが
>何とか一括して削除する操作方法や作図方法は無いでしょうか?
>

2年位前に、同様の質問がありました。
以下は、その時作成した外変です。

切断の優先順位は、先に描かれた線が切断されます。
この外変の実行には、mswin32 版 Ruby のインストールが必要です。
以下で入手できます。
http://www61.tok2.com/home2/gravelroad/tips/inst_msw.html

◎バッチファイル(ファイル名 交点分割2.bat)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。

@REM 交点分割
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #zz
REM #zw
REM #c切断間隔(図寸)・・・無指定:1/_/a
REM #h2
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 交点分割2.rb temp.txt %1 > jwc_temp.txt


◎スクリプトファイル(ファイル名 交点分割2.rb)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。

def kouten(sen1,sen2)
    include Math
    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(y2_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_xkouten_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]
        end
    end
end
def ika3(x)
    a=(((x.to_f)*1000).to_i/1000.to_f)
    return a
end

sen=[];by=[];zahyo=[];kankaku=1
while ARGV.size >1
    case augument=ARGV.pop
        when /\/a/
            kankaku=augument[2..-1].to_f
    end
end

while ARGF.gets
    xy =split
    if xy[0]=~/^hs/
        xy[1..-1].each{|item|by<    end
    if xy[0]=~/^lg/
        lg=xy[0][2,1]
        zusun=by[lg.hex]
    end
    if xy[0]=~/^[0-9]/ or xy[0]=~ /^-/
        xy.collect!{|item|item.to_f}
        if xy[0]>xy[2]
            xy[0],xy[2]=xy[2],xy[0]
            xy[1],xy[3]=xy[3],xy[1]
        elsif xy[0]==xy[2]
            if xy[1]>xy[3]
                xy[1],xy[3]=xy[3],xy[1]
            end
        end
        sen << (xy)
    end
end

puts"hd"
m=0
open("temp.txt","r"){|f|
    while line=f.gets
        m += 1
        xy=line.split
        if xy[0]=~/^hq/
        elsif xy[0]=~/^z/
            print line
            zno=m
            z=xy[0]
        elsif xy[0]=~/^[0-9]/ or xy[0]=~ /^-/
            if zno
                m==zno+1 ? zokusei=z : zokusei=""
            end
            xy.collect!{|item|item.to_f}
            if xy[0]>xy[2]
                xy[0],xy[2]=xy[2],xy[0]
                xy[1],xy[3]=xy[3],xy[1]
            elsif xy[0]==xy[2]
                if xy[1]>xy[3]
                    xy[1],xy[3]=xy[3],xy[1]
                end
            end
            x=xy[2]-xy[0]
            y=xy[3]-xy[1]
            xyl=Math.sqrt(x**2+y**2)
            dx=x/xyl
            dy=y/xyl

            zahyo=[]
            sen.shift
            sen.each{|item1|
            if kouten(item1,xy) != nil
                zahyo << kouten(item1,xy)
            end
            }
            if zahyo.size==0
                print line
            elsif zahyo.size==1
                printf("%10f %10f %10f %10f \n",
                xy[0],xy[1],
                zahyo[0][0]-kankaku*zusun*dx,
                zahyo[0][1]-kankaku*zusun*dy)
                unless zokusei==""
                    puts zokusei
                end
                printf("%10f %10f %10f %10f \n",
                xy[2],xy[3],
                zahyo[0][0]+kankaku*zusun*dx,
                zahyo[0][1]+kankaku*zusun*dy)

            else
                if xy[0]==xy[2]
                    zahyo1=zahyo.sort{|a,b| a[1]<=>b[1]}
                else
                    zahyo1=zahyo.sort{|a,b| a[0]<=>b[0]}
                end
                printf("%10f %10f %10f %10f \n",xy[0],xy[1],zahyo1[0][0]-kankaku*zusun*dx,zahyo1[0][1]-kankaku*zusun*dy)

                unless zokusei==""
                    puts zokusei
                end
                printf("%10f %10f %10f %10f \n",xy[2],xy[3],zahyo1[-1][0]+kankaku*zusun*dx,zahyo1[-1][1]+kankaku*zusun*dy)

                n=0
                while n                unless zokusei==""
                    puts zokusei
                end
                    printf("%10f %10f %10f %10f \n",zahyo1[n][0]+kankaku*zusun*dx,zahyo1[n][1]+kankaku*zusun*dy,zahyo1[n+1][0]-kankaku*zusun*dx,zahyo1[n+1][1]-kankaku*zusun*dy)
                n+=1
                end
            end
        else
            print line
        end
    end
}


Indexへ
(17053)←【17060】→(17089)
------------------------
【タイトル】Re(2):配管系統図を書くときに
【記事番号】 17060 (17053)
【 日時 】06/11/16 09:28
【 発言者 】ひろ

▼コジマさん:
まさしくそういったものを探していました!
ありがとうございます
早速活用させて頂きます!


Indexへ
(17060)←【17089】→(17093)
------------------------
【タイトル】Re(3):配管系統図を書くときに
【記事番号】 17089 (17060)
【 日時 】06/11/17 11:47
【 発言者 】ショウブ

▼コジマさん:
いつも活用させてもらってます。ありがとうございます。
便乗ですが円弧を含むものが出来ればな〜と思っておりますが・・・


Indexへ
(17089)←【17093】→(17097)
------------------------
【タイトル】Re(4):配管系統図を書くときに
【記事番号】 17093 (17089)
【 日時 】06/11/17 13:50
【 発言者 】コジマ

▼ショウブさん:
>▼コジマさん:
>いつも活用させてもらってます。ありがとうございます。
>便乗ですが円弧を含むものが出来ればな〜と思っておりますが・・・

バッチファイルを以下のように書き換えてください。

◎バッチファイル(ファイル名 交点分割2.bat)

@REM 交点分割
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #zz
REM #zc
REM #zw
REM #c切断間隔(図寸)・・・無指定:1/_/a
REM #h2
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 交点分割2.rb temp.txt %1 > jwc_temp.txt
copy jwc_temp.txt temp.txt > nul
ruby -Ks 線_円分割.rb temp.txt %1 > jwc_temp.txt


以下のスクリプトファイルを同じフォルダに追加する
◎スクリプトファイル(ファイル名 線_円分割.rb)

def sen_en_kakudo(sen,en)

    kakudo=[]
    sen.to_a
    sen.collect!{|item|item.to_f}
    en.to_a
    en.collect!{|item|item.to_f}

    if en.size==4
        x=en[1]
        y=en[2]
        r=en[3]
        en[4]=0
        en[5]=0
        en[6]=1
        en[7]=0
    else
        x=en[1]
        y=en[2]
        r=en[3]
    end

    hen=en[6]
    ziku=en[7]
    ziku_arg=ziku*2*PI/360

    sen_x=sen[2]-sen[0]
    sen_y=sen[3]-sen[1]
    sen_kakudo1=atan2(sen_y,sen_x)

    en_x1=x-sen[0]
    en_y1=y-sen[1]
    en_x2=sen[2]-x
    en_y2=sen[3]-y
    en_xy1=sqrt(en_x1**2+en_y1**2)
    en_xy2=sqrt(en_x2**2+en_y2**2)
    en_kakudo1=atan2(en_y1,en_x1)
    en_kakudo2=atan2(en_y2,en_x2)

    sen_x1=x-en_xy1*cos(en_kakudo1-ziku_arg)
    sen_y1=y-en_xy1*sin(en_kakudo1-ziku_arg)/hen
    sen_x2=x+en_xy2*cos(en_kakudo2-ziku_arg)
    sen_y2=y+en_xy2*sin(en_kakudo2-ziku_arg)/hen

    if sen_x1>sen_x2
        sen_x1,sen_x2=sen_x2,sen_x1
        sen_y1,sen_y2=sen_y2,sen_y1
    elsif sen_x1==sen_x2
        if sen_y1>sen_y2
            sen_y1,sen_y2=sen_y2,sen_y1
        end
    end

    senx=(sen_x2-sen_x1)
    seny=(sen_y2-sen_y1)
    sen_kakudo2=atan2(seny,senx)

    en_kakudo2_1=atan2((y-sen_y1),x-sen_x1)
    en_xy2_1=sqrt((y-sen_y1)**2+(x-sen_x1)**2)
    en_xy2_2=sqrt((sen_y2-y)**2+(sen_x2-x)**2)
    henkaku=sen_kakudo2-en_kakudo2_1
    y1=en_xy2_1*sin(henkaku)

    if r>y1.abs

        x1=sqrt(r**2-y1**2)
        kakudo1=atan2(y1,-x1)
        kakudo2=atan2(y1,x1)

        if en_xy2_1>r && (sen_x1            cos(kakudo1+sen_kakudo2) &&sen_x2>en[1]+r*
            cos(kakudo1+sen_kakudo2) or
            sen_y1            sin(kakudo1+sen_kakudo2) &&sen_y2>en[2]+r*
            sin(kakudo1+sen_kakudo2))

            kakudo<<(kakudo1+sen_kakudo2)*360/(2*PI)+ziku
        end

        if en_xy2_2>r && (sen_x2>en[1]+r*
            cos(kakudo2+sen_kakudo2) &&sen_x1            cos(kakudo2+sen_kakudo2) or
            sen_y2>en[2]+r*
            sin(kakudo2+sen_kakudo2) &&
            sen_y1
            kakudo<<(kakudo2+sen_kakudo2)*360/(2*PI)+ziku
        end
    end

    if kakudo.size!=0

        kakudo.collect!{|item|if item<0
                        360+item
                    else
                        item
                    end}

        kakudo.delete_if{|item|if en[4]+en[7]                        en[4]+en[7]>item && en[5]+en[7]>item or
                        en[4]+en[7]                    elsif en[4]+en[7]>en[5]+en[7]
                        en[4]+en[7]>item && en[5]+en[7]                    end}

        return kakudo
    else
        return nil
    end
end
def sen_en_zahyo(sen,en)

    zahyo=[]

    if en.size==4
        x=en[1]
        y=en[2]
        r=en[3]
        en[4]=0
        en[5]=0
        en[6]=1
        en[7]=0
    else
        x=en[1]
        y=en[2]
        r=en[3]
    end
    hen=en[6]
    ziku=en[7]

    kakudo=sen_en_kakudo(sen,en)

    if kakudo
        kakudo.each{|item| rajian=item*2*PI/360
            ziku_arg=ziku*2*PI/360
            ax=r*cos(rajian-ziku_arg)
            ay=r*sin(rajian-ziku_arg)*hen
            axy=sqrt(ax**2+ay**2)
            arg=atan2(ay,ax)

            axt=x+axy*cos(arg+ziku_arg)
            ayt=y+axy*sin(arg+ziku_arg)
            zahyo<<[axt,ayt]
        }
        return zahyo
    else
        return nil
    end
end

kankaku=1.0
while ARGV.size>1
    case argument=ARGV.pop
        when /\/a/
            kankaku=argument[2..-1].to_f
    end
end

en=[];by=[]
include Math
while ARGF.gets
    xy=split
    if xy[0]=~/^hs/
        xy[1..-1].each{|item|by<    end
    if xy[0]=~/^lg/
        lg=xy[0][2,1];zusun=by[lg.hex]
    end
    if xy[0]=~/^ci/
        xy.collect!{|item|item.to_f}
        en<    end
end
puts "hd"
open("temp.txt","r"){|f|
    while line=f.gets
        xy=line.split
        if xy[0]=~/^hq/
        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]
                if xy[1]>xy[3]
                    xy[1],xy[3]=xy[3],xy[1]
                end
            end
            x=xy[2]-xy[0]
            y=xy[3]-xy[1]
            xyl=sqrt(x**2+y**2)
            dx=x/xyl
            dy=y/xyl
            a=[]
            en.each{|item|
            if sen_en_zahyo(xy,item)
                if sen_en_zahyo(xy,item).size==1
                    a<                elsif sen_en_zahyo(xy,item).size>1
                    a<                    a<                end
            end
                }

            if a.size>0

                if xy[0]==xy[2]
                    b=a.sort{|j,k|j[1] <=> k[1]}
                else
                    b=a.sort{|j,k|j[0] <=> k[0]}
                end

                0.upto(b.size-2){|i|
                    puts [b[i][0]+kankaku*zusun*dx,b[i][1]+kankaku*zusun*dy,b[i+1][0]-kankaku*zusun*dx,b[i+1][1]-kankaku*zusun*dy].join("\s")}
                    puts [xy[0],xy[1],b[0][0]-kankaku*zusun*dx,b[0][1]-kankaku*zusun*dy].join("\s") if xy[0]                    puts [b[-1][0]+kankaku*zusun*dx,b[-1][1]+kankaku*zusun*dy,xy[2],xy[3]].join("\s") if b[-1][0]+kankaku*zusun*dx
            else
                print $_
            end
        else
            print $_
        end
    end
}


Indexへ
(17093)←【17097】//(17025)
------------------------
【タイトル】Re(5):配管系統図を書くときに
【記事番号】 17097 (17093)
【 日時 】06/11/17 18:25
【 発言者 】ショウブ

▼コジマさん:

歓喜しました!
今まで円弧に交差する部分は線記号変形でも出来なかったのですが
これで一発ですべて可能になりました。
ありがとうございました。
(もっとはやくお願いすればよかった・・・。)