Page 1 of 1
Загрузка файла из потока
Posted: 08 Aug 2016, 13:33
by Andrey
Добрый день!
Загружаю 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) не получается.
Как их можно загрузить из потока?
Re: Загрузка файла из потока
Posted: 09 Aug 2016, 16:39
by support
Здравствуйте, Андрей!
К сожалению, загрузка PDF и растровых изображений (TIFF, BMP, JPG, PSD, GIF) из потока не поддерживается. Указанные форматы можно загрузить только из файла.
Михаил
Re: Загрузка файла из потока
Posted: 29 Aug 2016, 10:19
by Andrey
Добрый день!
Метод axCADViewX1.LoadFile(string file) делал активным лист DWG файла, который в автокаде ставили на вид, автоматом.
При загрузке файла из потока, axCADViewX1 загружает по умолчанию лист Model.
Если лист Model отсутствует, то вообще не загружает изображение. Приходится в панели Листов выбирать лист (хотя панель листов встает на правильный лист по умолчанию).
Как можно это исправить? (что бы загружался лист не Model)
Re: Загрузка файла из потока
Posted: 29 Aug 2016, 20:23
by support
Здравствуйте, Андрей!
Лист 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;
}
Михаил
Re: Загрузка файла из потока
Posted: 30 Aug 2016, 06:11
by Andrey
У нас почти во всех файлах присутствует лист 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;
Спасибо, Михаил!!
Re: Загрузка файла из потока
Posted: 27 Sep 2016, 10:04
by Andrey
Добрый день!
Как , при первой загрузке файла автокада, вписать чертеж в размеры окна?
пробовал axCADViewX1.DoToolButtonClick(TxToolButton.tbFitToWindow), не помогло.
Re: Загрузка файла из потока
Posted: 27 Sep 2016, 16:06
by support
Здравствуйте, Андрей!
Приведенный вами код должен работать, так как фактически он производит программное нажатие кнопки Fit to window. Пожалуйста, опишите проблему более детально, желательно на конкретном примере файла со скриншотами.
Михаил
Re: Загрузка файла из потока
Posted: 28 Sep 2016, 05:36
by Andrey
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, хотя другие кнопки вызываются нормально(просмотри печати, черный фон..).

Re: Загрузка файла из потока
Posted: 29 Sep 2016, 07:21
by Andrey
Нашел проблему: axCADViewX1 помещен в userControl, который содержит еще несколько вьюверов.
При инициализации userControl, axCADViewX1.Dock = DockStyle.Fill, но свойство axCADViewX1.Size остается равным размеру, заданным на этапе разработки. В следствии чего, первый открытый файл подгоняется под размер, заданный на этапе разработки..