Indexへ
(23896)//【23895】→(23897)
------------------------
【タイトル】AWKスクリプト書替え
【記事番号】 23895 (*)
【 日時 】04/11/03 11:23
【 発言者 】MM

Snap_Kinさんの外変#11 ◆矢印付き 折れ線 作図◆
http://fox.zero.ad.jp/~zap01296/jww/YA_TEN.LZH

を個人用に書替えしたいのですが、サッパリです。
この外変を始点に矢印、終点になにも無しの矢印付きの折れ線にしたいのですが・・・

どなたかお知恵をお貸しください。


Indexへ
(23895)←【23897】→(23900)
------------------------
【タイトル】AWKのお勉強
【記事番号】 23897 (23895)
【 日時 】04/11/03 16:21
【 発言者 】joker
【 リンク 】http://www.atsmile.com/jw/



▼MMさん:
>Snap_Kinさんの外変#11 ◆矢印付き 折れ線 作図◆
>http://fox.zero.ad.jp/~zap01296/jww/YA_TEN.LZH
>
>を個人用に書替えしたいのですが、サッパリです。
>この外変を始点に矢印、終点になにも無しの矢印付きの折れ線にしたいのですが・・・
>
>どなたかお知恵をお貸しください。

私は、外部変形も、awkも、知りませんのでアドバイスできませんが、
まずは、
外部変形プログラムの作り方の勉強、
awkの勉強、
をするというのが第1ではないでしょうか?

また、他人様のプログラムを改造する以上、
自己責任・自己努力が基本だと思いますし、
作者さんに著作権がある以上、それを無視したようなこと、
  例えばここで改造プログラムソースをアップするとか、
はできませんから、
頑張って下さいね、という感じに、ならざるを得ないような気がします。


Indexへ
(23897)←【23900】→(23901)
------------------------
【タイトル】rubyなら
【記事番号】 23900 (23895)
【 日時 】04/11/03 16:47
【 発言者 】コジマ

▼MMさん:
>Snap_Kinさんの外変#11 ◆矢印付き 折れ線 作図◆
>http://fox.zero.ad.jp/~zap01296/jww/YA_TEN.LZH
>
>を個人用に書替えしたいのですが、サッパリです。
>この外変を始点に矢印、終点になにも無しの矢印付きの折れ線にしたいのですが・・・
>
>どなたかお知恵をお貸しください。

rubyなら以下のスクリプトで、ご希望のことが出来ます。

(ただし、線コマンドと連続線コマンドで書いても所要時間はたいして変わらないようですが?)

尚、この外変の実行には、mswin32 版 Ruby のインストールが必要です。
以下で、入手できます。
http://www61.tok2.com/home2/gravelroad/tips/install.html

念のため、コピペ後、全角スペースを半角スペースに一括置換してください。

◎バッチファイル(ファイル名 矢印付折線.bat)

