Newsgroup: it.comp.software.cad
Titolo: istruzione lisp

Una cortesia per favore.
Da poco tempo utilizzo le istruzioni LISP per disegnare con Autocad linee,
cerchi, spline, ecc. Ho creato una lista di n coordinate per altrettanti
punti 3D.
L'istruzione (comand  "spline" p1 p2  ...  pn  "" "" "") mi permette di
tracciare
una SPLINE passante per tutti i punti in questione . Esiste qualche forma
ripetitiva che mi permette di raggiungere lo stesso risultato senza dover
elencare tutti i punti da 1 a n ?
Ringrazio e distintamente saluto  Luciano

...


 Ringrazio e distintamente saluto  Luciano
Allego sotto quella che spero essere la risposta al suo problema.
Contattatemi pure per eventuali scambi di opinione su procedure lisp
che spero fin d'ora essere proficui per entrambi.
ciao Giovanni.  (e-mail: 
giova...@tiscalinet.it
)
;;;-------------------------------------------------------------------------
;;;   LISCOM.LSP
;;;   Copyright (C) 2000 by Giovanni Anzani
;;;   (e-mail: 
giova...@tiscalinet.it
)
;;;
;;;  L'uso di tale programma e' libero cosi come il suo miglioramento
;;;  Fatene ciň che volete (tranne venderlo) lasciando traccia di me
;;;  come sviluppatore.
;;;  Sara' gradita una e-mail di ringraziamento.
;;;
;;;  Non mi assumo nessuna responsabilita' per eventuali problematiche
;;;  inerenti l'uso di tale programma cosi' come per l'eventuale suo non
;;;  funzionamento.
;;;-------------------------------------------------------------------------
;;;   DESCRIZIONE:
;;;   Per passare ad un comando di AutoCAD attivo (ad es "spline" ) una
;;;   lista di n punti va definita una "funzione" che chiamero' "f:liscom"
;;;   (vedi sotto) che sta per lista da passare al command alla quale si
;;;   dovra' passare la suddetta lista di punti rielaborata e predisposta
;;;   allo scopo; alla sua "defun"izione seguono due esempi di come
;;;   utilizzarla.
;;;   In essi "lisPT" e' la tua lista di punti (P1 P2 ... Pn) nella forma
;;;   ((x1 y1 z1) (x2 y2 z2)  ... (xn yn zn)) anche senza la coord. z;
;;;   in questo modo si puo' passare alla funzione il comando da usarsi
;;;   a cui si "append"e la lista dei punti ed infine la chiusura specifica
;;;   del comando in questione; il grosso vantaggio e' che non si dovra'
;;;   conoscere a priori il numero dei punti!
;;;   Si possono fare anche funzioni specifiche per i comandi "draw" che
;;;   prevedono n punti, ne ho fatte due che chiamero' "f:lisdraw1" e
;;;   "f:lisdraw2" (vedi sotto), ma non sono altro che varianti del concetto
;;;   gia' esposto.
;;;   L'ultima (f:lisdraw2) e' la piu' vicina come soluzione alla domanda
;;;   posta ed ottiene lo scopo di "compattare" la lista di punti lasciando
;;;   il resto inalterato.
;;;   da:   (comand    "spline"  p1 p2  ...  pn  "" "" "")
;;;   a:     (f:lisdraw2  "spline"        lisPT        "" "" "")
;;;-------------------------------------------------------------------------
;;;   AVVERTENZE:
;;;   andavo un po di fretta, se non va controllatevi le parentesi e
;;;   i punti e virgola.
;;;-------------------------------------------------------------------------
(defun f:liscom (lc)
  (mapcar 'command lc))
;---
(defun f:lisdraw1 (comdis  lisPT  lisEND)
  (mapcar 'command (append (list comdis)  lisPT   lisEND)))
;---
(defun f:lisdraw2 (comdis  lisPT  end1 end2 end3)
  (mapcar 'command (append (list comdis)  lisPT   (list end1 end2 end3))))
;;;-------------------------------------------------------------------------
;;;   ESEMPI
;;;
;;;   (f:liscom  (append  (list "_SPLINE")  lisPT   (list "c" "" "")))
;chiusa
;;;   (f:liscom  (append  (list "_SPLINE")  lisPT   (list "" "" "")))
;aperta
;---
;;;   (f:lisdraw1  "_SPLINE"  lisPT   (list "c" "" "")))
;;;   (f:lisdraw1  "_SPLINE"  lisPT   (list "" "" "")))
;;;   (f:lisdraw1  "_PLINE"    lisPT   (list "c")))
;;;   (f:lisdraw1  "_PLINE"    lisPT   (list "" )))
;---
;;;   (f:lisdraw2  "_SPLINE"  lisPT  "c"  ""  "")
;;;   (f:lisdraw2  "_SPLINE"  lisPT   ""   ""  "")
;;;   (f:lisdraw2  "_PLINE"    lisPT   "c" nil nil)
;;;   (f:lisdraw2  "_PLINE"    lisPT   ""   nil nil)
;;;-------------------------------------------------------------------------

BG sono Luciano Paci
Grazie al graditissimo suggerimento di Giovanni Anzani, datato
20/3/2000, ora posso tracciare una linea (o spline) passante per
 n  punti (n - non conosciuto a priori) le cui coordinate
risultano essere l'elaborazione di input variabili, ai fini della
quantificazione dei punti medesimi. Tutte e tre le funzioni
mi risolvono perfettamente il problema.
Grazie di nuovo anche per la chiarezza e precisione.
Arr Luciano