Отображение DWG/DWF файла в C# WPF

Автор Тема: Отображение DWG/DWF файла в C# WPF  (Прочитано 15456 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Добрый день!
Хочу отобразить в проекте C# WPF файл DWG, но не получается.
Код в данный момент у меня тривиальный
ACCTRLLib.AcCtrlClass acc = new ACCTRLLib.AcCtrlClass();
acc.PutSourcePath("1.dwg");
Дальше, мне необходимо отобразить, говорят, что вот надо написать следующее
System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
host.Child = acc;
this.grid1.Children.Add(host);
Но проблема в том, что acc не является объектом Control и по этому ошибка. Помогите с этим разобраться!
Заранее спасибо за ответы и советы.
« Последнее редактирование: 06-11-2013, 11:36:57 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #1 : 16-10-2013, 13:46:08 »
Боюсь что с WPF могут быть проблемы.
Для начала посмотри следующие ссылки:
http://through-the-interface.typepad.com/through_the_interface/2008/03/embedding-autoc.html
http://forums.autodesk.com/t5/NET/Adding-acctrl-control-kills-Visual-Studio-2010/td-p/3456832 (особенно ответы Balaji_Ram)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #2 : 18-10-2013, 15:39:10 »
Во, спасибо за ссылки.
А это необходимо делать же с предустановленным автокадом?
Просто есть приложения (они написаны на плюсах) и там используется DWG TrueView, есть такая возможость его использовать?
Просто необходимо сделать не через AutoCAD, т.к. например, при установленном 2013 нет такоого COM компонента как AcCtrl

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #3 : 19-10-2013, 04:15:44 »
Просто есть приложения (они написаны на плюсах) и там используется DWG TrueView, есть такая возможость его использовать?
acctrl.dll которая содержится в составе AutoCAD 2014 позволяет получить Interop-файлы:
C:\Program Files\Common Files\Autodesk Shared>aximp acctrl.dll
Generated Assembly: C:\Program Files\Common Files\Autodesk Shared\ACCTRLLib.dll
Generated Assembly: C:\Program Files\Common Files\Autodesk Shared\AxACCTRLLib.dll
Та же процедура для файла acctrl.dll из состава DWG TrueView 2014:
C:\Program Files\Autodesk\DWG TrueView 2014>aximp acctrl.dll
Generated Assembly: C:\Program Files\Autodesk\DWG TrueView 2014\ACCTRLLib.dll
Generated Assembly: C:\Program Files\Autodesk\DWG TrueView 2014\AxACCTRLLib.dll
Так что теоретически можно подключить и её. Другое дело, что для DWG TrueView нет официального API и поддержки - так  что тут только на свой страх и риск.

при установленном 2013 нет такоого COM компонента как AcCtrl
Есть. Находится в %Program Files%\Common Files\Autodesk Shared\
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #4 : 21-10-2013, 11:57:14 »
Ну покопался, с DWG TrueView подружиться очень трудно, покопавшись еще в интернете, нашел хороший способ работать с dwf, т.е. в Windows Form это все работает и в WPF (Только там надо наследовать Form объект). В COM-объектах добавил контрол Autodesk DWF Viewer Control (библиотека AdView.dll) и следующий код работает
public Form1()
        {
            InitializeComponent();
            StreamReader sr = new StreamReader(@"C:\1.dwf");
            string pat = @"C:\1.dwf";
            try
            {
                axCExpressViewerControl1._SourceStream = sr;
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
                sr.Close();
                axCExpressViewerControl1.SourcePath = pat;
            }
        }
