AutoLISP - Изменить несколько слоев, выбрав несколько объектов
Я пытаюсь создать функцию AutoLISP, которая берет слой наборов выбора и сохраняет его в переменной. Я хочу выбрать объекты умножения, которые всегда находятся в одном слое, а затем изменить слой позже с помощью некоторых команд.
Я пробовал следующее, основываясь на (setq currentlayer (assoc 8 (entget (car (entsel)) )))
Мой код:
(defun c:objectslayer()
(setq objects (car (ssget))) ; Need to select multiply objects
(setq currentlayer (entget objects)) ; Need the layer of the objects, in my case, it will allways be in the same layer
(setq cl (assoc 8 currentlayer)) ; Need the layer, for commands to change the layer later
(prompt (strcat "\nThe layer of the objects is: " cl))
(princ)
)
Я ценю всю помощь и указание
заранее спасибо
1 ответ
Без предоставления аргумента списка фильтров ssget
функция, вы не можете гарантировать, что все объекты в выделении будут находиться на одном слое.
Если вы нацеливаетесь на определенный слой с вашей программой, то я бы предложил использовать список фильтров, чтобы разрешить только выбор объектов, находящихся на таком слое, например:
(ssget '((8 . "YourLayerHere")))
Кроме того, вы можете запросить выбор одного объекта для установки целевого слоя (используя entsel
), а затем запросить выбор нескольких объектов, находящихся на таком слое, используя ssget
со списком фильтров, построенным с использованием уровня объекта, полученного из entsel
например:
(if
(and
(setq ent (car (entsel "\nSelect object on target layer: ")))
(setq sel (ssget (list (assoc 8 (entget ent)))))
)
(progn
;; Do some operations ...
)
)
Если вы действительно хотите разрешить пользователю выбирать объекты на любом слое, то для получения списка выбранных слоев вы можете использовать что-то вроде:
(defun c:test ( / idx lay lst sel )
(if (setq sel (ssget))
(progn
(repeat (setq idx (sslength sel))
(setq idx (1- idx)
lay (cdr (assoc 8 (entget (ssname sel idx))))
)
(if (not (member lay lst)) (setq lst (cons lay lst)))
)
(print lst)
)
)
(princ)
)
Для получения дополнительной информации о том, как перебирать объекты в наборе выбора, вы можете обратиться к моему руководству по обработке набора выбора.