Grazie rpor66,
ho riscritto il codice :
Codice:
(setq Xlist nil)
(repeat 1000
(while (and (= ed3 nil) (= edx 0))
(setq Cont (1+ Cont))
(setq ContUno (1+ ContUno))
(setq Titolo1 (strcat "Seleziona il Nome del Punto " (itoa Cont)))
(setq ed3 (entsel (strcat "\n" Titolo1)))
(setq ed1 ed3)
(if (= ed3 nil) ;; ---------------------------------------------
(progn
(setq ContornoStr (vl-string-trim " " ContornoStr))
(setq fp1 (open "C:\\AutocadSupporto\\Contorni\\Stringa.dat" "a"))
(write-line ContornoStr fp1)
(close fp1)
(setq fp2 (open "C:\\AutocadSupporto\\Contorni\\ElencoPunti.dat" "w"))
(write-line SommaPunti fp2)
(close fp2)
(startapp "C:\\AutocadSupporto\\Liberty\\SiNo7.exe " "C:\\AutocadSupporto\\Liberty\\SiNo7.tkn")
(setq Controllo1 nil)
(while (= Controllo1 nil)
(setq Controllo1 (findfile "C:\\AutocadSupporto\\Dati\\Risposta.dat"))
);;while
(setq Risposta nil)
(while (= Risposta nil)
(setq fp1 (open "C:\\AutocadSupporto\\Dati\\Risposta.dat" "r"))
(setq CodColor (read-line fp1))
(setq CodLinea (read-line fp1))
(setq Risposta (read-line fp1))
(close fp1)
);;while
(princ "\n")
(princ "Risposta >>>>>>> ")
(princ Risposta)
(princ "\n")
(if (= Risposta "SI")
(progn ;; Si
(setq Salvato (strcat "Contorno salvato (" (itoa (- ContUno 1)) ") Punti"))
(alert Salvato)
(exit)
);;progn
);;if
(if (= Risposta "NO")
(setq Cont (1- Cont))
(setq ContUno (1- ContUno))
);;if
);;progn
);;if -----------------------
);;while
(princ "\n")
(princ "ed1 >>>>> ")
(princ ed1)
(princ "\n")
(setq Lista (entget (car ed1) '("Gruppo")))
(setq Xlist (assoc -3 Lista))
(if (= Xlist nil)
(progn
(alert "L'elemento selezionato non è idoneo, non sono associati dati estesi!")
(setq Cont (1- Cont))
);;progn
(progn ;;else
(setq TxtData (car (cdr Xlist)))
(setq Stringa (cdr TxtData))
(setq NomeX (cdr (nth 1 TxtData)))
(setq TipoPunto (cdr (nth 2 TxtData)))
(setq Quota (cdr (nth 3 TxtData)))
(setq Ecef (cdr (nth 4 TxtData)))
(setq GaussBoaga (cdr (nth 5 TxtData)))
(setq ControlloStz (cdr (nth 6 TxtData)))
(setq ControlloPt (cdr (nth 7 TxtData)))
(setq Pos1 (vl-string-search "(" NomeX 1))
(setq NomePunto (substr NomeX 1 (- Pos1 1)))
(if (> (rem Cont 2) 0) ;; se dispari
(progn
(setq Caso 1)
(princ Caso)
(if (= Cont 1) ;; se alla prima selezione
(progn
(setq Gb1 GaussBoaga)
(setq ContornoStr NomePunto)
);;progn
(progn ;; selezioni oltre la prima
(setq Gb3 Gb2) ;; copia Gb2 in Gb3
(setq Gb4 GaussBoaga)
(command "_line" Gb3 Gb4 "")
(command "_change" "_last" "" "_p" "_layer" "Rosso" "")
(setq Gb3 Gb4)
(setq ContornoStr (strcat ContornoStr "|" NomePunto))
(setq SommaPunti (strcat SommaPunti "-" GaussBoaga))
);;;progn
);;if
);progn
);;if
(if (= (rem Cont 2) 0) ;; se pari
(progn
(setq Caso 2)
(princ Caso)
(if (= Cont 2) ;; se alla seconda selezione
(progn
(setq Gb2 GaussBoaga)
(command "_line" Gb1 Gb2 "")
(command "_change" "_last" "" "_p" "_layer" "Rosso" "")
(setq ContornoStr (strcat ContornoStr "|" NomePunto))
(setq SommaPunti (strcat SommaPunti "-" GaussBoaga))
);;progn
(progn
(setq Gb2 GaussBoaga)
(command "_line" Gb2 Gb3 "")
(command "_change" "_last" "" "_p" "_layer" "Rosso" "")
(setq ContornoStr (strcat ContornoStr "|" Nomepunto))
(setq SommaPunti (strcat SommaPunti "-" GaussBoaga))
);;progn
);;if
);progn
);;if
(princ "\n")
(princ "ContornoStr >>>>>> ")
(princ ContornoStr)
(princ "\n")
(if (= Cont 10)
(progn
(setq fp1 (open "C:\\AutocadSupporto\\Contorni\\Stringa.dat" "a"))
(write-line ContornoStr fp1)
(close fp1)
(setq Cont 0)
(setq ContornoStr "")
);;progn
);;if
(setq ed1 nil)
(setq ed3 nil)
(setq IntLibretto 1) ;; SiNo7.exe scrive in LibrettoPregeo
(setq IntGrafica (* (- ContUno 1) 2))
(setq IntEstesi 0)
(princ "\n")
(princ "IntGrafica >>>>> ")
(princ IntGrafica)
(princ "\n")
);;progn
);;if
);;repeat
Ora l'input viene controllato da : (if (= Xlist nil)
ma il caso di Xlist = nil , inizia un loop che non riesco a terminare se non agendo tramite la Gestione Attività di Windows 10.
Viene sempre esposto : "L'elemento selezionato non è idoneo, non sono associati dati estesi!" e non c'è
modo di continuare.
Penso comunque che la soluzione non sia valida in quanto questo controllo viene esercitato nel caso si selezioni un elemento grafico come una linea ma non se la selezione riguarda un testo qualsiasi.
Riassumendo quindi :
- la selezione deve riguardare un elemento testo che abbia i dati estesi.
- deve essere rifiutata ogni altro tipo di selezione.
- in caso di selezione sbagliata, il loop di scelta, dopo il messaggio di errore, deve continuare.
- in caso di selezione nulla, il loop si interrompe e viene posta la domanda.
Penso che il controllo debba essere esercitato subito sull'elemento selezionato (ed3).
Come?
Grazie.