Indexへ
(11621)//【11605】→(11649)
------------------------
【タイトル】ランナー外変ありませんか?
【記事番号】 11605 (*)
【 日時 】06/05/09 11:41
【 発言者 】よくちん yok@yokuchin.com

プラモデルを作るときに、部品を枠から切り出すときに?ランナー?を切断しますよね?

JWWでランナーを作図する外変が欲しいのですがないですか?

切り板の部品図面を作図するときに、部品と部品間をつなぐ1mm幅くらいのランナーの作図が出来れば良いです。

手書きでは、
1−部品と部品に垂直に交わるように、線を1本引き
2−複線で1mm線を描く
3−包絡処理x2で(又はオートモードなどで)線端点を丸め処理する。
+−−+ → L__」
|  |
+−−+ → Γ ̄ ̄¬

線変形でも可能なように思うのですが出来ないのでしょうか


Indexへ
(11605)←【11649】→(11664)
------------------------
【タイトル】Re(1):ランナー外変ありませんか?
【記事番号】 11649 (11605)
【 日時 】06/05/10 11:29
【 発言者 】鈴木

▼よくちんさん:
>プラモデルを作るときに、部品を枠から切り出すときに?ランナー?を切断しますよね?
>
>JWWでランナーを作図する外変が欲しいのですがないですか?
>
>切り板の部品図面を作図するときに、部品と部品間をつなぐ1mm幅くらいのランナーの作図が出来れば良いです。

●プラモデルには詳しくないのですが、ランナーという部品は種類が多いのですか?
数種類ならば、図形登録して、読み込むというのも省エネです。
どのみち落とし込む位置は特定しなければいけないのですから、補助線なり
中心線で位置確定が成されているはずです。
境界線はプラモデルの性格から推測しても包絡などで処理する必要もないと思います。
いかがでしょうか?


Indexへ
(11649)←【11664】→(11665)
------------------------
【タイトル】Re(2):ランナー外変ありませんか?
【記事番号】 11664 (11649)
【 日時 】06/05/10 17:44
【 発言者 】よくちん yok@yokuchin.com

鈴木さん.初めまして
>●プラモデルには詳しくないのですが、ランナーという部品は種類が多いのですか?

ランナーは部品ではなく、枠とパーツ(部品)をつなげている所です。

>境界線はプラモデルの性格から推測しても包絡などで処理する必要もないと思います。

説明が足りなかったのですが、JWWで作図する図面は、鉄板の切り板の図面です。
切り板をする場合、板厚別に、鉄板への配置はCAMの方で行えるのですが
切り板のこごの図面はCADで製作する必要があります。

ただ、板が小さい場合などは、CAMで配置した場合切断時に落ちてしまうので
枠となる板と、少しだけ枠とジョイントします。ただこの方法も、板厚が薄い場合は便利なのですが、厚板になると、枠が大きい物ですから、取り外すのが大変なので
同じ形状の部品や、落ちない程度に、小さい部品同士をランナーでくっつけてやります。

○ □ □
↑こごの部品

○-□-□
↑1mmくらいの幅で、このようにつなげます。

この時

○-□/□
↑このように、部品に対して、鋭角にランナーを入れてしまうと、
CAMで切断機へのプログラムを作るときに、補間処理が出来ないので、エラーになるので、
部品へランナーは垂直に進入する必要があります。

数が多くなると、毎回毎回、最初に投稿した手順で描くのも大変なのです。


Indexへ
(11664)←【11665】→(11666)
------------------------
【タイトル】Re(3):ランナー外変ありませんか?
【記事番号】 11665 (11664)
【 日時 】06/05/10 18:20
【 発言者 】鈴木

▼よくちんさん:
>ランナーは部品ではなく、枠とパーツ(部品)をつなげている所です。

●基本的には理解しています。
図形登録のことを考えていたので部品という言葉を使いました。
本来の部品がどのくらいの大きさで、厚みを持っているものかわかりませんが、
ランナーという付属物の図面は2次元CADの制約の中で描くのですから、
部品の面にゾロとか、厚みの中央という使い分けはできない実情です。

>○ □ □
>↑こごの部品
>
>○-□-□
>↑1mmくらいの幅で、このようにつなげます。
>
>この時
>
>○-□/□
>↑このように、部品に対して、鋭角にランナーを入れてしまうと、
>CAMで切断機へのプログラムを作るときに、補間処理が出来ないので、エラーになるので、
>部品へランナーは垂直に進入する必要があります。
>
>数が多くなると、毎回毎回、最初に投稿した手順で描くのも大変なのです。

