2012-10-05 67 views
0

對於AutoCAD 2010使用ObjectARX(C++),AutoCAD實體是否可以序列化?AutoCAD實體是否可以序列化?

我們需要將序列化的實體保存在數據庫(Oracle,PostgreSQL等,而不是AcDbDatabase)中的字段中。 It'OK如果你告訴我如何將它們保存在磁盤上,這樣的事情:

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

感謝

回答

3

簡短的回答是「不」。 AutoCAD數據庫對象包含對其他對象的引用,因此您不能反序列化離散對象,也不能確保所有引用對象的存在。

從技術上講,您可以通過實現包含必需的對象間引用管理基礎結構的自定義AcDbDwgFiler,然後通過AcDbObject :: dwgOut()將對象序列化到文件管理器來完成整個互連對象層次結構的描述,通過AcDbObject :: dwgIn()反序列化它們。但是當你將整個數據庫序列化爲一個.dwg文件時,你基本上已經複製了AutoCAD已經做的事情,所以它在大多數情況下都會失敗。

0

同意Owen,但如果不想將數據保存在dwg文件中,可能會有其他解決方案。 注意ObjectArx支持MFC,MFC有它自己的序列化機制。您可以從AcDbEntity和MFC CObject中派生實體。使用MFC的機制來序列化您的數據。 如果您覆蓋了MFC的序列化方法,您可以輕鬆地將數據序列化到數據庫中。 爲此,您必須在dwgin和dwgout中調用MFC序列化函數。

相關問題