Открыть dwg и выполнить команду

Автор Тема: Открыть dwg и выполнить команду  (Прочитано 4858 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Добрый день

Подскажите пожалуйста, как открыть другой dwg,  затем перейти в него, выполнить команду в этом открывшемся dwg и оставивить его активным на экране?

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открыть dwg и выполнить команду
« Ответ #1 : 18-07-2014, 11:40:17 »
Для этой цели код должен выполнятся из контекста приложения (т.е. если из команды, то у нее должен быть флаг CommandFlags.Session)
Application.DocumentManager.Open - открытие файла
Document.SendStringToExecute - запуск команды
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Открыть dwg и выполнить команду
« Ответ #2 : 18-07-2014, 12:26:45 »
Упустил п.1 про CommandFlags.Session

Спасибо, получилось.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Открыть dwg и выполнить команду
« Ответ #3 : 18-07-2014, 12:27:23 »
Application.DocumentManager.Open - открытие файла
Ой ли? Это зависит от версии AutoCAD... Вы же вроде как исповедуете только "свежую" религию ("троицу от Autodesk"), а соответственно указываете неверное расположение метода. На эти грабли могут ведь и наступить :)

Даю справку: с некоторых пор [а именно - начиная с AutoCAD 2013] метод Open переделан под метод расширения и "живёт" теперь по адресу:
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.DocumentCollectionExtension.Open Method (this DocumentCollection, string)
Из этого следует, что если в файле исходного кода присутствует только "алиас", например такой:
Код - C# [Выбрать]
  1. using AcApp = Autodesk.AutoCAD.ApplicationServices;
То IntelliSience не найдёт обозначенный метод, равно как и компилятор. Соответственно попытка вызвать обозначенный метод как экземплярный, даже компилироваться не будет. В этом случае нужно будет вызывать этот метод как статический.

Для того, чтобы его можно было вызывать как экземплярный, придётся добавить "юзинг" без "алиаса":
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
Вот как-то так...