Jw_cad 情報交換室−その3New

 JWW についての情報交換の場としてお使いください
初心者の方などのご相談は Jw_cad 相談 室−その2をご利用ください
なお、情報交換室と相談室の両方に同じ内容を投稿するのはご遠慮ください

2009年9月以前の発言過去ログのページからご覧ください。

それ以降の過去ログは消失しています。
申し訳ありませんが、復活の予定はありません。


新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム
1135 / 1492     ←次へ | 前へ→

Re:座標面積計算結果について
 kojima  - 21/5/23(日) 18:32 -
自前の座標面積計算.batの前半分
(辺長文字と線の離れを指定するようにした)
(読取文字の基点と座標点の許容距離を指定するようにした)
(座標点記入文字と線がなるべく重ならないようにした)
(始点・方向の指示点は、線結合点から外れても動作するようにした)


@REM 座標面積計算表の作成
@echo off
goto %1
REM #jww
REM #cd
REM #hm|面積計算表|座標ファイル|
REM #:1
REM #zc
REM #h1
REM #hc閉鎖図形を範囲選択してください
REM #0原点を指示してください
REM #1座標面積計算の【始点】位置を指示してください
REM #2計算する《方向》の座標点を指示してください
REM #3計算結果記入点を指示してください
REM #c座標点番号の前に付加する文字/_/a
REM #c初期番号指定 無指定:1/_/b
REM #k座標点番号と辺長の記入|1)する(L)|2)しない(R)|/_/c
REM #k座標点文字の読取|1)する(L)|2)しない(R)|/_/d
REM #e
REM #:2
REM #zc
REM #h1
REM #hc閉鎖図形を範囲選択してください
REM #0原点を指示してください
REM #1座標面積計算の【始点】位置を指示してください
REM #2計算する《方向》の座標点を指示してください
REM #c座標点番号の前に付加する文字/_/a
REM #c初期番号指定 無指定:1/_/b
REM #k座標点文字の読取|1)する(L)|2)しない(R)|/_/d
REM #k座標ファイルの種類 |1)XY座標(R)|2)YX座標|/_/e
REM #e
:1
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %2 %3 %4 %5>jwc_temp.txt
pause
goto end
:2
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %2 %3 %4 %5>jwc_temp.txt
pause
goto end
#!ruby -Ks
include Math
pre_moji="";no=1
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
pre_moji=argument[2..-1]
when /\/b/
no=argument[2..-1].to_i
when /\/c/
ki=argument[2..-1].to_i
when /\/d/
yo=argument[2..-1].to_i
when /\/e/
f_t=argument[2..-1].to_i
end
end
if ki==1
begin
STDERR.puts("辺長文字と線の離れ(図寸)を入力 無指定:1")
cs=STDIN.gets
STDERR.puts("数値ではありません 無効です") unless cs =~ /^\d+\.*\d*/ or cs=="\n"
end until(cs =~ /^\d+\.*\d*/ or cs=="\n")
end
cs=="\n" ? cl2=1.0 : cl2=cs.to_f
if yo==1
begin
STDERR.puts("線結合点と読取文字との許容離隔(図寸) 無指定:5")
cs=STDIN.gets
STDERR.puts("数値ではありません 無効です") unless cs =~ /^\d+\.*\d*/ or cs=="\n"
cs=="\n" ? cl3=5.0 : cl3=cs.to_f
end until(cs =~ /^\d+\.*\d*/ or cs=="\n")
STDERR.printf("線結合点と%.2fmm以内の基点の文字を読み取ります\n",cl3)
end
#線の配列senから閉鎖図形・連続線・単線を区分けする
def loop_renzoku(sen)
zure=0.1
a=sen.shift
renzoku=[a]
begin
b=sen.find{|item2|(item2[0]-a[2]).abs<zure && (item2[1]-a[3]).abs<zure or (item2[2]-a[2]).abs<zure && (item2[3]-a[3]).abs<zure}
if b
if (renzoku[-1][2]-b[0]).abs<zure && (renzoku[-1][3]-b[1]).abs<zure
a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]]
elsif (renzoku[-1][2]-b[2]).abs<zure && (renzoku[-1][3]-b[3]).abs<zure
a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]]
end
sen.delete_if{|item2|item2==b}
renzoku<<a
end
end while(b)
if (renzoku[-1][2]-renzoku[0][0]).abs<zure && (renzoku[-1][3]-renzoku[0][1]).abs<zure
return renzoku
else
return nil
end
end
#文字列の長さを返す
def str_l(str,moji_w,moji_d,zusun)
str_a=str.split('')
l=moji_w
1.upto(str_a.size-1){|i|
if str_a[i-1].size==1
l+=moji_d/2
else
l+=moji_d
end
if str_a[i].size==1
l+=moji_w/2
else
l+=moji_w
end
}
return l*zusun
end
#指定の小数点以下桁数にして返す
def keta_f(f,keta)
str=sprintf("%.#{keta}f",f)
return str
end
#メインルーチン
keta=3
by_a=[];hcw=[];hch=[];hcd=[];sen_a=[];ch_a=[]
while ARGF.gets
xy=$_.split
xy[1..-1].each{|item|by_a<<item.to_f} if xy[0]=~/^hs/
zusun=by_a[xy[0][2,1].hex] if xy[0]=~/^lg/
xy.each{|item|hcw<<item.to_f} if xy[0]=~/^hcw/
xy.each{|item|hch<<item.to_f} if xy[0]=~/^hcw/
xy.each{|item|hcd<<item.to_f} if xy[0]=~/^hcd/
hpx1,hpy1=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp1/
hpx2,hpy2=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp2/
hpx,hpy=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp3/
if xy[0]=~/^cn(\d+)/
cn=$_.chomp
if xy.size==1
moji_w=hcw[$1.to_i]
moji_h=hch[$1.to_i]
moji_d=hcd[$1.to_i]
else
moji_w=xy[1].to_f
moji_h=xy[2].to_f
moji_d=xy[3].to_f
end
cl=moji_h/2
end
if xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
sen_a<<xy
end
if xy[0]=~/^ch/
moji=$'.chomp if $_=~/\"/
ch_a<<[xy[1].to_f,xy[2].to_f,moji] if yo==1
end
end
sen_a.sort!{|a,b|
la1=hypot(a[1]-hpy1,a[0]-hpx1)
la2=hypot(a[3]-hpy1,a[2]-hpx1)
la1<la2 ? la=la1 : la=la2
lb1=hypot(b[1]-hpy1,b[0]-hpx1)
lb2=hypot(b[3]-hpy1,b[2]-hpx1)
lb1<lb2 ? lb=lb1 : lb=lb2
la<=>lb
}
sen_a2=sen_a[0,2]
sen_a2.sort!{|a,b|
la1=hypot(a[1]-hpy2,a[0]-hpx2)
la2=hypot(a[3]-hpy2,a[2]-hpx2)
la1<la2 ? la=la1 : la=la2
lb1=hypot(b[1]-hpy2,b[0]-hpx2)
lb2=hypot(b[3]-hpy2,b[2]-hpx2)
lb1<lb2 ? lb=lb1 : lb=lb2
la<=>lb
}
ln=sen_a2[0]
sen_a.delete(ln)
l1=hypot(ln[1]-hpy1,ln[0]-hpx1)
l2=hypot(ln[3]-hpy1,ln[2]-hpx1)
if l2<l1
ln[0],ln[1],ln[2],ln[3]=ln[2],ln[3],ln[0],ln[1]
end
sen_a.unshift(ln)
cl2*=zusun
cl3*=zusun if cl3