.
Вот только одна загвоздка, при вызове axCExpressViewerControl1._SourceStream = sr; выскакивает ошибка, что данные метод не реализован, т.е. я правильно понял, что данное свойство не реализованно разработчиками Autodesk Design Review?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #5 : 21-10-2013, 17:29:15 »
выскакивает ошибка, что данные метод не реализован, т.е. я правильно понял, что данное свойство не реализованно разработчиками Autodesk Design Review?
Ну раз выскакивает, значит не реализовано.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #6 : 24-10-2013, 09:14:13 »
Ну на контроле AxExpressViewerDll.AxCExpressViewerControl так и не получилось отобразить DWF файл через _SourceStream, а вот есть еще оди контрол: AxECompositeViewer.AxECompositeViewerImpl, если использовать с ним _SourceStream, то он ни чего не говорит и чертеж не показывает. Подскажите пожалуйста, как это возможно? Вот пример кода:
public Form1()
        {
            InitializeComponent();
            StreamReader sr = new StreamReader(@"C:\1.dwf");
            try
            {
                axECompositeViewerImpl1._SourceStream = sr;
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            sr.Close();
        }
Может еще что-то необходимо сделать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #7 : 24-10-2013, 10:13:18 »
Подскажите пожалуйста, как это возможно?
В названии класса последние четыре буквы Impl - сокращение от Implementation (реализация). Такие классы обычно напрямую использовать нельзя.
 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #8 : 24-10-2013, 10:53:34 »
Подскажите пожалуйста, как это возможно?
В названии класса последние четыре буквы Impl - сокращение от Implementation (реализация). Такие классы обычно напрямую использовать нельзя.
 
Понятно, значит ждать реализации этого свойства и пока использовать SourcePath. Спасибо огромное, что уделили мне время!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #9 : 24-10-2013, 11:37:21 »
Понятно, значит ждать реализации этого свойства и пока использовать SourcePath.
Ждать реализации, если её нет, можно долго - нужна критическая масса запросов от программистов. А зачем тебе нужно передавать Stream?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #10 : 24-10-2013, 11:50:03 »
Понятно, значит ждать реализации этого свойства и пока использовать SourcePath.
Ждать реализации, если её нет, можно долго - нужна критическая масса запросов от программистов. А зачем тебе нужно передавать Stream?

Программа принимает на вход зашифрованный массив байтов, расшифровав которые - получаем dwf файл, который показывается пользователю, но не отдается, т.к. не хотят, чтобы пользователи скачав этот файл потом только его использовали, а просматривали его в программе. Ну суть такова, чтобы пользователь мог на него смотреть, но не смог его иметь. С панелькой печать, копирования и т.д. уже разобрался, вот осталось только сделать так, чтобы этот файл не существовал на жестком диске. Есть смысл сделать так, чтобы dwf файл сохранялся в тэмповскую папку пользователя и после работы с этим файлом, просто его удалять, но это не подходит, т.к. программу можно аварийно завершить и тогда этот dwf файл останется на диске.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #11 : 24-10-2013, 12:05:35 »
Есть смысл сделать так, чтобы dwf файл сохранялся в тэмповскую папку пользователя и после работы с этим файлом, просто его удалять, но это не подходит, т.к. программу можно аварийно завершить и тогда этот dwf файл останется на диске.
1) При желании можно обработать в программе её аварийное завершение и в обработчике этот файл удалить.
2) С точки зрения защиты шифровку/дешифровку потока можно перехватить, так что защита эта тоже достаточно условная.
Боюсь, что для программистов Autodesk это не аргумент.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #12 : 24-10-2013, 13:08:51 »
Есть смысл сделать так, чтобы dwf файл сохранялся в тэмповскую папку пользователя и после работы с этим файлом, просто его удалять, но это не подходит, т.к. программу можно аварийно завершить и тогда этот dwf файл останется на диске.
1) При желании можно обработать в программе её аварийное завершение и в обработчике этот файл удалить.
2) С точки зрения защиты шифровку/дешифровку потока можно перехватить, так что защита эта тоже достаточно условная.
Боюсь, что для программистов Autodesk это не аргумент.

