Может еще кому понадобится. Я иной раз использую.
Код:
(Defun C:KUU (/ SS CNT LAY)
(acet-error-init
(list
(list "cmdecho" 0)
T ;flag. True means use undo for error clean up.
) ;list
) ;acet-error-init
(if (not (setq SS (ssget "_i")))
(progn
(prompt
"\nSelect objects to be changed to the current layer: "
) ;_ end of prompt
(setq SS (ssget))
) ;_ end of progn
) ;_ end of if
(if SS
(progn
(setq CNT (sslength SS))
(princ (acet-str-format "\n%1 found." (itoa CNT)))
; Report number of items found
(sssetfirst nil nil)
(command "_.move" SS "") ; filter out objects on locked layers
(if (> (getvar "cmdactive") 0) ; if there are still objects left
(progn
(command "0,0" "0,0")
(setq SS (ssget "_p")
CNT (- CNT (sslength SS))
) ;_ end of setq
) ; count them
(setq SS nil) ; else abort operation
) ;_ end of if
(if (> CNT 0) ; if items where filtered out
(if (= CNT 1)
(princ
(acet-str-format "\n%1 was on a locked layer." (itoa CNT))
) ; report it.
(princ
(acet-str-format "\n%1 were on a locked layer." (itoa CNT))
) ;_ end of princ
) ;_ end of if
) ;_ end of if
) ;_ end of progn
) ;_ end of if
(if SS
(progn
(setq LAY (getvar "CLAYER"))
(command "_.chprop" SS "" "_la" LAY "")
(command "_.chprop" SS "" "_C" "_bylayer" "")
(command "_.chprop" SS "" "_LT" "_bylayer" "")
(command "_.chprop" SS "" "_LW" "_bylayer" "")
(if (= (sslength SS) 1)
(prompt
(acet-str-format
"\nOne object changed to layer %1 (the current layer)."
LAY
) ;_ end of acet-str-format
) ;_ end of prompt
(prompt
(acet-str-format
"\n%1 objects changed to layer %2 (the current layer)."
(itoa (sslength SS))
LAY
) ;_ end of acet-str-format
) ;_ end of prompt
) ;_ end of if
) ;_ end of progn
) ;_ end of if
(acet-error-restore)
(princ)
) ; defun
Эта команда переносит выбранные объекты на текущий слой и делает все свойства По слою/by layer
Если набор элементов уже есть, то переносит их на текущий слой без запроса, если активного набора нет, то выдает запрос на выбор объектов.
---------- Добавлено в 17:13 ---------- Предыдущее сообщение было написано в 17:00 ----------
Так же еще одна вещь. Понадобилась мне она правда один раз да и то не в мебели, но применить можно и не только со значком диаметра.
Код:
(defun C:DD (/)
(vl-load-com)
(vla-startundomark
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
)
(if (not (setq DIM (ssget "_I" '((0 . "DIMMENSION")))))
(progn
(prompt "\nSelect dimension:")
(setq DIM (ssget '((0 . "DIMENSION"))))
) ;_ end progn
) ;_ end if
(setq nabor (sslength DIM))
(setq r 0)
(repeat nabor
(setq xx (entget (ssname DIM r)))
(setq r (1+ r))
(entmod (subst (cons 1 "%%c<>") (assoc 1 xx) xx)); "%%c" - это символ диаметра. Заменить можно на любой другой префикс размера. (Допуск, градусы и т.п. или просто текст)
) ;_ end repeat
(vla-endundomark adoc)
(princ)
) ;_ end defun
Работает следующим образом. Добавляет символ диаметра для выбранных размеров. Выбирать можно секущей рамкой, не опасаясь что рамка захватывает и обычные примитивы. В активном наборе останутся все равно только размеры.
P.S. Если кому непонятно, что со всем этим делать и как запускать, то напишите - объясню все в подробностях.