Загружаю .dwg файл, добавляю новые сущности, но при записи в файл или поток сохраняются только исходные сущности (те которые были добавлены после загрузки, игнорируются). SaveToStream() нужен для хранения изображения в БД, причем интересует именно сохранение в CAD-овские форматы, а не в метафайлы и .bmp.
Такая ситуация наблюдается при KeepOriginal = true.
При KeepOriginal = false сохраненный файл вообще не считывается.
Метод Assign() работает корректно, хотя, судя по исходникам, процесс присваивания тоже реализован через поток.
Вопрос в следующем: для сохранения новых сущностей обязательно нужен VCL CAD Export, или просто не учтен какой-то момент?
Вот код тестового примера:
Code: Select all
TsgDrawingNavigator *PaintBox;
TsgCADImage *CADImg;
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
PaintBox = new TsgDrawingNavigator(this);
//...
KeepOriginal = true;
}
//--------------------------------------------------------------------------
void __fastcall TMainForm::BarBtn_OpenClick(TObject *Sender)
{
PaintBox->BeginUpdate();
PaintBox->LoadFromFile(OpenPictureDialog->FileName);
CADImg = (TsgCADImage *)(PaintBox->Picture->Graphic);
PaintBox->EndUpdate();
}
//--------------------------------------------------------------------------
void __fastcall TMainForm:::BarBtn_AddLine(TObject *Sender)
{
TsgDXFLine *Line;
Line = new TsgDXFLine();
Line->Point = MakeFPoint(0, 0, 0);
Line->Point1 = MakeFPoint(100, 100, 0);
AddEntity(CADImg->Converter, (TsgDXFEntity *)Line);
CADImg->GetExtents();
}
//---------------------------------------------------------------------------
void TMainForm::AddEntity(TsgDXFConverter *AConverter, TsgDXFEntity *AEntity)
{
AConverter->Sections[csEntities]->AddEntity(AEntity);
if (AConverter->OnCreate)
AConverter->OnCreate(AEntity);
AConverter->Loads(AEntity);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::BarBtn_TestStream(TObject *Sender)
{
TMemoryStream *Stream = new TMemoryStream();
TsgDWGImage *DWGImage = new TsgDWGImage();
((TsgDWGImage *)CADImg)->SaveToStream(Stream);
Stream->Position = 0;
DWGImage->LoadFromStream(Stream);
Image1->Picture->Assign(DWGImage); //добавленная линия не отображается
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::BarBtn_TestAssign(TObject *Sender)
{
TsgDWGImage *DWGImage;
DWGImage = new TsgDWGImage();
DWGImage->Assign(CADImg);
cxImage1->Picture->Assign(DWGImage); //все ок
}
//--------------------------------------------------------------------------