Selection sets

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Selection sets
« Ответ #45 : 01-02-2020, 15:05:57 »
altver, vla-clear очищает, но не удаляет набор.
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Re: Selection sets
« Ответ #46 : 01-02-2020, 15:17:45 »
Это код очистки, а не основной код. Он не имеет отношения к твоим проблемам.


в основном коде я делаю например 
(setq ssetPo (ssget "_X" (list (cons 8  "StrojTemp"))))
Потом использую этот набор и сразу же делаю (setq ssetPo nil)

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Selection sets
« Ответ #47 : 01-02-2020, 16:37:08 »
Мне уже становится любопытно :)
Образец файла dwg в студию и какую функцию из #24 запускаешь :)
Все, что сказано - личное мнение.

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

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

Оффлайн SergLPN

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Selection sets
« Ответ #48 : 03-02-2020, 23:04:29 »
Доброе время суток!
Я формирую набор в ActiveX. В конце программы я удаляю объекты.
Но в процессе выполнения большой программы все равно возникает ошибка "Превыщшено
 максимальное количество наборов"
Что я делаю не так? Почему не удаляются наборы? Почему переполняетя кроличество
 наборов?
Код - Auto/Visual Lisp [Выбрать]
  1. (defun selSetPolygon ( /  )
  2.      (vl-load-com)
  3.     (setq acadObj (vlax-get-acad-object))
  4.     (setq doc (vla-get-ActiveDocument acadObj  ))
  5.     (setq ssets (vla-get-SelectionSets doc))
  6.     (setq Nset (vla-Add ssets "SS1"))
  7.  
  8.     (setq ptlist (list  (getpoint) (getpoint)  (getpoint)  (getpoint)))
  9.     (setq ptlist (apply 'append ptlist))
  10.     (if (= (rem (length ptlist) 3) 0)
  11.         (progn
  12.           (setq  tmp (vlax-make-safearray    vlax-vbDouble     (cons 0 (- (length ptlist) 1))  )     )
  13.           (vlax-safearray-fill tmp ptlist)
  14.        )
  15.    );;if
  16.    (vla-SelectByPolygon Nset acSelectionSetCrossingPolygon tmp )
  17.    (setq ret nil)
  18.    (setq ii 0)
  19.    (repeat (vla-get-count Nset)
  20.          (setq item (vla-item Nset ii))
  21.          (setq ret (append ret (list (vlax-vla-object->ename item))))
  22.          (setq ii (1+ ii))
  23.   );;ret
  24.   (vla-clear (vla-item Ssets "SS1"))
  25.   (vla-delete (vla-item Ssets "SS1"))
  26.   ret  )

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #49 : 03-02-2020, 23:32:52 »
А если вместо
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-clear (vla-item Ssets "SS1"))
  2. (vla-delete (vla-item Ssets "SS1"))
использовать
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-delete nSet)
?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SergLPN

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Selection sets
« Ответ #50 : 07-02-2020, 17:10:55 »
Доброе время суток!
Я в просессе выполнения больщой программы  неоднократно формирую  наборы в ActiveX с помощью такого
 лиспа.

