Можно ли сериализовать объекты AutoCAD?

С помощью ObjectARX (C ++) для AutoCAD 2010 можно ли сериализовать объекты AutoCAD?

Нам нужно сохранить сериализованный объект в поле в базе данных (Oracle, PostgreSQL и т. Д., А не AcDbDatabase). Хорошо, если вы покажете мне, как сохранить их на диск, примерно так:

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

Спасибо

0

Решение

Короткий ответ — нет». Объекты базы данных AutoCAD включают ссылки на другие объекты, поэтому вы не можете десериализовать отдельные объекты, не обеспечив также наличие всех ссылочных объектов.

Технически то, что вы описываете, может быть сделано для всей иерархии взаимосвязанных объектов путем реализации пользовательского AcDbDwgFiler, который включает в себя необходимую инфраструктуру управления ссылками между объектами, затем сериализацию объектов в файлер с помощью AcDbObject :: dwgOut () и десериализацию их через AcDbObject :: dwgIn (). Но в конечном итоге вы по сути дублируете то, что уже делает AutoCAD при сериализации всей базы данных в файл .dwg, поэтому в большинстве случаев это не соответствует цели.

3

Другие решения

Согласитесь с Оуэном, но может быть другое решение, если вы не хотите сохранять свои данные в файле DWG.
Обратите внимание, что ObjectArx поддерживает MFC, MFC имеет собственный механизм сериализации. Вы можете получить свою сущность как из AcDbEntity, так и из MFC CObject. Используйте механизм MFC для сериализации ваших данных.
Если вы переопределите методы сериализации MFC, вы можете легко сериализовать данные в базу данных.
Чтобы сделать это, вы должны вызвать функции сериализации MFC внутри dwgin и dwgout.

0