Indexへ
(10062)//【9971】→(9974)
------------------------
【タイトル】結線された点に○配置について
【記事番号】 9971 (*)
【 日時 】06/03/23 17:20
【 発言者 】art modanart@hotmail.com

 いつもお世話になります。
 実点同士を線分で結んでこの実点に○を配置する作業を行っております。
 ここで問題になっている事がありましてこの解決方法を探しております。
 それは、実点に○を配置した際に○の中に線分が残ってしまいます。この○の中の線分を消去したいのです。実は、200点ほどあり修正に時間がかかっております。
 線記号変形で線分の交点に○を配置する方法も考えたのですが、数十点程度であればさほど時間も掛からないのですが200点程度となると作業が繁雑になります。まだこのような図面を10枚程度編集しなければならずお知恵を借りられればと思います。
 実点に任意の大きさの○を配置し○の中の線分を消す(円周まで伸縮させる)のを一発で出来るような外部変形はないでしょうか。
 よろしくお願いいたします。


Indexへ
(9971)←【9974】→(9976)
------------------------
【タイトル】Re(1):結線された点に○配置について
【記事番号】 9974 (9971)
【 日時 】06/03/23 18:15
【 発言者 】スター

▼artさん:
> いつもお世話になります。
> 実点同士を線分で結んでこの実点に○を配置する作業を行っております。
> ここで問題になっている事がありましてこの解決方法を探しております。
> それは、実点に○を配置した際に○の中に線分が残ってしまいます。この○の中の線分を消去したいのです。実は、200点ほどあり修正に時間がかかっております。
> 線記号変形で線分の交点に○を配置する方法も考えたのですが、数十点程度であればさほど時間も掛からないのですが200点程度となると作業が繁雑になります。まだこのような図面を10枚程度編集しなければならずお知恵を借りられればと思います。
> 実点に任意の大きさの○を配置し○の中の線分を消す(円周まで伸縮させる)のを一発で出来るような外部変形はないでしょうか。
> よろしくお願いいたします。

Cabaさんの線端に点
http://homepage1.nifty.com/caba/JW_TOOL.html

Snapkinさんの点を円に変換、円内消去
http://fox.zero.ad.jp/~zap01296/jww/

で点を打ち、円に換えて再び点を打つ
点を非表示にして円内消去

敷地の座標値から境界図を描くなら
点、丸付きのエクセル
http://homepage2.nifty.com/christchurch/jww/jww-xy.htm
の後に円内消去


Indexへ
(9974)←【9976】→(9982)
------------------------
【タイトル】Re(1):結線された点に○配置について
【記事番号】 9976 (9971)
【 日時 】06/03/23 18:32
【 発言者 】コジマ

▼artさん:
> いつもお世話になります。
> 実点同士を線分で結んでこの実点に○を配置する作業を行っております。
> ここで問題になっている事がありましてこの解決方法を探しております。
> それは、実点に○を配置した際に○の中に線分が残ってしまいます。この○の中の線分を消去したいのです。実は、200点ほどあり修正に時間がかかっております。

以下に収納
http://forum.nifty.com/farchi/download/cad/jw/lc_pc.htm

> 実点に任意の大きさの○を配置し○の中の線分を消す(円周まで伸縮させる)のを一発で出来るような外部変形はないでしょうか。
> よろしくお願いいたします。

Snap_kin様の「円内消去」は、一度に処理できる円数30以内に制限されているようです。

◎バッチファイル(ファイル名 円内消去.bat)

@REM 円内の直線を消去
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #zz
REM #zw
REM #hp
REM #h2
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 円内消去.rb temp.txt > jwc_temp.txt

◎スクリプトファイル(ファイル名 円内消去.rb)

include Math

#3線と円の交点角度の配列を返す(扁平率は考慮しない)
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]=360
        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}

        return kakudo
    else
        nil
    end
end

#5線と円の交点座標の配列を返す(扁平率・軸角考慮)
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 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]
        }
    end
    if zahyo.size>0
        return zahyo
    else
        nil
    end
end

#tenの位置がenの内(true)か、外(false)かを判定
def area(en,ten)

    zahyo=[]
    zahyo<
    if zahyo.flatten.size==2
        return true
    else
        return false
    end
