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
 AutoLISP
 Intersezione arco - retta
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Precedente
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

Terminator
Utente Master



725 Messaggi

Inserito il - 13 novembre 2010 : 20:28:20  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Chiedo scusa e ti comunico che l'ultimo listato che vedi è quello aggiornato (quello dell'ottimizzazione per intenderci), gli altri precedenti post che vedi modificati riguardano solo modifiche di carattere ortografico perché mi seccano gli strafalcioni grammaticali che posso commettere, anche se un post risale a qualche tempo fa e non lo rileggerà più nessuno.

Per chiarezza ti rimando l'ultimissima release della funzione:

(defun array2lista (listacoordinate numero / listaparziale index listafinale)
(setq listaparziale '()
listafinale '()
)
(setq index 0)
(while (< index (length Listacoordinate))
(repeat numero
(if (/= (nth index listacoordinate) nil)
(progn
(setq listaparziale (cons (nth index listacoordinate) listaparziale))
(setq index (1+ index))
)
)
)
(setq listaparziale (reverse listaparziale)
listafinale (cons listaparziale listafinale)
listaparziale nil
)
)
(princ "\n")
(setq listafinale (reverse listafinale))
)
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 13 novembre 2010 : 21:16:19  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Bravi!

Felicitazioni per la vostra bravura!!
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 14 novembre 2010 : 14:56:34  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Rimanendo nel campo dell'ottimizzazione del codice, vi allego altre 2 modi (non sono farina del mio sacco) per spezzare (splittare) una lista generica in sottoliste di determinata lunghezza (in particolare una lista di coordinate in gruppi di 3), il primo un po' elaborato, il secondo molto più stringato.
+++++++++
(defun SPLIT (elst n)
(if elst
(cons (sublist elst 0 n)
(split (sublist elst n nil) n))))

(defun SUBLIST (lst start lung / n r)
(if (or ( not lung) (< (- (length lst) start) lung))
(setq lung (- (length lst) start))
)
(setq n (+ start lung))
(repeat lung
(setq r (cons (nth (setq n (1- n)) lst) r ))
))
+++++++++++++++++

(defun parse_list (data n / item new)
(foreach element (reverse data)
(setq item (cons element item))
(if (= (length item) n)
(setq new (cons item new) item nil)
)
)
new
)
+++++++++++++++
In particolare, se è proprio una lista di punti 3D, allora si può optare per:

(defun 3d-coord->pt-lst (lst)
(if lst
(cons (list (car lst) (cadr lst) (caddr lst))
(3d-coord->pt-lst (cdddr lst))
)
)
)

Buona Domenica
Joseph

Modificato da - joseph in data 14 novembre 2010 15:46:54
Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Precedente
 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,47 secondi.