Загрузка файла из потока

Форум для вопросов по компоненту CADViewX (версии Lite и Pro)
Post Reply
Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Загрузка файла из потока

Post by Andrey » 08 Aug 2016, 13:33

Добрый день!

Загружаю DWG файл из потока следующим образом:
private void LoadDWGFromStream(Stream stream)
{
CADViewLib.DWGImage dwg_image = new CADViewLib.DWGImage();
IStream stm = new StreamWrapper(stream);
dwg_image.LoadFromIStream(stm);
axCADViewX1.CADImage = dwg_image;
}
Как загрузить DFX и PLT файлы понятно.

А вот загрузить PDF и растровые изображения(TIFF, BMP, JPG, PSD, GIF) не получается.
Как их можно загрузить из потока?

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

Re: Загрузка файла из потока

Post by support » 09 Aug 2016, 16:39

Здравствуйте, Андрей!

К сожалению, загрузка PDF и растровых изображений (TIFF, BMP, JPG, PSD, GIF) из потока не поддерживается. Указанные форматы можно загрузить только из файла.


Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Re: Загрузка файла из потока

Post by Andrey » 29 Aug 2016, 10:19

Добрый день!


Метод axCADViewX1.LoadFile(string file) делал активным лист DWG файла, который в автокаде ставили на вид, автоматом.


При загрузке файла из потока, axCADViewX1 загружает по умолчанию лист Model.
Если лист Model отсутствует, то вообще не загружает изображение. Приходится в панели Листов выбирать лист (хотя панель листов встает на правильный лист по умолчанию).

Как можно это исправить? (что бы загружался лист не Model)

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

Re: Загрузка файла из потока

Post by support » 29 Aug 2016, 20:23

Здравствуйте, Андрей!

Лист Model должен присутствовать в любом корректном DWG файле, но в некоторых случаях он может быть пустым. Для подобных случаев можете использовать следующую логику: если текущим листом является Model и этот лист пустой, перед отображением чертежа в CADViewX задать текущий лист для объекта DWGImage программно. В примере кода ниже показано, как установить лист с индексом 1 (следующий после Model) в качестве текущего.

Code: Select all

private void LoadDWGFromStream(Stream stream)
{
	CADViewLib.DWGImage dwg_image = new CADViewLib.DWGImage();
	IStream stm = new StreamWrapper(stream);
	dwg_image.LoadFromIStream(stm);
	if (dwg_image.CurrentLayout.IsModel && dwg_image.CurrentLayout.IsEmpty)
   {
    	dwg_image.CurrentLayout = dwg_image.get_Layouts(1);
   }
	axCADViewX1.CADImage = dwg_image;
}
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Re: Загрузка файла из потока

Post by Andrey » 30 Aug 2016, 06:11

У нас почти во всех файлах присутствует лист Model + лист с рамкой и тд.

При вызове метода DWGImageClass.LoadFromIStream(Stream s) делается почему то текущем листом Model.
Хотя при 'загрузке' объекта ( axCADViewX1.CADImage = dwg_image) , вьювер (судя по панели элементов которая делает активным лист следующий после Model) пытается пытается выставить другой лист.

Но в итоге получается на панели листов активный лист следующий после Model, а на изображение выведен Model.
(хотя это бывает не всегда, большой разброс версий автокада. Где то выводит правильно, где то нет)

немного изменил Ваш код:
if (dwg_image.LayoutsCount > 1 &&
(dwg_image.CurrentLayout.IsModel || dwg_image.CurrentLayout.IsEmpty))
{
dwg_image.CurrentLayout = dwg_image.get_Layouts(1);
}
axCADViewX1.CADImage = dwg_image;


Спасибо, Михаил!!

Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Re: Загрузка файла из потока

Post by Andrey » 27 Sep 2016, 10:04

Добрый день!

Как , при первой загрузке файла автокада, вписать чертеж в размеры окна?

пробовал axCADViewX1.DoToolButtonClick(TxToolButton.tbFitToWindow), не помогло.

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

Re: Загрузка файла из потока

Post by support » 27 Sep 2016, 16:06

Здравствуйте, Андрей!

Приведенный вами код должен работать, так как фактически он производит программное нажатие кнопки Fit to window. Пожалуйста, опишите проблему более детально, желательно на конкретном примере файла со скриншотами.


Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Re: Загрузка файла из потока

Post by Andrey » 28 Sep 2016, 05:36

Code: Select all

private void LoadDWGFromStream(Stream stream)
{
   CADViewLib.DWGImage dwg_image = new CADViewLib.DWGImage();
   IStream stm = new StreamWrapper(stream);
   dwg_image.LoadFromIStream(stm);
   if (dwg_image.CurrentLayout.IsModel && dwg_image.CurrentLayout.IsEmpty)
   {
       dwg_image.CurrentLayout = dwg_image.get_Layouts(1);
   }
   axCADViewX1.CADImage = dwg_image;

   axCADViewX1.DoToolButtonClick(TxToolButton.tbFitToWindow);
}
net framework 4.5.1

при первой загрузке файла, метод axCADViewX1.DoToolButtonClick(TxToolButton.tbFitToWindow) не вызывает событие нажатия кнопки tbFitToWindow, хотя другие кнопки вызываются нормально(просмотри печати, черный фон..).
Image

Andrey
Posts: 12
Joined: 27 May 2015, 06:02

Re: Загрузка файла из потока

Post by Andrey » 29 Sep 2016, 07:21

Нашел проблему: axCADViewX1 помещен в userControl, который содержит еще несколько вьюверов.

При инициализации userControl, axCADViewX1.Dock = DockStyle.Fill, но свойство axCADViewX1.Size остается равным размеру, заданным на этапе разработки. В следствии чего, первый открытый файл подгоняется под размер, заданный на этапе разработки..

Post Reply