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

ADN Club => AutoCAD .NET API => Тема начата: Doublefish от 18-07-2014, 11:34:26

Название: Открыть dwg и выполнить команду
Отправлено: Doublefish от 18-07-2014, 11:34:26
Добрый день

Подскажите пожалуйста, как открыть другой dwg,  затем перейти в него, выполнить команду в этом открывшемся dwg и оставивить его активным на экране?
Название: Re: Открыть dwg и выполнить команду
Отправлено: Александр Ривилис от 18-07-2014, 11:40:17
Для этой цели код должен выполнятся из контекста приложения (т.е. если из команды, то у нее должен быть флаг CommandFlags.Session)
Application.DocumentManager.Open - открытие файла
Document.SendStringToExecute - запуск команды
Название: Re: Открыть dwg и выполнить команду
Отправлено: Doublefish от 18-07-2014, 12:26:45
Упустил п.1 про CommandFlags.Session

Спасибо, получилось.
Название: Re: Открыть dwg и выполнить команду
Отправлено: Андрей Бушман от 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;
Вот как-то так...