Имя текущего профиля и прочие Preferences
В очередной раз приношу самую искреннюю благодарность Андрею Бушману - без него я бы точно не разобрался в этой задачке.
Исходные тексты хранятся на языке оригинала - здесь; а здесь - перевод.
Для того, чтобы получить доступ к таким настройкам AutoCAD, как:
PreferencesDisplay | Настройки отображения |
PreferencesDrafting | Настройки черчения |
PreferencesFiles | Настройки файлов |
PreferencesOpenSave | Настройки открытия и сохранения |
PreferencesOutput | Настройки вывода |
PreferencesProfiles | Настройки профилей |
PreferencesSelection | Настройки выбора |
PreferencesSystem | Настройки системы |
PreferencesUser | Пользовательские настройки |
необходимо использовать COM Interop, то бишь обращение к AutoCAD как к СОМ-серверу.
Официальная документация предлагает использовать т.н. "раннее связывание":
- создать обычный проект для AutoCAD - библиотека классов, подключить необходимые *mgd.dll, установить для них CopyLocal = False
- в проект необходимо импортировать соответствующую tlb-библиотеку, находяшуюся в %ProgramFiles%/Common Files/Autodesk Shared (расположение может меняться):
Версия Локализация Имя tlb AutoCAD 2007..2009 Eng acax17enu.tlb AutoCAD 2007..2009 Rus acax17rus.tlb AutoCAD 2010..2012 Eng acax18enu.tlb AutoCAD 2010..2012 Rus acax18rus.tlb
Сейчас на машине установлен только 2012, так что с предыдущими версиями могу и ошибиться.
Именно наличие этой tlb в проекте позволяет использовать строку
1 |
using Autodesk.AutoCAD.Interop; |
Тогда в класс добавляем всего пару строк
1 2 | using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Interop; |
И после этого можно уже вполне спокойно работать с настройками, перечисленными выше. Так, например, получение имени текущего профиля сводится к 2 строкам:
1 2 | AcadPreferences acProfiles = (AcadPreferences)Autodesk.AutoCAD.ApplicationServices.Application.Preferences; return acProfiles.Profiles.ActiveProfile; |