Androidアプリを公開しました。JW_cadというWindows用のCADのViewerで、JW_cad Viewerと言います。そのままですね。製作には、主に休日を使い、約一ヶ月かかりました。
作った理由は、
- グラフィック関係のアプリが作りたかった。
- CADみたいな線画が好き。
- DXFは、すでにライブラリがあるので面白みがない。
- DWGは、有料のライブラリがないとつらい。そもそもAutoCADが手元にない。
- JW_cadのデータ構造は、ありがたいことに公開されている。ユーザーも日本では多い。
- JW_cadのデータ構造を理解すると、他のプログラム作成に応用が利く。
- JW_cadの は、保存形式としてMFCのシリアライズを利用している。MFC以外の環境で、MFCでシリアライズされたオブジェクトを読むことに興味があった。
というような感じでJW_cadのViewerを作ることにしました。一番の理由はMFCのシリアライズに対する興味です。
アプリの作成は、苦労しました。苦労した点は、
- データ形式の仕様が、保存部分のソースコードの抜粋で、わかりずらい(と思うけど、かえって文章でかいてあるよりいいのかな?。
- C++のunsignedな数値が、いたるところに使ってある(ということが問題になるとは予想外だった ・ ・ ・ )。
- JW_cad、変数使いまわし多すぎ問題(その割に、ベースクラスの使わないメンバが多い。継承されるクラスは少ないから、ベースクラスをもっとコンパクトにすればよかったのに)。
- ソリッド図形の謎。
- 文字クラスが画像という不思議(JW_cadを使っていれば既知なんだけど、あらためて疑問)。
作成方法としては、まずWindows上でバイナリデータ解析をバイナリエディタでしつつ、C#でプロトタイプ作りをしました。C#でプロトタイピングしたので、Xamarinでアプリを作ろうかと少し思いました。ですが、Xamarinは開発環境の動作が重いので苦労すると思い、C#からkotlinに変換しました。
MFCでシリアライズされたオブジェクトの読み込みは、こことこことマイクロソフトのテクニカルノートが参考になりました。オブジェクト(ポインタ?)の読み込みは、テクニカルノートを読んで、バイナリの解析(オブジェクトのIDが、想像していたものとちょっと違って悩んだ)。
MFCのシリアライズについては、面白いことが分かったので、また何か書くかもしれません。