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

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

Почему sssetfirst иногда не показывает выделение

Ответ
Поиск в этой теме
Непрочитано 26.11.2020, 17:15 #1
Почему sssetfirst иногда не показывает выделение
alik3001
 
Регистрация: 12.09.2016
Сообщений: 33

Приветствую всех. Столкнулся с такой проблемой.
Через лисп выделяю объекты
(setq selSet (ssget))
(sssetfirst nil selSet)
Иногда показывает на экране выделение, иногда не показывает. Хотя в свойствах видно, что объекты выделены и если нажать какую-нибудь команду, то появляется выделение, то есть подсветка объектов. В чем причина?
Просмотров: 1815
 
Непрочитано 11.11.2024, 22:39
#2
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от alik3001 Посмотреть сообщение
Иногда показывает на экране выделение, иногда не показывает. Хотя в свойствах видно, что объекты выделены и если нажать какую-нибудь команду, то появляется выделение, то есть подсветка объектов. В чем причина?
За 4 года - 1333 пустых просмотров и 0 ответов. Завораживающих своей глубокомысленностью...

Когда-то я тоже задавал вопрос об этом же. Ответы были, но с решениями было туговато.
Ок. Если никто не знает прямого ответа, то, может, кто знает ответ кривой?
Каким костылем можно заставить отображать выбранное-выделенное?
Я посмотрел, что выбор становится видимым после _REGEN. Но, во-первых, _REGEN в тяжелых файлах занимает время, а из lisp он дает ненужное неподавляемое сообщение.
Нет ли костыля полегче?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 12.11.2024, 07:43
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
Иногда показывает на экране выделение, иногда не показывает.
А что тут ответишь? Это примерно, как про "кто-то стучит" у Стругацких.

Как вариант - ACAD "затыкается" на наборах, которых "до этого" по ходу
выполнения разных программ нахватали, да так и не сбросили.

Я вообще, когда с наборами работаю, давным-давно взял за правило:

1) обработал примитивы, сбросил набор в nil (пусть даже это и локальная
переменная)
2) тут же следом - (gc)

И хорошо. Всё стабильно.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 12.11.2024, 08:16
#4
Valera1985


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


Я заметил, что если сначала выделять, а потом SSGET, то и не подсвечивает. Если выбирать самим SSGET, то подсвечивает всегда.
Valera1985 вне форума  
 
Непрочитано 12.11.2024, 08:21
#5
Кулик Алексей aka kpblc
Moderator

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


pickfirst ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2024, 08:51
#6
name02


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


А если попробовать так:
Код:
[Выделить все]
 (defun c:GetSS (/ a i)
  (setq a (ssget))
  (repeat (setq i (sslength a))
    (redraw (ssname a (setq i (1- i))) 3)
  ) ;_ end repeat
  (sssetfirst nil a)
  a
) ;_ end defun
name02 вне форума  
 
Непрочитано 12.11.2024, 08:53
#7
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
Я заметил, что если сначала выделять, а потом SSGET, то и не подсвечивает.
Так если нужно работать с предварительно выбранными объектами,
то "ссгетиться" нужно через "i", т.е.:

(setq selSet (ssget "_i"))
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 12.11.2024, 22:51
#8
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Valera1985 Посмотреть сообщение
Я заметил, что если сначала выделять, а потом SSGET, то и не подсвечивает. Если выбирать самим SSGET, то подсвечивает всегда.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
pickfirst ?
Введение запрета на предварительный выбор вообще снижает удобство для пользователей. И сильно снижает, если на вход нужно подать многие и не просто выбираемые объекты.
Цитата:
Сообщение от name02 Посмотреть сообщение
А если попробовать так:
Код:
[Выделить все]

(defun c:GetSS (/ a i)
(setq a (ssget))
(repeat (setq i (sslength a))
(redraw (ssname a (setq i (1- i))) 3)
) ;_ end repeat
(sssetfirst nil a)
a
) ;_ end defun
Добавление цикла + действия redraw тоже же займет время. Не будет ли это то же, что _REGEN?
И redraw делает выделение только пунктиром, что не всегда видно.

