TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoCAD
 Eliminare i vertici di una polilinea
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Jarjarfix1
Utente Master


Regione: Trentino - Alto Adige
Prov.: Trento
Città: Trento


275 Messaggi

Inserito il - 08 gennaio 2009 : 17:53:31  Mostra Profilo Invia a Jarjarfix1 un Messaggio Privato  Rispondi Quotando
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)

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 08 gennaio 2009 : 22:35:32  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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)
Torna all'inizio della Pagina

Jarjarfix1
Utente Master


Regione: Trentino - Alto Adige
Prov.: Trento
Città: Trento


275 Messaggi

Inserito il - 09 gennaio 2009 : 09:51:47  Mostra Profilo Invia a Jarjarfix1 un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 09 gennaio 2009 : 11:56:45  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Boh, a me funzia.

Incolla il testo che ho postato sopra cancellando le linee che ho evidenziato in rosso.

Facce sape'
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 09 gennaio 2009 : 12:18:28  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Jarjarfix1
Utente Master


Regione: Trentino - Alto Adige
Prov.: Trento
Città: Trento


275 Messaggi

Inserito il - 09 gennaio 2009 : 14:29:48  Mostra Profilo Invia a Jarjarfix1 un Messaggio Privato  Rispondi Quotando
Con il "punto e virgola" fuinziona tutto alla perfezione....Grazie mille
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 09 gennaio 2009 : 16:33:18  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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?
Torna all'inizio della Pagina

Jarjarfix1
Utente Master


Regione: Trentino - Alto Adige
Prov.: Trento
Città: Trento


275 Messaggi

Inserito il - 06 dicembre 2012 : 16:13:53  Mostra Profilo Invia a Jarjarfix1 un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 06 dicembre 2012 : 17:35:47  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Visto che utilizzi la 2012 posizionati sul grip del vertice da eliminare, viene visualizzata in automatico l'opzione per la rimozione.
Torna all'inizio della Pagina

Jarjarfix1
Utente Master


Regione: Trentino - Alto Adige
Prov.: Trento
Città: Trento


275 Messaggi

Inserito il - 06 dicembre 2012 : 17:38:38  Mostra Profilo Invia a Jarjarfix1 un Messaggio Privato  Rispondi Quotando
Mi stento stupido per non essermene accorto........grazie mille
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,4 secondi.