Lisp »Tips 'n Tricks »Seleziona e cambia layer
Seleziona con una linea spezzata n entità e le sposta di layer.
Procedura:
Cliccare su un oggetto per scegliere il layer campione.
Selezionare le entità da spostare con una o più linee.
Battere Invio o cliccare con il tasto destro del mouse per terminare il comando.
;;;
;;; PKLAYER.LSP (7/06/2003)
;;; Autore Claudio Piccini
;;;
(defun myerror (s)
(if (/= s "Function cancelled")
(princ (strcat "\nError: " s))
)
(ripVar)
(princ)
)
(defun salVar ()
(setq orto (getvar "orthomode"))
(setq snapp (getvar "osmode"))
(setq snm (getvar "snapmode"))
(setq piano (getvar "clayer"))
)
(defun ripVar ()
(command "_redraw")
(setvar "cmdecho" 1)
(setvar "osmode" snapp)
(setvar "snapmode" snm)
(setvar "orthomode" orto)
(setvar "clayer" piano)
(setvar "cecolor" "BYLAYER")
(setq *error* olderr)
(princ)
)
(defun cambia_layer (/
kk ec1 entEc1 newLayer
j k p1 p2 en pl1 pl2 pInt ls ss nEn
)
;codice selezione layer
(command "osnap" "_nea")
(setq kk 1)
(while kk
(setq ec1
(entsel "\n Seleziona l'entita' campione:")
)
(if (/= ec1 nil)
(setq kk nil)
(princ "\n Non e' stata selezionata")
)
)
(setq entEc1 (entget (car ec1)))
(setq newLayer (assoc 8 entEc1))
(setq newLayer (cdr newLayer))
;fine codice selezione layer
(setq j 1)
(command "osnap" "_non")
(initget (+ 1 32))
(setq p1
(getpoint "\n Punto iniziale:")
)
(while j
(initget 32)
(setq p2
(getpoint "\n Punto successivo:" p1)
)
(if (= p2 nil)
(setq j nil)
(progn
(command "_line" p1 p2 "")
(setq ls (list p1 p2))
(setq ss (ssget "_F" ls))
(setq nEn (sslength ss))
(setq k 0)
(repeat nEn
(setq en (ssname ss k))
;codice cambio layer
(command "_change" en "" "_p" "_la" newLayer "")
;fine codice cambio layer
(setq k (+ k 1))
)
(setq p1 p2)
)
)
)
)
(defun C:PKLAYER (/ olderr snapp snm
orto piano nomeDir
)
(setq olderr *error* *error* myerror)
(setvar "cmdecho" 0)
(salVar)
(command "_layer" "_s" "0" "")
(command "_color" "4")
(cambia_layer)
(ripVar)
)
;eof
|
Lisp »Tips 'n Tricks
|