... Какое-нибудь холостое легкое действие бы. Выполняющееся быстро.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 13.11.2024, 05:14
#9
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Сорри, а чем эта конструкция-то плоха?

Код:
[Выделить все]
 (if (null (setq selSet (ssget "_i")))(setq selSet (ssget)))
(sssetfirst nil selSet)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 13.11.2024, 06:40
#10
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Сорри, а чем эта конструкция-то плоха?

Код:
[Выделить все]
 (if (null (setq selSet (ssget "_i")))(setq selSet (ssget)))
(sssetfirst nil selSet)
Нужно произвести действие одним множеством объектов, указанным пользователем, с другим множеством объектов, указанным пользователем, и показать те объекты, которые попали под это действие.
И возможность предварительного выбора не означает, что нужно не дать возможности выбрать после запуска программы.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 13.11.2024, 07:10
#11
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ну так сбрось предварительный выбор вызовом пустого
(command) перед (if ...), если в менюшку для вызова
программы не добавлено ^C^C ...

Или сперва запомни предварительный набор в какой-
нибудь переменной, потом сбрось его, снова (ssget)
для нового набора и обрабатывай уже все объекты.

Или опять не то?
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 13.11.2024 в 07:17.
===AAA=== вне форума  
 
Непрочитано 13.11.2024, 07:30
#12
name02


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
И redraw делает выделение только пунктиром, что не всегда видно.
У меня в Автокаде 2022 redraw подсвечивает голубым объект.
Я потому и сделал так:
1 (ssget) - создает набор с выбранными объектами, но не выделяет их
2 (redraw) показывает объекты голубым выделением
3 (sssetfirst) показывает выделенное с ручками, т.е. (redraw) выполняется подстраховку на случай, если (sssetfirst) не подсветит объекты

Насчет цикла - с теоретической точки зрения - конечно да, время-ресурные затраты будут. Другой вопрос - насколько это все будет заметно и будет ли мешать пользователю?
name02 вне форума  
 
Непрочитано 13.11.2024, 07:50
#13
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
У меня в Автокаде 2022 redraw подсвечивает голубым объект.
В наноКАДе это настраивается (см. рисунок), может быть и в Автокаде тоже?
Интересно, какая системная переменная за эту настройку отвечает?
Миниатюры
Нажмите на изображение для увеличения
Название: Подсветка.png
Просмотров: 14
Размер:	9.4 Кб
ID:	265471  
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 13.11.2024, 08:05
#14
name02


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


За смену "цвет или пунктир" переменная SELECTIONEFFECT (1 или 0 соответственно)
Цвет выделения можно поменять тут:
Нажмите на изображение для увеличения
Название: Окно.png
Просмотров: 12
Размер:	33.2 Кб
ID:	265474
name02 вне форума  
 
Непрочитано 13.11.2024, 08:26
#15
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


В nanoCAD23.1 переменная SELECTIONEFFECT на это дело не влияет.

Похоже, они для некоторых настроек отдельную ветку реестра замутили
и управляется оно только "руками" через меню. :-(
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему sssetfirst иногда не показывает выделение



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему Автокад не показывает атрибуты, созданные в редакторе блоков, а не непосредственно на чертеже, при вставке блока на чертёж? cancercat AutoCAD 30 06.02.2023 10:20
Почему не снимается выделение с нескольких объектов в AutoCAD-e, а только по 1-му. Яковлева AutoCAD 9 10.07.2014 15:32
AutoCad 2014 (2013, MEP2013). Win 8. Тормозит при простейших операциях, почему? Prostofoxit AutoCAD 7 12.01.2014 11:44
Почему Layer control не показывает список слоёв AUTOCAD 2010 (только текущий слой) Bonifacij9 AutoCAD 7 17.12.2013 09:19
Почему при перемещении узла на 28 см. SCAD показывает "зеленые" стержни? AIRAT_YUNUSOV SCAD 14 06.08.2013 12:53