●問題は部品同士の隙間が部品ごと、製品ごとに違うかだと思います。
円形部品のカーブが製品ごとに違う場合は図形読み込みは難しいのでしょうね。
ただし、たとえ外変があっても基準位置の特定は要求されるような気がします。
100個同じランナーを使うのでしたら図形登録かフィットするランナーを作って
欄外に置いて使うことも省エネだと推測します。
ピッチが同じならば連続複写という操作も可能です。
すみません。門外漢の無責任な回答です。


Indexへ
(11665)←【11666】→(11668)
------------------------
【タイトル】Re(3):外部変形ではありませんが
【記事番号】 11666 (11664)
【 日時 】06/05/10 18:34
【 発言者 】白髪のおっちゃん

▼よくちんさん:
>○-□-□
>↑1mmくらいの幅で、このようにつなげます。
>この時
>○-□/□
>↑このように、部品に対して、鋭角にランナーを入れてしまうと、
>CAMで切断機へのプログラムを作るときに、補間処理が出来ないので、エラーになるので、
>部品へランナーは垂直に進入する必要があります。

もう一つ よくわかりませんが
ランナーを入れるところに 補助線、作図しますね
これを基準線として 2線コマンドで 作図してはどうでしょうか
部品が(対象線)直線の場合 2線コマンドのまま 包絡処理できます。
ステータスバーの表示を良く見て 試してみてください。
また 次の補助線を基準線に変え 連続して 2線コマンドのままランナー作図できると思いますが
円弧の所は、あとで切断・コーナー処理となります。

そして最後に補助線一括消去では だめでしょうか

年寄りは、この程度しか 思いつきません

以上


 


Indexへ
(11666)←【11668】//(11607)
------------------------
【タイトル】Re(3):ランナー外変ありませんか?
【記事番号】 11668 (11664)
【 日時 】06/05/10 20:02
【 発言者 】コジマ

▼よくちんさん:
>>○-□-□
>↑1mmくらいの幅で、このようにつなげます。

線データのみならば、以下の外変のような感じですか?

円の処理はしません。
円の処理も兼ねるのであれば、300行以上のスクリプトになるので、記載できません。

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

@REM 串刺した線を交互に2線で包絡
@echo off
REM #jww
REM #cd
REM #h2
REM #hc接続線する線を範囲切取選択
REM #1/2線の始点を指示(最初の接続線を串刺し)
REM #22線の終点を指示(最後の接続線を串刺し)
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks liner.rb temp.txt > jwc_temp.txt


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

include Math
#線と線の交点を返す(延長線上は含まない)
def sen_sen_kouten3(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 y2_1>=y1_1 && y2_2<=y1_1 or y2_1<=y1_1 && y2_2>=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
            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
            nil
        end
    else
        nil
    end
end
d=1

puts "hd"
n=0;j=0;sen=[];by=[]
while ARGF.gets
    xy=split
    if xy[0]=~/^hq/
    elsif xy[0]=~/^hp1/
        x1,y1=xy[1].to_f,xy[2].to_f
        print $_
    elsif xy[0]=~/^hp2/
        x2,y2=xy[1].to_f,xy[2].to_f
        print $_
    elsif xy[0]=~/^hs/
        xy[1..-1].each{|item|by<        print $_
    elsif xy[0]=~/^lg/
        lg=xy[0][2,1];zusun=by[lg.hex]
        print $_
    elsif xy[0]=~/^ly/
        ly=xy[0]
        print $_
    elsif xy[0]=~/^lc/
        lc=xy[0]
        print $_
    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
        if sen_sen_kouten3(xy,[x1,y1,x2,y2]) !=nil
            sen<        else
            print $_
        end
    else
        print $_
    end
end
if sen.size>1
    x,y=x2-x1,y2-y1
    arg=atan2(y,x)

    sen1=[x1-d*zusun*sin(arg),y1+d*zusun*cos(arg),x2-d*zusun*sin(arg),y2+d*zusun*cos(arg)]
    sen2=[x1+d*zusun*sin(arg),y1-d*zusun*cos(arg),x2+d*zusun*sin(arg),y2-d*zusun*cos(arg)]

    sen.each{|item|kouten=[]
        kouten<        kouten<        kouten.sort!{|a,b|a[0]==b[0] ? a[1]<=>b[1] : a[0]<=>b[0]}
        puts([item[0],item[1],kouten[0][0],kouten[0][1]].join("\s"))
        puts([kouten[1][0],kouten[1][1],item[2],item[3]].join("\s"))
    }
    [sen1,sen2].each{|item|kouten=[]
        sen.each{|item2|
            kouten<        }
        kouten.sort!{|a,b|a[0]==b[0] ? a[1]<=>b[1] : a[0]<=>b[0]}

        0.step(kouten.size-2,2){|i|puts([kouten[i][0],kouten[i][1],kouten[i+1][0],kouten[i+1][1]].join("\s"))}
    }
else
    sen.each{|item|puts item.join("\s")}
    printf("h#交差している線がありません\n")
end