ブレークポイントに斜線

先日まで普通にデバッグできていたのに、突然ブレークポイントに斜線が出てブレークポイントで止まらなくなった(無効状態?)。特に何かやった記憶はない

斜線の入ったブレークポイントの上にマウスカーソルを置くと、”breakpoint does not belong to any class”というメッセージが表示された。意味が分からない。他のプロジェクトも試したが、同じ状態になる。

検索をかけて、最終的にここから、FileメニューのInvalidate Caches/Restartを実行すると、ブレークポイントが正常になった。

そういえば、AndroidStudioが起動途中で止まったことがあったなぁと思いだした。その後は正常にコンパイルと普通の実行はできていたので気にしてなかった。

JW_cad Viewer、SXF寸法に対応(仮)

JWW形式のSXF寸法図形の仕様を見て、素直に思うままに JW_cad Viewer に実装してみた。普通の寸法線と半径は表示できた。ただ、SXF寸法を使った図面が手元にあまりなくて、十分確認できていない(オプションの意味がまだ分からない)。

はまったところは、背景が白で線色も白だったので、何も表示されなかったところ。JW_cadのSXF読み込みオプションに「背景色と同じ色を反転する」とあるが、そういうことかと納得。このオプションはJWWファイルに保存されていないようなので、別途設定を設けた。もしかしたら、探し方が悪いだけで、このオプションはJWWファイルに記録されているかもしれない。あったほうがファイル受け渡しでトラブルが少なくなるので。

JW_cad Viewer公開したよ

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のシリアライズについては、面白いことが分かったので、また何か書くかもしれません。