Тема: Сохранение подсветки выбранных объектов после ssget ":E"

При выборе объектов после команды ssget ":E" выбранные объекты подсвечиваются. Далее идет запрос указания базовой точки и после её указания вся подсветка выбранных объектов исчезает.
При указании объектов через entsel и последующей командой (redraw объёкт 3) подсветка сохраняется. Но в данном конкретном случае используется для выбора команда ssget ":E" и с ней redraw вместе работать не хочет.
Как сохранить или организовать подсветку выбранных объектов после ssget ":E"

Re: Сохранение подсветки выбранных объектов после ssget ":E"

1. (sssetfirst nab1)
выделит только ручки у обьектов набора nab1
2. (sssetfirst nab1 nab1)
выделит ручки и подсветит обьекты набора nab1
3. (sssetfirst)
снимает выделения (но не у объектов, подсвеченных с
помощью redraw)
Если системная переменная GRIPS установлена в "0" (нуль),
то выполняется только подсветка объектов без выделения их
ручек.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Да с функцией sssetfirst стало работать зачительно удобней. Подсветка с ручками более удобна! Но тут вылезла уже другая проблема. Эта функция может подсвечивать не более двух наборов. При работе этой функции в цикле на 3 шаге первый набор уже не подсвечивается, а подсвечен только последний(третий). А нужно отслеживать все ранее выделенные объекты.
Нужна функция, которая смогла бы формировать общий набор из отдельных наборов при работе в цикле. Тогда проблема бы решилась. Может быть такая функция есть? Или...

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Подсвечивать можно объединенный набор, а оперировать с каждым набором в отдельности.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Именно объединенный набор надо подсвечивать. Вопрос как сосздать объединенный набор?

Re: Сохранение подсветки выбранных объектов после ssget ":E"

SSADD тебе поможет...

Re: Сохранение подсветки выбранных объектов после ssget ":E"

ssadd не помогла, это я попробывал чуть ранее и сейчас повторно. Здесь похоже засада в том, что ssadd добавляет примитив в набор, а не набор к набору. Поэтому пока задача не поддалась.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

SSADD делает и то и другое.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Простой способ переборки:

 (setq count 0
ss1 (ssget)
      ss2   (ssadd)
)
(while (setq e1 (ssname ss1 count))
  (setq    count (1+ count)
    ss2   (ssadd e5 ss2)
  )
) 

В итоге в ss2 добавляются все примитивы из набора ss1
Удачи!
PS:

ML пишет:

SSADD делает и то и другое.

Поделись кодом... Я всегда пользовался перебором всего набора!

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Извиняюсь... не "e5" а "e1"
Короче брать отсюда:

 (setq count 0
      ss1 (ssget)
      ss2   (ssadd)
)
(while (setq e1 (ssname ss1 count))
  (setq    count (1+ count)
    ss2   (ssadd e5 ss2)
  )
) 

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Что-то у меня со вниманием... наверное допразновался....... :D
(setq count 0
      ss1 (ssget)
      ss2   (ssadd)
)
(while (setq e1 (ssname ss1 count))
  (setq    count (1+ count)
    ss2   (ssadd e1 ss2)
  )
)

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Редактор выдаёт, как и раньше одно и тоже типовое сообщение об ошибке:
; error: bad argument type: lentityp <Selection set: 186>
Это происходит после выбора первого набора ssget при попытке применить функцию ssadd. После первого выбора ssget образуется набор из нескольких блоков. После чего в цикле идет повтор выбора  аналогичного набора блоков. При попытке их объединения черех ssadd система и выдает сообщение об ошибке. Здесь не получается последовательного поштучного указания объектов, чтобы их можно было добавлять по одному в общий набор. Объединять хотелось бы "пачками". И что бы полсе каждой выбранной очередной "пачки" подсвечивались все указанные объекты.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

В догонку!
Создал два независимых набора через ssget ":E" ss1 и ss2.
А затем попробывал тупо выполнить
(setq ss3(ssadd ss1 ss2))
Выдается то же самое типовое сообщение об ошибке!
Наверное этот подход не корректен.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

> Анатолий Б
Попробуй так:

(defun test (/ ent i ss1 ss2)
  (sssetfirst nil nil)
  (redraw)
  (setq ss1 (ssget ":E"))
  (pl:ss-highlight ss1 3)
  (while (setq ss2 (ssget ":E"))
    (setq i -1)
    (while (setq ent (ssname ss2 (setq i (1+ i))))
      (if (not (ssmemb ent ss1))
        (ssadd ent ss1)
      )
    )
    (pl:ss-highlight ss1 3)
  )
  ss1
)
(defun pl:ss-highlight (ss mode / i ent)
  (setq i -1)
  (while (setq ent (ssname ss (setq i (1+ i))))
    (redraw ent mode)
  )
)
(setq mysel (test)) ;_ создать набор
(pl:ss-highlight mysel 4) ;_ снять подсветку

Это только демка.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

(setq
  ss1    (ssget)
  ss2    (ssget)
  count    -1
)
;;;ss2+=ss1
(while
  (setq    count (1+ count)
    e1    (ssname ss1 count)
  )
   (ssadd e1 ss2)
)

Re: Сохранение подсветки выбранных объектов после ssget ":E"

> Анатолий Б
Попробуй так:

(defun test (/ ent i ss1 ss2)
(sssetfirst nil nil)
(redraw)
(setq ss1 (ssget ":E"))
(pl:ss-highlight ss1 3)
(while (setq ss2 (ssget ":E"))
(setq i -1)
(while (setq ent (ssname ss2 (setq i (1+ i))))
(if (not (ssmemb ent ss1))
(ssadd ent ss1)
)
)
(pl:ss-highlight ss1 3)
)
ss1
)
(defun pl:ss-highlight (ss mode / i ent)
(setq i -1)
(while (setq ent (ssname ss (setq i (1+ i))))
(redraw ent mode)
)
)
(setq mysel (test)) ;_ создать набор
(pl:ss-highlight mysel 4) ;_ снять подсветку

Это только демка.
Сорри! Поправка - слэш забыл (2 модератор - пред. пост можно удалить).

Re: Сохранение подсветки выбранных объектов после ssget ":E"

> Евгений
Извини, погорячился, праздники...
Я добавляю так:
(setq ss_sym (ssad))
(foreach ss '(ss1 ss2 . . .)
  (setq i 0)
  (repeat (sslength ss)
    (ssadd (ssname ss i) ss_sym)
    (setq i (1+ i)
    )
  )
)

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Очень жаль... а я надеялся!!!

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Насколько я понимаю предложено один из наборов разложить на элементы и добавлять их поэлементно через ту же ssadd в базовый набор. Я попробую адаптировать предложенные варианты. А может быть имелось что-то принципиально иное.
Может через Active-X эту задчу можно решить более изящно.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

> Евгений
И мне тоже...

> Анатолий Б
Я, лишь, могу предложить чуть измененный
вариант того же:

(setq ss_sym (ssad))
(foreach ss '(ss1 ss2 . . .)
  (repeat (sslength ss)
    (setq el (ssname ss 0))
    (ssadd el ss_sym)
    (ssdel el ss)
  )
)

и посоветовать сделать из этого функцию.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Кстати, через  Active-X

 (vla-AddItems [SelectionSet] [Variant]) 

судя по всему можно добавлять к одному набору сразу вариант, т.е. нет необходимости перебора объектов...

Re: Сохранение подсветки выбранных объектов после ssget ":E"

На > ML (2005-01-10 02:57:59)
Ваше решение мне хочется отметить, как наиболее предпочтительное. Оно уже "дышит" и с ним буду работать далее. Хотелось получить еще пару комментариев по программе. В программе два раза последовательно использована функция while. Второе применение вероятно связано с выделением отдельного элемента второго набора и после проверки добавления его в первый набор. А вот первое применение while мне до конца понятно. По логике нужно как-то определить количество элементов в наборе (через length или) и организовать цикл перебора для всех элементов.
Что скажете.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Решение, которое упоминается в переписке, как "демка" удачно адаптировалась в задаче. Единственное изменение в концовке: для регенерации применена command "_regen". Спасибо всем за помощь.

Re: Сохранение подсветки выбранных объектов после ssget ":E"

> Анатолий Б
Видимо, имеется ввиду: > ЯR (2005-01-09 20:17:35), если да, то первый while предназначен для повтора выбора до того момента, пока юзер не сделает пустой выбор (т.е., в ответ на предложение покликать по примитивам, не нажмёт "Энтер").

Re: Сохранение подсветки выбранных объектов после ssget ":E"

Спасибо! Теперь всё понятно.
А главное заработало!