Работа с профилями 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
|;

Отличное решение!



Комментарии

Есть 2 коммент. к “Работа с профилями AutoCAD из-под lisp”
  1. ElpanovEvgeniy пишет:

    Спасибо, Алексей.
    Осталось только добавить, что объект IAcadPreferencesProfiles позволяет не только получить список всех имеющихся профилей, скопировать профиль в новый и сделать активным, но так же переименовать профиль и удалить. На мой взгляд, этих возможностей достаточно, чтоб при установке своей программы можно было безболезненно работать с меню не нарушая возможности пользователя вернуться в привычную обстановку.

  2. Кулик Алексей aka kpblc пишет:

    Спасибо Александру Назарову: показал, что код неправильно вставлен :( Исправлено.

Поделитесь своим мнением


Я не робот.