cg-Cad

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