Jw_cad 8

Jw_cadがこの1月に、約3年振りの改修が行われて、
Version 8.00となったことを今知った。
http://www.jwcad.net/
変更点のうち、興味深いのは以下3点だ。
・画面表示にDirect2Dを使用するようにした。
・Windows8 のタッチ操作に対応した。
(ピンチまたはストレッチによるズーム、スライドによるスクロール)
・インストーラーに InstallShield を使用するようにした。
ここしばらく改修されていなかったから、開発がストップしたのでは
ないかと勝手に考えていたが、ちゃんと続けていたのだ。
Direct2Dに対応するってことだけでも、たいへんな労力であり
時間をずいぶんかけたのではないかと思う。
掲示板をみると、Direct2D対応が原因の問題がいくつか報告されて
おりまだ安定版ではないのかな。
MS-DOSから続くCADなわけで、このCAD業界においては
大きな存在感を維持し続けている。
今回はデータバージョンに変更がない模様。

JacConvert

Jw_cadネタなんて、何年ぶりだろうか。
ペーパーモデル化ツールでググって、皆さんどういうことを言っているのだろうかと
市場調査していたら、JacConvertというソフトに行きついた。
ペーパー空間のDWGをモデル空間にして、JacConvertでJWWに書き出すようだ。
SXFやPDF、EMFでの書き出しができるという点も優れている。
JWWの最近のニュースでは、Ver7でデータ形式が変わったこと。
図面中にビットマップを配置したときに、JWWファイル内にビットマップを
同梱できるようになった。
ファイルが複数に分かれてしまうことのデメリットを解消する、素晴らしい仕様だ。
ところがだ。
同梱する際に、ビットマップをそのまま入れたらファイルが巨大化することは避けられない。
7.00においてgzipで圧縮する仕様だったのが、7.02でそのまま入れるように
仕様変更が行われた。
おそらく圧縮アルゴリズムだか、圧縮ユーティリーを使用するための権利で
もめたのだろう。
フリーソフトであることが裏目に出たものと思われる。
これは、まったくの想像で言っていることなので、事実と異なる場合は申し訳ない。
話を戻してJacConvert。
MS-DOSの時代からの長い歴史、今でもこまめに修正が行われていること。
2,500円という低額で購入できることも含めて、たいへん好印象のコンバータだ。
どこかの5万円もするソフトとは大違いだ。
個人で作っているもののようで、そこも好感が持てる。
もし、ペーパーモデル化ツールでJWW、JWC、SFC、P21での保存ができたらどうだろうか。
既存のDWG、DXF保存と合わせれば、2次元CAD図面交換形式のほぼすべてを
カバーできて、これ1本でユーザーが望む形を実現できるコンバーターになるであろう。
さらに、Visioをからませてみると面白い結果を生むだろう。
長期的視野で検討してみたいと思う。
Ver4か...。

Jw_cadのバージョン

Jw_cadのバージョンを調べる機会があったので、ここに記録を残しておく。
SolidWorksに続く第2弾というところか。
ただ載せてもつまらないので、表にしてみた。

AppVer. DataVer. Date   AppVer. DataVer. Date
2.30 230 2002/01/01 4.05a 351 2005/01/10
2.40 230 2002/04/30 4.10 351 2005/08/22
2.41 230 2002/05/04 4.10a 351 2005/09/01
2.42 230 2002/05/12 4.20 420 2005/11/24
2.50 230 2002/08/17 4.20a 420 2005/12/05
2.50a 230 2002/08/17 4.20b 420 2005/12/07
2.51 230 2002/09/06 4.20c 420 2005/12/08
3.00 300 2003/01/01 5.00 420 2006/01/01
3.10 300 2003/04/08 5.00a 420 2006/01/03
3.50 300 2003/09/28 5.00b 420 2006/01/09
3.50a 300 2003/10/14 5.00c 420 2006/01/11
3.51 351 2003/11/03 5.00d 420 2006/01/12
3.51a 351 2003/11/04 5.00e 420 2006/01/15
3.51b 351 2003/11/05 5.01 420 2006/06/11
3.51c 351 2003/11/06 5.02 420 2006/06/26
4.00 351 2004/01/03 5.02a 420 2006/06/26
4.00a 351 2004/01/11 5.10 420 2006/11/24
4.00b 351 2004/01/12 5.10a 420 2006/11/25
4.00c 351 2004/01/13 5.11 420 2007/01/08
4.01 351 2004/02/01 5.11a 420 2007/01/09
4.01a 351 2004/02/02 5.11c 420 2007/02/04
4.01b 351 2004/02/03 5.11d 420 2007/02/08
4.02 351 2004/05/10 5.11e 420 2007/02/12
4.02a 351 2004/05/23 5.20 420 2007/09/20
4.02b 351 2004/05/25 5.20a 420 2007/09/24
4.02c 351 2004/05/26 5.20b 420 2007/09/26
4.03 351 2004/09/05 5.20c 420 2007/09/27
4.03a 351 2004/09/06 5.21 420 2007/10/03
4.03b 351 2004/09/07 5.22 420 2007/10/08
4.03c 351 2004/09/09 6.00 600 2007/11/05
4.03d 351 2004/09/10 6.00a 600 2007/11/08
4.03e 351 2004/09/20 6.00b 600 2007/11/26
4.03f 351 2004/09/26 6.00c 600 2007/11/27
4.03g 351 2004/10/03 6.00d 600 2007/11/30
4.04 351 2004/12/11 6.00e 600 2007/12/02
4.05 351 2005/01/03 6.01 600 2008/01/03

情報ソースは、Jw_cad公式サイト
Version 0.01(1997/07/01)からの修正履歴
丁寧にを載せてくれているのはありがたい。
Ver2.30からにしたのは理由がある。
JWWのデータ形式が公開された最初のバージョンだから。

Jw_cad for Windows徹底解説―CAD&CG magazine (リファレンス編) (エクスナレッジムック―JW_CAD series)

Jw_cad for Windows徹底解説―CAD&CG magazine
(リファレンス編) (エクスナレッジムック―JW_CAD series)

  • 作者: Jiro Shimizu
  • 出版社/メーカー: エクスナレッジ
  • 発売日: 2002/02
  • メディア: ムック

本屋でこの本を見つけて、パラパラとめくったら、
何とJWWのデータ構造が掲載されていた。
JWCのデータ構造も同様の本に掲載されていたので、
いつかJWWに関しても本がでるだろうとは思っていたが、
ついに発売されたというわけだ。
(ちなみに、今はJWW6に対応した後続本が出ている。
 また、今では本を買うまでもなくここにデータ形式が載っている。)
迷いなく即購入して、しばらくはJWWデータ読み込み
プログラム作成に没頭したものだ。
C++のクラスでデータが定義されていて、シリアライズ
されているあたり、Windows版だなぁと実感した。
本に書いてあることを記述しなおすだけで、
データの読み込みができてしまったので、
ちょいと物足りなかった覚えがある。
直近のデータ構造変更は、2007/11/05のVer6.00。
Jw_cad公式サイトのバージョン履歴で確認して、ああVer6が出るんだなぁ
ということは比較的早いタイミングで把握していた。
ざっと内容を読んだが、データ形式が変わる
というようなことは書いてなかった。
過去の経験則から、データバージョンが切りの悪いところで
変わることを知っていたので、今回は変わらなかったのかと
思い込んだ。
しばらくしてから、Jw_cad Ver6で保存したJWWが読めない、
というユーザーからの報告で、はじめてデータバージョンが
変更されたことが判明した。
Jw_cadをダウンロードしてデータを保存して、
CADで読み込んでみれば、すぐにわかったことだ。
まったく油断していた。
そんなこんなで、JWWには長い歴史があり、
私の思い出も深いものがある。

Jw_cadの文字間隔

久しぶりのJw_cad。

今の最新バージョンは5.11d。

着実にバージョンを重ねている。

最近発見したJw_cadの特徴。

文字間隔は、半角文字と全角文字で異なる。

設定で、幅2、高さ2、間隔2としている場合。

・「aa」 という半角文字列において、aとaの間隔は1になる。

・「ああ」という全角文字列において、あとあの間隔は2になる。

・「aあa」という半角全角混在文字列において、

 aとあの間隔は1、あとaの間隔は2になる。

つまりJw_cadの文字間隔は、前の文字の実際の幅が採用されるわけだ。

全角だったら設定通り、半角だったらその半分になる。

少々特殊ではないだろうか。

いや、気がきいているとも言えるか。

半角全角混在時に、「半角文字同士の間隔」と「全角文字同士の間隔」が

同じでは、見栄えが悪くなるだろうから。

私の関わる某CADでは、文字が半角でも全角でも設定値通りの文字間隔が採用される。

これが当たり前だと思っていたから、この事実を知ったときは少々驚いたが、

よく考えてみたら、Jw_cadのほうが気がきいていて道理に合っている。

問題はデータ変換。

JWWを某CADデータに変換する際、文字間隔をどうすればよいか。

・半角だけの文字列なら、文字間隔を1/2すればよい。

・全角だけの文字列なら、そのままでよい

・半角全角混在なら...。

う~ん、文字列全体幅だけに着目するなら、全角文字数と半角文字数の

平均をとって、文字間隔を算出するという方法がある。

これだと、文字列全体幅はピッタリ合うが、個々の文字列の間隔は一律になってしまう。

文字を分割するしかなさそう。

半角から全角に変わる、あるいは全角から半角に変わるところで、

文字列を分離するということだ。

困った問題だ。

一方、AutoCADはどうか。

ダイナミックテキストは、文字間隔を設定できないので除外。

マルチテキストは、文字間隔が設定できる。

マルチテキストの文字間隔の設定値は、0.75~4となっている。

デフォルトは1で、この場合に文字間隔なしの状態。

これまた特殊ですな。

どういう意味合いなのかはともかく、半角全角混在文字に対して、

最大文字間隔である4という値をセットしたところ、

結果は、一律に文字間隔が広がった。

Jw_cad方式ではなく、某CADと同じ結果。

なるほどね。

Jw_cad の変化

前の記事を書いてから、4ヶ月が経過していた。

久しぶりにJw_cadのサイトをみたら、少しバージョンアップしてた。

5.00e の次は5.01で、今は5.02a 。

Ver6 にはならなかったか。

5.02a のリリース日が、6月末あたり。

それから3ヶ月ほどが経過している。

だから何だというわけではないけどね。

「最新バージョンの変更点」を見てると、バグフィックスが多い。

バグ報告があって、それを誠実に直してるんだろうな。

CADにバグはつきものだから、作者は大変だろう。

直近のバグで、DXF出力したときに編集中の図面でも

全角文字が化ける、というのがあった。

うん、うん、データ変換で変換元図面に影響が出てしまう

というのは、問題だな。

知らずに、大量の図面をDXF出力して、出力結果だけに

注力して満足していたら、元図面がいつのまにか文字化けしていた

ってことになるわけだから、まぁ大きな問題だ。

Jw_cadは、いまのところ大きな変化はないってとこか。

なんかおもしろい変化が起きないかなーと期待してるんだけどさ。

Jw_cadのバージョン

5.00eで、しばらく止まってる。

2006/1/15からだから、かれこれ4ヶ月ってとこ。

それまでは、かなり頻繁にバージョンアップしてたから、

どうしたんだろか。

作者には本業があるだろうから、そうそうJw_cadに関わって

ばかりはいられないんだろな。

Ver5でデータ形式が変わったもんだから、慌てて対応したんだけど、

その後あまり動きがないので、少々残念。

SXF対応というややこしい問題に手をそめ始めているようなので、

ややこしいことになっていないことを祈る。

SXFに完全対応して、OCF検定を受検するなんていうことには

間違ってもならないで欲しい。(個人的見解)

一部にそんな需要はあるだろうが、ハードルは高いし、

そんなことよりもJw_cad独自の良さを伸ばしてほしいところだ。

さて、そろそろ次のバージョンがリリースされるころだろうな。

Ver6になったりして。

新JWWデータ形式公開

待ってました!

Jw_cadの作者が公開してくれました。

http://www.jwcad.net/jwdatafmt.txt

独自にバイナリ解析するのはとても困難なので、

やだな~と気が重いところでした。

一つ重荷がとれて、ほっとしてます。

ザっとみたところでは、

線色定義、線種定義、寸法データの3つです。

SXFで使える線色、線種、寸法をJw_cadでも保持できるようになりました。

今までの寸法は、線と文字をセットにしただけのもので、

実質的に寸法とは呼べないものでした。

今回の拡張で、それなりの寸法になるのでしょう。

ということで、今回のデータ拡張はSXF対応だったわけですが、

これにより完全にSXFに対応したわけではありません。

作者のコメントは以下のようなものです。

「今後SXF入出力へ対応していくためのスタートラインに立てたとという内容にすぎません。」

日本の建設系2次元CADに大きな影響を与え続けるJw_cad、

その進化はとどまるところを知らないようです。

JWWデータ形式変更

Jw_cadがバージョンアップして、JWWのデータ形式が変更になりました。

最新バージョンは5.00eですが、データ形式が変更になったのは4.20からのようです。

変更点1:線種および線色の定義を拡大して、SXFで定義された線種、線色をそのまま読み込めるようにした。

変更点2:寸法図形の仕様を拡張して、SXFの直線寸法をそのまま読み込むようにした。

あと、ヘッダー情報が増えているらしい。

具体的にどういうふうに拡張されたのかの情報がないので、Jw_cadを操作してデータを作って、経験則で調べるしかないでしょう。いや、作者の方が公開するのを待つしかないかも。

今回の内部バージョン表記は、420です。230、350、351、420ときています。

近頃はどこのCADでもJWWを直接読み込む機能があるので、今回のデータ変更にも迅速に対応してくるでしょう。

うちのCADも早く対応しなきゃと思いつつ、先延ばし状態です。

それにしても、SXF対応のためにJw_cadがデータ変更してくるとは思いませんでした。独自路線を突っ走るJw_cadが、いくら国が主導で策定されたSXFとは言え、多少なりとも追随してくるとは、意外です。建設系のCAD業界において、じんわりとSXFが広がりつつあるようです。

JWWを読む

 やっぱりJWWについても書くことにしました。JWCに触れておいてJWWを語らなければ、片手落ちなのでは、と考えたので。今では、Windows版のほうが圧倒的にユーザー数が多くて、データの流通においてもJWWのほうが多いのではないかと思います。

 JWWは、シリアライズです。って、あまり日本語になってないですね。C++のオブジェクト指向を取り入れたデータ構造をしています。図形のデータ構造においては、色や線種のようなどんな図形も保持している情報をスーパークラスとして定義しておいて、これを継承したサブクラスとして線とか円弧とかいった図形のクラスがあります。そして、スーパークラスがCObjectを継承しているので、シリアライズに対応しているわけです。

 シリアライズって何?ということなんですけど、実は私もよくわかってないので調べてみました。

「ソフトウェア内部で扱っているデータを丸ごと、ファイルで保存したりネットワークで送受信することができるように変換すること。」(e-wordsより引用)

 そうですね。簡単にファイルから読み書きできるデータ構造ということです。C++では、>>とか、<<といった記号によって、ファイルを読み書きできます。例えば、CStringのような抽象的な型の変数でも、文字列の長さなんていう余計なことを考えずに、ファイルに保存できてしまうのです。

 あとは、CFile, CArchiveといったクラスを使って形を整えれば、シリアライズの完成です。本当にこれで読み書きできてるの?という感じでしたけど、出来てました。

 けっこう長くC++をやってますけど、シリアライズを知らなかったというのは、恥ずかしかったかもしれません。そういう意味ではJWWでよーく勉強させてもらいました。

 JWWファイルの先頭部分は、「JwwData.」というテキストコードが必ず入ってます。これによりファイルがJWWかどうかを判定するのです。ということで、先頭8バイトは固定のテキストコードが入っています。次の4バイトが、そのファイルのデータバージョンです。データの型としてはDWORD、つまり unsigned long です。これは、DWORDでそのままシリアライズされてるので、テキストエディタで見ても化けてしまって、何だかわかりません。値としては、230とか300とか351という数値が入っています。一番最初にJWWのデータ構造が公開されたときのバージョンが2.30でした。その後、3.00と3.51でデータ構造が変更されています。最新のJW_CADのバージョンは4.10ですけど、内部バージョンとしては351がまだ使われています。

 JWCと比べると、図形の種類が増えました。ブロック(シンボルとも呼ぶか)が出来て、寸法(線と文字をグループ化しただけですけど)が出来て、塗り潰しもあります。文字では、MSゴシックなどのWindowsフォントが使えるようになりました。色の種類は1種類しか増えてませんけど、色番号に対するRGB値を指定できるようになってます(たぶん)。

私はぜんぜん知りませんけど、天空図なんていう単語がデータ構造上に現れてきます。あとJW_CADでは、2.5次元というのが有名ですけど、これも強化されているのでしょう。

 ちょい余計な話ですけど、JW_CADという名前はアンダーバーを含んでます。本やWebなんかで、アンダーバーをハイフンで表現していたり、何もいれずにつなげていたりする場合がよくあります。まぁ、声に出す部分ではないので、どっちでもいいんですけど、個人的には気になってます。作者にどんな意図があって、アンダーバーで表現しているのかわかりませんが、ちょっとしか知らない人が、間違えるのは当然と言えば当然です。そんなことをいちいち指摘したいわけではありませんが、間違っている記述を見かけると、何やらモヤモヤが残り、気持ち悪いです。

 JW_CADは、DOS版からWindowsに移植され、ますますその存在感を高めています。使いやすい、タダ、この2点が継続される限り、この繁栄はずっと続くでしょう。

