Показать сообщение отдельно
Старый 09.08.2010, 17:13   #20
1986Pavel
Местный
 
Аватар для 1986Pavel
 
Регистрация: 19.10.2008
Сообщений: 183
Сказал(а) спасибо: 54
Поблагодарили 72 раз(а) в 30 сообщениях
Вес репутации: 223
1986Pavel скоро придёт к известности
По умолчанию

Может еще кому понадобится. Я иной раз использую.

Код:
(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. Если кому непонятно, что со всем этим делать и как запускать, то напишите - объясню все в подробностях.
1986Pavel вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Drono (27.04.2018)