Открыть файл Autocad из внешнего приложения(IronPython)

Автор Тема: Открыть файл Autocad из внешнего приложения(IronPython)  (Прочитано 8991 раз)

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

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Собственно задача в названии темы. Пытаюсь получить доступ к файлу Autocad из IronPython, пока никак. Создать новый файл через COM без проблем.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Вопрос откровенно глупый?)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Пытаюсь получить доступ к файлу Autocad из IronPython, пока никак.
Код - Visual Basic [Выбрать]
  1. Documents.Open
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
По обозначенной выше ссылке именно это и демонстрируется...

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Код - Python [Выбрать]
  1. import clr
  2. clr.AddReferenceToFileAndPath('C:\\Program Files\\Autodesk\\AutoCAD 2016\\Autodesk.AutoCAD.Interop')
  3. from Autodesk.AutoCAD.Interop import *
  4.  
  5. acadApp = AcadApplicationClass()
  6. acadApp.Visible = True
  7.  
  8. fileNam = IN[2]
  9.  
  10. acadApp.Documents.Open(fileNam)

Для IronPython получился такой код
« Последнее редактирование: 18-09-2016, 20:57:58 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Для IronPython получился такой код
Для него у нас есть специальное форматирование на форуме (у меня в подписи).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Спасибо Александр, буду знать. И теперь следующий вопрос. Возможно ли подключиться к уже открытому файлу?

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Возможно ли подключиться к уже открытому файлу?
Что имеется в виду под подключиться? Ты можешь получить все открытые файлы (Application.Documents) и работать с ними. Предварительно желательно сделать нужный документ активным (Application.ActiveDocument = нужный тебе документ).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Да, именно это, получить доступ к уже открытым файлам

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, именно это, получить доступ к уже открытым файлам
Ну вот acadApp.Documents из твоего кода и будет коллекцией открытых файлов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Речь была о подключении к уже открытому файлу из внешнего приложения, я нашел как это сделать:
Код - Python [Выбрать]
  1. app = System.Runtime.InteropServices.Marshal.GetActiveObject("Autocad.Application")
  2. AcDoc = app.ActiveDocument
« Последнее редактирование: 25-09-2016, 22:21:34 от Александр Ривилис »

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

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

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Код - C# [Выбрать]
  1. app = System.Runtime.InteropServices.Marshal.GetActiveObject("Autocad.Application")
  2. AcDoc = app.ActiveDocument

Ниже несколько риторических вопросов для размышления:

1. А что если Marshal.GetActiveObject("Autocad.Application") вернёт null?
2. А что если уже запущено сразу несколько приложений acad.exe?
3. А что если ActiveDocument окажется null?