(defun c:EV () ;;; elimina un vertice della polilinea. (setvar "cmdecho" 0) (setq lista-punti nil) (setq lista-puntiZ nil) (setq clay(getvar "clayer")) (setq RF0(car(entsel "\n Seleziona la polilinea: "))) (if RF0 (vai6)) (princ) ) ;--------------------------------------------------------------------- (defun vai6 () (if (or (= (cdr (assoc 0 (entget RF0))) "LWPOLYLINE")(= (cdr (assoc 0 (entget RF0))) "POLYLINE")) (progn (setq lista-punti nil) (setq Xmin 100000000.00) (setq Ymin 100000000.00) (setq Xmax -100000000.00) (setq Ymax -100000000.00) (setq Ramo(entget RF0)) (if (= (cdr(assoc 0 Ramo)) "POLYLINE") (progn (setq 0ent0(entnext RF0)) (setq 0ent(entget 0ent0)) (setq 0entT(cdr(assoc 0 0ent))) (while (/= 0entT "SEQEND") (setq X(car (cdr(assoc 10 0ent)))) (setq Y(cadr (cdr(assoc 10 0ent)))) (setq Z(caddr (cdr(assoc 10 0ent)))) (setq lista-punti(cons (list X Y Z) lista-punti)) (setq 0ent0(entnext 0ent0)) (setq 0ent(entget 0ent0)) (setq 0entT(cdr(assoc 0 0ent))) (if (< X Xmin)(setq Xmin X)) (if (< Y Ymin)(setq Ymin Y)) (if (> X Xmax)(setq Xmax X)) (if (> Y Ymax)(setq Ymax Y)) ) ) ) (if (= (cdr (assoc 0 Ramo)) "LWPOLYLINE") (progn (setq lista-punti0(member (assoc 10 Ramo) Ramo)) (setq cont 0) (repeat (/ (- (length lista-punti0) 1) 4) (setq cod(nth cont lista-punti0)) (setq lista-punti(cons (list (cadr cod) (caddr cod) 0) lista-punti)) (if (< X Xmin)(setq Xmin X)) (if (< Y Ymin)(setq Ymin Y)) (if (> X Xmax)(setq Xmax X)) (if (> Y Ymax)(setq Ymax Y)) (setq cont(+ cont 4)) ) )) (initget (+ 1 2 128)) (setq Vpoli(getpoint "\n Seleziona il vertice da eliminare: ")) (setq Vpoli (list (car Vpoli) (cadr Vpoli))) (setq kk 0) (repeat (length lista-punti) (setq E1(nth kk lista-punti)) (setq XY(list (car E1) (cadr E1))) (if (not (equal XY Vpoli 0.0001)) (setq lista-puntiZ(cons E1 lista-puntiZ)) ) (setq kk(+ kk 1)) ) (setq lista-puntiZ(reverse lista-puntiZ)) (setq ent(entget RF0)) (setq piano(cdr(assoc 8 ent))) (command "_erase" RF0 "" ) (CreaPolilinea lista-puntiZ) )) ) ;--------------------------------------------------------------------- (defun CreaPolilinea (lista-vertici) (entmake (list (cons 0 "POLYLINE") (cons 8 piano) (cons 70 8) ) ) (setq k 0) (repeat (length lista-vertici) (setq V(nth k lista-vertici)) (setq VX(car V)) (setq VY(cadr V)) (setq VQ(caddr V)) (entmake (list (cons 0 "VERTEX") (cons 8 piano) (cons 10 (list VX VY VQ)) (cons 70 32) ) ) (setq k(+ k 1)) ) (entmake (list (cons 0 "SEQEND") (cons 8 piano))) ) ;--------------------------------------------------------------------- (princ "\n Digitare EV per lanciare il programma") (princ "\n ") (princ)