Jw_cad 相談室−その2 New

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

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

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


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

JWWデータフォーマットについて BOB 17/7/17(月) 2:10

Re:Rubyでの参考例 kojima 17/8/11(金) 14:13

Re:Rubyでの参考例
 kojima  - 17/8/11(金) 14:13 -
▼BOBさん:
>それには、CADファイルを読込み、座標データ化するため、CADファイル
>の構造を知りたいのです。

図面名:temp.jww 内の線データを座標ファイル(temp.txt)に書き出すRubyスクリプト文です。


#図面内の線データを座標ファイルに書き出し
#!ruby -Ks
file="temp.jww" #図面名:temp.jww
$stdout=open("temp.txt","w") #座標ファイル名:temp.txt
#データの書き出し
def data_write(data,i,data_moji)
if data_moji=="CDataSen"
ln_write(data,i,data_moji)
end
end
#data_mojiとdata_noをarray2(二重配列)に収集する。
def data_no_collect(data,i,array2,data_moji,no,hash,j)
data_no=no+j
array2<<[data_moji,data_no]
i=data_next(data,i,data_moji,hash)
return i
end
#data_mojiのバイト数の分だけiを次へ進める。
def data_next(data,i,data_moji,hash)
if data_moji=="CDataMoji"
f_i=data[i+83,1].unpack("C")[0]
m_i=data[i+84+f_i,1].unpack("C")[0]
if m_i==255
m_i=data[i+85+f_i,2].unpack("S")[0]
m_byte=83+f_i+m_i+4
else
m_byte=83+f_i+m_i+2
end
hash[data_moji]=m_byte
i += hash[data_moji]
elsif data_moji=="CDataSunpou"
f_i=data[i+145,1].unpack("C")[0]
m_i=data[i+146+f_i,1].unpack("C")[0]
m_byte=147+f_i+m_i+236
hash[data_moji]=m_byte
i += hash[data_moji]
elsif data_moji=="CDataSolid"
if data[i+5,1].unpack("C")[0] == 10
i += hash[data_moji]+4
else
i += hash[data_moji]
end
elsif data_moji=="CDataTen"
if data[i+4,1].unpack("C")[0] == 100
i += hash[data_moji]+20
else
i += hash[data_moji]
end
else
i += hash[data_moji]
end
return i
end
#線データの書き出し
def ln_write(data,i,data_moji)
pl,lt,lc,lw,ly,lg,z=data[i,15].unpack("LCSSSSS")
x1,y1,x2,y2=data[i+15,8*4].unpack("dddd")
zusun=$scal_a[lg]
printf(" %.11f %.11f %.11f %.11f\n",x1*zusun,y1*zusun,x2*zusun,y2*zusun)
end
path=Dir.pwd
i=0
data=""
open(file,"rb"){|f|data=f.read}
i += 8
#◎図面のバージョン
b_n=data[i,4].unpack("L")[0];
i += 4
memo_byte=data[i,1].unpack("C")[0];
i += 1+memo_byte
i += 8
$scal_a=[]
0.upto(15){|i1|
i += 8
$scal_a<<data[i,8].unpack("d")[0]#レイヤグループの縮尺
i+= 12
0.upto(15){|i2|i += 8}
}
i += 14*4#ダミー
i += 100
0.upto(15){|i1|
0.upto(15){|i2|
byte=data[i,1].unpack("C")[0]
i += byte+1
}
}
0.upto(15){|i1|
byte=data[i,1].unpack("C")[0]
i += byte+1
}
i += 96
if b_n.to_f >=3.0
1.upto(8){|i1|i += 28}
else
1.upto(4){|i1|i += 24}
end
if b_n.to_f >=3.0
i += 44#ダミー
if b_n.to_f <4.04
i += 12#ダミー
else
i += 12
end
end
0.upto(9){|i1|i += 8}
i += 8
0.upto(9){|i1|i += 8}
0.upto(9){|i1|i += 16}
2.upto(9){|i1|i += 16}
1.upto(5){|i1|i += 20}
6.upto(9){|i1|i += 16}
i += 144
0.upto(256){|i1|i += 8}
0.upto(256){|i1|
lcn_byte=data[i,1].unpack("C")[0]
lcn=data[i+1,lcn_byte]
i += 1+lcn_byte
i += 16
}
0.upto(32){|i1|i += 16}
0.upto(32){|i1|
ltn_byte=data[i,1].unpack("C")[0]
i += 1+ltn_byte
i += 4
1.upto(10){|i2|i += 8}
}
1.upto(10){|i1|i += 28}
i += 100

#◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)の総数
int1=data[i,1].unpack("C")[0];int2=data[i+1,1].unpack("C")[0]
if int1==255 && int2==255
i += 2
n2=data[i,4].unpack("L")[0]
i += 4
else
n2=data[i,2].unpack("S")[0]
i += 2
end
puts "図形の総数:#{n2}"
#◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)のデータNOの検出
hash={"CDataSen"=>47,"CDataTen"=>35,"CDataEnko"=>75,"CDataSolid"=>79,"CDataBlock"=>59}
data_moji="";array2=[];no=0;j=0
while no<n2
no += 1
int=data[i,2].unpack("S")[0]
if int==255*256+255
i += 4
n=data[i,2].unpack("S")[0]
i += 2
data_moji=data[i,n]
i += n
data_write(data,i,data_moji)
i=data_no_collect(data,i,array2,data_moji,no,hash,j)
j += 1
elsif int==127*256+255
i += 2
n=data[i,4].unpack("L")[0]-(128*256*256*256)
i += 4
array2.each{|item|
if item[1] == n
data_moji=item[0]
break
end
}
data_write(data,i,data_moji)
i=data_next(data,i,data_moji,hash)
else
n=data[i,2].unpack("S")[0]-(128*256)
i += 2
array2.each{|item|
if item[1] == n
data_moji=item[0]
break
end
}
data_write(data,i,data_moji)
i=data_next(data,i,data_moji,hash)
end
end
$stdout.close
system("notepad temp.txt")

引用なし

パスワード


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

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

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