end

en=[];naigai=[]
while ARGF.gets
    xy=split
    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
            kouten=[]
            en.each{|item|
            if sen_en_zahyo(xy,item)!=nil
                if sen_en_zahyo(xy,item).size==2
                    kouten<<[sen_en_zahyo(xy,item)[0][0],sen_en_zahyo(xy,item)[0][1]]
                    kouten<<[sen_en_zahyo(xy,item)[1][0],sen_en_zahyo(xy,item)[1][1]]
                elsif sen_en_zahyo(xy,item).size==1
                    kouten<<[sen_en_zahyo(xy,item)[0][0],sen_en_zahyo(xy,item)[0][1]]
                end
            end
}


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

            area1=0;area2=0
            en.each{|item|
            if area(item,[xy[0],xy[1]])==true
                area1+=1
            end
            if area(item,[xy[2],xy[3]])==true
                area2+=1
            end
                        }
            if area1==0 && kouten2.size>0
                printf("%.11f %.11f %.11f %.11f\n",xy[0],xy[1],kouten2[0][0],kouten2[0][1])
            end
            if area2==0 && kouten2.size>0
                printf("%.11f %.11f %.11f %.11f\n",xy[2],xy[3],kouten2[-1][0],kouten2[-1][1])

            end
            if kouten2.size>1
                area1==0 ? n1=1 : n1=0
                area2==0 ? n2=kouten2.size-3 : n2=kouten2.size-2
                n1.step(n2,2){|i|printf("%.11f %.11f %.11f %.11f\n",kouten2[i][0],kouten2[i][1],kouten2[i+1][0],kouten2[i+1][1])}


            end
            if kouten.size==0 && area1==0 && area2==0
                print line
            end
            naigai<        else
            print line
        end
    end
}


Indexへ
(9976)←【9982】→(10000)
------------------------
【タイトル】Re(1):結線された点に○配置について
【記事番号】 9982 (9971)
【 日時 】06/03/23 21:08
【 発言者 】art moranart@hotmail.com

スターさん
有用な情報ありがとうございます。

コジマさん
いつもありがとうございます。早速、使わせていただきます。
これで今日は、眠れそうです。
ありがとうございました。


Indexへ
(9982)←【10000】→(10008)
------------------------
【タイトル】Re(1):点間を線で結ぶのであれば、
【記事番号】 10000 (9971)
【 日時 】06/03/24 10:32
【 発言者 】コジマ

▼artさん:
> いつもお世話になります。
> 実点同士を線分で結んでこの実点に○を配置する作業を行っております。

点間を線で結ぶのであれば、以下のスレが参考になるかと思います。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=5432;id=003


Indexへ
(10000)←【10008】→(10041)
------------------------
【タイトル】Re(2):点間を線で結ぶのであれば、
【記事番号】 10008 (10000)
【 日時 】06/03/24 11:47
【 発言者 】art modanart@hotmail.com

▼コジマさん:
了解いたしました。早速確認してみます。
ありがとうございました。


Indexへ
(10008)←【10041】→(10048)
------------------------
【タイトル】Re(3):円間を線で結ぶのであれば、
【記事番号】 10041 (10008)
【 日時 】06/03/24 16:43
【 発言者 】コジマ

円内消去は、実行速度が遅くなるのが難点です。
実点に、円を作図後、円間を線で結べれば、かなり高速化できるのでは?

◎バッチファイル(ファイル名 ci-ci.bat)

@REM 円間を線で結ぶ
@echo off
REM #jww
REM #cd
REM #h1
REM #1最初の円の中心を指示してください
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks ci-ci.rb temp.txt > jwc_temp.txt


◎スクリプトファイル(ファイル名 ci-ci.rb)

include Math
en=[];data=[]
while ARGF.gets
    xy=split
    if xy[0]=~/^hp/
        hpx,hpy=xy[1].to_f,xy[2].to_f
    end
    if xy[0]=~/^ci/
        en<<[xy[1].to_f,xy[2].to_f,xy[3].to_f]
    end
end

a=en.find{|item|[item[0],item[1]]==[hpx,hpy]}
en.delete_if{|item|[item[0],item[1]]==[hpx,hpy]}

