DWGdirectの話。
DWG内のサムネイルを何とかして残しておく方法はないか。
この命題に一応の決着がついたので記しておく。
DWGdirectライブラリを使った自作アプリで、
任意のDWGを開いて、何らかの編集をして保存する。
これによって、DWG内のサムネイルが消えてしまっていた。
サムネイルの絵が変更できなくてもいいから、
せめて最初の状態が保持できないかということ。
キーワードをあげておこう。
1.setRetainOriginalThumbnailBitmap
2.writeFile の弟4パラメータ
3.gsBitmapDevice
3.が難関だった。
ExSystemServices と ExHostAppServices を継承したクラスで、
gsBitmapDevice をオーバーライドする必要があった。
関数内では、WinGDI.gs を loadModule する。
描画系のモジュールを読み込む処理。
しつこいくらいにQ&Aを見て、ようやくわかったこと。
1つの問題がクリアになり、少し晴れがましい気分だ。
問題は山積みだけど。
サンプルコードをアップしておく。
OdRxObjectImpl<COdvServices> svcs;
…
OdDbDatabasePtr pDb = svcs.createDatabase( false, OdDb::kMetric );
pDb->setRetainOriginalThumbnailBitmap( true );
pDb->readFile( OdString(szDwgFile), false, Oda::kShareDenyNo );
…
pDb->writeFile( &fb, OdDb::kDwg, pDb->originalFileVersion(), true );
OdGsDevicePtr COdvServices::gsBitmapDevice()
{
OdGsModulePtr pGsModule = ::odrxDynamicLinker()->loadModule(_T("WinGDI.gs"));
return pGsModule->createBitmapDevice();
}