サイトアイコン CAD日記

CAD日記読者からの質問にCAD開発歴25年のおいらが回答してみる

Twitterのダイレクトメッセージで、CADの性能アップに関する質問が届いた。2次元CADの開発に25年もの長きあいだ関わり、今では開発者とクソ管理職のあいだを取り持つだけの便利屋になってしまったが、まぁそこそこの経験と実績があるから、わかる範囲で回答してみるという企画だ。

・2次元CADの描画高速化
CADは昔からC++で組むという慣習がある。アンマネージドで取っ掛かりは悪いけど、速いプログラムを書くならCやC++というのは当たり前であり、今でも変わっていないこと。残念ながら描画まわりは専門外だが、キーワードくらいは思い浮かぶので書いてみる。ずばり、ダブルバッファリングが有効。描画オブジェクトを一つずつ処理するのでなく、画面全体分の描画データを作って一気に描画させるという技術。一朝一夕に組めるものではないが、昔ながらの描画ルーチンを「くるむ」形でコーディングできるはず。GDIっていう古きよきWindowsの描画システムも捨てたもんじゃないってことがわかる。少し前に流行ったGDIPlus、Direct2D、OpenGLなんて技術もいいんだけど、GDIからの移行には大きな労力が必要。Direct2Dについてはプロトタイプ作って速度を計ってみたら、言うほど速くならなくて逆に遅くなるケースがあったりして、労力に見合わないからやめたという経緯あり。3次元だったら新しい技術を取り込むのもありだけど、2次元CADとなると容易でないからねぇ。

・64bit対応
ポインターの型が32bit整数から64整数になるとかなんで、コンパイラが主要なところは見つけてくれる。見つけてくれないところは地味にデバッグして調べるしかない。バグを出し切ったと思っても、結構残っているものでリリース後のバグがそこそこ出る。ウチのCADの場合は、32bit版を残しつつ64bitもリリースして、インストール時にどちらを入れるかを決めさせた。10年ほど前はまだ32bitOSを使っている人が多数いて、64bitOS使う人が少なかったから。今ならほぼ全員64bitOSを使っているから、64bit版で1本化してもよいだろう。
なお、ネイティブ64bit対応したCADは32bit版より速くなることはない。若干遅くなるくらいに考えておいたほうがよい。もちろん巨大データを扱う場合で、メモリーが足りなくなってスワップして激遅になることがなくなるから、そんな面では速くなる。最大のメリットはアプリが大量のメモリーを使えるようになること。32bitならたったの2GBしか使えないところ、64bitなら実装しているメモリーの範囲内で無制限に使えるようになる。2次元CADの図面データは大きくて10MB程度だから普通はいいんだけど、たまに100MB超えなんて図面を作っているユーザーがいるからそんなときは64bitの恩恵を受けられる。あとはラスターか。CADでラスターデータを扱うなら、高精度の画像データを扱うために大量のメモリーが必要になるから64bit化は必須要件。地道にソースコードを直すことが唯一の対策なり。

・DXF,DWGコンバータの変換精度(Teigha使用)
DXF,DWGコンバータはおいらの専門。文字の幅と寸法が基本的なところで高い壁があって、Teighaから得られるこれら情報を自前のCADのオブジェクトに柔軟に変換するべし。Teighaが勝手に自分のCADのデータに変換してくれるわけではないので、いかにDXF,DWGフォーマットの特徴を知るかがカギ。文字はAutoCADストロークフォントという独自フォントがクセモノなので、これをTrueTypeや自分とこのオリジナルフォントにする時点で完璧はありえない。それなりな変換ができればいいんじゃないかな。寸法のデータ構造は超やっかい。AutoCADの長い歴史があるから、ホントよくわからん仕様が多くて苦労したもんだ。AutoCADでデータを作ってTeighaで読み込んでみてってことの繰り返しで傾向がつかめるはず。幾何図形ならSPLINE、ELLIPSE、MLINEなんてところがおもしろいところ。BLOCKは誰もが使うデータ構造なので完全にマスターしておいたほうがよい。MTEXT、MLINEなんてクソな仕様があるので適度に変換できればよい。近頃ではPDFアンダーレイ、IMAGE、それからXCLIPによる切り取りなんて興味深い構造があるので、これに対応できていれば上級編クリアかな。Teighaはドキュメントがすべて英語だから、英語を根気よく読むことが必要。またTeighaの掲示板は同じ問題に直面しているユーザーがたくさん参加しているので、つまったら掲示板を見るべし。誰もそこに上げていないトラブルに遭遇したら、つたない英語で投稿して回答を得てみるのも重要。

・GPUの活用
グラボっすか。。ここはわからんちん。Windows Vistaが2次元描画にグラフィックボードの性能を一切使わないなんてクソ仕様にしたときは遅くなったと騒ぐユーザーがいっぱい湧いてきてけっこうな問題になった。そこから前述のダブルバッファリングを採用して解決した。つまり、イマドキのWindowsくんがそれなりにグラフィックボードを活用してくれているのでアプリ側がそれを意識することはないという認識。きっと、アプリからダイレクトにGPUを扱うためのライブラリがあるんだろうが、3次元CADのようなアプリで必要になるくらいなんじゃないかな。AutoCADやSOLIDWORKSはグラボの推奨型番があって、それに見合わない場合は警告出す。2次元CADだったらこのへんはいらないんじゃないかな。

・Windows10の機能アップデートへの対応
1809が出たということもあって旬な話題だけど、2次元CADには関係ないかな。1809がOS側の設定で、アプリでで表示する文字のサイズを変えられるようになったらしく、それをやられちゃうとアプリとして都合が悪いから、それやっちゃうとダメだよなんて制限事項にしたという話は聞いている。詳細は不明なのでおいおい明らかにしていくつもり。Windows 7はもうじきサポート切れになって、8.1は中途半端なしろものなので、Windows 10は開発環境としてもユーザーの利用環境として完全な標準となりつつある。半年に1回のフィーチャーアップデートやっかいだけど、致命的な問題をアプリ側には与えないから、軽くテストして問題なければいいんじゃないかね。

平日の夜、酒を飲んでないからブログでも書いてみようと思い書きはじめてみたら、ことのほか調子に乗ってきたもんだからけっこうな長文を書いてしまった。これで誰かのお役に立てたなら幸いなことだ。

モバイルバージョンを終了