引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126172136062.49.access-internet.ne.jp>
・ツリー全体表示

座標面積計算結果について yama 21/4/15(木) 11:41
座標面積計算結果について 追記 yama 21/4/15(木) 13:10
Re:座標面積計算結果について 追記 通りすがりの後期高齢者 21/4/15(木) 17:12
Re:座標面積計算結果について 追記 卯之介 21/4/15(木) 19:41
Re:原因が解りました 通りすがりの後期高齢者 21/4/15(木) 21:24
Re:原因が解りました fujii.A 21/4/16(金) 6:02
Re:原因が解りました somem 21/4/16(金) 9:37
Re:原因が解りました 通りすがりの後期高齢者 21/4/16(金) 12:56
Re:原因が解りました fujii.A 21/4/17(土) 8:47
Re:座標面積計算結果について 追記 somem 21/4/16(金) 11:18
Re:座標面積計算結果について 追記 yama 21/4/16(金) 15:44
Re:座標面積計算結果について kojima 21/5/18(火) 8:14
Re:座標面積計算結果について kojima 21/5/23(日) 18:32
Re:座標面積計算結果について kojima 21/5/23(日) 18:33
Re:座標面積計算結果について R.N 21/5/25(火) 22:11
Re:座標面積計算結果について kojima 21/5/26(水) 11:41
Re:座標面積計算結果について R.N 21/5/26(水) 19:31

1135 / 1492     ←次へ | 前へ→
新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム
 1473590
ページ:  ┃  記事番号:  

C-BOARD Moyuku v1.03b5
Jw_cad Copyright (C)1997-2021 Jiro Shimizu & Yoshifumi Tanaka