| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для блокировки видовых окон в пространстве листа.

Лисп для блокировки видовых окон в пространстве листа.

Ответ
Поиск в этой теме
Непрочитано 21.07.2015, 23:28 #1
Лисп для блокировки видовых окон в пространстве листа.
betonolom
 
Регистрация: 15.10.2013
Сообщений: 30

Доброго времени, товарищи!
В конторе постоянно идет борьба двух групп людей. Одна группа состоит из людей, которые никогда не блокируют видовые окна в пространстве листа. Вторая - полная противоположенность, они всегда блокируют все видовые окна. Так как эта борьба никогда не заканчивается, то прошу помочь мне найти на просторах интернета или же написать лисп (я полагаю что это не составит особого труда для здешних гуру) для блокировки ВСЕХ видовых окон на данном листе и для разблокировки ВСЕХ видовых окон на данном листе, для дальнейшего запиливания двух кнопочек.
Благодарю за внимание.
Просмотров: 3900
 
Непрочитано 21.07.2015, 23:44
1 | #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Примерно так:
Код:
[Выделить все]
 (vl-load-com)

(defun lockvp (lock / adoc blk)
              ;|
*    Функция [раз]блокировки видовых экранов
*    Параметры вызова:
  lock   логический параметр: t - блокировать ВЭ; nil - разблокировать
*    Примеры вызова:
(lockvp t)   ; заблокировать все ВЭ
(lockvp nil) ; разблокировать все ВЭ
*    Функция не обрабатывает ВЭ, расположенные на заблокированных или замороженных слоях
|;
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (foreach item (mapcar (function vlax-ename->vla-object)
                        ((lambda (/ tab item selset)
                           (setq selset (ssget "_X" '((0 . "VIEWPORT"))))
                           (repeat (setq tab  nil
                                         item (sslength selset)
                                         ) ;_ end setq
                             (setq tab (cons (ssname selset (setq item (1- item))) tab))
                             ) ;_ end of repeat
                           ) ;_ end of lambda
                         )
                        ) ;_ end of mapcar
    (vl-catch-all-apply
      (function
        (lambda ()
          (vla-put-displaylocked item
                                 (if lock
                                   :vlax-true
                                   :vlax-false
                                   ) ;_ end of if
                                 ) ;_ end of vla-put-displaylocked
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of VL-CATCH-ALL-APPLY
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2015, 23:47
#3
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


http://forums.augi.com/showthread.ph...ewport-Toggle&
Nike вне форума  
 
Непрочитано 22.07.2015, 16:15
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Вот еще пару ссылок
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.08.2018, 16:06
#5
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 686


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Примерно так:
Код:
[Выделить все]
 (vl-load-com)

(defun lockvp (lock / adoc blk)
              ;|
*    Функция [раз]блокировки видовых экранов
*    Параметры вызова:
  lock   логический параметр: t - блокировать ВЭ; nil - разблокировать
*    Примеры вызова:
(lockvp t)   ; заблокировать все ВЭ
(lockvp nil) ; разблокировать все ВЭ
*    Функция не обрабатывает ВЭ, расположенные на заблокированных или замороженных слоях
|;
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (foreach item (mapcar (function vlax-ename->vla-object)
                        ((lambda (/ tab item selset)
                           (setq selset (ssget "_X" '((0 . "VIEWPORT"))))
                           (repeat (setq tab  nil
                                         item (sslength selset)
                                         ) ;_ end setq
                             (setq tab (cons (ssname selset (setq item (1- item))) tab))
                             ) ;_ end of repeat
                           ) ;_ end of lambda
                         )
                        ) ;_ end of mapcar
    (vl-catch-all-apply
      (function
        (lambda ()
          (vla-put-displaylocked item
                                 (if lock
                                   :vlax-true
                                   :vlax-false
                                   ) ;_ end of if
                                 ) ;_ end of vla-put-displaylocked
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of VL-CATCH-ALL-APPLY
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Алексей не подскажешь не работает код в 2019 Автокаде
gest вне форума  
 
Непрочитано 13.08.2018, 16:51
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


А на каком месте спотык? В файле есть ВЭ?
P.S. код для получения аналога лога ошибок:
Код:
[Выделить все]
 (vl-load-com)

(defun lockvp (lock / adoc blk err)
              ;|
*    Функция [раз]блокировки видовых экранов
*    Параметры вызова:
  lock   логический параметр: t - блокировать ВЭ; nil - разблокировать
*    Примеры вызова:
(lockvp t)   ; заблокировать все ВЭ
(lockvp nil) ; разблокировать все ВЭ
*    Функция не обрабатывает ВЭ, расположенные на заблокированных или замороженных слоях
|;
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (foreach item (mapcar (function vlax-ename->vla-object)
                        ((lambda (/ tab item selset)
                           (setq selset (ssget "_X" '((0 . "VIEWPORT"))))
                           (repeat (setq tab  nil
                                         item (sslength selset)
                                         ) ;_ end setq
                             (setq tab (cons (ssname selset (setq item (1- item))) tab))
                             ) ;_ end of repeat
                           ) ;_ end of lambda
                         )
                        ) ;_ end of mapcar
    (if (vl-catch-all-error-p (setq err (vl-catch-all-apply (function (lambda ()
                                                                        (vla-put-displaylocked item
                                                                                               (if lock
                                                                                                 :vlax-true
                                                                                                 :vlax-false
                                                                                                 ) ;_ end of if
                                                                                               ) ;_ end of vla-put-displaylocked
                                                                        ) ;_ end of lambda
                                                                      ) ;_ end of function
                                                            ) ;_ end of vl-catch-all-apply
                                    ) ;_ end of setq
                              ) ;_ end of vl-catch-all-error-p
      (princ (strcat "\nError : " (vl-catch-all-error-message err) " VP_Handle = " (vla-get-handle item)))
      ) ;_ end of if
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
----- добавлено через 29 сек. -----
И как вызываешь?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2018, 17:10
#7
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 686


Вызываю церез палитру
Цитата:
Команда: (lockvp t)
; ошибка: no function definition: nil
gest вне форума  
 
Непрочитано 13.08.2018, 17:12
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Ээээ... А код-то загружен?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2018, 17:39
#9
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 686


Скопировал код, создал файл lockvp.lsp, загружаю через автозагрузку
gest вне форума  
 
Непрочитано 13.08.2018, 17:46
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Кодировка часом не нарушена? А то там могут быть весьма интересные моменты...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.08.2018, 09:44
#11
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 686


Алексей, да нет, кодировка нормальная.

----- добавлено через ~27 мин. -----
Попробовал лисп по ссылке LV блокирует, но не разблокирует экран.

----- добавлено через ~1 ч. -----
Почему то при выполнении других кодов, например ^C^C^P(load "bgtools.LSP");BgColor; пишет ошибку
; ошибка: no function definition: VLAX-ERASED-P

^C^C(_kpblc-autostart-purge 1023);
; ошибка: no function definition: VLAX-VLA-OBJECT->ENAME

Даже не знаю куда копать?
gest вне форума  
 
Непрочитано 14.08.2018, 12:05
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Код работает - специально проверил несколько раз. Тот факт, что можно поменять масштаб аннотаций, ничего не означает. Можешь руками поставить заблокированность ВЭ, и это не уберет возможность смены масштаба аннотаций.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для блокировки видовых окон в пространстве листа.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение количества видовых окон в пространстве листа Moth AutoCAD 8 01.07.2020 14:23
Как отмасштабировать элементы чертежа нарисованные на листе и в моделе в пространстве листа вместе? Hartley AutoCAD 5 15.04.2013 09:30
Фатал эррор при переходе с модели на лист с большим количеством видовых окон Serikdjan AutoCAD 14 28.04.2011 10:03
Перерисовка видовых окон batart AutoCAD 25 26.06.2008 13:48
Кнопка refresh для видовых окон. WishMaster Программирование 8 20.12.2007 11:23