0

AutoCAD 2010 の ObjectARX (C++) を使用して、AutoCAD エンティティをシリアル化できますか?

シリアル化されたエンティティをデータベース (AcDbDatabase ではなく、Oracle、PostgreSQL など) のフィールドに保存する必要があります。次のように、ディスクに保存する方法を教えていただければOKです。

AcDbEntity * entity;
...
std::ofstream ofs("c:\\filename.fil", std::ios::binary);
ofs.write((char *)(entity), sizeof(entity));
ofs.close();

ありがとう

4

2 に答える 2

3

短い答えは「いいえ」です。AutoCAD データベース オブジェクトには他のオブジェクトへの参照が含まれているため、参照されているすべてのオブジェクトの存在を確認せずに個別のオブジェクトを逆シリアル化することはできません。

技術的には、必要なオブジェクト間参照管理インフラストラクチャを含むカスタム AcDbDwgFiler を実装し、AcDbObject::dwgOut() を介してオブジェクトをファイラーにシリアル化し、AcDbObject を介してそれらを逆シリアル化することにより、相互接続されたオブジェクトの階層全体に対して説明することができます。 ::dwgIn()。しかし、データベース全体を .dwg ファイルにシリアル化するときに AutoCAD がすでに行っていることを本質的に複製することになるため、ほとんどの場合、目的を達成できません。

于 2012-10-18T04:59:05.857 に答える
0

Owenに同意しますが、データをdwgファイルに保存したくない場合は別の解決策があるかもしれません. ObjectArx は MFC をサポートしていることに注意してください。MFC には独自のシリアル化メカニズムがあります。AcDbEntity と MFC CObject の両方からエンティティを派生させることができます。MFC のメカニズムを使用してデータをシリアル化します。MFC のシリアル化メソッドをオーバーライドすると、データをデータベースに簡単にシリアル化できます。これを行うには、dwgin と dwgout 内で MFC シリアル化関数を呼び出す必要があります。

于 2013-03-24T14:36:38.357 に答える