Newsgroup: it.comp.software.cad
Titolo: [lisp] Spline e liste

Ho creato questo codice per listare un tot di punti:
    (setq lsta ())
  (setq n 1)
  (princ "punto ")
  (princ n)
  (princ ": ")
  (setq punto (getpoint))
  (while (not (null punto))
    (setq n (+ n 1))
    (setq lsta (cons punto lsta))
    (princ "punto ")
    (princ n)
    (princ ": ")
    (setq punto (getpoint))
  )
Tutto questo per creare una spline con un numero di punti da me definito.
Il mio scopo praticamente sarebbe arrivare a questo comando:  (command
"_.spline" lsta "" "" ""). Il problema è che nonostante la variabile [lsta]
contenga i valori dei punti questa non viene accettata correttamente e mi
compare l'errore "errore: tipo di argomento errato: lentityp nil".
Dov'è che sbaglio?
Grazie mille.
-- 
See You,
    Gian.

 Dov'č che sbaglio?


 > Dov'è che sbaglio?


 Ciao Claudio
Mmmm si comporta in maniera strana, invece di disegnarmi una sola spline me
ne disegna tante passando per gli stessi punti ma con tangenti diverse.
Faccio priva a fartelo vedere, prova questo:
(defun LeggiPunti ()
  (setq lsta ())
  (setq i 1)
  (princ "punto ")
  (princ i)
  (princ ": ")
  (setq punto (getpoint))
  (while (not (null punto))
    (setq i (+ i 1))
    (setq lsta (cons punto lsta))
    (princ "punto ")
    (princ i)
    (princ ": ")
    (setq punto (getpoint))
(command "_.spline")
(foreach a lsta
 (command a)
)
(command "" "" "")
  )
Grazie,
   Gian.

Devi lasciare la creazione della spline come ultima operazione e non dentro
il loop While:
;;;-----------------------------------
(defun c:LeggiPunti ()
  (setq lsta ())
  (setq i 1)
  (princ "punto ")
  (princ i)
  (princ ": ")
  (setq punto (getpoint))
;;; inizio loop richiesta punti...
  (while (not (null punto))
    (setq i (+ i 1))
    (setq lsta (cons punto lsta))
    (princ "\npunto ")(princ i)(princ ": ")
    (setq punto (getpoint))
  )
;;; fine loop richiesta punti.
  (command "_.spline")
  (foreach a lsta
    (command a)
  )
  (command "" "" "")
)
;;;-----------------------------------
Ciao Claudio
--
--
"gian_74" <eee...@nospam.yes> ha scritto nel messaggio
news:40da...@x-privat.org...


 il loop While:
(...cut)
E già, che cretino che sono! ;))
Ora funziona e anche bene. Grazie mille per l'aiuto.
A proposito, lo so che è scritto male e sicuramente il codice farà pietà,
comunque credo che il mio lisp possa essere di grosso aiuto per chi lavora
nella termotecnica. Se qualcuno che ha un sito sul cad vuole pubblicarlo, lo
faccia pure. Sicuramente implementerò e migliorerò il codice con il passare
del tempo, comunque per ora vi lascio questo. Grazie per la pazienza.
-- 
See You,
    Gian.
;;*************** Gianluca Morena's FLEX Creator
***************************;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; LISP per creare dei tubi flessibili per gli impianti di condizionamento
;;;
;;               Utilizzo libero
;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;==========================================================================
;;
(defun c:flex ()
  ;; Assegno il valore delle variabili ;;
  (setq OldOsMode (getvar "OSMODE")) ;memorizzo il valore della variabile
OSMODE
  (setvar "OSMODE" 0)   ; disattivo ODSMODE
  (setq nomeblocco (getstring "\n Nome del blocco "))
  (setq a "-0.125,0.1560")
  (setq b "-0.125,0.3739")
  (setq c "0.125,0.1554")
  (setq d "0.125,0.3739")
  (setq e "0.0,0.3739")
  (setq f "-0.125,-0.1583")
  (setq g "-0.125,-0.3761")
  (setq h "0.125,-0.1576")
  (setq i "0.125,-0.3761")
  (setq l "0.00,-0.3761")
  (setq gruppo (ssadd))
  (setq splinecanc (ssadd))
  ;; ORA DISEGNO IL PEZZO DEL TUBO FLEX E AGGIUNGO TUTTO AL GRUPPO [gruppo]
;;
  (command "_.line" a b "")
  (setq gruppo (ssadd (entlast) Gruppo))
  (command "_.line" c d "")
  (setq gruppo (ssadd (entlast) Gruppo))
  (command "_.line" f g "")
  (setq gruppo (ssadd (entlast) Gruppo))
  (command "_.line" h i "")
  (setq gruppo (ssadd (entlast) Gruppo))
  (command "_.arc" "c" e d b)
  (setq gruppo (ssadd (entlast) Gruppo))
  (command "_.arc" "c" l g i)
  (setq gruppo (ssadd (entlast) Gruppo))
  ;; scalo il gruppo delle dimensioni che mi occorrono ;;
  ;; creo il blocco chiamato [nomeblocco]         ;;
  (setq dim (getreal "\n Dimensione del Tubo (ø) "))
  (command "_.scale" gruppo "" "0,0" "r" "1" dim)
  (setq larg (* dim 0.25))
  (command "_.-block" nomeblocco "0,0" Gruppo "")
  ;; richiamo la funzione leggipunti (in fondo) e disegno la plinea ;;
  (leggipunti)
  (command "_.spline")
  (foreach x lsta
    (command x)
  )     ; end foreach
  (command "" "" "")
  ;; assegno il valore splinecanc all'entità della spline ;;
  ;; seleziono la plinea per inserire i blocchi e poi la cancello ;;
  (setq splinecanc (ssadd (entlast) splinecanc))
  (command "_.measure" splinecanc "b" nomeblocco "s" larg)
  (command "_.erase" splinecanc "")
  ;; ripristino il valore dell'osmode ;;
  (setvar "OSMODE" OldOsMode)
  (print "\n FATTO! ")
)     ; end fun flex
;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;;
;;!!!!! FUNZIONE PER ASSEGNARE I PUNTI DELLA POLILINEA !!!!!!!!!;;
;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;;
(defun LeggiPunti ()
  (setq lsta ())
  (setq n 1)
  (princ "punto ")
  (princ n)
  (princ ": ")
  (setq punto (getpoint))
  (while (not (null punto))
    (setq n (+ n 1))
    (setq lsta (cons punto lsta))
    (princ "punto ")
    (princ n)
    (princ ": ")
    (setq punto (getpoint))
  )     ;end while;
)     ;end fun leggipunti;
;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;;
;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;;
;;!!!!!!!!!!!!!!!!!!! FINE  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;;