Доброе время суток!
Помогите понять. Неоднократно в большой программе применяю лисп для
нахождения объекта проходящего через точку ,возможно с фильтром
(defun PoiskEntLstNew ( ptP lstLay / )
; Находит объекты лежащие под точкой
; - точка
; - список слоев в виде ((-4 . "<OR") (8 . "CALZ20") (8 . "CALZ10") (8 . "CALZ30") (8 . "CalBlock") (-4 . "OR>"))
(setq stp1 (polar (polar ptP pi 0.01(/ pi 2.0) 0.01
stp2 (polar (polar ptP 0 0.01) (/ pi 2.0) 0.01
stp3 (polar (polar ptP 0 0.01(- 0 (/ pi 2.0)) 0.01
stp4 (polar (polar ptP pi 0.01(- 0 (/ pi 2.0)) 0.01
)
(setq ret nil)
(setq ss (ssget "_C" stp1 stp3 lstlay))
(setq lst1 ( pl:selset-to-enamelist ss))
(setq ss nil)
(foreach itP lst1
(if (or (= (cdr (assoc 0 (entget itP))) "LINE")
(= (cdr (assoc 0 (entget itP))) "LWPOLYLINE")
(= (cdr (assoc 0 (entget itP))) "POLYLINE")
(= (cdr (assoc 0 (entget itP))) "CIRCLE")
(= (cdr (assoc 0 (entget itP))) "ARC"))
(setq ret(append (list ret)))
);;for
ret
);;PoiskEntLstNew
Экспериментально выяснили, что в некоторый момент использования этого лиспа
происходит переполнение наборов ("exceeded maximum number of selection sets").
(Идея лиспа, находящего объекты под точкой взята с ваших, Александр, постов).
Посторонних модулей нет, всю программу пересмотрел, все наборы обнуляю сразу же после использования.
Как избежать такой ошибки, как уменьшить количество наборов?
(Работаю в AutoСad 2020)
Благодарен за любую помощь.