Newsgroup: it.comp.software.cad
Titolo: [LISP]Estrarre dati di un cerchio in un file txt

Questo codice dovrebbe resistituire in un file di testo il diametro e le
coordinate X,Y di tutti i cerchi presenti in dwg. Ma non funziona. Sad Va
in tilt con il diametro...Confused
Mi sapete aiutare? Vorrei anche che i valori nel txt siano moltiplicati per
10.
Codice:
---------------------------------------------------------------------
(defun c:txt ()
      (setvar "cmdecho" 0)
          (if (setq nomefile(getfiled "Selezionare il nome File .txt" "" "txt" 1))(progn
          (setq nome-f(open nomefile "w"))
      (setq g1 (ssget "X" (list (cons 0 "CIRCLE"))))
        (setq i 0)
   (repeat (sslength g1)
                (setq eee(entget (ssname g1 i)))
        (princ "\r Esportazione del cerchio ")(princ (1+ i))(princ " di ")(princ (sslength g1))
            (setq rad (cdr(assoc 40 eee)))
          (setq dia (* rad 2.0))
          (write-line(strcat dia)nome-f)
          (write-line(strcat
            ","
            (rtos (caddr (assoc 10 eee)) 2 2)
                ","
                (rtos (cadddr (assoc 10 eee)) 2 2)) nome-f)
      (setq i(1+ i))
   )
   (close nome-f)
   ))
 (princ)
)
-------------------------------------------------------------------
Tra l'altro non e' farina del mio sacco, ma è un lisp di Sepram.
L'output dovrebbe essere del tipo: diametro,X,Y.
Grazie. 
-- 
Ste. 
http://www.feonast.tk
__________________________________ 
Usa l'indirizzo Reply-to e avvisa

 
Prova così:
************
(defun c:sc_cer ()
       (setvar "cmdecho" 0)
           (if (setq nomefile(getfiled "Selezionare il nome File .txt" 
"" "txt" 1))(progn
           (setq nome-f(open nomefile "w"))
       (setq g1 (ssget "X" (list (cons 0 "CIRCLE"))))
         (setq i 0)
    (repeat (sslength g1)
                 (setq eee(entget (ssname g1 i)))
         (princ "\r Esportazione del cerchio ")(princ (1+ i))(princ " di 
")(princ (sslength g1))
             (setq rad (cdr(assoc 40 eee)))
           (setq dia (* rad 2.0))
           (write-line  (strcat (rtos (* 10 dia) 2 2)
                                 ","
                                (rtos (* 10 (cadr (assoc 10 eee))) 2 2)
                                 ","
                                (rtos (* 10 (caddr (assoc 10 eee))) 2 2)
                         ) nome-f)
       (setq i (1+ i))
    )
    (close nome-f)
    ))
  (princ)
)
***********
Problemi:
1. write-line vuole una stringa, mentre la routine passava un numero 
reale (dia)
2. venivano restituite Y e Z anziché X e Y
3. ogni cerchio veniva scritto su due riche: diametro sulla prima, 
separatore X separatore Y sulla seconda
In questa versione i valori sono già moltiplicati per 10
 > -------------------------------------------------------------------
 > Tra l'altro non e' farina del mio sacco, ma è un lisp di Sepram.
 >
mmmmm
qualcuno ci avrà messo mano: SePrAm non avrebbe fatto qualcosa che non 
funzia :-))
Ciao
Maci

Maci ha scritto:
Scusa, ma ho cambiato nome alla funzione; ovviamente deve essere
(defun c:txt ()
  ....
Ciao
Maci

 funzia :-))
Quel qualcuno sono io...intendevo dire che ho preso la traccia dal sito di
Claudio (la sua estraeva le coord x,y,z di un punto) e l'ho modificata per
i cerchi...:) 


 
aaaah ecco!
;-)
Ciao
Maci