Код - Auto/Visual Lisp [Выбрать]
  1. (defun selSetPolygon (Typ Points   / acadObj doc one  lsts kol a lstSB )
  2.      (vl-load-com)
  3.      (setq acadObj (vlax-get-acad-object))
  4.      (setq doc (vla-get-ActiveDocument acadObj  ))
  5.      (setq sets (vla-get-SelectionSets doc))
  6.  
  7.      (If (> (vla-get-count sets )  0)
  8.          (vla-delete (vla-item sets "SS1"))
  9.      )  
  10.  
  11.      (setq Nset (vla-Add sets "SS1"))
  12.      (cond
  13.         ( (= Typ "F")
  14.           (setq REgim acSelectionSetFence)
  15.         )
  16.         ( (= Typ "CP")
  17.           (setq REgim acSelectionSetCrossingPolygon)
  18.         )
  19.         ( (= Typ "WP")
  20.           (setq REgim acSelectionSetWindowPolygon)
  21.         )
  22.      )    
  23.    
  24.      (setq ptlist nil)
  25.      (if Points (progn
  26.         (setq pt (car Points))
  27.         (setq ptlist (cons pt ptlist))
  28.         (foreach pt (cdr Points)
  29.             (setq ptlist (cons pt ptlist))
  30.         );for
  31.         (setq ptlist (apply 'append ptlist))
  32.         (if (= (rem (length ptlist) 3) 0)
  33.             (progn
  34.                (setq  tmp (vlax-make-safearray    vlax-vbDouble     (cons 0 (- (length ptlist) 1))  )     )
  35.                 (vlax-safearray-fill tmp ptlist)
  36.             );;prg
  37.            (setq tmp nil)
  38.         );;if
  39.       );;pg
  40.     ) ;;if
  41.      (vla-SelectByPolygon Nset Regim tmp )
  42.      (setq ret nil  ii 0)
  43.      (repeat (vla-get-count Nset)
  44.          (setq item (vla-item Nset ii))
  45.          (setq ret (append ret (list (vlax-vla-object->ename item))))
  46.          (setq ii (1+ ii))
  47.    );;ret
  48.      (vla-Delete Nset)
  49.      ret  
  50. )
  51.  
В конце программы я делаю UNDO  в начало. И этот лисп перестает работать.
Выдает ошибку "Automation Error. Description was not provided."
Однако,если сохранить чертеж,перегрузить его и запустить программу с того
места чертежа, где получил вышеуказанную ошибку,то ошибки нет.
Почему это протсходит? Что произошло с ActiveX в акаде?
(Работаю в Avtocad 2020)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #51 : 07-02-2020, 17:14:02 »
Выдает ошибку "Automation Error. Description was not provided."
На какой строке кода?
P.S.: По большому счету в этом коде совершенно не нужен COM/ActiveX. Есть функции (ssget) (sslength) (ssname) ...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SergLPN

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Selection sets
« Ответ #52 : 07-02-2020, 20:06:05 »
При использовании функции (ssget)  у меня возникает ошибка
"exceeded maximum number of selection sets", и оказывается ,
 что есть проблема очистки наборов. Поэтому я использую com/ActiveX>,
к тому же я тут же удаляю набор.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #53 : 07-02-2020, 20:24:56 »
SergLPN,
Ошибка не в приведённом тобой коде. Это где-то глубже.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SergLPN

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Selection sets
« Ответ #54 : 09-02-2020, 17:33:30 »
Доброе время суток!
Помогите разобратся. Неоднократно формирую  наборы с помощью комнды,возможно с фильтрами
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ss (ssget))
  и тут же делаю
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ss nil)
Кажется соблюдаю все провила обработки наборов. Но в процессе  впыполнения
большого лиспа Автокад выдает ошибку ""exceeded maximum number of selection sets""
связанную с превышением количества наборов 128. Постороних лиспов не использую.
Как избежать такой ошибки, как уменьшить количество наборов?
(Работаю в Avtocad 2020)
Благодарен за любую помощь.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #55 : 09-02-2020, 17:45:43 »
Совершенно нормальный код, если так. Если не было прерывания выполнения команды без очистки набора...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #56 : 09-02-2020, 17:47:58 »
(Работаю в Avtocad 2020)
Такой программы не знаю. Знаю AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #57 : 09-02-2020, 17:54:11 »
Вообще тема создана 15 лет назад: https://www.caduser.ru/forum/topic17828.html
За это время ничего нового не появилось.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SergLPN

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Selection sets
« Ответ #58 : 09-02-2020, 18:02:02 »
Извините за "Avtocad" . Очистки набора, если вы имеете ввиду
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ss nil)
, у меня происходит через 1-3 строки после создания набора. Так эта очистка достаточна для НЕ увеличения количества наборов?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Selection sets
« Ответ #59 : 09-02-2020, 18:35:32 »
Так эта очистка достаточна для НЕ увеличения количества наборов?
Вполне. если какой-нибудь другой код не создаёт наборы (не обязательно ваш, но используемый в вашей программе).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение