Работа с профилями AutoCAD из-под lisp
Только что общался с Евгением Елпановым касаемо профилей AutoCAD и работы с ними. В результате Евгений прислал очень любопытный код, позволяющий скопировать активный профиль в новый и активировать этот самый новый профиль.
1 2 3 4 5 6 7 8 9 10 11 12 13 | (defun eea-remake-profile (pn / a p) ;; pn - имя профайла ;; (setq pn "МойНовыйПрофиль") ;; (eea-remake-profile "МойНовыйПрофиль") (setq p (vla-get-profiles (vla-get-preferences (vlax-get-acad-object)))) (vla-getallprofilenames p 'a) (if (not (member pn (vlax-safearray->list a))) (vla-copyprofile p (vla-get-activeprofile p) pn) ) ;_ end of if (if (/= (vla-get-activeprofile p) pn) (vla-put-activeprofile p pn) ) ;_ end of if ) ;_ end of defun |
Ну и небольшая проверка:
1 2 3 4 5 6 7 8 | (princ (strcat "\nActiveProfile : " (getvar "cprofile"))) (eea-remake-profile "TestProfile") (princ (strcat "\nActiveProfile : " (getvar "cprofile"))) (princ) ;| Результат: ActiveProfile : AutoCAD Debug ActiveProfile : TestProfile |; |
Отличное решение!
Спасибо, Алексей.
Осталось только добавить, что объект IAcadPreferencesProfiles позволяет не только получить список всех имеющихся профилей, скопировать профиль в новый и сделать активным, но так же переименовать профиль и удалить. На мой взгляд, этих возможностей достаточно, чтоб при установке своей программы можно было безболезненно работать с меню не нарушая возможности пользователя вернуться в привычную обстановку.
Спасибо Александру Назарову: показал, что код неправильно вставлен Исправлено.