while en.size>0
    en.sort!{|b,c|
        x1=b[0]-a[0]
        y1=b[1]-a[1]
        l1=sqrt(x1**2+y1**2)
        x2=c[0]-a[0]
        y2=c[1]-a[1]
        l2=sqrt(x2**2+y2**2)
        l1<=>l2
    }
    
    x=en[0][0]-a[0];y=en[0][1]-a[1]
    arg=atan2(y,x)

    x2_1=a[0]+a[2]*cos(arg);y2_1=a[1]+a[2]*sin(arg)
    x2_2=en[0][0]-en[0][2]*cos(arg);y2_2=en[0][1]-en[0][2]*sin(arg)
    data<<[x2_1,y2_1,x2_2,y2_2]
    a=en.shift
end

data.each{|item|puts item.join("\s")}


Indexへ
(10041)←【10048】→(10051)
------------------------
【タイトル】Re(4):円間を線で結ぶのであれば、
【記事番号】 10048 (10041)
【 日時 】06/03/24 19:03
【 発言者 】art modanart@hotmail.com

▼コジマさん:
気にとめて頂きいつもありがとうございます。
早速動かしてみたのですが、以下のエラーがでてしまい結線が出来ませんでした。
これはどこが原因と考えられるでしょうか。
よろしくお願いいたします。
<エラーメッセージ>
ci-ci.rb:18: undefined method `[]' for nil:NilClass (NoMethodError)
    from ci-ci.rb:17:in `sort!'
    from ci-ci.rb:17


Indexへ
(10048)←【10051】→(10058)
------------------------
【タイトル】Re(5):円上で右AM3:00ドラッグ
【記事番号】 10051 (10048)
【 日時 】06/03/24 19:50
【 発言者 】コジマ

▼artさん:
><エラーメッセージ>
>ci-ci.rb:18: undefined method `[]' for nil:NilClass (NoMethodError)
>    from ci-ci.rb:17:in `sort!'
>    from ci-ci.rb:17

正確に円の中芯を指示しないと実行できません。
(円上で右AM3:00方向ドラッグのみ実行できます。)


Indexへ
(10051)←【10058】→(10042)
------------------------
【タイトル】Re(6):円上で右AM3:00ドラッグ
【記事番号】 10058 (10051)
【 日時 】06/03/24 21:59
【 発言者 】art modanart@hotmail.com

▼コジマさん:
巧くいきました。ありがとうございました。


Indexへ
(10058)←【10042】→(10049)
------------------------
【タイトル】Re(1):結線された点に○配置について
【記事番号】 10042 (9971)
【 日時 】06/03/24 16:47
【 発言者 】waoh
【 リンク 】http://www17.ocn.ne.jp/~lite/



▼artさん:
> いつもお世話になります。
> 実点同士を線分で結んでこの実点に○を配置する作業を行っております。
> ここで問題になっている事がありましてこの解決方法を探しております。
> それは、実点に○を配置した際に○の中に線分が残ってしまいます。この○の中の線分を消去したいのです。実は、200点ほどあり修正に時間がかかっております。
> 線記号変形で線分の交点に○を配置する方法も考えたのですが、数十点程度であればさほど時間も掛からないのですが200点程度となると作業が繁雑になります。まだこのような図面を10枚程度編集しなければならずお知恵を借りられればと思います。
> 実点に任意の大きさの○を配置し○の中の線分を消す(円周まで伸縮させる)のを一発で出来るような外部変形はないでしょうか。
> よろしくお願いいたします。


手遅れかもしれませんが、awk による外部変形
を利用できる環境がある場合
下記のプログラムが活用できるかもしれません。

http://www17.ocn.ne.jp/~lite/lncirtrim.lzh

外部変形のバッチファイルは lncirtrim.bat
です。

動作確認は一応しておりますが、保障はでき
ませんので、ご了承ください。

私は、インターネットの特訓中の者です。


Indexへ
(10042)←【10049】//(9973)
------------------------
【タイトル】Re(2):結線された点に○配置について
【記事番号】 10049 (10042)
【 日時 】06/03/24 19:04
【 発言者 】art modanart@hotmail.com

▼waohさん:
ありがとうございます。
早速動かしてみます。