@REM 折れ線(始点に矢印、終点無印
@echo off
REM #jww
REM #cd
REM #h0
REM #1/ ★矢印付き折線★始点を指示 (L)free,(R)Read
REM #2/ 折れ点を指示 ( AM1時左ドラッグで15度毎/自由角 )
REM #99# 終点を指示 (L)free,(R)Read
REM #k 矢印の大きさ |2mm (L)|2.5mm(R)|3mm|3.5mm|4mm|5mm|/_/a
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 矢印付折線.rb temp.txt %1> jwc_temp.txt


◎スクリプトファイル(ファイル名 矢印付折線.rb)

BEGIN{
$nagasa=2.5
while ARGV.length > 1
    case argument=ARGV.pop
        when/^\/a/
            $nagasa=argument[2..-1].to_f
    end
end
}
def sen(x1,y1,x2,y2)
    printf("%e %e %e %e\n", x1, y1, x2, y2)
end
    by=Array.new
    x=Array.new
    y=Array.new
    while ARGF.gets
        xy =split
        if xy[0] =~ /^hs/
            n=1;while (n        end
        if xy[0] =~ /^lg/
            lg=xy[0].delete("lg");zusun=by[$lg.to_i]
        end
        if xy[0] =~ /^hp/
            x.push(xy[1].to_f)
            y.push(xy[2].to_f)
        end
    end
dxy=Math.sqrt((x[1]-x[0])**2+(y[1]-y[0])**2)
dx=(x[1]-x[0])/dxy
dy=(y[1]-y[0])/dxy
yax=$nagasa
yay=0.268*$nagasa

sen(x[0],y[0],
x[0]+yax*zusun*dx+yay*zusun*dy,
y[0]+yax*zusun*dy-yay*zusun*dx)

sen(x[0],y[0],
x[0]+yax*zusun*dx-yay*zusun*dy,
y[0]+yax*zusun*dy+yay*zusun*dx)

m=0
    while (m        sen(x[m],y[m],x[m+1],y[m+1])
        m +=1
    end


Indexへ
(23900)←【23901】→(23906)
------------------------
【タイトル】訂正
【記事番号】 23901 (23900)
【 日時 】04/11/03 17:26
【 発言者 】コジマ

矢印の長さの入力方法が違っていましたので以下のように訂正します。


◎スクリプトファイル(ファイル名 矢印付折線.rb)

BEGIN{
$no="2"
while ARGV.length > 1
    case argument=ARGV.pop
        when/^\/a/
            $no=argument[2..-1]
    end
end
}
hash={"1"=>2,"2"=>2.5,"3"=>3,"4"=>3.5,"5"=>4,"6"=>5}
$nagasa=hash[$no]
def sen(x1,y1,x2,y2)
    printf("%e %e %e %e\n", x1, y1, x2, y2)
end
    by=Array.new
    x=Array.new
    y=Array.new
    while ARGF.gets
        xy =split
        if xy[0] =~ /^hs/
            n=1;while (n        end
        if xy[0] =~ /^lg/
            lg=xy[0].delete("lg");zusun=by[$lg.to_i]
        end
        if xy[0] =~ /^hp/
            x.push(xy[1].to_f)
            y.push(xy[2].to_f)
        end
    end
dxy=Math.sqrt((x[1]-x[0])**2+(y[1]-y[0])**2)
dx=(x[1]-x[0])/dxy
dy=(y[1]-y[0])/dxy
yax=$nagasa
yay=0.268*$nagasa

sen(x[0],y[0],
x[0]+yax*zusun*dx+yay*zusun*dy,
y[0]+yax*zusun*dy-yay*zusun*dx)

sen(x[0],y[0],
x[0]+yax*zusun*dx-yay*zusun*dy,
y[0]+yax*zusun*dy+yay*zusun*dx)

m=0
    while (m        sen(x[m],y[m],x[m+1],y[m+1])
        m +=1
    end


Indexへ
(23901)←【23906】→(23902)
------------------------
【タイトル】タイプミス
【記事番号】 23906 (23901)
【 日時 】04/11/03 19:12
【 発言者 】コジマ

タイプミス($lg)がありました。
レイヤグループ0の縮尺でのみ、矢印に長さが指定とおりになります。

以下修正

◎スクリプトファイル(ファイル名 矢印付折線.rb)

BEGIN{
$no="2"
while ARGV.length > 1
    case argument=ARGV.pop
        when/^\/a/
            $no=argument[2..-1]
    end
end
}
hash={"1"=>2,"2"=>2.5,"3"=>3,"4"=>3.5,"5"=>4,"6"=>5}
$nagasa=hash[$no]
def sen(x1,y1,x2,y2)
    printf("%e %e %e %e\n", x1, y1, x2, y2)
end
    by=Array.new
    x=Array.new
    y=Array.new
    while ARGF.gets
        xy =split
        if xy[0] =~ /^hs/
            n=1;while (n        end
        if xy[0] =~ /^lg/
            lg=xy[0].delete("lg");zusun=by[lg.to_i]
        end
        if xy[0] =~ /^hp/
            x.push(xy[1].to_f)
            y.push(xy[2].to_f)
        end
    end
dxy=Math.sqrt((x[1]-x[0])**2+(y[1]-y[0])**2)
dx=(x[1]-x[0])/dxy
dy=(y[1]-y[0])/dxy
yax=$nagasa
yay=0.268*$nagasa

sen(x[0],y[0],
x[0]+yax*zusun*dx+yay*zusun*dy,
y[0]+yax*zusun*dy-yay*zusun*dx)

sen(x[0],y[0],
x[0]+yax*zusun*dx-yay*zusun*dy,
y[0]+yax*zusun*dy+yay*zusun*dx)

m=0
    while (m        sen(x[m],y[m],x[m+1],y[m+1])
        m +=1
    end


Indexへ
(23906)←【23902】→(23905)
------------------------
【タイトル】Re: rubyなら
【記事番号】 23902 (23900)
【 日時 】04/11/03 17:30
【 発言者 】wakui wakui@v003.vaio.ne.jp

コジマさん、こんにちは。
試させていただきました。OKです。
1つ教えてください。
書込みレイヤ、書込み線種・線色となりますが、
レイヤ、線種・線色指定は、rubyではどこにどう記入すればよろしいのでしょうか。
宜しくお願いします。


jww4.03g  ■コマント゛選択をAUTOモート゛クロックメニュー
winXP_HE SP1 sony PCG-Z1VE
-- CMN v0.47eβ --


Indexへ
(23902)←【23905】→(23910)
------------------------
【タイトル】Re(1): rubyなら
【記事番号】 23905 (23902)
【 日時 】04/11/03 18:43
【 発言者 】コジマ

▼wakuiさん:
>コジマさん、こんにちは。
>試させていただきました。OKです。
>1つ教えてください。
>書込みレイヤ、書込み線種・線色となりますが、
>レイヤ、線種・線色指定は、rubyではどこにどう記入すればよろしいのでしょうか。
>宜しくお願いします。
>
>
>jww4.03g  ■コマント゛選択をAUTOモート゛クロックメニュー
>winXP_HE SP1 sony PCG-Z1VE
>-- CMN v0.47eβ --
レイヤ、線種・線色指定が複数ならば、
作図する対象の図形(線・円・点など)の記述の前に以下の記述をします。
print "ly0\n"#レイヤ0に出力
print "lc1\n"#線色1で出力
print "lt1\n"#線種1で出力

レイヤ、線種・線色指定が一種類だけなら、スクリプトの最初に記入していいです。

または、メソッド定義の中に記入したほうが便利な場合もあり、ケースバイケースです。

例、(スクリプトの最初に記入)


BEGIN{
$no="2"
while ARGV.length > 1
    case argument=ARGV.pop
        when/^\/a/
            $no=argument[2..-1]
    end
end
}
print "ly0\n"#レイヤ0に出力
print "lc1\n"#線色1で出力
print "lt1\n"#線種1で出力
hash={"1"=>2,"2"=>2.5,"3"=>3,"4"=>3.5,"5"=>4,"6"=>5}
$nagasa=hash[$no]
def sen(x1,y1,x2,y2)
    printf("%e %e %e %e\n", x1, y1, x2, y2)
end
    by=Array.new
    x=Array.new
    y=Array.new
    while ARGF.gets
        xy =split
        if xy[0] =~ /^hs/
            n=1;while (n        end
        if xy[0] =~ /^lg/
            lg=xy[0].delete("lg");zusun=by[$lg.to_i]
        end
        if xy[0] =~ /^hp/
            x.push(xy[1].to_f)
            y.push(xy[2].to_f)
        end
    end
dxy=Math.sqrt((x[1]-x[0])**2+(y[1]-y[0])**2)
dx=(x[1]-x[0])/dxy
dy=(y[1]-y[0])/dxy
yax=$nagasa
yay=0.268*$nagasa

sen(x[0],y[0],
x[0]+yax*zusun*dx+yay*zusun*dy,
y[0]+yax*zusun*dy-yay*zusun*dx)

sen(x[0],y[0],
x[0]+yax*zusun*dx-yay*zusun*dy,
y[0]+yax*zusun*dy+yay*zusun*dx)

m=0
    while (m        sen(x[m],y[m],x[m+1],y[m+1])
        m +=1
    end


Indexへ
(23905)←【23910】→(23904)
------------------------
【タイトル】Re2: rubyなら
【記事番号】 23910 (23905)
【 日時 】04/11/03 22:08
【 発言者 】wakui wakui@v003.vaio.ne.jp

コジマさん、こんにちは。
細かくお教えいただき、ありがとうございました。
完成です。


jww4.03g  ■コマント゛選択をAUTOモート゛クロックメニュー
winXP_HE SP1 sony PCG-Z1VE
-- CMN v0.47eβ --


Indexへ
(23910)←【23904】//(23907)
------------------------
【タイトル】Re(1):AWKスクリプト書替え
【記事番号】 23904 (23895)
【 日時 】04/11/03 18:40
【 発言者 】kaoru

▼MMさん:
>この外変を始点に矢印、終点になにも無しの矢印付きの折れ線にしたいのですが・・・
>

アプローチを変えて指示順序を逆にするのはダメですか。

この場合”点”を書かせないようにするだけですから、当てずっぽう(^^;
でもなんとかなる程度の作業で済みます。
どうしても15度毎の線で線上点や読み取り点を指定して終了したいのであれば
この手は使えませんが。

ご希望どおりの動きにするためには処理の流れを変える等の変更も伴いますので、
簡単なスクリプトが書ける程度の知識が要求される作業になります。
(改変の配布にあたりますので具体的なスクリプトは避けさせていただきますね。)