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
 dcl

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
NICOLA PONZONI Inserito il - 22 aprile 2024 : 23:44:25
Ciao a tutti,
ho fatto una dcl dove l'utente inserisce diametro x e y di un cerchio

funziona alla perfezione.
ma ora vorrei fare una piccola operazione sui numeri che inserisce l'utente, in pratica vorrei sommare un certo numero al parametro y

non funziona.. non riesco a capire.
non lo interpreta come numero ne come testo.
non riesco a fare una semplice somma su quei numeri inseriti
allego dcl e lisp

il problema è dalla riga 68 dove cerco di sommare 20 al valore inserito dall'utente nella dcl

grazie

Scarica allegato:

foro_dcl.zip
31,59 KB

Scarica allegato:

foro_dcl.zip
31,59 KB
1   U L T I M E    R I S P O S T E    (in alto le più recenti)
Giuseppe Mauro Inserito il - 01 maggio 2024 : 13:12:49
Quando acquisisci il valore dalla dcl, lo fai mediante un "get_tile"
Ciò che get_tile restituisce è una stringa (un testo)

poi dici (setq pos1 (substr posforo 4 2)) e ti funziona perché "posforo" evidentemente è una stringa, di cui "pos1" è una sottostringa

Poi chiedi al lisp di sommare 20 a pos1.
Quindi senza entrare nel merito di ciò che pos1 contiene, stai chiedendo al lisp di sommare 20 (intero) e "abc" (operazione non possibile, evidentemente).
Poi ancora (print (strcat "pos1y e'..... :" pos1y)) dove chiedi di concatenare 2 stringhe di cui la seconda dovrebbe essere un numero.

Autolisp non funziona così.

Le stringhe si concatenano se sono stringhe, i numeri si sommano se sono numeri.
Non puoi sommare un numero con una stringa (anche se la stringa rappresenta un numero);
Non puoi concatenare una stringa con un numero.
Esistono comandi appositi per il passaggio tra i due elementi.
rtos (real to string) - converte un numero tipo 20,41 in una stringa "20.41";
atof (string to real) - converte "20.13" in un numero 20.13

Quindi devi SEMPRE verificare un dato comando che tipologia di valore restituisce (real, integer, string, list etc) per poter operare successivamente.
Per esempio
(print (strcat "pos1y e'..... :" pos1y)) dovrebbe diventare (print (strcat "pos1y e'..... :" (rtos pos1y 2 2)))
e
(setq pos1y (+ 20 pos1)) dovrebbe essere (setq pos1y (+ 20 (atof pos1)))

i valori 2 e 2 di rtos possono anche essere omessi, in questo caso la stringa sarà realizzata utilizzando i valori di decimali che stai usando correntemente così come la notazione (scientifica, decimale etc)

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,12 secondi.