Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Khasan Mamaev от 18-09-2016, 19:46:16

Название: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 18-09-2016, 19:46:16
Собственно задача в названии темы. Пытаюсь получить доступ к файлу Autocad из IronPython, пока никак. Создать новый файл через COM без проблем.
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Андрей Бушман от 18-09-2016, 19:51:49
ой. :)
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 18-09-2016, 19:56:38
Вопрос откровенно глупый?)
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Андрей Бушман от 18-09-2016, 20:00:44
Здесь есть пример открытия документа в т.ч. и для VBA / ActiveX: https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/sozdanie-otkrytie-sohranenie-i-zakrytie-certezej/sozdanie-i-otkrytie-certeza
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Александр Ривилис от 18-09-2016, 20:42:57
Пытаюсь получить доступ к файлу Autocad из IronPython, пока никак.
Код - Visual Basic [Выбрать]
  1. Documents.Open
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Андрей Бушман от 18-09-2016, 20:44:57
По обозначенной выше ссылке именно это и демонстрируется...
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 18-09-2016, 20:52:37
Код - 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 получился такой код
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Александр Ривилис от 18-09-2016, 20:58:46
Для IronPython получился такой код
Для него у нас есть специальное форматирование на форуме (у меня в подписи).
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 18-09-2016, 21:18:49
Спасибо Александр, буду знать. И теперь следующий вопрос. Возможно ли подключиться к уже открытому файлу?
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Александр Ривилис от 18-09-2016, 22:38:49
Возможно ли подключиться к уже открытому файлу?
Что имеется в виду под подключиться? Ты можешь получить все открытые файлы (Application.Documents) и работать с ними. Предварительно желательно сделать нужный документ активным (Application.ActiveDocument = нужный тебе документ).
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 19-09-2016, 22:46:18
Да, именно это, получить доступ к уже открытым файлам
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Александр Ривилис от 19-09-2016, 22:49:53
Да, именно это, получить доступ к уже открытым файлам
Ну вот acadApp.Documents из твоего кода и будет коллекцией открытых файлов.
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Khasan Mamaev от 25-09-2016, 21:55:50
Речь была о подключении к уже открытому файлу из внешнего приложения, я нашел как это сделать:
Код - Python [Выбрать]
  1. app = System.Runtime.InteropServices.Marshal.GetActiveObject("Autocad.Application")
  2. AcDoc = app.ActiveDocument
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Александр Ривилис от 25-09-2016, 22:22:32
Речь была о подключении к уже открытому файлу из внешнего приложения, я нашел как это сделать:
Это один из открытых файлов. Тот который в данный момент активный.
Название: Re: Открыть файл Autocad из внешнего приложения(IronPython)
Отправлено: Андрей Бушман от 25-09-2016, 22:28:13
Код - 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?