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

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

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

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

Приходится работать с чертежами стороннего разработчика, в которых аффтар (иначе не сказать) сделал в одном листе множество узлов (полтора десятка и более) видовыми экранами довольно тяжелой модели (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.
Просмотров: 8332
 
Непрочитано 24.01.2019, 21:00
1 | #2
Кулик Алексей aka kpblc
Moderator

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


Тестируй. Я особо не проверял:
Код:
[Выделить все]
 (vl-load-com)

(defun c:vp-off (/ adoc err)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for lay (vla-get-layouts adoc)
    (if (not (equal lay (vla-get-modelspace adoc)))
      (progn
        (vlax-for ent (vla-get-block lay)
          (if (= (vla-get-objectname ent) "AcDbViewport")
            (if (vl-catch-all-error-p
                  (setq err (vl-catch-all-apply (function (lambda () (vla-put-viewporton ent :vlax-false) (vla-update ent)))))
                  ) ;_ end of vl-catch-all-error-p
              (princ (strcat "\nLayout "
                             (vla-get-name lay)
                             ", VP with center on '"
                             (vl-princ-to-string (vlax-safearray->list (vlax-variant-value (vla-get-center ent))))
                             " not turned off"
                             ) ;_ end of strcat
                     ) ;_ end of princ
              ) ;_ end of if
            ) ;_ end of if
          ) ;_ end of vlax-for
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

(princ "\nType \"vp-off\" to start lisp")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 24.01.2019 в 23:27.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2019, 21:30
| 1 #3
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Ну и как вариант №2 , если лисп сложен для понимания (картинка) :
Миниатюры
Нажмите на изображение для увеличения
Название: вариант.png
Просмотров: 131
Размер:	58.9 Кб
ID:	210269  
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 25.01.2019, 08:45
#4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от maratovich Посмотреть сообщение
Ну и как вариант №2
maratovich, что это за приблуда?
koMon вне форума  
 
Непрочитано 25.01.2019, 09:13
#5
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Цитата:
Сообщение от koMon Посмотреть сообщение
что это за приблуда?
Да этож Реверс
http://www.kdmsoft.ru/revers.html
baksconstructor вне форума  
 
Автор темы   Непрочитано 25.01.2019, 13:25
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тестируй. Я особо не проверял:
проверил. Ошибок нет ("ловушка" срабатывает), эффекта тоже:
Код:
[Выделить все]
Layout Лист1, VP with center on '(128.5 97.5 0.0) not turned off
Видимо, запрет работы с ВЭ не из "своего" пространства прописан где-то в глубинах глубин ядра Акада и для решения вопроса, нужна "тяжелая артиллерия" - хотя бы DBX, а может даже .NET или даже ARX.

kp+ вне форума  
 
Непрочитано 25.01.2019, 13:32
#7
Кулик Алексей aka kpblc
Moderator

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


Я у себя тестировал - у меня срабатывало на всех листах и на всех ВЭ. Можешь выложить файл (содержимое можешь удалить, если оно секретно)?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.01.2019, 13:57
#8
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тестируй. Я особо не проверял:
АК2018х64
при запуске из модели свойство включен - нет, по факту вэ включен
запуск из листа крашит АК
-----------------
Цитата:
Сообщение от maratovich Посмотреть сообщение
Ну и как вариант №2
аналогичная фигня, без краша, но еще и лист какой то левый создает
-------------
СПДС CS умеет делать выбор по всему документу, т.е. выбрать ВЭ на разных листах, через свойства дает отключить... но по факту ВЭ не отключаются


Миниатюры
Нажмите на изображение для увеличения
Название: Рис_ 2.jpg
Просмотров: 450
Размер:	140.2 Кб
ID:	210309  
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 25.01.2019, 14:05
#9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Содержимое файла, с которым работаю, не то чтобы секретно, просто оно не мое, а одобрит ли автор выкладывание в сеть - не хочу даже спрашивать.
Но я тестировал прогу из #2 даже на пустом файле, который создается из стандартного шаблона acadiso.dwt по команде _qnew. В нем нет ничего кроме двух листов с одним ВЭ на каждом. Запускал прогу из модели. Результат - такой как в #6.

Вот только что попробовал запустить из листа в новом пустом файле (в некоторых из рабочих файлов так бы не получилось, там просто не зайти в лист). Акад молча "вывалился"
Что-то не то с этим свойством Viewporton ... мистика какая-то ...
kp+ вне форума  
 
Непрочитано 25.01.2019, 14:10
#10
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Цитата:
Сообщение от doctorraz Посмотреть сообщение
но еще и лист какой то левый создает
Всё верно, чтобы при включении всех ВЭ не ждать регенерацию листа в котором сидите. В листе есть много ВЭ они при включении регенятся и это много времени, а тут один вэ.
Цитата:
Сообщение от kp+ Посмотреть сообщение
Что-то не то с этим свойством Viewporton ... мистика какая-то
А что говорит из #3 ?
baksconstructor вне форума  
 
Непрочитано 25.01.2019, 14:17
2 | #11
VVA

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


Мой вариант
Код:
[Выделить все]
(defun C:vp-off  (/ lay obj id1)
  (vl-load-com)
(setvar "LAYOUTREGENCTL" 0) ;;; Кэширование ВЭ отключено
  (vlax-for lay (vla-get-layouts
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-layouts
    (setq id1 nil);_ ignore the first vp Пропускаем первый ВЭ
    (if (eq :vlax-false (vla-get-modeltype lay))
      (progn
        (princ (strcat "\n*** Лист - " (vla-get-name lay) "  ***"))
        (vlax-for obj (vla-get-block lay)         ; for each obj in layout
          (if (and (= (vla-get-objectname obj) "AcDbViewport")
                   (vlax-write-enabled-p obj)
                   id1 ;_Пропускаем первый ВЭ
              ) ;_ end of and
            (progn
              (vla-put-viewporton obj :vlax-false)
            ) ;_ end of progn
          ) ;_ end of if
          (setq id1 t) ;_Пропускаем первый ВЭ
        ) ;_ end of vlax-for
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of vlax-for
  (princ)
)
PS: Первый видовой экран в листе надо пропускать
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 28.01.2019 в 17:42. Причина: Добавлена установка LAYOUTREGENCTL=1
VVA вне форума  
 
Непрочитано 25.01.2019, 14:27
#12
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
А что говорит из #3 ?
свойство выкл, но по факту ВЭ вкл (((
----------
Цитата:
Сообщение от VVA Посмотреть сообщение
Мой вариант
те же яйца, только в профиль и без краша..
если запускать с листа, то на этом листе ВЭ гасит, на остальных выкл, но как на картинке выше.
---------
ЗЫ у мну спортивный интерес....

----- добавлено через 51 сек. -----
а вот если файл после выключения ВЭ сохранить закрыть открыть... все нормуль...
реген не помогает... чет там не обновляет походу
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 25.01.2019, 14:31
#13
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Цитата:
Сообщение от doctorraz Посмотреть сообщение
свойство выкл, но по факту ВЭ вкл (((
По факту - всё выключено.
У меня всё работает нормально. Акад 2015.
Вы на чём экспериментируете ? какой КАД ? файл давайте.
baksconstructor вне форума  
 
Непрочитано 25.01.2019, 14:36
#14
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Вы на чём экспериментируете ? какой КАД ? файл давайте.
Цитата:
Сообщение от doctorraz Посмотреть сообщение
АК2018х64
из ейного шаблона пустой файл... ВЭ сам наделаешь...
Выше писал, даж СПДС CS выбрать на всех листах ВЭ дает, и через свойства выключить, только вот по факту ВЭ не выключаются.
-------
ХЕХ а если выбрать выключенные ВЭ на разных листах, то включить их получается...
Дома на АК2016 еще проверю....
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 25.01.2019, 14:57
#15
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Цитата:
Сообщение от doctorraz Посмотреть сообщение
из ейного шаблона пустой файл... ВЭ сам наделаешь...
Ну так правильно всё.
Offtop: Вы не любите кошек ? Вы просто не умеете их готовить
1. Если открыть новый файл и ни разу не зайти в лист то он не инициализорован и нет там ничего, даже ВЭ нет, акад не воспринимает лист к обработке.
2. Лист должен быть хотя бы раз открыт.
3. Видео на работе нет, поэтому принтскрины для 2018.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 23
Размер:	160.1 Кб
ID:	210310  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 24
Размер:	70.2 Кб
ID:	210311  Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 24
Размер:	106.7 Кб
ID:	210312  Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 26
Размер:	142.4 Кб
ID:	210313  Нажмите на изображение для увеличения
Название: 5.png
Просмотров: 20
Размер:	81.3 Кб
ID:	210314  

baksconstructor вне форума  
 
Непрочитано 25.01.2019, 14:58
#16
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
сли открыть новый файл и ни разу не зайти в лист то он не инициализорован и нет там ничего, даже ВЭ нет, акад не воспринимает лист к обработке.
как думаешь я туда ВЭ добавил??
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 25.01.2019, 15:01
#17
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Цитата:
Сообщение от doctorraz Посмотреть сообщение
как думаешь я туда ВЭ добавил??
Может ещё кто отпишется, а ?
baksconstructor вне форума  
 
Непрочитано 25.01.2019, 15:11
1 | #18
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от kp+ Посмотреть сообщение
проверил. Ошибок нет ("ловушка" срабатывает), эффекта тоже:
попробуй после лиспа сохранить файл, не переходя в бумагу и снова его открыть после сохранения.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Да этож Реверс
понято

Последний раз редактировалось koMon, 25.01.2019 в 15:17.
koMon вне форума  
 
Автор темы   Непрочитано 25.01.2019, 15:30
#19
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от koMon Посмотреть сообщение
попробуй после лиспа сохранить файл, не переходя в бумагу и снова его открыть после сохранения.
работает...чокнуться можно. Интересно, какие ритуалы проделывает команда сохранения, что оно так получается? Команда REGENALL, например, точно не помогала.
Всем спасибо!
kp+ вне форума  
 
Непрочитано 25.01.2019, 16:07
#20
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


короч докладываю
лисп от VVA на АК2016х64 работает четко
на АК2018х64 хоть у ВЭ и становится свойство вкл в нет, но сами ВЭ не выключаются, сохранение чертежа не помогает. Помогает закрыть открыть файл.
думаю с РЕВЕРСОМ будет аналогично, потом проверю.
т.е. это АК2018 теперь так работает (((
__________________
Мастерская СПДС
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Отключение всех видовых экранов в файле

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание листов и видовых экранов на них Andrey_13 Готовые программы 415 23.02.2024 18:25
Как выключить "Показ блокированного/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