Indexへ
(5379)// 【5389】→(5411) ------------------------ 【タイトル】概略の道路計画に利用する外部変形について
【記事番号】 5389 (*)
【 日時 】06/02/10 11:23
【 発言者 】sess sess@hotmail.com
いつもお世話になります。
最近、概略の道路計画を行う事が多くて、平面計画を行うときにこんな外部変形がないかなと思ったものです。
1.概略の横断図作成に使用
スキャンした平面図を画像で表示し、コンタに沿って実点を打ちます。その後に文字の左基点にて標高を入れるのですが、数十点あるため同じ標高の実点を範囲指定して同じ標高(半角数字)が記入できるような外部変形。
2.道路の中心線を書き込むのですが、延長を計るときに測定では、途中にカーブがある場合に弧を指定して起点終点をクリックしなければならないため結構手間で地道な作業となります。直線及び曲線を範囲指定し合計の延長が測定できる外部変形はないでしょうか。
3.道路の中心線に20.0mピッチの実点を記入し測点としその横に測点(NO.1とか)を記入するのですが、角度のついた直線や曲線に沿って文字列を配置するので記入する毎に線分の軸角を取り書き込んでいます。軸角の取り方が悪いと文字が180°反転してしまいます。線分の角度に沿った文字列を効率よく書き込む外部変形は無いでしょうか。
4.上記の実点に○を書き込みたいのですが、数が多くなると地道な作業となります。実点を微小円に変換する外部変形もし要したりしていますが(作者様に感謝!)、単純に実転に円を配置する外部変形はないでしょうか。
ネット上をいろいろと探したのですが、見つける事が出来ませんでした。よろしくお願いいたします。
Indexへ
(5389)← 【5411】→(5414) ------------------------ 【タイトル】Re(1):概略の道路計画に利用する外部変形について
【記事番号】 5411 (5389 )
【 日時 】06/02/10 20:44
【 発言者 】art modan@hotmail.com
▼sessさん:
resが付きませんね。
Indexへ
(5411)← 【5414】→(5416) ------------------------ 【タイトル】Re(1):概略の道路計画に利用する外部変形について
【記事番号】 5414 (5389 )
【 日時 】06/02/10 22:36
【 発言者 】ハマグチ
▼sessさん:
レスが無いようですので
>いつもお世話になります。
>最近、概略の道路計画を行う事が多くて、平面計画を行うときにこんな外部変形がないかなと思ったものです。
>1.概略の横断図作成に使用
> スキャンした平面図を画像で表示し、コンタに沿って実点を打ちます。その後に文字の左基点にて標高を入れるのですが、数十点あるため同じ標高の実点を範囲指定して同じ標高(半角数字)が記入できるような外部変形。
>2.道路の中心線を書き込むのですが、延長を計るときに測定では、途中にカーブがある場合に弧を指定して起点終点をクリックしなければならないため結構手間で地道な作業となります。直線及び曲線を範囲指定し合計の延長が測定できる外部変形はないでしょうか。
>3.道路の中心線に20.0mピッチの実点を記入し測点としその横に測点(NO.1とか)を記入するのですが、角度のついた直線や曲線に沿って文字列を配置するので記入する毎に線分の軸角を取り書き込んでいます。軸角の取り方が悪いと文字が180°反転してしまいます。線分の角度に沿った文字列を効率よく書き込む外部変形は無いでしょうか。
>4.上記の実点に○を書き込みたいのですが、数が多くなると地道な作業となります。実点を微小円に変換する外部変形もし要したりしていますが(作者様に感謝!)、単純に実転に円を配置する外部変形はないでしょうか。
>ネット上をいろいろと探したのですが、見つける事が出来ませんでした。よろしくお願いいたします。
無精者の道具箱
有意義なコマンドありがとうございます!!
http://www.page.sannet.ne.jp/kiyoaki-oikawa/index.htm
に 『交点複写』『総線長合計』 がありますが、これを使ってみてはいかがでしょうか
○や高さを登録しておき一発で範囲内に書き込んでくれるはずです
1.2.4. は解決のはず
3.はそんなに外部変形を使わないでも簡単と思うのですが?
jwwで文字入力ダイアログ表示状態で線角度収得し配置すればよいはず
180°回転しないはずですが?
どこまでsessさんに便利になるか分かりませんが良かったら
覗いてみてはいかがでしょう
Indexへ
(5414)← 【5416】→(5417) ------------------------ 【タイトル】Re(2):概略の道路計画に利用する外部変形について
【記事番号】 5416 (5414 )
【 日時 】06/02/11 04:07
【 発言者 】sess sess@hotmail.com
▼ハマグチさん:
大変貴重な情報をありがとうございました。
思っていた内容の事は出来るようになりました。
厚かましいのですが、もう一つ質問させてください。
実点同士を線で結びたいのですが、これが出来る外部変形は無いでしょうか。
結び方によっては、線が重複するかもしれませんが、それでも結構です。
よろしくお願いいたします。
Indexへ
(5416)← 【5417】→(5418) ------------------------ 【タイトル】Re(3):もしかして
【記事番号】 5417 (5416 )
【 日時 】06/02/11 08:34
【 発言者 】[名前なし]
▼sessさん:
>▼ハマグチさん:
>大変貴重な情報をありがとうございました。
>思っていた内容の事は出来るようになりました。
>厚かましいのですが、もう一つ質問させてください。
>実点同士を線で結びたいのですが、これが出来る外部変形は無いでしょうか。
>結び方によっては、線が重複するかもしれませんが、それでも結構です。
>よろしくお願いいたします。
これって、100点あったとすると全ての点が残りの99点全部に線を引くということですか?
すげー! 何に使うんだろう 興味深々
Indexへ
(5417)← 【5418】→(5420) ------------------------ 【タイトル】Re(3):概略の道路計画に利用する外部変形について
【記事番号】 5418 (5416 )
【 日時 】06/02/11 09:57
【 発言者 】ハマグチ
▼sessさん:
>▼ハマグチさん:
>大変貴重な情報をありがとうございました。
>思っていた内容の事は出来るようになりました。
>厚かましいのですが、もう一つ質問させてください。
>実点同士を線で結びたいのですが、これが出来る外部変形は無いでしょうか。
>結び方によっては、線が重複するかもしれませんが、それでも結構です。
>よろしくお願いいたします。
その様な外部変形は今のところ覚えがありません。
ただ技術的には、簡単な外部変形だと思います...が当方スキル不足です。
使用目的などもう少し具体的に内容を書かれれば、誰かがすぐに
作ってくださるかも知れません。
又、違った方法でsessさんの目的とする作図が、可能となる場合もあると
思います。
本当、何に使用するのかな?
面積計算でもなさそうだし、三角形作図までは色々有ったと思うのですが
Indexへ
(5418)← 【5420】→(5421) ------------------------ 【タイトル】Re(4):概略の道路計画に利用する外部変形について
【記事番号】 5420 (5418 )
【 日時 】06/02/11 10:29
【 発言者 】sess sess@hotmail.com
▼ハマグチさん:
お世話になります。
実は、道路の概略計画の際に使用したいと思っています。
考えているのは、スキャンニングした平面図のコンタをCabaさんの外部変形(Cabaさんに感謝!)を使ってjww上でコンタ割りし、これを使って道路の縦断横断図を作ろうと思っています。
前回の質問の回答でほぼ考えていたことはできるようになったのですが、コンタ割り時に標高点を結ばなければならないので(三角形の羅列になります)この手間が省けないかと思いました。各実点直近を結んでくれるようなものはないかとも今して質問をいたしました。安直な考えでした。確かに、一つの実点から多数の点に結ばれてしまうこともありますよね。やはり無理でしょうか。
ご回答いただきありがとうございました。
Indexへ
(5420)← 【5421】→(5422) ------------------------ 【タイトル】Re(5):概略の道路計画に利用する外部変形について
【記事番号】 5421 (5420 )
【 日時 】06/02/11 10:39
【 発言者 】ハマグチ
大体の内容がわかりました
例えば、点の外周部を線でつなぎ任意の形を三角形に分割するような
外部変形を利用されてはいかがでしょう 一様各点をポイントとする
三角形に分割してくれる外部変形があったはず
後は、手作業 少しかも知れませんが 手間が省けますが?
必要でしたらどこにあるか調べますが
Indexへ
(5421)← 【5422】→(5423) ------------------------ 【タイトル】Re(6):概略の道路計画に利用する外部変形について
【記事番号】 5422 (5421 )
【 日時 】06/02/11 10:48
【 発言者 】sess sess@hotmail.com
▼ハマグチさん:
早速、回答いただきありがとうございます。
三角形の分割マクロは、三斜での面積計算で使用していますのでこちらを利用したいと思います。
ありがとうございました。
Indexへ
(5422)← 【5423】→(5424) ------------------------ 【タイトル】Re(7):概略の道路計画に利用する外部変形について
【記事番号】 5423 (5422 )
【 日時 】06/02/11 11:29
【 発言者 】ハマグチ
QuickZ 見てきました テスト用データーを見ましたが
この作業は 外部変形でやると 修正の方に返って手間が
掛かると思いました。 面倒でも各点を繋いだ方が
手間が省けると私は理解しましたが
当方建築系です 屋根ブレース等の長さの拾いに測量系のコマンドも
一部使用させていただいております
改めて感謝しております
この件に関してあまりお役に立てずすみません
では がんばってください。
Indexへ
(5423)← 【5424】→(5432) ------------------------ 【タイトル】Re(8):概略の道路計画に利用する外部変形について
【記事番号】 5424 (5423 )
【 日時 】06/02/11 11:39
【 発言者 】sess sess@hotmail.com
▼ハマグチさん:
そうですね。私もそのように思えてきました。
お付き合いいただきありがとうございました。
Indexへ
(5424)← 【5432】→(5430) ------------------------ 【タイトル】Re(3):点間を結ぶ外変
【記事番号】 5432 (5416 )
【 日時 】06/02/11 19:04
【 発言者 】コジマ
▼sessさん:
>実点同士を線で結びたいのですが、これが出来る外部変形は無いでしょうか。
>結び方によっては、線が重複するかもしれませんが、それでも結構です。
>よろしくお願いいたします。
点間を結ぶ外変です。
緩やかな曲線は、再現できますが、
リアス式海岸のような曲線は実点を細かく配置しないと無理ですね。
◎バッチファイル(ファイル名 pt-pt.bat)
以下をコピペ後、全角スペースを半角スペースに一括置換してください。
@REM 点間を線で結ぶ
@echo off
REM #jww
REM #cd
REM #h1
REM #1最初の実点を指示してください(右クリック)
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks pt-pt.rb temp.txt > jwc_temp.txt
◎スクリプトファイル(ファイル名 pt-pt.rb)
以下をコピペ後、全角スペースを半角スペースに一括置換してください。
include Math
ten=[];data=[]
while ARGF.gets
xy=split
if xy[0]=~/^hp/
hpx,hpy=xy[1].to_f,xy[2].to_f
end
if xy[0]=~/^pt/
ten<<[xy[1].to_f,xy[2].to_f]
end
end
a=ten.find{|item|item==[hpx,hpy]}
data<ten.delete_if{|item|item==a}
while ten.size>0
ten.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
}
d=ten.shift
data< a=d
end
data.each{|item|puts item.join("\s")}
Indexへ
(5432)← 【5430】→(5437) ------------------------ 【タイトル】Re(1):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5430 (5389 )
【 日時 】06/02/11 15:47
【 発言者 】コジマ
▼sessさん:
>3.道路の中心線に20.0mピッチの実点を記入し測点としその横に測点(NO.1とか)を記入するのですが、角度のついた直線や曲線に沿って文字列を配置するので記入する毎に線分の軸角を取り書き込んでいます。軸角の取り方が悪いと文字が180°反転してしまいます。線分の角度に沿った文字列を効率よく書き込む外部変形は無いでしょうか。
公開されている外部変形ではそうなるようですね。
以下の外部変形で可能です。(線上の実点に文字記入)
円弧の混じった連線でも可能ですが、実行速度の多大の影響があります。
点間を線で結ぶ外変は、折れ線グラフにするのならば可能ですが、
それ以外は、実点をピクセル単位で配置しないと無理です。
(現実離れしています)
◎バッチファイル(ファイル名 連線点文字.bat)
コピペ後、全角スペースを半角スペースに一括置換してください。
@REM 連線上の実点に文字を角度補正配置
@echo off
REM #jww
REM #cd
REM #c入力文字 /_/a
REM #c文字の離れ(図寸)無指定:1 /_/b
REM #h1
REM #1連続線の始点を指示してください(右クリック)
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧が多いと非常に時間がかかります。
ruby -Ks 連線点文字.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 連線点文字.rb)
コピペ後、全角スペースを半角スペースに一括置換してください。
include Math
#点が線上にあるか?
def ten_sen_kouten?(ten,sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
xy=sqrt(x**2+y**2)
sen_arg=atan2(y,x)
ten_sen_x=ten[0]-sen[0]
ten_sen_y=ten[1]-sen[1]
ten_sen_xy=sqrt(ten_sen_x**2+ten_sen_y**2)
ten_arg=atan2(ten_sen_y,ten_sen_x)
henkaku=ten_arg-sen_arg
ten_x=sen[0]+ten_sen_xy*cos(henkaku)
ten_y=sen[1]+ten_sen_xy*sin(henkaku)
if ten_sen_xy*sin(henkaku).abs<10 && ten_sen_xy<=xy
return true
else
return false
end
end
#数値の小数点3桁以下を切り捨て
def ika3(x)
a=(((x.to_f)*1000).to_i/1000.to_f)
return a
end
def nagasa(sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
xy=sqrt(x**2+y**2)
return xy
end
def arg(sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
kakudo=atan2(y,x)
return kakudo
end
moji="";hanare=1
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
moji=argument[2..-1]
when /\/b/
hanare=argument[2..-1].to_f
end
end
sen=[];ten=[];hp=[];sokuten=0;by=[]
while ARGF.gets
xy=split
if xy[0] =~ /^hp/
hp<<[ika3(xy[1]),ika3(xy[2])]
end
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] =~ /^\d|^-/
xy.collect!{|item|ika3(item)}
sen< end
if xy[0] =~ /^ci/
if xy.size==8
xyt=xy.collect{|item|item.to_f}
x=xyt[1]
y=xyt[2]
zahyo=[];date=[]
ziku=xyt[7]*2*PI/360
if xyt[4]>xyt[5]
xyt[4] -=360
end
if xyt[5]==xyt[4]
xyt[5] +=360
end
bunkaku=2*2*PI/360
kakudo=xyt[4]*2*PI/360+bunkaku/2
r=xyt[3]
x1=xyt[3]*cos(xyt[4]*2*PI/360)
y1=xyt[3]*sin(xyt[4]*2*PI/360)*xyt[6]
xyl=sqrt(x1**2+y1**2)
arg1=atan2(y1,x1)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
date< sikaku=(xyt[4]+xyt[7])*2*PI/360
syukaku=(xyt[5]+xyt[7])*2*PI/360
while (kakudo < xyt[5]*2*PI/360)
x1=r*cos(kakudo)
y1=r*sin(kakudo)*xyt[6]
xyl=sqrt(x1**2+y1**2)
arg1=atan2(y1,x1)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
kakudo += bunkaku
end
x1=xyt[3]*cos(xyt[5]*2*PI/360)
y1=xyt[3]*sin(xyt[5]*2*PI/360)*xyt[6]
arg1=atan2(y1,x1)
xyl=sqrt(x1**2+y1**2)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
0.upto(zahyo.size-2){|i|
sen<< [ika3(zahyo[i][0]),ika3(zahyo[i][1]),ika3(zahyo[i+1][0]),ika3(zahyo[i+1][1])]}
end
end
if xy[0] =~ /^pt/
ten<<[ika3(xy[1]),ika3(xy[2])]
end
end
n=1;i=0
while i renzoku=[];a=hp[i];rensen=[]
begin
renzoku< 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[-1][0]==b[0] && renzoku[-1][1]==b[1]
a=[b[2],b[3]]
elsif renzoku[-1][0]==b[2] && renzoku[-1][1]==b[3]
a=[b[0],b[1]]
end
sen.delete_if{|item2|item2==b}
end
end while(b)
if renzoku.size>2
0.upto(renzoku.size-2){|s|
rensen<< [renzoku[s][0],renzoku[s][1],renzoku[s+1][0],renzoku[s+1][1]]
}
end
rensen.each{|item|
sokuten=ten.select{|item2|ten_sen_kouten?(item2,item)}
if sokuten && sokuten.size>0
sokuten.sort!{|j,k|
l1=nagasa([item[0],item[1],j[0],j[1]])
l2=nagasa([item[0],item[1],k[0],k[1]])
l1<=>l2
}
if arg(item)*360/(2*PI)>90 or arg(item)*360/(2*PI)<-90
mojix=cos(arg([item[2],item[3],item[0],item[1]]))
mojiy=sin(arg([item[2],item[3],item[0],item[1]]))
else
mojix=cos(arg(item))
mojiy=sin(arg(item))
end
sokuten.each{|item3|
sokutenmoji=moji+"(NO#{n})"
printf("ch %f %f %f %f \"%s\n",
item3[0]-hanare*zusun*mojiy,
item3[1]+hanare*zusun*mojix,
mojix,mojiy,sokutenmoji)
n+=1
}
ten.delete_if{|item4|sokuten.include?(item4)}
end
}
i+=1
end
Indexへ
(5430)← 【5437】→(5448) ------------------------ 【タイトル】Re(2):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5437 (5430 )
【 日時 】06/02/11 22:41
【 発言者 】sess sess@hotmail.com
▼コジマさん:
実点を結ぶ外部変形とも確認いたしました。感動ものです。
自分の思い描いていた作業が殆ど出来るようになりました。
ありがとうございました。
厚かましいお願いなのですが一つお願いがあります。
”線上の実点に文字記入”の場合に作っていただいた用に線分に平行の場合と終点に向かって線分に直角方向になるように配置される場合があります。出来れば、線分に水平と90度回転とも選択できれば完璧です。よろしくお願いいたします。
でも本当に線分上に文字列が”連番”で配置されたときには、歓声を上げてしまいました。本当にありがとうございました。
Indexへ
(5437)← 【5448】→(5438) ------------------------ 【タイトル】Re(3):バグ?
【記事番号】 5448 (5437 )
【 日時 】06/02/12 17:43
【 発言者 】コジマ
▼sessさん:
>”線上の実点に文字記入”の場合に作っていただいた用に線分に平行の場合と終
>点に向かって線分に直角方向になるように配置される場合があります。
バグの報告ですか?
この外変は、線に対して水平にしかならないはずですが?
当方では、何度実行してみても直角にはなりません。
>出来れば、線分に水平と90度回転とも選択できれば完璧です。
それとも、鉛直角方向記入 の追加要望ですか?
以下 選択項目追加
尚、この外変は円弧部分を多角形に分割計算して座標位置をだしますので、円弧を含んだ連続線では、急激に速度が低下します。
当方で使用しているのは、円弧のまま計算して座標位置をだしますので、
数倍高速ですが、300行以上の複雑なスクリプトなので、
この掲示板に記載できるしろものではありません。
◎バッチファイル
@REM 連線上の実点に文字を角度補正して配置
@echo off
REM #jww
REM #cd
REM #c入力文字 /_/a
REM #c文字の離れ(図寸)無指定:1 /_/b
REM #k文字の傾き|1)線角度(L)|2)鉛直角(R)|/_/c
REM #h1
REM #1連続線の始点を指示してください(右クリック)
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧が多いと非常に時間がかかります。
ruby -Ks 連線点文字.rb temp.txt %1 %2 %3 > jwc_temp.txt
◎スクリプトファイル
include Math
#点が線上にあるか?
def ten_sen_kouten?(ten,sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
xy=sqrt(x**2+y**2)
sen_arg=atan2(y,x)
ten_sen_x=ten[0]-sen[0]
ten_sen_y=ten[1]-sen[1]
ten_sen_xy=sqrt(ten_sen_x**2+ten_sen_y**2)
ten_arg=atan2(ten_sen_y,ten_sen_x)
henkaku=ten_arg-sen_arg
ten_x=sen[0]+ten_sen_xy*cos(henkaku)
ten_y=sen[1]+ten_sen_xy*sin(henkaku)
if ten_sen_xy*sin(henkaku).abs<10 && ten_sen_xy<=xy
return true
else
return false
end
end
#数値の小数点3桁以下を切り捨て
def ika3(x)
a=(((x.to_f)*1000).to_i/1000.to_f)
return a
end
def nagasa(sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
xy=sqrt(x**2+y**2)
return xy
end
def arg(sen)
x=sen[2]-sen[0]
y=sen[3]-sen[1]
kakudo=atan2(y,x)
return kakudo
end
moji="";hanare=1
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
moji=argument[2..-1]
when /\/b/
hanare=argument[2..-1].to_f
when /\/c/
moji_houku=argument[2..-1]
end
end
sen=[];ten=[];hp=[];sokuten=0;by=[]
while ARGF.gets
xy=split
if xy[0] =~ /^hp/
hp<<[ika3(xy[1]),ika3(xy[2])]
end
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] =~ /^\d|^-/
xy.collect!{|item|ika3(item)}
sen< end
if xy[0] =~ /^ci/
if xy.size==8
xyt=xy.collect{|item|item.to_f}
x=xyt[1]
y=xyt[2]
zahyo=[];date=[]
ziku=xyt[7]*2*PI/360
if xyt[4]>xyt[5]
xyt[4] -=360
end
if xyt[5]==xyt[4]
xyt[5] +=360
end
bunkaku=2*2*PI/360
kakudo=xyt[4]*2*PI/360+bunkaku/2
r=xyt[3]
x1=xyt[3]*cos(xyt[4]*2*PI/360)
y1=xyt[3]*sin(xyt[4]*2*PI/360)*xyt[6]
xyl=sqrt(x1**2+y1**2)
arg1=atan2(y1,x1)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
date< sikaku=(xyt[4]+xyt[7])*2*PI/360
syukaku=(xyt[5]+xyt[7])*2*PI/360
while (kakudo < xyt[5]*2*PI/360)
x1=r*cos(kakudo)
y1=r*sin(kakudo)*xyt[6]
xyl=sqrt(x1**2+y1**2)
arg1=atan2(y1,x1)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
kakudo += bunkaku
end
x1=xyt[3]*cos(xyt[5]*2*PI/360)
y1=xyt[3]*sin(xyt[5]*2*PI/360)*xyt[6]
arg1=atan2(y1,x1)
xyl=sqrt(x1**2+y1**2)
zahyo<<[x+xyl*cos(arg1+ziku),y+xyl*sin(arg1+ziku)]
0.upto(zahyo.size-2){|i|
sen<< [ika3(zahyo[i][0]),ika3(zahyo[i][1]),ika3(zahyo[i+1][0]),ika3(zahyo[i+1][1])]}
end
end
if xy[0] =~ /^pt/
ten<<[ika3(xy[1]),ika3(xy[2])]
end
end
n=1;i=0
while i renzoku=[];a=hp[i];rensen=[]
begin
renzoku< 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[-1][0]==b[0] && renzoku[-1][1]==b[1]
a=[b[2],b[3]]
elsif renzoku[-1][0]==b[2] && renzoku[-1][1]==b[3]
a=[b[0],b[1]]
end
sen.delete_if{|item2|item2==b}
end
end while(b)
if renzoku.size>2
0.upto(renzoku.size-2){|s|
rensen<< [renzoku[s][0],renzoku[s][1],renzoku[s+1][0],renzoku[s+1][1]]
}
end
rensen.each{|item|
sokuten=ten.select{|item2|ten_sen_kouten?(item2,item)}
if sokuten && sokuten.size>0
sokuten.sort!{|j,k|
l1=nagasa([item[0],item[1],j[0],j[1]])
l2=nagasa([item[0],item[1],k[0],k[1]])
l1<=>l2
}
if moji_houku=="1"
if arg(item)*360/(2*PI)>90 or arg(item)*360/(2*PI)<-90
mojix=cos(arg([item[2],item[3],item[0],item[1]]))
mojiy=sin(arg([item[2],item[3],item[0],item[1]]))
moji_x,moji_y,keisu=mojiy,mojix,-1
else
mojix=cos(arg(item))
mojiy=sin(arg(item))
moji_x,moji_y,keisu=mojiy,mojix,-1
end
else
if (arg(item)*360/(2*PI))>0 && (arg(item)*360/(2*PI))<=180
mojix,mojiy=cos(arg(item)-PI/2),sin(arg(item)-PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
elsif (arg(item)*360/(2*PI))<=0
mojix,mojiy=cos(arg(item)+PI/2),sin(arg(item)+PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
end
end
sokuten.each{|item3|
sokutenmoji=moji+"(NO#{n})"
printf("ch %f %f %f %f \"%s\n",
item3[0]+hanare*zusun*moji_x*keisu,
item3[1]+hanare*zusun*moji_y,
mojix,mojiy,sokutenmoji)
n+=1
}
ten.delete_if{|item4|sokuten.include?(item4)}
end
}
i+=1
end
Indexへ
(5448)← 【5438】→(5444) ------------------------ 【タイトル】Re(2):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5438 (5430 )
【 日時 】06/02/11 23:43
【 発言者 】sess sess@hotmail.com
▼コジマさん:
再度のお願いです。
画面上にある複数の実点に文字(この場合は、半角数字)を左基点で配置をする方法(外部変形)を ハマグチさんに教えていただいたのですが、この場合に作者様の意図とは違う用途での使い方なので私の作業内容としては、効率が悪いのです。(図形登録後(私の場合には、半角数字の登録ですが)を行わなければならないため)
そこで、画面上の実点を範囲指定した後、配置の文字を入力しこれを実点に左下基点で配置する(作業はこの繰り返しです)外部変形は出来ないものでしょうか。
厚かましいお願いついでの再度のお願いでした。無理であれば、聞き流してください。
Indexへ
(5438)← 【5444】→(5445) ------------------------ 【タイトル】Re(3):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5444 (5438 )
【 日時 】06/02/12 13:22
【 発言者 】名無し
これでいいのかな?(AWKです)
@REM 実点に文字
REM 文字は予め、実点に記入しておく
REM 範囲指定で実点を選択後、記入する文字をクリックする
REM 既に記入済みの点には記入されない
REM 点のダブりは考慮していない
echo off
goto EXE
REM #jww
REM #cd
REM #h1
REM #hm 実点と文字を選択
REM #1ch記入する文字をクリック(左)
REM #ht10
REM #ht20
REM #ht30
REM #ht40
REM #e
:EXE
jgawk -f 実点文字.awk jwc_temp.txt > temp.txt
del jwc_temp.txt
rename temp.txt jwc_temp.txt
:pause
『実点文字.awk』
#書き込みレイヤ
/^ly/ {ly=$1; if(fl=="")fl=ly }
#選択文字フラグ
/^hhp1ch/ {flg=1}
#文字データ
/^ch/ {
if(flg == 1){
$6=substr($0,index($0,$6));
MM=sprintf("%.15g %.15g %s\n",$4,$5,$6)
flg = ""
}
nx[++k]=$2;ny[k]=$3;
}
#点データ
/^pt/{
xx[++i]=$2;yy[i]=$3; next}
END{
print fl
while(++j <= i){
l=0;nc=0;while(++l <= k){
pp=sprintf("%.6f",sqrt((nx[l]-xx[j])^2+(ny[l]-yy[j])^2))+0
if(pp == 0){nc=1;break;}
}
if(nc == 0){
printf("ch %.15g %.15g %s\n",xx[j],yy[j],MM)
}
}
}
Indexへ
(5444)← 【5445】→(5453) ------------------------ 【タイトル】Re(4):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5445 (5444 )
【 日時 】06/02/12 16:06
【 発言者 】sess@hotmail.com sess@hotmail.com
▼名無しさん:
巧く動かす事が出来ました。
ありがとうございました。またまた感動しています。
特に数値が既に書き込んである実点については、範囲選択しても書き込まれないという機能は、ボックスでの選択時の追加及び除外の手間がいらず大変便利だと実感しています。
一つ質問なのですが、実点に前もって書き込んでおくのではなく、実点を選択後に文字入力が出来るようにするにはどうしたらいいのでしょうか。
よろしくお願いいたします。
Indexへ
(5445)← 【5453】→(5446) ------------------------ 【タイトル】Re(5):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5453 (5445 )
【 日時 】06/02/12 21:16
【 発言者 】名無し
▼sess@hotmail.comさん:
>一つ質問なのですが、実点に前もって書き込んでおくのではなく、実点を選択後に文字入力が出来るようにするにはどうしたらいいのでしょうか。
> よろしくお願いいたします。
入力文字に 『"』が有るとまともに動きません(そんなケース無いと思いたいけど)
以下batファイル
@REM 実点に文字
REM 既に記入済みの点には記入されない
echo off
goto EXE
REM #jww
REM #cd
REM #h1
REM #hm 実点と文字を選択
REM #c 記入文字入力(省略不可)/_"
REM #ht10
REM #ht20
REM #ht30
REM #ht40
REM #e
:EXE
jgawk -f 実点文字.awk -v M=%1" jwc_temp.txt > temp.txt
del jwc_temp.txt
rename temp.txt jwc_temp.txt
:pause
前の『実点文字.awk』の先頭に
BEGIN{
MM="10 0 \"" M
}
の3行追加
こんな感じ
BEGIN{
MM="10 0 \"" M
}
#書き込みレイヤ
/^ly/ {ly=$1; if(fl=="")fl=ly }
#選択文字フラグ
/^hhp1ch/ {flg=1}
以下省略
Indexへ
(5453)← 【5446】→(5455) ------------------------ 【タイトル】Re(4):線上の実点に文字を角度補正して連番付きの一括配置
【記事番号】 5446 (5444 )
【 日時 】06/02/12 16:17
【 発言者 】ハマグチ
コジマさん・名無しさん ご苦労様です
出来ましたら 一つのBATにコマンドをまとめてあげてください。
又、文字以外にも○の追加もしてあげてはいかがでしょう
おせっかいですが、ここまでしてあげてのだから 後少しお付き合いを....ハハハ
Indexへ
(5446)← 【5455】→(5456) ------------------------ 【タイトル】Re(1):概略の道路計画に利用する外部変形について
【記事番号】 5455 (5389 )
【 日時 】06/02/12 22:02
【 発言者 】sess sess@hotmail.com
▼名無しさん:
希望通りの動作となりました。お付き合いいただきありがとうございました。
▼コジマさん:
わかりにくい文章で申し訳ありませんでした。ご推察の通り鉛直方向記入の要望でした。ただ鉛直方向の配置の際に角度によっては、文字の方向が終点側に向かずに基点側に向いてしまうものがあります。これを全て起点側から終点に向かって鉛直方向に配置を行う事は出来ないでしょうか。再三の要望で恐縮ですがこれが出来ると思い描いていた作業となります。よろしくお願いいたします。
Indexへ
(5455)← 【5456】→(5457) ------------------------ 【タイトル】Re(2):起点側から終点の意味不明
【記事番号】 5456 (5455 )
【 日時 】06/02/12 23:23
【 発言者 】コジマ
▼sessさん:
>▼コジマさん:
>ただ鉛直方向の配置の際に角度によっては、文字の方向が終点側に向かずに基点側に向
>いてしまうものがあります。
>これを全て起点側から終点に向かって鉛直方向に配置を行う事は出来ないでしょうか。
起点側から終点の意味がわかりません。
「連続線の始点の終点に向かって」という意味ならば、
連続線のルートによっては、180度 ひっくりかえって読みにくいものになります。
文字の角度は -90度 〜 90度 にしないと非常に読みにくいです。
線角度が、90度 から 90度以上の角度 になる時に、方向が変わるようにしているので、不自然な感じがするということでしょうか?
これは、見た目をとるか、読みやすさをとるかの問題。
当然読み易さをとります。
たとえば、上下のUターンしている連続線なりの文字だと、左右で文字の角度が180度
変わってしまうので読めたものではありません。
Indexへ
(5456)← 【5457】→(5460) ------------------------ 【タイトル】Re(3):土木では一般的です
【記事番号】 5457 (5456 )
【 日時 】06/02/13 02:54
【 発言者 】スター
▼コジマさん:
いつも素早い外変ご苦労様です。
>たとえば、上下のUターンしている連続線なりの文字だと、左右で文字の角度が180度
>変わってしまうので読めたものではありません。
土木においては上記の記述が一般的です。
縦断図との対応が良いからだと思いますが。
Noだけでなく、高さの表示も同様になります。
もしNoの記述が無い場合、高さの数値から道路の進行方向を読み取れます。
例えば、水平の道路と垂直の道路が十字に交差した平面図があり、垂直がメインで下から上へ向かった場合は、各点の高さの文字は水平になり、交差点の高さも水平になります。
その結果水平の道路は2つに分断され、右と左で文字の角度はそれぞれ反対の90°回転となります。
Indexへ
(5457)← 【5460】→(5464) ------------------------ 【タイトル】Re(3):起点側から終点の意味不明
【記事番号】 5460 (5456 )
【 日時 】06/02/13 09:34
【 発言者 】sess sess@hotmail.com
▼コジマさん:
>起点側から終点の意味がわかりません。
>
>「連続線の始点の終点に向かって」という意味ならば、
>連続線のルートによっては、180度 ひっくりかえって読みにくいものになります。
>文字の角度は -90度 〜 90度 にしないと非常に読みにくいです。
>
>線角度が、90度 から 90度以上の角度 になる時に、方向が変わるようにしているので、不自然な感じがするということでしょうか?
>
>これは、見た目をとるか、読みやすさをとるかの問題。
>当然読み易さをとります。
>
>たとえば、上下のUターンしている連続線なりの文字だと、左右で文字の角度が180度
>変わってしまうので読めたものではありません。
説明不足ですいません。”起点側から終点側”とはコジマさんが思われている通りです。
道路計画の図面を書くときには、決まり事があります。
1.起点側から終点に向かって測点番号が増える。
2.測点の表示は、常に終点方向を上として表記する。
コジマさんが言われるように上下のUターンの場合Uターン後の測点は、180°回転した表示となります。これが、正規な表現なのです。(確かに読みにくいですね)
ですから常に起点側から終点側に向かって(終点側を上として)表示が出来ればと思った次第です。要望ばかりで申し訳ありませんが、これが出来れば思い描いていた作業が全て出来るようになるので検討して頂けるのであればよろしくお願いいたします。
Indexへ
(5460)← 【5464】→(5467) ------------------------ 【タイトル】Re(4):起点側から終点の意味不明
【記事番号】 5464 (5460 )
【 日時 】06/02/13 11:16
【 発言者 】コジマ
▼sessさん:
> ですから常に起点側から終点側に向かって(終点側を上として)表示が出来ればと思った次第です。
スクリプトファイルの158行目から文末までを以下のように修正。
(常に線角度+90度)
if moji_houku=="1"
if arg(item)*360/(2*PI)>90 or arg(item)*360/(2*PI)<-90
mojix=cos(arg([item[2],item[3],item[0],item[1]]))
mojiy=sin(arg([item[2],item[3],item[0],item[1]]))
moji_x,moji_y,keisu=mojiy,mojix,-1
else
mojix=cos(arg(item))
mojiy=sin(arg(item))
moji_x,moji_y,keisu=mojiy,mojix,-1
end
else
mojix,mojiy=cos(arg(item)+PI/2),sin(arg(item)+PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
end
sokuten.each{|item3|
sokutenmoji=moji+"(NO#{n})"
printf("ch %f %f %f %f \"%s\n",
item3[0]+hanare*zusun*moji_x*keisu,
item3[1]+hanare*zusun*moji_y,
mojix,mojiy,sokutenmoji)
n+=1
}
ten.delete_if{|item4|sokuten.include?(item4)}
end
}
i+=1
end
Indexへ
(5464)← 【5467】→(5471) ------------------------ 【タイトル】Re(5):起点側から終点の意味不明
【記事番号】 5467 (5464 )
【 日時 】06/02/13 12:02
【 発言者 】sess sess@hotmail.com
▼コジマさん:
本当に厄介をかけてすいません。測点が同方向に並んで表示される事を確認いたしました。ありがとうございました。
最後にもう一つ要望させてください。今回追加して頂いたものは、起点側を上にした方向に測点が配置されるのですが、前回の要望の書き込みのように180°回転した終点側を上にした方向に配置するためには、どうしたら良いのでしょうか。
よろしくお願いいたします。
Indexへ
(5467)← 【5471】→(5473) ------------------------ 【タイトル】Re(6):水平方向もだったのですか
【記事番号】 5471 (5467 )
【 日時 】06/02/13 12:58
【 発言者 】コジマ
▼sessさん:
今回追加して頂いたものは、起点側を上にした方向に測点が配置されるのですが、前回の要望の書き込みのように180°回転した終点側を上にした方向に配置するためには、どうしたら良いのでしょうか。
スクリプトファイルの158行目から文末まで、以下のように修正。
if moji_houku=="1"
mojix=cos(arg(item))
mojiy=sin(arg(item))
moji_x,moji_y,keisu=mojiy,mojix,-1
else
mojix,mojiy=cos(arg(item)+PI/2),sin(arg(item)+PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
end
sokuten.each{|item3|
sokutenmoji=moji+"(NO#{n})"
printf("ch %f %f %f %f \"%s\n",
item3[0]+hanare*zusun*moji_x*keisu,
item3[1]+hanare*zusun*moji_y,
mojix,mojiy,sokutenmoji)
n+=1
}
ten.delete_if{|item4|sokuten.include?(item4)}
end
}
i+=1
end
Indexへ
(5471)← 【5473】→(5480) ------------------------ 【タイトル】Re(7):水平方向もだったのですか
【記事番号】 5473 (5471 )
【 日時 】06/02/13 13:39
【 発言者 】sess sess@hotmail.com
▼コジマさん:
コジマさんすいません。編集しても同じ動作になります。
又、説明が悪いせいでこちらの思っている事が巧く伝わらないようです。
私が思っている事は以下の通りなのです。
|連続線の始点
+
*-----------------------------------*----------------------------------
<--- 起点側 NO.1 終点側 --->
|
この文字を時計回りに90°回転(文字列の上が終点側)
以上なのですが、いかがでしょうか。よろしくお願いいたします。
Indexへ
(5473)← 【5480】→(5482) ------------------------ 【タイトル】Re(8):鉛直方向の180度回転版?
【記事番号】 5480 (5473 )
【 日時 】06/02/13 17:39
【 発言者 】コジマ
▼sessさん:
>|連続線の始点
>+
>*-----------------------------------*----------------------------------
> <--- 起点側 NO.1 終点側 --->
> |
> この文字を時計回りに90°回転(文字列の上が終点側)
>
>以上なのですが、いかがでしょうか。よろしくお願いいたします。
鉛直方向の180度回転版ならば、文末から15行目と16行目を以下のように修正。
mojix,mojiy=cos(arg(item)+PI/2),sin(arg(item)+PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
↓
+PI/2 を -PI/2 に変更するだけです。バッチファイルとスクリプトファイル名を変更して、別途保存すれば使えます。
但し、バッチファイルの一番下の記述の.rbファイル名は、変更したものにする。
↓
mojix,mojiy=cos(arg(item)-PI/2),sin(arg(item)-PI/2)
moji_x,moji_y,keisu=mojix,mojiy,1
Indexへ
(5480)← 【5482】→(5502) ------------------------ 【タイトル】Re(9):鉛直方向の180度回転版?
【記事番号】 5482 (5480 )
【 日時 】06/02/13 18:27
【 発言者 】sess sess@hotmail.com
▼コジマさん:
コジマさん、できました。思い描いていた通りの事が行う事が出来ました。
これで道路の計画作業がスムーズに行えます。
最後までおつきあい頂きありがとうございました。
Indexへ
(5482)← 【5502】→(5507) ------------------------ 【タイトル】Re(9):鉛直方向の180度回転版?
【記事番号】 5502 (5480 )
【 日時 】06/02/14 10:29
【 発言者 】sess sess@hotmail.com
▼コジマさん:
お世話になります。
作って頂いた実点に文字を配置する外部変形ですが、文字が配置できない場合があります。これは、どのような事が原因でしょうか。
<配置が出来ない条件>
S=1/1000とします。半径75mの円弧上に実点を配置します。この後、作成して頂いた外部変形で文字の配置を行うと配置できない箇所があります。配置できていない方向は、中心から見た場合に 45°、135°、225°、315°の方向のようです。
よろしくお願い致します。
Indexへ
(5502)← 【5507】→(5509) ------------------------ 【タイトル】Re(10):円弧の分割角度を小さくするか、許容誤差を大きくするか、
【記事番号】 5507 (5502 )
【 日時 】06/02/14 11:23
【 発言者 】コジマ
▼sessさん:
>S=1/1000とします。半径75mの円弧上に実点を配置します。この後、作成して頂いた外部変形で文字の配置を行うと配置できない箇所があります。配置できていない方向は、中心から見た場合に 45°、135°、225°、315°の方向のようです。
>よろしくお願い致します。
円弧は、多角形に分割計算して、点の座標を出していますので、実際の位置とは異なります。許容誤差を認めてやらないと、線上だと認識しません。
分割角度が大きいほど、誤差も大きくなります。
現状では、円の分割度=2度 許容誤差 10mm(実寸)
S=1/1000 だと、許容誤差 0.001mm(図寸)!!
今まで配置されていたのが不思議?
円弧の分割角度を小さくすると、実行速度は倍倍ゲームで低下します。
1度までが限度?
許容誤差を大きくするには、19行目の
if ten_sen_xy*sin(henkaku).abs<10 && ten_sen_xy<=xy #許容誤差 10mm(実寸)
↓
if ten_sen_xy*sin(henkaku).abs<1000 && ten_sen_xy<=xy #許容誤差 1000mm(実寸)
円弧の分割角度を小さくするには、87行目の
bunkaku=2*2*PI/360 #円の分割度=2度
↓
bunkaku=1*2*PI/360 #円の分割度=1度
試行錯誤して、妥協値を設定するしかありません。
Indexへ
(5507)← 【5509】→(5512) ------------------------ 【タイトル】Re(11):円弧の分割角度を小さくするか、許容誤差を大きくするか、
【記事番号】 5509 (5507 )
【 日時 】06/02/14 12:07
【 発言者 】sess sess@hotmail.com
▼コジマさん:
早速回答頂きありがとうございます。
分割数を換えてみたところ巧くいきました。速度については、問題はありませんでした。
どの当たりまでの半径まで配置可能かは試行錯誤して見ます。
ありがとうございました。
Indexへ
(5509)← 【5512】→(5517) ------------------------ 【タイトル】Re(12):円弧のまま、座標計算
【記事番号】 5512 (5509 )
【 日時 】06/02/14 13:14
【 発言者 】コジマ
円弧のまま、座標計算するもの(半径による誤差考慮不要)は、
やはり、文字数制限にひっかかってしまいました。
オープンライブラリならば2、3日で登録できます。
Indexへ
(5512)← 【5517】→(5528) ------------------------ 【タイトル】Re(13):円弧のまま、座標計算
【記事番号】 5517 (5512 )
【 日時 】06/02/14 15:35
【 発言者 】sess sess@hotmail.com
▼コジマさん:
お世話をかけます。
出来るものでしたらオープンライブラリへの登録をお願いいたします。
ありがとうございました。
Indexへ
(5517)← 【5528】→(5534) ------------------------ 【タイトル】Re(14):オープンライブラリへの登録
【記事番号】 5528 (5517 )
【 日時 】06/02/15 09:12
【 発言者 】コジマ
今回は、やけに早く登録されました。
http://forum.nifty.com/farchi/download/cad/jw/lc_pc.htm
Indexへ
(5528)← 【5534】→(5536) ------------------------ 【タイトル】Re(15):オープンライブラリへの登録
【記事番号】 5534 (5528 )
【 日時 】06/02/15 12:43
【 発言者 】sess sess@hotmail.com
▼コジマさん:
オープンライブラリへの登録 ありがとうございました。
この外部変形一つで作業の殆どを行う事が出来ます。(円弧の配置も付けて頂きありがとうございました。)しかも、ものすごく早いです。
一つ質問なのですが、実点を配置するときに線分の端部には、実点が配置されない仕様のようなのですが、この線分の端部に実点を配置する場合にはどのようにしたらよいのでしょうか。実は、測点を配置する場合に起点をNO.0とするため起点となる点に実点が必要となります。ちなみに、文字配置でのNO.0からの配置方法はわかりました。
よろしくお願いいたします。
Indexへ
(5534)← 【5536】→(5539) ------------------------ 【タイトル】Re(16):オープンライブラリへの登録
【記事番号】 5536 (5534 )
【 日時 】06/02/15 14:04
【 発言者 】コジマ
▼sessさん:
> 一つ質問なのですが、実点を配置するときに線分の端部には、実点が配置されない仕様のようなのですが、この線分の端部に実点を配置する場合にはどのようにしたらよいのでしょうか。実は、測点を配置する場合に起点をNO.0とするため起点となる点に実点が必要となります。
連線点割付2.rbの文末を以下のように修正。
printf("h#実点数:#{s}個追加\n")
↓
ten(hp[0][0],hp[0][1])
printf("h#実点数:#{s+1}個追加\n")
>ちなみに、文字配置でのNO.0からの配置方法はわかりました。
> よろしくお願いいたします。
連線点文字2.rbの179行目
n=1;i=0
↓
n=0;i=0
Indexへ
(5536)← 【5539】→(5542) ------------------------ 【タイトル】Re(17):追記
【記事番号】 5539 (5536 )
【 日時 】06/02/15 14:54
【 発言者 】コジマ
始点が円弧の場合は、以下の修正も必要です。
連線点文字2.rbの14行目
if (ten_xy.to_i-en[6].to_i).abs<2 && enkokaku2↓
if (ten_xy.to_i-en[6].to_i).abs<2 && (enkokaku2
Indexへ
(5539)← 【5542】//(5392) ------------------------ 【タイトル】Re(18):追記
【記事番号】 5542 (5539 )
【 日時 】06/02/15 15:32
【 発言者 】sess sess@hotmail.com
▼コジマさん:
完璧です!。感動しています。
本当にありがとうございました。