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

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

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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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 файла на компьютере.
Мне сказали, что Вы компетентны в вопросе о передаче такого запроса разработчикам.