Newsgroup: it.comp.software.cad
Titolo: [LISP+C] AutoCAD Punto e a capo

O come avrebbe detto un mio illustre compaesano: "punto, due punti,
punto e  virgola... ma si abbondiamo, dopo ci dicono che siamo
provinciali.
Tornando seri, ecco a voi una raccolta di routine per leggere scrivere
ed interpretare punti in AutoCAD.
1) Scrittura delle informazioni sei punti su un file in formato CSV
;;;
;;; PUNTI-CSV.LSP
;;;
;;; Questa routine legge le entità POINT nel disegno e le salva in
;;; formato testo, formato CSV, importabile in Excel per successive
;;; elaborazioni.
;;;
;;; Copyright 2002 - Aniello Annunziata - CADLandia
(defun C:PUNTI-CSV
          (/ fname fn sel1 n index
          )
  (setq fname (getstring "\nInserisci il nome del file: "))
  ;ottiene il nome del file
  (setq fn (open fname "w"))
  ;lo apre in scrittura
  (princ "Numero Punto;X;Y;Z" fn)
  (princ "\n" fn)
  ;mette l'header del testo
  (setq f 1)
  ;imposta il flag ad 1
  (setq sel1 (ssget "x" '((0 . "POINT"))))
  (setq n (sslength sel1))
  (setq index 0)
  (repeat n
    (setq b1 (entget (ssname sel1 index)))
    (setq index (+ index 1))
    (setq coords (cdr (assoc 10 b1)))
    (setq coordx (nth 0 coords))
    (setq coordy (nth 1 coords))
    (setq coordz (nth 2 coords))
    (princ index fn)
    (princ ";" fn)
    (princ coordx fn)
    (princ ";" fn)
    (princ coordy fn)
    (princ ";" fn)
    (princ coordz fn)
    (princ "\n" fn)
  );fine repeat
  (close fn)
  ;chiude il file
  (alert (strcat "Esportati i punti nel file: \n"
         (strcase fname))
  );fine alert
  (princ)
  ;informa l'utente
);fine defun
 
(princ "\nPUNTI-CSV.LSP caricato. Digita C:PUNTI-CSV per avviare il
comando.")
(princ)
2) Lettura di punti da un formato ISO
;
; PUNTI-ISO.LSP
; COPYRIGHT 2002 CADLandia
;
; Questo Lisp disegna punti partendo da un file dati del tipo ISO.
; Il file testo deve contenere per ogni riga il punto, che deve essere
del tipo:
; NOMEX00000.0000Y00000.0000Z00000.0000
;
; Dove gli 0 stanno per un qualsiasi valore numerico.
;
; 5/1/2002 Aniello Annunziata - CADLandia
; 
aniello.a...@cadlandia.com
; 
www.cadlandia.com
(defun C:PUNTI-ISO
          (
            / filename i-file rigaletta punto lungriga
          )
(setq
      filename (getfiled "Scegli il file di testo " "" "ISO" 4)
      i-file (open filename "r")
);setq
(if i-file
  (progn
      (setq rigaletta (read-line i-file))
      (while rigaletta
	(setq lungriga (strlen rigaletta))
	(setq coordX (vl-string-position (ascii "X") rigaletta))
	(setq coordY (vl-string-position (ascii "Y") rigaletta))
	(setq coordZ (vl-string-position (ascii "Z") rigaletta))
	(setq punto (strcat (substr rigaletta (+ 2 coordX) (- coordY
coordX 1)) ","
			    (substr rigaletta (+ 2 coordY) (- coordZ
coordY 1)) ","
			    (substr rigaletta (+ 2 coordZ) (- lungriga
coordZ 1))
			    );strcat
	      );setq
	(command "_POINT" punto)
	(setq rigaletta (read-line i-file))
      );while
      (close i-file)
  );progn
(princ "\nNon hai selezionato nessun file, oppure s'è verificato un
errore di I/O!")
);if
(princ)
);defun
(princ "\nPUNTI-ISO.LSP caricato. Digita C:PUNTI-ISO per avviare il
comando.")
(princ)
3) Inseriemento della quota di un entità POINT in un testo
(defun c:mv (/ os pt1 pt py pt2)
  (setq os (getvar "osmode"))
  (setvar "osmode" 8)
  (setq pt1 (getpoint "\nSelezionare il punto: "))
  (setq pt (caddr pt1))
  (setq py (rtos pt 2 3))
  (setvar "osmode" 0) 
  (progn)
  (setq pt2 (getpoint "Punto di inserimento coordinata Z:  "))
  (command "_text" pt2 "" "" py)
  (setvar "osmode" os)
)
4) Disegno di una curva di livello (o isoipsa) da punti dati da un
file testo
;
; CURVLIV.LSP
; COPYRIGHT 2000 CADLandia
;
; Questo Lisp inserisce disegna una polilinea chiusa partendo dai
punti dati in un file ASCII.
; Il file testo deve contenere per ogni riga il punto, che deve essere
del tipo:
; xxx,yyy,zzz
;
; 8/2/2001 Aniello Annunziata per CADLandia
; 
aniello.a...@cadlandia.com
; 
www.cadlandia.com
(defun C:CURVLIV
          (
            / filename i-file data
          )
(setq
      filename (getfiled "Scegli il file di testo " "*.*" "" 4)
      i-file (open filename "r")
);setq
(setq plist)
(if i-file
  (progn
       (setq data (read-line i-file))
      (while data
         (setq plist (append plist data))
         (setq data (read-line i-file))
      );while
      (close i-file)
  );progn
(command "_3DPOLY" plist "_C" "")
(princ "\nNon hai selezionato nessun file, oppure s'è verificato un
errore di I/O!")
);if
(princ)
);defun
(princ "\nCURVLIV.LSP caricato. Digita C:CURVLIV per avviare il
comando.")
(princ)
Ed ora a voi.
Saluti, Aniello
-- 
Aniello Annunziata
Content Director Manager
www.cadlandia.com
aniello.a...@cadlandia.com
Per rispondermi in privato, togli NOGARBAGE dall'indirizzo

 ed interpretare punti in AutoCAD.
UHAAAA!! veramente esaGGGerato!
grazie!!
ciao
Stefano