Lisp »Tips 'n Tricks »Seleziona e divide
Seleziona con una linea spezzata n linee e le divide nel punto d'intersezione.
Con la stessa procedura modificando il sorgente in modo appropriato, si può ad esempio intercettare e cambiare di piano (o colore) ad n oggetti...
;;;
;;; PKBREAK.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 spezza (/ j k p1 p2 en ed
pl1 pl2 pInt ls ss nEn
)
(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))
; (list (cons 0 "LINE")) filtra dal gruppo di selezione
; solo le entità linee.
(setq ss (ssget "_F" ls (list (cons 0 "LINE"))))
(setq nEn (sslength ss))
(setq k 0)
(repeat nEn
(setq en (ssname ss k))
(setq ed (entget en))
; assoc estrae i punti estremi della linea
; inters ricava il punto pInt in comune
; break spezza la linea en in pInt
(setq pl1 (cdr (assoc 10 ed)))
(setq pl2 (cdr (assoc 11 ed)))
(setq pInt (inters p1 p2 pl1 pl2))
(command "_break" en pInt pInt)
(setq k (+ k 1))
)
(setq p1 p2)
)
)
)
)
(defun C:PKBREAK (/ olderr snapp snm
orto piano nomeDir
)
(setq olderr *error* *error* myerror)
(setvar "cmdecho" 0)
(salVar)
(command "_layer" "_s" "0" "")
(command "_color" "4")
(spezza)
(ripVar)
)
;eof
|
Lisp »Tips 'n Tricks
|