V I S U A L I Z Z A D I S C U S S I O N E |
Jarjarfix1 |
Inserito il - 08 gennaio 2009 : 17:53:31 Buona sera a tutti. Da un po di tempo utilizzo il Lisp (che riporto sotto) per eliminare i vertici delle mie polilinee 2d. Purtroppo mi sono accorto che, dopo aver utilizzato il programmino, le mie polilinee 2d si sono trasformate in polilinne 3d. Questo non mi permette di unirle con altre polilinee. Da perfetto ignorante in materia di programmazione Lisp ci chiedo se si riesce a modificare il programma in modo che le polilinee rimangano 2d. Grazie a tutti
(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 <Copyright: ing. Claudio Granuzzo - 2002> ") (princ) |
9 U L T I M E R I S P O S T E (in alto le più recenti) |
Jarjarfix1 |
Inserito il - 06 dicembre 2012 : 17:38:38 Mi stento stupido per non essermene accorto........grazie mille |
GP |
Inserito il - 06 dicembre 2012 : 17:35:47 Visto che utilizzi la 2012 posizionati sul grip del vertice da eliminare, viene visualizzata in automatico l'opzione per la rimozione. |
Jarjarfix1 |
Inserito il - 06 dicembre 2012 : 16:13:53 A distanza di tempo ho riprovato a installare questo lisp ma non riesco a farlo funzionare. L'errore che mi da è il seguente
Comando: _EV Seleziona la polilinea: ; errore: tipo di argomento errato: consp 0
Ho autocad 2012 full mentre prima (quando funzionava) avevo la versione 2008. Qualcuno mi sa essere d'aiuto? Grazie in anticipo |
GP |
Inserito il - 09 gennaio 2009 : 16:33:18 Citazione: Messaggio inserito da arri
per evitare questi disguidi basta che gli anteponi il punto e virgola (alle righe da cancellare) così diventano ininfluenti per chi copia incolla tutto
E' una cosa che faccio normalmente, ma spesso capita di incollare solo porzioni di lisp e il punto e virgola, essendo poco visibile, sistematicamente "scappa" a qualcuno, è per questo che ho preferito evidenziare, però hai ragione.
Citazione: Messaggio inserito da Jarjarfix1
Con il "punto e virgola" fuinziona tutto alla perfezione....Grazie mille
Invece cancellando la riga rossa no? |
Jarjarfix1 |
Inserito il - 09 gennaio 2009 : 14:29:48 Con il "punto e virgola" fuinziona tutto alla perfezione....Grazie mille |
arri |
Inserito il - 09 gennaio 2009 : 12:18:28 Citazione: Messaggio inserito da GP
Boh, a me funzia.
Incolla il testo che ho postato sopra cancellando le linee che ho evidenziato in rosso.
Facce sape'
per evitare questi disguidi basta che gli anteponi il punto e virgola (alle righe da cancellare) così diventano ininfluenti per chi copia incolla tutto |
GP |
Inserito il - 09 gennaio 2009 : 11:56:45 Boh, a me funzia.
Incolla il testo che ho postato sopra cancellando le linee che ho evidenziato in rosso.
Facce sape' |
Jarjarfix1 |
Inserito il - 09 gennaio 2009 : 09:51:47 Ho provato ma purtroppo non funziona più nemmeno il comando. Questo è il messaggio che mi viene riportato Seleziona la polilinea: ; errore: no function definition: VAI6 |
GP |
Inserito il - 08 gennaio 2009 : 22:35:32 Dovrebbe funzionare:
(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 TIPO_PL (CDR (ASSOC 70 Ramo))) (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) (SETQ TIPO_PL (CDR (ASSOC 70 Ramo))) (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) ----> cancellare la riga (CONS 70 TIPO_PL) ) ) (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) ----> cancellare la riga (cons 70 0) ) ) (setq k(+ k 1)) ) (entmake (list (cons 0 "SEQEND") (cons 8 piano))) ) ;--------------------------------------------------------------------- (princ "\n Digitare EV per lanciare il programma") (princ "\n <Copyright: ing. Claudio Granuzzo - 2002> ") (princ) |