Jw_cad 相談室−その2 New

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

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

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


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

JWWデータフォーマットについて BOB 17/7/17(月) 2:10
Re:JWWデータフォーマットについて kojima 17/7/17(月) 22:30
Re:JWWデータフォーマットについて BOB 17/8/3(木) 13:27
Re:JWWデータフォーマットについて BOB 17/8/3(木) 16:01
Rubyでの参考例 kojima 17/7/18(火) 22:50
Re:Rubyでの参考例 いっち 17/8/2(水) 11:27
Re:Rubyでの参考例 BOB 17/8/3(木) 13:42
Re:Rubyでの参考例 kojima 17/8/3(木) 19:17
Re:Rubyでの参考例 BOB 17/8/10(木) 22:25
Re:Rubyでの参考例 kojima 17/8/11(金) 14:13
Re:JWWデータフォーマットについて mirror 17/8/3(木) 21:33
Re:JWWデータフォーマットについて BOB 17/8/10(木) 22:07
Re:JWWデータフォーマットについて mirror 17/8/11(金) 8:02
Re:JWWデータフォーマットについて マチャプチャレ 17/8/11(金) 15:56

JWWデータフォーマットについて
 BOB  - 17/7/17(月) 2:10 -
画像処理で線分認識し、得た線分情報をCADファイル化したい
http://www.jwcad.net/jwdatafmt.txt
縦線1本描いたCADデータを上記と参照するも、雑な説明でとても解りにくい
今までいろんなファイルフォーマットの説明を見て解析してきたが、ここまで解りづらいものに巡り合ったのは初めて

◆がデータ項目で●がそのValue Meaningであるかのように書き始めているが
途中で●がデータ項目に変更されたりと混乱している。
日本語のローマ字化した変数名だったり英単語だったりと統一もされていないBit meaningにおいては千位,億位とか桁をそんな風に数える!?という記載
Offset,Sizeも記載されておらず、ソースの説明になっている
他人のソースをデバッグするほどしたくないことはない

BMP,JPEG,WAV,MPEGなどでもこんな書き方したものにお目に掛かったことがない
普通にデータフォーマットが書かれた使えるものはないのでしょうか?

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239054171.au-net.ne.jp>
・ツリー全体表示

Re:JWWデータフォーマットについて
 kojima  - 17/7/17(月) 22:30 -
▼BOBさん:
>画像処理で線分認識し、得た線分情報をCADファイル化したい
>http://www.jwcad.net/jwdatafmt.txt
>縦線1本描いたCADデータを上記と参照するも、雑な説明でとても解りにくい
>今までいろんなファイルフォーマットの説明を見て解析してきたが、ここまで解りづらいものに巡り合ったのは初めて
>
>◆がデータ項目で●がそのValue Meaningであるかのように書き始めているが
>途中で●がデータ項目に変更されたりと混乱している。
>日本語のローマ字化した変数名だったり英単語だったりと統一もされていないBit meaningにおいては千位,億位とか桁をそんな風に数える!?という記載
>Offset,Sizeも記載されておらず、ソースの説明になっている
>他人のソースをデバッグするほどしたくないことはない
>
>BMP,JPEG,WAV,MPEGなどでもこんな書き方したものにお目に掛かったことがない
>普通にデータフォーマットが書かれた使えるものはないのでしょうか?

単に、得た線分情報をCADファイル化したいということであれば
JWWには「座標ファイル」という便利なコマンドがあります。
座標ファイルとは、座標値が記載されたテキストファイルです。(拡張子.txt)

線の場合は、始点X座標 始点Y座標 終点X座標 終点Y座標を記載します。

345.625455 145.535455 1345.625455 145.535455
1345.625455 145.535455 1345.625455 1145.535455




のように記載します。

座標ファイルをJWW図面に反映させるには
JWWを起動する
その他→座標ファイル→ファイル名設定→
ファイル選択画面が表示されるので、目的の座標ファイルを選択する。
作図したい位置をクリックする。
ファイル→名前を付けて保存 
これでJWWファイルの作成終了です。

引用なし

パスワード


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

Rubyでの参考例
 kojima  - 17/7/18(火) 22:50 -
▼BOBさん:
>画像処理で線分認識し、得た線分情報をCADファイル化したい
>http://www.jwcad.net/jwdatafmt.txt
>縦線1本描いたCADデータを上記と参照するも、雑な説明でとても解りにくい

そのCADデータ上で、以下の外部変形を実行してみてください。
バッチファイルにRubyスクリプトを記述するタイプ。
Rubyのインストールが必要
https://rubyinstaller.org/downloads/

そのCADデータのヘッダー情報をまるまるコピーして、中央に図寸100mm
の正方形が描画されたJWWファイル(temp.jww)を作成して開きます。

以下の文をコピペして適当な名前をつけて保存してください。(拡張子.bat)


@REM 四角形を描画したJWWファイルの作成
@echo off
REM #jww
REM #cd
REM #hf
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt
pause
goto end
#!ruby -Ks
path=Dir.pwd
while ARGF.gets
if $_ =~ /^file=/
file=$'.chomp
end
end
if file==""
open("jwc_temp.txt","w"){|f|f.puts "h#ファイルが保存されていません"}
exit
else
open("jwc_temp.txt","w"){|f|f.puts "h#"}
end

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
0.upto(15){|i1|
i += 20
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
data2=data[0,i] #dataのヘッダー情報をdata2にコピーする

n=4 #線の本数
data2<<[n].pack("S")

data2<<[255*256+255,b_n,8].pack("SSS")
data2<<"CDataSen"

pl=0 #曲線属性番号
lt=1 #線種
lc=2 #線色
lw=0 #線幅
ly=0 #レイヤ
lg=0 #レイヤグループ
z=0 #属性
#sx:線の始点X座標 sy:線の始点Y座標 ex:線の終点X座標 ey:線の終点Y座標

sx= -100;sy= -100;ex= 100;ey= -100
data2<<[pl,lt,lc,lw,ly,lg,z,sx,sy,ex,ey].pack("LCSSSSSdddd")

data2<<[128*256+1].pack("S")
sx= 100;sy= -100;ex= 100;ey= 100
data2<<[pl,lt,lc,lw,ly,lg,z,sx,sy,ex,ey].pack("LCSSSSSdddd")

data2<<[128*256+1].pack("S")
sx= 100;sy= 100;ex= -100;ey= 100
data2<<[pl,lt,lc,lw,ly,lg,z,sx,sy,ex,ey].pack("LCSSSSSdddd")

data2<<[128*256+1].pack("S")
sx= -100;sy= 100;ex= -100;ey= -100
data2<<[pl,lt,lc,lw,ly,lg,z,sx,sy,ex,ey].pack("LCSSSSSdddd")

bl_n=0 #ブロック定義数
gz_n=0 #画像同梱数
data2<<[bl_n,gz_n].pack("SL")
open("#{path}/temp.jww","wb"){|f|f.write data2} #temp.jwwの作成

system("c:/jww/jw_win #{path}/temp.jww") #temp.jwwを開く

__END__
:end

引用なし

パスワード


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

Re:Rubyでの参考例
 いっち  - 17/8/2(水) 11:27 -
▼kojimaさん:
Rubyでの参考例ありがとうございます。
せめて、メモ位は取得出来るようになりたいと思い、参考例を拝見させて頂きました。

(私の理解が間違えていなければ)メモを取得する時は、
> memo_byte=data[i,1].unpack("C")[0];
の部分がポイントのように思いました。

memo_byte を取得すると、AutoItでもメモを簡単に取得する事が出来ました。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36@KD113151236026.ppp-bb.dion.ne.jp>
・ツリー全体表示

Re:JWWデータフォーマットについて
 BOB  - 17/8/3(木) 13:27 -
▼kojimaさん:
>▼BOBさん:
>>画像処理で線分認識し、得た線分情報をCADファイル化したい

>単に、得た線分情報をCADファイル化したいということであれば
>JWWには「座標ファイル」という便利なコマンドがあります。
>座標ファイルとは、座標値が記載されたテキストファイルです。(拡張子.txt)
>
>線の場合は、始点X座標 始点Y座標 終点X座標 終点Y座標を記載します。
>↓
>345.625455 145.535455 1345.625455 145.535455
>1345.625455 145.535455 1345.625455 1145.535455
>・
>・
>・
>
>のように記載します。
>
>座標ファイルをJWW図面に反映させるには
>JWWを起動する
>その他→座標ファイル→ファイル名設定→
>ファイル選択画面が表示されるので、目的の座標ファイルを選択する。
>作図したい位置をクリックする。
>ファイル→名前を付けて保存 
>これでJWWファイルの作成終了です。

ありがとうございます。
間接的なやり方ですが、目先の目的は達成できそうです。
ただ、JWWを全く使わないで図面を作りたかったので
ダイレクトにCADファイルを生成したかった。

直に図形からGコードを作るソフトも作っているのですが
WindowsのPAINTほどの機能にするには大変なので

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239061205.au-net.ne.jp>
・ツリー全体表示

Re:Rubyでの参考例
 BOB  - 17/8/3(木) 13:42 -
返信ありがとうございます。

>ヘッダー情報をまるまるコピーして
各要素のサイズも書かれていないのでHeaderサイズも解らないため
どこまでがHeaderか解りません。

紹介いただいたことをすると何が判明するのでしょうか?
JW_CADを使わず、JW_CADファイルを生成したいことが
最終目的です。

画像をALT+Print Screenでクリップ
    VV
画像処理ソフトでペースト/線分化
    VV
JWWファイル化(JW_CADで編集可能)
    VV
NCVCでGコード化

よろしくお願いいたします。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239061205.au-net.ne.jp>
・ツリー全体表示

Re:JWWデータフォーマットについて
 BOB  - 17/8/3(木) 16:01 -
ソフトを修正し、各開始/終了座標をテキストファイル化し
ご指導通り操作して、取り込みや既存データのマージもできました。
ありがとうございました。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239061205.au-net.ne.jp>
・ツリー全体表示

Re:Rubyでの参考例
 kojima  - 17/8/3(木) 19:17 -
▼BOBさん:
>返信ありがとうございます。
>
>>ヘッダー情報をまるまるコピーして
>各要素のサイズも書かれていないのでHeaderサイズも解らないため
>どこまでがHeaderか解りません。

JWWのヘッダー情報は可変長です。
(メモ文・レイヤ名・グループ名・SXF線種が含まれている為)


>JW_CADを使わず、JW_CADファイルを生成したいことが
>最終目的です。
>
>画像をALT+Print Screenでクリップ
>    VV
>画像処理ソフトでペースト/線分化
>    VV
>JWWファイル化(JW_CADで編集可能)
>    VV

前準備
1、サンプルのJWWファイル(samp.jww)を作成しておいてください。
2、画像→線データ から、JWWの座標ファイル(samp.txt)を作成してください。

以下が、samp.jwwのヘッダー情報をコピーして、samp.txtの線データを作図したJWWファイル(temp.jww)を作成するRubyスクリプト文です。
(ファイル名は、jww_creat.rb とでも付けて、samp.jwwとsamp.txtのあるフォルダに保存してください


#!ruby -Ks
path=Dir.pwd
i=0
data=""
begin
open("samp.jww","rb"){|f|data=f.read}
rescue
STDRR.puts("samp.jwwが作成されていません")
exit
end
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
0.upto(15){|i1|
i += 20
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
data2=data[0,i] #dataのヘッダー情報をdata2にコピーする
n=0
begin
open("samp.txt","r"){|f|
while f.gets
xy=$_.split
if xy[0]=~/^\d|^-/
n += 1
end
end
}
rescue
STDRR.puts("samp.jwwが作成されていません")
exit
end
if n<(255*256+255)
data2<<[n].pack("S")
else
data2<<[255*256+255,n].pack("SL")
end
pl=0 #曲線属性番号
lt=1 #線種
lc=2 #線色
lw=0 #線幅
ly=0 #レイヤ
lg=0 #レイヤグループ
z=0 #属性
#sx:線の始点X座標 sy:線の始点Y座標 ex:線の終点X座標 ey:線の終点Y座標
i2=0
open("samp.txt","r"){|f|
while f.gets
xy=$_.split
if xy[0]=~/^\d|^-/
i2 += 1
if i2==1
data2<<[255*256+255,b_n,8].pack("SSS")
data2<<"CDataSen"
else
data2<<[128*256+1].pack("S")
end
sx,sy,ex,ey=xy
data2<<[pl,lt,lc,lw,ly,lg,z,sx,sy,ex,ey].pack("LCSSSSSdddd")
end
end
}
bl_n=0 #ブロック定義数
gz_n=0 #画像同梱数
data2<<[bl_n,gz_n].pack("SL")
open("#{path}/temp.jww","wb"){|f|f.write data2} #temp.jwwの作成
system("start c:/jww/jw_win #{path}/temp.jww") #temp.jwwを開く

引用なし

パスワード


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

Re:JWWデータフォーマットについて
 mirror  - 17/8/3(木) 21:33 -
▼BOBさん:

一つの例ですが
https://youtu.be/CpPUFmEgzIY

1.>画像をALT+Print Screenでクリップ
2.>画像処理ソフトでペースト/線分化
3.>JWWファイル化(JW_CADで編集可能)
4.>NCVCでGコード化

1.は、本論とは無関係なので割愛します
2.を、inkskapeで行っています
3.は、inkskapeからコピーしたクリップボードデータを
Jw_cad用の中間ファイル形式として座標ファイルにしています

>JW_CADを使わず・・・

Jw_cadを使わないというのは、想定外でしたが
そのまま、Jw_cad形式データを作成することも勿論可能です
他の使い勝手の観点から、私は敢えて座標ファイルにしています

できないことはないだろう、という例ですので
どのように実装できるかは、人それぞれだろうと思います
頑張ってください

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Ed...@FLA1Aad117.koc.mesh.ad.jp>
・ツリー全体表示

Re:JWWデータフォーマットについて
 BOB  - 17/8/10(木) 22:07 -
▼mirrorさん:

>>JW_CADを使わず・・・
>
>Jw_cadを使わないというのは、想定外でしたが
>そのまま、Jw_cad形式データを作成することも勿論可能です
>他の使い勝手の観点から、私は敢えて座標ファイルにしています

ありがとうございます。
最終目的は、撮った写真から切削データ(Gコード)を作成し
MACH3制御でCNCルーター/レーザーカッターを使って切削することです。

例えば、鍵の写真を撮って、それを基にスペアキーを作るようなこと
過渡的には手で座標を拾いますが、画像処理で特徴抽出して自動認識させ
手作業を省いてGコード作るまでを計画しています。
補正するのに中間ファイルとしてJWWファイルを出力して
CADで微調整できるようにしたいのです。

CADを使わない方法でGコードを作るものを作りましたが
微調整や図面合成などを考えるとCADの中間ファイルを作れば
簡単だと考えたからです。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239060057.au-net.ne.jp>
・ツリー全体表示

Re:Rubyでの参考例
 BOB  - 17/8/10(木) 22:25 -
▼kojimaさん:
ありがとうございます。

ソースを解析してWindowsソフト化して行きたいと思います。

また、CADファイルを読込み、切削データ(Gコード)にする目的です。
出回っている変換ソフトもありますが、生成データが、無料バージョンの
MACH3で扱えないサイズまで大きくなるので、サブルーチンを活用して
小さなGコードを生成したいのです。
それには、CADファイルを読込み、座標データ化するため、CADファイル
の構造を知りたいのです。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0@KD111239060057.au-net.ne.jp>
・ツリー全体表示

Re:JWWデータフォーマットについて
 mirror  - 17/8/11(金) 8:02 -
▼BOBさん:

>それには、CADファイルを読込み、座標データ化するため、CADファイル
>の構造を知りたいのです。

>CADを使わない方法でGコードを作るものを作りましたが
>微調整や図面合成などを考えるとCADの中間ファイルを作れば
>簡単だと考えたからです。

一般的に、CADソフトではベクトル(座標)データを扱います
ドローソフトなどは、ラスター(ドット)データを得意とします
ベクトルデータの場合、直線・円・他を違うGDI関数で表示しますが
ラスターデータでは、bmp関数でドットの状態のみで描画していますので
そのデータ構造は、とても簡単なもので済みます
その辺りの理解ができていれば、Jw_cadデータの構造も判ります

前出のinkscapeには、ラスター/ベクター変換が実装されており
且つ、dxfファイル(txtファイル形式のベクトルデータ)の出力もあります
今回のような場合、Jw_cadのデータ構造が判りにくいのであれば
dxfファイルの書式(txt)を調べ、それを編集に使うようにしたほうが
良さそうだと思います

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edg...@FLA1Aad117.koc.mesh.ad.jp>
・ツリー全体表示

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>
・ツリー全体表示

Re:JWWデータフォーマットについて
 マチャプチャレ  - 17/8/11(金) 15:56 -
▼BOBさん:
>微調整や図面合成などを考えるとCADの中間ファイルを作れば
>簡単だと考えたからです。

mirrorさんの薦めるDXFも良いですがSFCもテキストで簡単ですよ。

他のCADですがCADデータを加工するプログラムを作る時にSFCを中間ファイルにしたら楽ちんでした。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36@248.251.149.210.rev.vmobile.jp>
・ツリー全体表示

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

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