Доступ к AutoCad из внешнего Windows-приложения

Автор Тема: Доступ к AutoCad из внешнего Windows-приложения  (Прочитано 3889 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Здравствуйте Александр!

В продолжении одноименной темы на форуме CadUser.ru  хотел бы конкретизировать решаемую мной задачу.

В качестве предисловия:

Я имею (на любительском уровне) опыт программирования на AutoLisp для AutoCad.  Периодически пишу небольшие приложения для автоматизации своих задач на работе.  Так же имею ( на том же уровне ) опыт программирования на C#.  Этот язык я осваивал во время учебы в аспирантуре для выполнения различных вычислений.  С тех пор у меня осталось много полезных библиотек для вычислений: матричная, решение систем уравнений по МНК, триангуляция Делоне и т.д.  Хотелось бы использовать  эти библиотеки  для программирования в AutoCad. В интернете нашел информацию как писать плагины на C# и подгружать их с помощью функции Netload. Но мне бы хотелось иметь доступ к объектам AutoCad  из  внешних приложений типа WindowsFormApplication, чтобы использовать все элементы управления ( кнопки, списки и т.д. ), которые я мог бы использовать, если бы просто писал программу на C# в VisualStudio

Задача:


Для начала, в качестве тестовой поставил себе следующую задачу: Из внешнего приложения WindowsFormApplication открыть AutoCad и нарисовать, скажем, круг с центром 0,0 и радиусом 1. Вы мне посоветовали использовать технологию ActiveX.  Если  я правильно понимаю, базовым классом там является Application, и если получить на него ссылку, можно добраться до текущего документа, далее до пространства Модели и наконец, до любого примитива.

Поэтому основной вопрос: как получить ссылку на объект Application ?

Для этого, как я понимаю, надо сделать 2 действия:
1.   Подгрузить ссылку на нужную библиотеку
2.   В файле главной формы ( напр. Form1.cs ) сделать ссылку на нужное пространство имен при помощи using…….., в котором находится этот класс Application

Если я все правильно изложил, мой вопрос можно конкретизировать: на какую библиотеку сделать ссылку и где она находится ?  Как называется пространство имен с классом Applicaton?

Заранее Спасибо!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Так много слов в посте, но ответа на главный вопрос не вижу - а зачем подключаться к автокаду из внешнего приложения? В чем необходимость такого усложнения?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Вы мне посоветовали использовать технологию ActiveX.
Да, это, по сути, практически единственный способ напрямую взаимодействовать с AutoCAD из внешнего приложения.
Если  я правильно понимаю, базовым классом там является Application, и если получить на него ссылку, можно добраться до текущего документа, далее до пространства Модели и наконец, до любого примитива.
Это в .NET. В ActiveX (он же COM) эквивалентный объект - AcadApplication. Сложность в том, что по COM нет справки для C# или VB.NET, только для VBA. И если планируете через COM взаимодействовать с AutoCAD, то изучайте AutoCAD VBA Reference.
Но Вы действительно пытаетесь залезть в очень сложную и недружелюбную среду. Гораздо проще всё то же самое делать "изнутри" AutoCAD. Можно внутри AutoCAD вызвать ту же самую форму Windows Forms или WPF и взаимодействовать с AutoCAD при помощи более дружелюбного .NET API.
« Последнее редактирование: 20-10-2019, 18:00:33 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis

antonksp,
Приветствую у нас на форуме!
AutoCad. В интернете нашел информацию как писать плагины на C# и подгружать их с помощью функции Netload. Но мне бы хотелось иметь доступ к объектам AutoCad  из  внешних приложений типа WindowsFormApplication, чтобы использовать все элементы управления ( кнопки, списки и т.д. ), которые я мог бы использовать, если бы просто писал программу на C# в VisualStudio
Их все можно использовать и в плагинах, загружаемых внутрь AutoCAD. Кроме того, возможности работы с AutoCAD значительно расширятся по сравнению с управлением AutoCAD через COM/ActiveX из внешнего приложения и Вы избавитесь от массы проблем, связанных с COM/ActiveX. Фактически единственный случай, когда необходимо использовать COM/ActiveX в работе с AutoCAD - это если у Вас уже есть готовое достаточно серьезное внешнее приложение, к которому следует подключить AutoCAD. Хотя и здесь есть альтернативные варианты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Если я все правильно изложил, мой вопрос можно конкретизировать: на какую библиотеку сделать ссылку и где она находится ?  Как называется пространство имен с классом Applicaton?
Если всё-таки остановитесь на COM/ActiveX, то нужно подключить Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll
Только класс, как уже было сказано выше, в COM/ActiveX не Application, а AcadApplication (полное имя Autodesk.AutoCAD.Interop.AcadApplication)
Немного устаревший пример: https://through-the-interface.typepad.com/through_the_interface/2007/12/launching-autoc.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Спасибо за ответы!

Конечно, если из плагинов можно открывать WindowsForm и все элементы управления со всеми свойствами и
возможностью обрабатывать все стандартные события, то необходимость получать доступ к AutoCad через COM
из внешнего приложения отпадает.

Теперь возникает вопрос как это сделать. Порылся в интернете.
На этом форуме нашел ответ: при помощи статического метода
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog (Form)

В качестве аргумента передается класс Form. Я так понимаю, что это класс из библиотеки dll, подгружаемой в AutoCad
командой netload.

Вопрос:

Как добавить класс формы в dll?  Из своего опыта ( не очень большого ), в VisualStudio при создании проекта на выбор, среди прочих, предлагаются следующие варианты:

- библиотека классов, в результате создается файл .dll

- приложение WindowsFormApplication. В этом варианте создается файл .exe и для каждой формы файлы типа Form.cs,
  каждый из которых содержит класс соответствующей формы. Но как все эти классы сохранить в одном .dll файле, я не знаю.

подскажите пожалуйста, как это сделать или дайте какую-нибудь полезную ссылку.

Заранее Спасибо!
 

Отмечено как Решение antonksp 21-10-2019, 08:52:01

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как добавить класс формы в dll?
После того, как уже создан проект (или при помощи AutoCAD .NET Wizard или Class Library) в меню Project->Add Windows Form




Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
У меня в подписи третья сверху ссылка на плейлист на моём ютуб-канале. В этом плейлисте есть подробное видео по созданию диалогов. Посмотрите - там есть ответы на многие вопросы.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Теперь возникает вопрос как это сделать.
А вот для этого уже нужно создавать новую тему на форуме, так как действует правило "один вопрос - одна тема".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Спасибо большое за ответы!

Направление понятно.  Буду разбираться