1. На сколько я знаю - снятие процесса невозможно перехватить...если только заускать программу как антивирусы, при снятии через дисетчер задач - говорит, что нет достуа или как то так, но так ельзя, мало ли программа подвиснет, а пользователю надоест
2. Да, можно, можно расшифровать любые данные, несмотря на любые методы шифрования, тут вопрос стоит сколько потратит клиент, чтобы расшифровать эти данные (в временном и материальном измерениях)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #13 : 24-10-2013, 15:03:27 »
1. На сколько я знаю - снятие процесса невозможно перехватить...если только заускать программу как антивирусы, при снятии через дисетчер задач - говорит, что нет достуа или как то так, но так ельзя, мало ли программа подвиснет, а пользователю надоест
Тут можно придумать массу вариантов, когда запускается пара процессов. Например, первый запускает второй и ожидает его завершения (нормального или аварийного) и удаляет файл. Больше ничего от него не требуется. Второй процесс непосредственно занимается показом DWF-файла и остальной работой.
Но это всё уже не относится к данной теме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #14 : 24-10-2013, 16:50:13 »
Да, Вы правы, это не относится к нашей теме.
Тогда прошу Вас переслать этот вопрос напрямую разработчикам, т.к. следующая логика нам критична:
мы передаем в библиотеку Autodesk Design Review массив байт или stream, дальше эта библиотека отображает в контроле чертеж, т.е. то же самое, что и SourcePath выполняет, но без расположения DWF файла на компьютере.
Мне сказали, что Вы компетентны в вопросе о передаче такого запроса разработчикам.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG/DWF файла в C# WPF
« Ответ #15 : 24-10-2013, 17:44:43 »
Вам почти правильно сказали. Вопрос передаётся не разработчикам непосредственно, а в группу ADN DevHelp (техническая поддержка программистов). И только если они не смогут дать ответ на вопрос, он будет переадресован разработчикам.
Вопрос уже передал. Будем ждать ответа. Как только он появится я его здесь опубликую.
« Последнее редактирование: 06-11-2013, 11:36:24 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #16 : 24-10-2013, 17:56:46 »
Спасибо огромное!
Буду ждать

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #17 : 25-10-2013, 00:38:30 »
У меня две новости. Первая - хорошая. Ответ был получен очень оперативно. Вторая - скорее плохая, чем хорошая. Вот сам ответ (перевод):
Цитировать
К сожалению, нет никакого способа для того чтобы перенаправить поток из DWF файла в элемент управления ADR. И я не думаю, что команда инженеров планирует предоставить такую функциональность. В любом случае я уточню у них. После того как я получу от них ответ, я сообщу его Вам.
С наилучшими пожеланиями,
Gopinath Taget
Будем ждать информацию от команды инженеров.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG файла в C# WPF
« Ответ #18 : 25-10-2013, 02:19:30 »
Я подумал еще об одном альтернативном варианте - парольная зашита dwf-фалов. Но к сожалению и этот вариант в этом контроле похоже не реализуем, т.к. пароль запрашивается у пользователя в диалоговом окне и я не нашел методов/свойств для того, чтобы пользователь этого не видел. Разве что с использованием хуков, но это слишком сложный и не вполне надежный вариант.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн chudikАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Отображение DWG файла в C# WPF
« Ответ #19 : 25-10-2013, 11:01:54 »
Я подумал еще об одном альтернативном варианте - парольная зашита dwf-фалов. Но к сожалению и этот вариант в этом контроле похоже не реализуем, т.к. пароль запрашивается у пользователя в диалоговом окне и я не нашел методов/свойств для того, чтобы пользователь этого не видел. Разве что с использованием хуков, но это слишком сложный и не вполне надежный вариант.
Ну вариант интересный, но да, немного не надежный, тем более нам необходимо реализовать свой метод шифрования, чтобы при взломе шифра или при сбое шифрования и дешифрования мы грешили на свои руки, а не на ког-то еще. Надеюсь инженеры предоставят хоть какой то выход из данной ситуации.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG/DWF файла в C# WPF
« Ответ #20 : 06-11-2013, 11:41:58 »
Увы, но инженеры Autodesk подтвердили невозможность использовать для этого контрола stream. Только путь к файлу.
Что касается шифрования, то dwf-файл - это zip-файл. И система шифрования у него точно такая же, как у zip-файлов, т.е. при достаточной длине пароля достаточно надежная. Я попросил у ADN DevHelp уточнить возможность задания пароля без диалогового окна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13190
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отображение DWG/DWF файла в C# WPF
« Ответ #21 : 11-12-2013, 05:04:55 »
Сегодня получил ответ от команды инженеров (и извинения за задержку с ответом, связанную с сезоном конференций). Ответ к сожалению неутешительный - возможности без запроса у пользователя открывать зашифрованные DWF-файлы в этом контроле нет. Такого API нет и не предвидится в силу того, что в этом году не было новой версии и будет ли в следующем - неизвестно. Так что только собственное шифрование, расшифровка перед показом и удаление - единственный вариант. Увы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение