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

ADN Club => AutoCAD .NET API => Тема начата: Elfilagas от 13-04-2017, 16:26:16

Название: Сохранение текущего профиля
Отправлено: Elfilagas от 13-04-2017, 16:26:16
Добрый день,
Подскажите, пожалуйста.
Нужно сделать кнопки, для сохранения текущего профиля и для применения сохраненного профиля (т.е. вывести на кнопки Экспорт/Импорт профиля).
Не могу найти, можно ли как то доковыряться до этих функций для профиля через API?
Название: Re: Сохранение текущего профиля
Отправлено: Александр Пекшев aka Modis от 13-04-2017, 16:33:04
Какого профиля? Какие кнопки? Куда добавить? О чем речь вообще?
Название: Re: Сохранение текущего профиля
Отправлено: Elfilagas от 13-04-2017, 16:44:14
Текущего профиля, речь о профилях пользователя. Можно ли как-то запользовать через API функции во вложении?
Название: Re: Сохранение текущего профиля
Отправлено: Александр Ривилис от 13-04-2017, 17:17:21
Это можно сделать через COM/ActiveX: Application.Preferences.Profiles
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F366459%2F7842324.8%2F0_157764_7d68015b_orig.png&hash=2b0c2ff12b321a759f983bf809f44168)




Название: Re: Сохранение текущего профиля
Отправлено: Elfilagas от 18-04-2017, 14:10:54
Что-то не получается.
Редко в Автокаде что-то делаю, возможно сам туплю. )
Есть ли пример какой нибудь?
Название: Re: Сохранение текущего профиля
Отправлено: Александр Ривилис от 18-04-2017, 14:12:31
Есть ли пример какой нибудь?
Примера нет. Где код в котором "не получается"?
Название: Re: Сохранение текущего профиля
Отправлено: Александр Ривилис от 18-04-2017, 14:56:03
Вот готовый пример:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.Interop;
  4.  
  5. [assembly: CommandClass(typeof(AutoCAD_CSharp_plug_in8.MyCommands))]
  6.  
  7. namespace AutoCAD_CSharp_plug_in8
  8. {
  9.   public class MyCommands
  10.   {
  11.     [CommandMethod("ExpProf")]
  12.     public void MyCommand()
  13.     {
  14.       AcadApplication app = Application.AcadApplication as AcadApplication;
  15.       AcadPreferences pref = app.Preferences;
  16.       AcadPreferencesProfiles profiles = pref.Profiles;
  17.       profiles.ExportProfile(profiles.ActiveProfile, @"C:\Myprofile.arg");
  18.     }
  19.   }
  20. }

Чтобы код скомпилировался необходимо добавить к References две dll-ки:
Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll
Взять их можно или из соответствующего каталога AutoCAD, или из соответствующего ObjectARX SDK. Следует учитывать, что эти dll-ки зависят от разрядности (32/64 бита) AutoCAD.
Название: Re: Сохранение текущего профиля
Отправлено: Александр Ривилис от 18-04-2017, 15:12:35
Предыдущий вариант работает в любой версии AutoCAD и с любым .NET Framework. Этот работает только при наличии .NET Framework 4 или более новый. Зато не требует подключения dll'ек и привязки к конкретной разрядности AutoCAD.

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3.  
  4. [assembly: CommandClass(typeof(AutoCAD_CSharp_plug_in8.MyCommands))]
  5.  
  6. namespace AutoCAD_CSharp_plug_in8
  7. {
  8.   public class MyCommands
  9.   {
  10.     [CommandMethod("ExpProf")]
  11.     public void MyCommand()
  12.     {
  13.       dynamic app = Application.AcadApplication;
  14.       dynamic pref = app.Preferences;
  15.       dynamic profiles = pref.Profiles;
  16.       profiles.ExportProfile(profiles.ActiveProfile, @"C:\Myprofile.arg");
  17.     }
  18.   }
  19. }

Можешь выбирать на свой вкус.
Название: Re: Сохранение текущего профиля
Отправлено: Elfilagas от 18-04-2017, 16:42:08
Спасибо. Пытался все в одну строку нагородить, в итоге с параметрами при экспорте накосячил. )
С импортом разобрался.