LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst

LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst

Ответ
Поиск в этой теме
Непрочитано 13.01.2011, 16:06 #1
LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst
TararykovDG
 
Программист-энтузиаст
 
Воронеж
Регистрация: 17.07.2009
Сообщений: 575

Желаю всем здравствовать.
Вопрос такой. С помощью функций ssgetfirst и sssetfirst программно получаю набор выбранных на чертеже примитивов, т. е. примитивов с включенными ручками (ssgetfirst) или, наоборот, включаю ручки и подсвечиваю нужные примитивы на чертеже (sssetfirst nil <набор примитивов>). А для того, чтобы снять выделение с примитивов использую (sssetfirst nil nil). Так вот, нормально работает пока количество примитивов не очень велико, а вот если их много (например, > 50000), то вот подсвечиваются они (sssetfirst nil <набор>) нормально, а снятие выделения (sssetfirst nil nil) приводит к зависанию минут на 10, а то и вообще к полному абзацу! Кто знает, либо это только у меня ACad глючит, либо может есть альтернатива sssetfirst для снятия выделения с примитивов.
__________________
cadtools
Просмотров: 5289
 
Непрочитано 13.01.2011, 16:33
1 | #2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


только что проверил 89600 объектов - снимается (как и ставится) где-то за секунду
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.01.2011, 16:44
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Дима_ Посмотреть сообщение
только что проверил 89600 объектов - снимается (как и ставится) где-то за секунду
Спасибо Дима_, значит дело скорее всего в моем конкретном ACad'e.
Вечером попробую на домашнем компе.
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.01.2011, 16:46
1 | #4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Как вариант
Код:
[Выделить все]
(if (setq ss (ssget "_I"))
  (command "_select")
  )
Цитата:
Сообщение от TararykovDG Посмотреть сообщение
а снятие выделения (sssetfirst nil nil) приводит к зависанию минут на 10, а то и вообще к полному абзацу!
Попробуй это же самое при выключенном окне свойств
Код:
[Выделить все]
(command "_propertiesclose")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.01.2011, 16:48
2 | #5
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


попробуй может так будет быстрее:
Код:
[Выделить все]
(sssetfirst nil  (ssadd(entlast)))
(sssetfirst nil nil)
или что нибудь на тему Esc, например:
Код:
а вообще, у меня тоже мгновенно (проверял на огромном массиве окружностей).
Хотя, на скорость влияет много факторов - настройки видеокарты, количество памяти, тип объектов выделения, например штриховки сильно подгружают видеоподсистему при выделении, а сплайны, грузят процессор...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 14.01.2011, 09:40
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Попробовал на домашнем компе картина только усугубилась. Получилось следующее. Когда выбираем объекты на чертеже рамкой с помощью мыши, то в зависимости от значения системной переменной GRIPOBJLIMIT, объекты либо просто подсвечиваются пунктирной линией, если количество объектов больше заданного в GRIPOBJLIMIT, либо у них еще и включаются ручки, если меньше. Так вот если включена только подсветка объектов, то (sssetfirst nil nil) снимет выделение с объектов моментально (для любого количества объектов), а если были включены ручки, то все работает гораздо медленнее.

VVA Окно свойств и так вроде закрыто

Вариант (sssetfirst nil (ssadd (entlast))) (sssetfirst nil nil) не помог

Вариант (command nil) и (command “_select”) при тех же условиях работаю отлично, спасибо VVA и Елпанов Евгений. (Есть только один минус. Оба варианта выкидывают в ком. строку служебную инфу в отличии от sssetfirst)
__________________
cadtools

Последний раз редактировалось TararykovDG, 14.01.2011 в 09:49.
TararykovDG вне форума  
 
Непрочитано 14.01.2011, 10:12
1 | #7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Оба варианта выкидывают в ком. строку служебную инфу в отличии от sssetfirst
А так
Код:
[Выделить все]
(defun unselect()
(setvar "nomutt" 1)
(command "_select")
(while (> (getvar "CMDACTIVE") 0) (command ""))  
(setvar "nomutt" 0)
(princ))
(defun C:Q ()(unselect))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.01.2011, 10:48
#8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от VVA Посмотреть сообщение
А так
Код:
[Выделить все]
(defun unselect()
(setvar "nomutt" 1)
(command "_select")
(while (> (getvar "CMDACTIVE") 0) (command ""))  
(setvar "nomutt" 0)
(princ))
(defun C:Q ()(unselect))
Да, я сам люблю использовать nomutt, чтобы заменить подсказку для ssget.
Получается так:
nomutt = 1 ; cmdecho = 1
(command nil) -> *Прервано*
(command “_select”) -> _.select

nomutt = 1 ; cmdecho = 0
(command nil) -> *Прервано*
(command “_select”) -> "" - то что нужно, еще раз спасибо VVA
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком ElectroBOG LISP 20 23.07.2010 16:00
Как снять выделение с объекта оап AutoCAD 2 02.07.2008 01:36