Тема: Редирект dwgIn dwgOut другим объектам
Есть у меня объект
AcDbEntityContainer : AcDbEntity { init( AcDbEntity* pEnt ); AcDbEntity* pEnt; dwgInFields( filer ); dwgOutFields( filer ); } AcDbEntityContainer::init( AcDbEntity* pOrigEnt ) { pEnt = pOrigEnt->clone(); //считаем что pOrigEnt - не комплексная (удаление если pEnt != NULL - опускаю) }
Все transformBy moveGrip getOsnap getGrip worldDraw- редиректим pEnt
AcDbEntityContainer::dwgOutFields( filer ) { filer.write( pEnt->isA()->name() ); pEnt->dwgOut...(filer); } AcDbEntityContainer::dwgInFields( filer ) { str className; filer.read( className ); pEnt = classDictionary->getAt(className)->create(); //создаем объект по имени класса через AcRxClass pEnt->dwgIn( filer ); }
Такая фенька работает. Т.е. получаем контейнер-обертку для entity.
Внутри документа опять же все работает.
Но! Если копировать объект между базами, то все проходит без ошибок с eOk. Как только объект переезжает в другую базу, то информация теряется... Например была окружность AcDbCircle - она переходит в окружность с конструктором по умолчанию... Т.е. позиция (0,0,0) радиус 1... хотя dwgIn и dwgOut в редиректе отрабатывают с eOk. Т.е. получаем что на каком-то этапе в иерархии dwgIn dwgOut обрывается без сообщения об ошибке. При этом если в след за pEnt->dwg...(filer) - записывать и считывать еще какие-нибудь данные, то они считываются/записываются нормально между базами.
Почему так происходит? Я так понимаю, что dwgIn dwgOut внутри - должны просто читать/писать информацию из filer-a, но получается что там происходит еще что-то типа сразу пытаются оттранслироваться ссылки на слой, тип линий и т.п. - объект переехал из базы в базу - допустим не может найти ссылку на свой слой и... информация убивается либо дальше не читается...
Кто-нибудь может объяснить что еще происходит внутри dwgIn OutFields что приводит к потери данных объекта??? (при этом сам объект как это не парадоксально рисуется, но по дефолту) :(