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

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

Отключение всех видовых экранов в файле

Ответ
Поиск в этой теме
Непрочитано 24.01.2019, 19:57
Отключение всех видовых экранов в файле
kp+
 
идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095

Приходится работать с чертежами стороннего разработчика, в которых аффтар (иначе не сказать) сделал в одном листе множество узлов (полтора десятка и более) видовыми экранами довольно тяжелой модели (2D, генплан).
Соответственно, при переключении на лист происходит многократная регенерация модели, Акад (2010, х86) долго думает, а чаще жалуется на нехватку памяти, просит отменить операцию и вообще вешается. Немного спасает autoregenmode 0, но не всегда.

Решил поискать лисп для автоматического отключения всех ВЭ, нашел такое: https://forums.autodesk.com/t5/visua...g/td-p/6390402
Код:
[Выделить все]
 (vl-load-com)
(defun C:viewvis (/ vlist yesno targetvp i)
   (setq i 0)
   (initget "ON OFF")
   (setq yesno (cond ((getkword "\nTurn all viewports on or off? [ON/OFF] <ON>: ")) ("ON")))
   (while (and (/= i (length (layoutlist))) (/= (getvar "dwgname") drawingrefresh))
      (setvar "ctab" (nth i (layoutlist)))
      (setq i (1+ i))
   )
   (setq drawingrefresh (getvar "dwgname"))
   (setq vlist (ssget "x" (list '(0 . "viewport") '(-4 . "/=") '(69 . 1))))
   (while (/= 0 (sslength vlist))
      (setq targetvp (vlax-ename->vla-object (ssname vlist 0)))
      (if (= yesno "ON")
         (vla-display targetvp :vlax-true)
         (vla-display targetvp :vlax-false)
      )
      (ssdel (ssname vlist 0) vlist)
   )
)
Этот лисп нормально работает, но только из того листа, на котором надо погасить все ВЭ, что в моем клиническом случае не подходит

Попробовал пойти своим путем:
Код:
[Выделить все]
 (defun c:kpvpoff (/ ent)
  (setq ent (entnext))
  (while ent
    (if (= (vla-get-ObjectName (vlax-ename->vla-object ent)) "AcDbViewport")
      (if (= (vla-get-ViewportOn (vlax-ename->vla-object ent)) :vlax-true)
	(vla-display  (vlax-ename->vla-object ent) :vlax-false)
      )	
	
    )
    (setq ent (entnext ent))
  )
)
Запускаю из модели (напоминаю, перейти на лист нет возможности), на строке, выделенной красным, выдает ошибку:
Код:
[Выделить все]
Команда: KPVPOFF
; ошибка: Ошибка Automation. Неприменимо
; сброс после ошибки
Инспектор переменных показывает, что переменная в этот момент ent ссылается на включенный видовой экран, со всеми нужными свойствами. И почему метод vla-display применим к ВЭ из пространства "своего" листа, но не из пространства модели - непонятно.

Попробовал без VLA, с dxf-кодами (группа 68 отвечает за включенное состояние ВЭ, если 0, то выкл.)

Код:
[Выделить все]
 (defun c:kpvpoff (/ ent vs_dxf)
  (setq ent (entnext))
  (while ent
    (if (= (vla-get-ObjectName (vlax-ename->vla-object ent)) "AcDbViewport")
      (if (= (vla-get-ViewportOn (vlax-ename->vla-object ent)) :vlax-true)
	(progn
		(setq vs_dxf (entget ent))
	  	(setq vs_dxf (subst (cons 68 0) (assoc 68 vs_dxf) vs_dxf))
	        (entmod vs_dxf)
	        (entupd ent)
        )
      )	
	
    )
    (setq ent (entnext ent))
  )
)
Ошибок нет, но эффекта тоже никакого - ВЭ остаются включены.

Приложить рабочий чертеж не имею возможности, но лисп ведет себя одинаково на любых чертежах, даже на тестовом, где нет ничего, кроме одного ВЭ на одном листе.

Прошу гуру программирования подсказать, что надо добавить в первый или второй лисп, чтобы выключать ВЭ, не переходя на их лист. А если все уже написано - поделитесь ссылкой, пожалуйста.

PS Т.к. чертежи не мои, очевидный вариант создания ВЭ заново в более вменяемой конфигурации или вынесения узлов в пространство листа / в отдельный файл / фтопку рассматриваю в последнюю очередь.
Заменить комп, перейти на версии Винды и Акада х64, добавить памяти - прошу не предлагать

Последний раз редактировалось kp+, 24.01.2019 в 20:37.
Просмотров: 8416
 
Непрочитано 28.01.2019, 16:17
1 | #41
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от doctorraz Посмотреть сообщение
АК2018х64
при запуске из модели свойство включен - нет, по факту вэ включен
Причину этого мы уже выяснили в параллельной теме на другом ресурсе: http://adn-cis.org/forum/index.php?topic=9050.0. Сообщение #28, #30 и #32.
Зависит от переменной LAYOUTREGENCTL. Если установить её значение в 0 (не кэшировать состояния вкладок), то такие "выключенные но по факту включенные" ВЭ не будут появляться.
По умолчанию её значение в последних версиях - 2.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 28.01.2019, 17:42
1 | #42
VVA

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Причину этого мы уже выяснили в параллельной теме на другом ресурсе: http://adn-cis.org/forum/index.php?topic=9050.0. Сообщение #28, #30 и #32.
Зависит от переменной LAYOUTREGENCTL. Если установить её значение в 0 (не кэшировать состояния вкладок), то такие "выключенные но по факту включенные" ВЭ не будут появляться.
По умолчанию её значение в последних версиях - 2.
Обновил #11
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Отключение всех видовых экранов в файле

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание листов и видовых экранов на них Andrey_13 Готовые программы 423 03.04.2024 21:27
Как выключить "Показ блокированного/Display locked" на всех видовых экранах на всех листах сразу? UnAtom AutoCAD 2 25.08.2017 16:38
Лисп для блокировки видовых экранов posetitel LISP 5 28.04.2017 09:09
AutoCAD 2011. Проблема с заданием масштабов видовых экранов. Demyan AutoCAD 1 28.11.2010 10:42
Как слой включить сразу во всех видовых экранах ilka_t AutoCAD 4 26.04.2004 11:20