JW_CADデータを読む

 以前書いた「DWGを読む」に続いての、CADデータを読むシリーズの第2弾です。今回はJW_CADのデータ、つまりJWCとJWWのデータ構造についてです。

 JWCは、JW_CAD MS-DOS版のデータ形式です。JWWはWindows版のデータ形式です。Windows版が出たあとも、MS-DOS版は使われ続けています。DOS窓の中で動かすCADですから、この時代では非常に希少価値が高いです。JWC、JWWともにデータ構造は公開されています。エクスナレッジから出版されている本の中で、そのデータ構造が明確に紹介されています。最初にJWCについて書かれた本が出版されたときに、急いで本を買い、データコンバータを作ったものでした。もうずいぶん昔の話ですけど。

 さて、本題に入ります。JWCに関してから。4つのヘッダー部とデータ部で構成されてます。4つのヘッダー部は全て、テキスト形式で200バイト固定です。データ部はバイナリ形式で、レイヤや線や文字などの情報が詰め込まれてます。

 最初のヘッダー部の頭の部分、つまり、ファイルの先頭20バイトは以下のようになってます。

jw_cad(c)data…….a…m……………

縮尺、つまりスケールが実数で表現されてる場合は、以下のようになります。

jw_cad(c)data…….a.f.m……………

ファイルの先頭20バイトが、上記2つの形をしているかどうかで、JWCかどうかを判定できるということです。それから、ヘッダー部には線や文字などの図形の個数などが書かれてます。

 驚くべきは、図形の種類の少なさです。点、線、円弧、文字、この4つしかありません。シンプルです。こんなに単純でいいのですか、というほどシンプルです。円弧は、円や楕円、楕円弧も表現できますけど。

 寸法線がなくて、シンボル的な構造もないんです。最初にこれを知ったときは、驚いたものです。もちろん、複雑なデータ構造を持っていることのデメリットというのもあるでしょうから、単純であることはいいことなんですけど、いくら何でも単純過ぎるなー、というのが私の感想でした。

 JW_CADは、CAD市場においては長い歴史のあるフリーソフトですから、その存在感は大きいです。何とか、ビジネスに繋げられないかなーと、今現在も考えてるのですが、なかなかいいアイデアは出ないです。他CADデータとの変換プログラムを作るというのが、妥当な線なんですけど...。じっくりと時間をかけて、高品質なコンバータをつくってみようと、思ったりしています。JWWについては、また機会があったら、書いてみたいと思います。

JW_CAD

フリーのCADソフトです。1991年にDOS版としてリリースされて、2001年にWindowsに移植され今に至ります。無料なくせに高機能なので、ユーザー数は多いです。リリースされた当時は、CADの一般的な価格が100万を超えるのが普通だったところに、フリーですから知名度も高く、影響力が強いのです。

DOS版の開発が終了してから約5年経ちますが、いまだにDOS版を好んで使っているユーザーがいるそうです。DOS版とはいっても、Windowsでも動きます。俗に言う「DOS窓」です。人気があるのは無料だからというだけではありません。その操作性の高さが売りなんです。操作者の視点に立って、いかに手間をかけずに図面を書けるかということを追求しています。この思想は、他のCADに大きな影響を与えたはずです。

Windowsに移植する際には、その操作性を生かしたものにすべく苦労したようです。結果、Windowsアプリ的ではない、少し変わった操作感になってます。Windowsアプリの共通的な操作性などこだわらずに、独自路線を突っ走るという感じです。強い自信を感じます。

ファイルの拡張子は、JWC(dos)とJWW(win)です。他CADとのデータ交換を行う場合にもよく使われていて、AutoCADのDWGに次ぐ位置を占めています。もちろんデータ構造が公開されています。データ構造が非常に単純なので、データ交換時のトラブルが少ないというメリットがあります。

JW_CADのユーザー数は膨大なだけに、その一部を取り込むという戦略があります。無料なのでサポートがないでしょ?とか、過去の資産(JWC,JWW)を直接とりこめますよ?とか。期待できる市場です。