V I S U A L I Z Z A D I S C U S S I O N E |
blubossa |
Inserito il - 22 novembre 2010 : 16:14:04 ciao a tutti, sto cercando di risolvere un problema relativo all'esportazione dei vertici della polilinea e dei raggi, in allegato posto sia il lisp che dcl che ho cercato di correggere senza riuscirci, inoltre ho allegato il file di testo errato e quello corretto.
spero che qualcuno possa aiutarmi a risolvere. grazie
BB
Scarica allegato:
test.rar 56,52 KB
Scarica allegato:
TEST5.dwg 46,82 KB |
20 U L T I M E R I S P O S T E (in alto le più recenti) |
Terminator |
Inserito il - 25 novembre 2010 : 15:56:40 | Messaggio inserito da blubossa
cambiando l'ordine dei progn all'interno dell'if il programma sembra funzionare correttamente....testato sia sulla 2005 che sulla 2008 |
Bene! Tu comunque usa l'ultima versione che ti ho inviato, la versione 2008 usava ancora la vecchia codifica, non vorrei che ci siano problemi con versioni successive. |
blubossa |
Inserito il - 25 novembre 2010 : 15:20:43 cambiando l'ordine dei progn all'interno dell'if il programma sembra funzionare correttamente....testato sia sulla 2005 che sulla 2008
ciao
| Messaggio inserito da Terminator
Butta via tutto e usa questo:
Scarica allegato:
test.zip 4,28 KB
|
|
Terminator |
Inserito il - 25 novembre 2010 : 14:56:13 Butta via tutto e usa questo:
Scarica allegato:
test.zip 4,28 KB |
blubossa |
Inserito il - 25 novembre 2010 : 14:51:07 scusa, ma io il test sulla versione 2008 l'ho fatto proprio con la routine in cui hai inserito la parte del codice riferita alla versione ed è proprio questa che non funziona, ma da quello che ho capito dovrei inserire nel codice 2009, per fare il test sulla 2008?? spero di essere stato chiaro tutte queste versioni mi stanno rinc....
ciao e grazie bb
| Messaggio inserito da Terminator
Ho avuto la possibilità di verificare il programma pure sulla versione 2008 e ho visto che in effetti esiste ancora la vecchia codifica delle polilinee senza il famigerato codice 91, quindi il programma funziona, però bisogna effettuare la modifica indicata nel mio post precedente (sostituire 2008 con 2009). Un'altra possibilità potrebbe essere quella di sfruttare le funzioni vlax-curve..., per farla in barba alle varie versioni di AutoCAD, ma questo comporterebbe la riscrittura di parte del programma. Più di questo non so proprio cosa fare...
|
|
Terminator |
Inserito il - 25 novembre 2010 : 14:05:26 Ho avuto la possibilità di verificare il programma pure sulla versione 2008 e ho visto che in effetti esiste ancora la vecchia codifica delle polilinee senza il famigerato codice 91, quindi il programma funziona, però bisogna effettuare la modifica indicata nel mio post precedente (sostituire 2008 con 2009). Un'altra possibilità potrebbe essere quella di sfruttare le funzioni vlax-curve..., per farla in barba alle varie versioni di AutoCAD, ma questo comporterebbe la riscrittura di parte del programma. Più di questo non so proprio cosa fare... |
Terminator |
Inserito il - 25 novembre 2010 : 13:09:33 Io sto provando il programma sia sulla 2011 che sulla 2007, tutto a posto. Mi sembra così strano che ancora ti dà qualche problema... |
blubossa |
Inserito il - 25 novembre 2010 : 13:08:14 ciao Terminator, ho fatto il test sulla versione 2008 dell'ultima versione che hai fatto del programma e non funziona, oggi proverò sulla versione 2005 di autocad.
|
blubossa |
Inserito il - 25 novembre 2010 : 12:23:08 ciao Terminator, grazie della tua tempestività e della tua disponibilità, appena posso faccio la prova sia con la 2008 che con la 2005.
ho provato a fare il test di quello indicato da joseph ma con la polilinea continua a non funzionare nonostante l'abbia provato sulla 2005 di AutoCad.
Era giusto per completezza di informazione.
ciao bb |
Terminator |
Inserito il - 24 novembre 2010 : 09:06:27 Non vorrei sbagliarmi ma mi sembra che la codifica nuova sia stata introdotta con la 2008, infatti il programma non gira sulla 2007. Ad ogni modo se mi dai un po' di tempo posso fare in modo che il programma sia gestibile su tutte le versioni di AutoCAD, basta inserire un if a seconda delle versioni e il codice sarà cambiato da 4 a 5.
Per esempio si potrebbe usare una piccola routine di questo tipo:
(defun codpoli (/ numvertice)
(if (>= (atoi (substr (ver) 13 4)) 2008)
(setq numvertice 5)
(setq numvertice 4)
)
)
Ad ogni modo ho preparato l'ultima release del programma che funziona su tutte le versioni di AutoCAD:
Scarica allegato:
test.zip 4,29 KB
Dato che non ho la possibilità di verificare se la versione 2008 ha la nuova codifica delle polilinee basta modificare il numero scritto in rosso:
(if (>= (atoi (substr (ver) 13 4)) 2008) <-- dalla versione scritta parte la nuova codifica
(progn
(setq intervallovertici
5
intervallocodice42 2
)
)
(progn
(setq intervallovertici
4
intervallocodice42 1
)
)
)
Queste righe di programma si trovano proprio in cima. |
blubossa |
Inserito il - 24 novembre 2010 : 08:41:40 scusami terminator, ma sulla versione 2008 di autocad funzionerà il programma?? siccome parli del fatto che autodesk abbia cambiato la codifica della polilinea nelle ultime versioni.....spero proprio di si.
ciao bb
| Messaggio inserito da Terminator
Lo puoi vedere se usi altri editor tipo Ultraedit e SciTE tanto per citare due.
|
|
Terminator |
Inserito il - 24 novembre 2010 : 08:30:23 Lo puoi vedere se usi altri editor tipo Ultraedit e SciTE tanto per citare due. Comunque ti faccio una sintesi sperando di essere un po' più chiaro (le modifiche che vedi in rosso sono sul nuovo file che ti ho inviato):
Righe 155-160:
(if (or (= b70 1) (= b70 129))
(setq b90 (1+ b90)
pl (reverse (cdr (reverse pl)))
pl (append pl (list (car pl) (cadr pl) (caddr pl) (cadddr pl)))
)
)
Righe 181-189:
(setq vi 1)
(while (> b90 vi)
(setq p1 (trans (trans (cdr (nth (* vi 5) pl)) en 0) 0 1)
b42 (cdr (nth (- (* vi 5) 2) pl))
fb (if (or (not b42) (zerop b42))
(setq b42 nil)
b42
)
)
Invece di:
(SETQ vi 0)
(while (> b90 vi)
(setq p1 (trans (trans (cdr (nth (* vi 4) pl)) en 0) 0 1)
b42 (cdr (nth (+ (* vi 4) 3) pl))
fb (if (or (not b42) (zerop b42))
(setq b42 nil)
b42
)
)
Righe 190-219:
(if fb
(progn
(setq a (distance pp p1)
ra (+ (/ a 4 fb) (* 0.25 a fb))
)
(if (minusp fb)
(setq cc " G03")
(setq cc " G02")
)
(gm_w (strcat "\nN" (itoa n) cc))
(if (not (equal p1 pp 0.000001))
(gm_w (strcat " X" (rtos (car p1) 2 4)))
)
(if (not (equal p1 pp 0.000001))
(gm_w (strcat " Y" (rtos (cadr p1) 2 4)))
)
(gm_w " R")
(gm_w (rtos (abs ra) 2 4))
)
(progn
(setq cc " G01")
(gm_w (strcat "\nN" (itoa n) cc))
(if (not (equal p1 pp 0.000001))
(gm_w (strcat " X" (rtos (car p1) 2 4)))
)
(if (not (equal p1 pp 0.000001))
(gm_w (strcat " Y" (rtos (cadr p1) 2 4)))
)
)
) Invece di:
(if fb
(progn
(setq a (distance pp p1)
ra (+ (/ a 4 fb) (* 0.25 a fb))
)
(if (minusp fb)
(setq cc " G03")
(setq cc " G02")
)
;;;(if (= cp cc) <-- riga eliminata
;;; (setq cc "") <-- riga eliminata
;;;) <-- riga eliminata
(gm_w (strcat "\nN" (itoa n) cc))
(gm_w " R")
(gm_w (rtos (abs ra) 2 4))
)
(progn
(setq cc " G01")
;;;(if (= cp cc) <-- riga eliminata
;;; (setq cc "") <-- riga eliminata
;;;) <-- riga eliminata
(gm_w (strcat "\nN" (itoa n) cc))
(if (not (equal (car p1) (car pp) 0.000001))
(gm_w (strcat " X" (rtos (car p1) 2 4)))
)
(if (not (equal (cadr p1) (cadr pp) 0.000001))
(gm_w (strcat " Y" (rtos (cadr p1) 2 4)))
)
)
)
Dato che abbiamo pure un ex-docente, vale a dire Joseph (una persona che sa il fatto suo tra l'altro, da quel poco che ho potuto capire causa la mia recente "entrata" nel forum), gli chiedo consiglio se questa spiegazione possa andare bene oppure, se fosse possibile, essere più sintetici. |
blubossa |
Inserito il - 24 novembre 2010 : 08:24:11 è proprio quel numero, forse sarebbe più comodo vederlo direttamente nell'editor all'inizio di ogni riga, ma credo che non sia possibile.... ciao
| Messaggio inserito da Terminator
Credo che blu per "intestazione di riga" intendesse riferirsi al numero di riga visibile in basso a destra
|
|
Terminator |
Inserito il - 24 novembre 2010 : 08:16:49 Credo che blu per "intestazione di riga" intendesse riferirsi al numero di riga visibile in basso a destra |
GM_FEMMINIELLO_*OSO |
Inserito il - 24 novembre 2010 : 07:30:43 OT x Mauro geom.Giuseppe
Sparcime, per mancanza di tempo, mi tocca limitare a 1-2 al giorno il numero di secchiate di letame da buttarti in faccia, e che ti donano tanto.
Siccome sei chiuso in un angolo come uno scarrafone coleroso, ti tendo una mano, per l'ennesima volta.
Molla la poltrona di Moderatore, e ti giuro che all'istante verranno rimossi i "complimenti" che hai ricevuto da ieri dall'Araba Fenice...
|
joseph |
Inserito il - 23 novembre 2010 : 23:34:29 | Messaggio inserito da blubossa
beh proprio chiaro non è ma domani me lo studio meglio...... scusa, visto che ci sono molte righe da controllare, è possibilè visualizzare le intestazioni di riga nell'editor di visual lisp?
grazie di tutto bb
|
Cosa intendi di preciso con "intestazioni di riga"? |
Terminator |
Inserito il - 23 novembre 2010 : 23:19:32 Meno male che funziona, perché se fosse per la spiegazione...ahi ahi |
blubossa |
Inserito il - 23 novembre 2010 : 22:30:52 beh proprio chiaro non è ma domani me lo studio meglio...... scusa, visto che ci sono molte righe da controllare, è possibilè visualizzare le intestazioni di riga nell'editor di visual lisp?
grazie di tutto bb |
Terminator |
Inserito il - 23 novembre 2010 : 18:25:36 | Messaggio inserito da blubossa
...pare proprio che l'orso sia morto...
|
Scarica allegato:
test.zip 4,23 KB]
Intanto inoltro l'ultima versione del programma dato che se la polilinea è chiusa io posso avere non solo un valore 1 della variabile PLINEGEN, ma anche 129. Avevo il problema che mancava l'ultima riga di testo nel file .nc, quando devo far coincidere il primo vertice con l'ultimo
Come da help in linea: PLINEGEN - Imposta la modalità di generazione dei modelli di tipo di linea attorno ai vertici di una polilinea 2D. In parole povere se ho una linea tratteggiata i vertici possono essere non visibili dato che lo "spazio" del tratteggio cade su uno di loro.
Le righe dalla 155 alla 160 riguardano la modifica che dicevo prima (PLINEGEN)
Ma il cuore del programma è tutto nelle righe 181-232. Intanto bisognava partire dalla variabile vi=1 e non dallo 0 (riga 181). Le righe 183-184 sono state modificate tenendo conto della codifica polilinee cambiata nelle ultime versioni AutoCAD (il famoso codice 91) e quindi aumentando il valore da 4 a 5. Caso strano, quando c'era il raggio, non venivano considerate le coordinate x e y e quindi il programma stampava solo il raggio (righe 199-207).
In ultimo c'erano queste righe secondo me anomale: (equal (car p1) (car pp) 0.000001) (equal (cadr p1) (cadr pp) 0.000001)
invece delle più logiche: (equal p1 pp 0.000001) (equal p1 pp 0.000001)
Dato che bisognava confrontare le coordinate dei vertici e non solo le x e le y singole dei vertici.
Spero di essere stato chiaro e mi scuso fin d'ora se la spiegazione è stata un po' farraginosa. Anche in ufficio mi dicono che non so spiegare bene le cose su AutoCAD.
|
blubossa |
Inserito il - 23 novembre 2010 : 16:30:29 ciao Terminator, ho continuato a fare diverse prove e pare proprio che l'orso sia morto...........
| Messaggio inserito da Terminator
Aspetto che tu finisca le prove e dopo ti spiego tutto, non vorrei vendere la pelle dell'orso prima che sia ucciso...
|
|
Terminator |
Inserito il - 23 novembre 2010 : 15:55:35 Aspetto che tu finisca le prove e dopo ti spiego tutto, non vorrei vendere la pelle dell'orso prima che sia ucciso... |