Selection sets

Автор Тема: Selection sets  (Прочитано 11470 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 900
  • Карма: 149
Re: Selection sets
« Ответ #30 : 01-02-2020, 11:44:59 »
vla-intersectwith покажет пересечения объектов. Проверить вхождение точки объекта внутрь определенной области можно, алгоритмы и их реализации существуют (прошу прощения, но заниматься поиском сейчас не хочу). Проверить совпадение примитивов - сложно, но можно. Проверить совпадение нескольких точек примитивов (при частичном наложении) тоже не особо проблема, как мне кажется.
Другой вопрос, что на больших чертежах плохо реализованный алгоритм будет работать отвратительно.
Я бы, наверное, сначала прошелся по пространству модели, получил все обрабатываемые примитивы, отсортировал их, например, по площади (или по длине - не столь суть важно) по убыванию и проверял - кто с кем и как совпадает, формируя отдельные списки данных. А вот потом уже начнется самое веселье - объединение примитивов, удаление лишних вершин и т.п.
Естественно я создаю наборы (ssget),
ИМХО вот это как раз и неестественно.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • Сообщений: 40
  • Карма: 1
Re: Selection sets
« Ответ #31 : 01-02-2020, 11:56:39 »
Т.е. ответа на вопрос "почему накапливаются наборы" не существует?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 900
  • Карма: 149
Re: Selection sets
« Ответ #32 : 01-02-2020, 12:06:53 »
У меня - нет.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #33 : 01-02-2020, 13:48:52 »
Естественно я создаю наборы (ssget), присваиваю им одно и тоже имя и в каждом цикле я их обнуляю... в этом месте в коде происходит обвал... (exceeded maximum number of selection sets).
Или баг в AutoCAD, или ты их не обнуляешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн altverАвтор темы

  • ADN OPEN
  • Сообщений: 40
  • Карма: 1
Re: Selection sets
« Ответ #34 : 01-02-2020, 14:13:16 »
Периодически использую этот лтсп (это Ваш лисп), и после использования любого набора ss сразу же обнуляю его вот так (setq SS nil)
Где ошибка? Что я делаю неверно?

Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:CLR_SEL ( / e n w lstt lst acad doc sels)
  2.    
  3.      
  4.     (setq n 0)
  5.  
  6.     (foreach e (atoms-family 0)
  7.        (if (= (type (vl-symbol-value e)) 'PICKSET) (progn
  8.      
  9.           (princ "\n") (princ e)
  10.            (set  e nil)
  11.            (setq n (1+ n))
  12.         ))
  13.        
  14.     );;for
  15.  
  16.     (setq acada (vlax-get-acad-object)
  17.         doc  (vla-get-activedocument acada)
  18.         sels (vla-get-selectionsets doc)
  19.     )
  20.  
  21.     (foreach sel  lst
  22.        (vla-delete sel)
  23.     )  
  24.     (princ "\n clear sets: ") (princ n)
  25.     (gc)
  26.     (princ)
  27.   )


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #35 : 01-02-2020, 14:18:13 »
altver,
Еще раз:
Или баг в AutoCAD, или ты их не обнуляешь.
Возможно не обнуляются наборы не в твоём коде, а в коде Express Tools, который ты используешь. Мой код чистит только наборы, которые имеют имена в глобальном пространстве имён. Он не может чистить локальные переменные.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 900
  • Карма: 149
Re: Selection sets
« Ответ #36 : 01-02-2020, 14:21:59 »
Александр Ривилис, а для vla-get-selectionsets точно надо foreach использовать, а не vlax-for? Проверял примерно таким кодом:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun t1 ()
  2.   (setq i 0)
  3.   (repeat 5
  4.     (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)))
  5.              (strcat "SelSet" (itoa (setq i (1+ i))))
  6.              ) ;_ end of vla-add
  7.     ) ;_ end of repeat
  8.   ) ;_ end of defun
  9. (defun t2 ()
  10.   (setq selset_coll (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
  11.   (princ (strcat "\nSelectionSets:" (itoa (vla-get-count selset_coll))))
  12.   (vlax-for item selset_coll (princ (strcat "\nSelset Name " (vla-get-name item))) (vla-delete item))
  13.   (princ)
  14.   ) ;_ end of defun
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 900
  • Карма: 149
Re: Selection sets
« Ответ #37 : 01-02-2020, 14:23:42 »
altver, в приведенном тобой коде не выполняется проход по SelectionSets, сформированных через ActiveX, насколько я вижу.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 900
  • Карма: 149
Re: Selection sets
« Ответ #38 : 01-02-2020, 14:24:59 »
Блин, только сейчас посмотрел на исходник кода... altver, у тебя код отличается от исходника.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • Сообщений: 40
  • Карма: 1
Re: Selection sets
« Ответ #39 : 01-02-2020, 14:33:21 »
Я очень извиняюсь! Поспешил...
Вот код, который я использую.

Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:CLR_SEL ( / e n w lstt lst acad doc sels)
  2.    
  3.    
  4.  
  5.     (setq n 0)
  6.  
  7.     (foreach e (atoms-family 0)
  8.        (if (= (type (vl-symbol-value e)) 'PICKSET) (progn
  9.      
  10.           (princ "\n") (princ e)
  11.            (set  e nil)
  12.            (setq n (1+ n))
  13.         ))
  14.        
  15.     );;for
  16.  
  17.     (setq acada (vlax-get-acad-object)
  18.         doc  (vla-get-activedocument acada)
  19.         sels (vla-get-selectionsets doc)
  20.     )
  21.  
  22.    (vlax-for sel sels (vla-clear sel))
  23.  
  24.     (princ "\n clear sets: ") (princ n)
  25.     (gc)
  26.     (princ)
  27.   )

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #40 : 01-02-2020, 14:48:42 »
Алексей Кулик наверное прав и нужно заменить (vla-clear sel) на (vla-delete sel)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн altverАвтор темы

  • ADN OPEN
  • Сообщений: 40
  • Карма: 1
Re: Selection sets
« Ответ #41 : 01-02-2020, 14:55:06 »
Я заменил на (vlax-for sel sels (vla-delete sel)), но все равно не работает...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #42 : 01-02-2020, 14:57:41 »
Я заменил на (vlax-for sel sels (vla-delete sel)), но все равно не работает...
В принципе, так как в приведенном тобой коде ты не работаешь с SelectionSet через ActiveX, то оно и не могло помочь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн altverАвтор темы

  • ADN OPEN
  • Сообщений: 40
  • Карма: 1
Re: Selection sets
« Ответ #43 : 01-02-2020, 15:01:23 »
Как не работаю? А это разве не через ActiveX?

Код - Auto/Visual Lisp [Выбрать]
  1. (setq acada (vlax-get-acad-object)
  2.         doc  (vla-get-activedocument acada)
  3.         sels (vla-get-selectionsets doc)
  4.     )
  5.  
  6.    (vlax-for sel sels (vla-clear sel))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #44 : 01-02-2020, 15:04:51 »
Как не работаю? А это разве не через ActiveX?
Это код очистки, а не основной код. Он не имеет отношения к твоим проблемам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение