SaveToStream()

Обсуждение вопросов импорта поддерживаемых форматов
Post Reply
andrey-k
Posts: 8
Joined: 27 Sep 2011, 00:36

SaveToStream()

Post by andrey-k » 30 Sep 2011, 13:49

Здравствуйте!

Загружаю .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);  //все ок
}
//--------------------------------------------------------------------------

support
Posts: 3254
Joined: 30 Mar 2005, 11:36
Contact:

Re: SaveToStream()

Post by support » 30 Sep 2011, 14:29

Здравствуйте.
В настоящее время CAD Import VCL не поддерживает экспорт в DWG формат. Такой функционал планируется добавить в будущем. Используя текущий релиз вы можете выполнять сохранение чертежей в DXF файлы или поток.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

andrey-k
Posts: 8
Joined: 27 Sep 2011, 00:36

Re: SaveToStream()

Post by andrey-k » 01 Oct 2011, 01:33

C .dwg все понятно. Заменяю TsgDWGImage на TsgCADdxfImage. Беру исходный файл в формате .dxf, загружаю (BarBtn_OpenClick()), добавляю линию (BarBtn_AddLine()), тестирую... Присваивание через поток (и сохранение в файл SaveToFile()) по-прежнему игнорирует добавленные после загрузки сущности...
И еще один вопрос. Если все-таки возможно сохранять новые сущности без TsgCADtoDXF, будут ли сохраняться при этом TsgDXFImageEnt с растровыми изображениями?

Заранее спасибо.

support
Posts: 3254
Joined: 30 Mar 2005, 11:36
Contact:

Re: SaveToStream()

Post by support » 03 Oct 2011, 13:19

Здравствуйте.
Приношу извинения за не совсем корректный предыдущий ответ. Библиотека CAD Import VCL позволяет выполнять импорт файлов и экспорт в растровые форматы и метафайлы. Экспорт в DXF или другой векторный формат требует использования библиотеки CAD Export VCL. Для экспорта в DXF нужно использовать запись в поток/файл класса TsgCADtoDXF.
TsgDXFImageEnt объекты не сохраняются с растровыми изображениями. Растровое изображение загружается по пути, сохранённому для ImageEnt примитива DWG/DXF чертежа при импорте файла.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Post Reply