cg-Cad

Lisp »Tips 'n Tricks »Xdata »1 »2 »3 »4 »5 »6

TXP1

TXP1 legge da un file TXT (punti.txt) le coordinate X Y Z di un punto e un valore numerico decimale (in quest'ordine), quindi disegna il punto, crea una lista xdata con il valore decimale e aggiorna l'entità punto.

;|

  TXP1.LSP (31 Marzo 2006)
  Copyright (C) 2006 Claudio Piccini. All rights reserved
  www.cg-cad.com

  Legge dal file PUNTI.TXT coordinate X Y Z e un valore num. decimale.

  Esempio di file PUNTI.TXT:
    x            y      z  num.
  706.3385   919.141108 0 -1.5
  731.027256 856.218884 0 0.33 
  654.002078 819.409167 0 2.3 
  632.234096 919.799307 0 12.45 
  528.417552 886.335928 0 99.99 
  503.300646 812.716491 0 0.99

|;

(defun myerror (s)                  
 (if (/= s "Function cancelled")
  (princ (strcat "\nError: " s))
 )
 (ripVar)
 (princ)
)

(defun salVar ()
 (setq orto (getvar "orthomode"))
 (setq snapp (getvar "osmode"))
 (setq snm (getvar "snapmode"))
 (setq piano (getvar "clayer"))  
 (setq nomeDir (getvar "dwgprefix"))
)

(defun ripVar ()
 (command "_redraw")
 (setvar "cmdecho" 1)
 (setvar "osmode" snapp)
 (setvar "snapmode" snm)
 (setvar "orthomode" orto)
 (setvar "clayer" piano)
 (setvar "cecolor" "BYLAYER")
 (setq *error* olderr)
 (princ)
)

(defun C:TXP1 (/ olderr snapp snm orto piano nomeDir 
                 stringa lista nf1 f1 p1 p2 
                 val ed xd entX
 )
 (setq olderr *error* *error* myerror)
 (setvar "cmdecho" 0)
 (salVar)
 (if (not (tblsearch "appid" "PUNTO_TXP"))(regapp "PUNTO_TXP")) 
 (command "osnap" "_non")
 (setq nf1 (strcat nomeDir "punti.txt"))
 (setq f1 (open nf1 "r")) ; apre il file PUNTI.TXT
 (setq stringa " ")
 (while (/= stringa nil)
  (setq stringa (read-line f1))
  (if (/= stringa nil)
   (progn
    (setq lista (strcat "(" stringa ")"))
    (setq lista (read lista))
    (setq p1 (list 
              (nth 0 lista) ; X
              (nth 1 lista) ; Y
              (nth 2 lista) ; Z
             )
    )
    (command "_point" p1) ; disegna il punto
    (setq ed (entget (entlast))) ; entlast restituisce il nome dell'ultima
                                 ; entita' creata
                                 ; (entget a) restituisce la lista che definisce l'entita' a
    (setq val (nth 3 lista)) ; valore numerico decimale
    (setq xd (list -3 (list "PUNTO_TXP"
                         (cons 1002 "{")
                         (cons 1000 "Valore")
                         (cons 1040 val)
                         (cons 1002 "}")
                      )
             )
    )
    (setq entX (append ed (list xd))) ; aggiunge la lista xd alla lista ed
    (entmod entX) ; aggiorna l'entita' punto
   )
  )
 )
 (close f1)
 (ripVar) ; ripristina l'ambiente
)
;;;eof

Test del Lisp

File PUNTI.TXT:
706.3385 919.141108 0 -1.5
731.027256 856.218884 0 0.33
654.002078 819.409167 0 2.3
632.234096 919.799307 0 12.45
528.417552 886.335928 0 99.99
503.300646 812.716491 0 0.99

Command: txp1

Command: (leggiX)
Seleziona le entita' con una finestra:
Secondo punto della finestra:
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . 0.99) (1002 . })))
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . 99.99) (1002 . })))
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . 12.45) (1002 . })))
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . 2.3) (1002 . })))
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . 0.33) (1002 . })))
((PUNTO_TXP (1002 . {) (1000 . Valore) (1040 . -1.5) (1002 . })))

TXP2

TXP2 legge da un file TXT (punti.txt) le coordinate X Y Z di un punto, una etichetta e un valore numerico decimale (in quest'ordine), quindi disegna il punto, crea una lista xdata e aggiorna l'entità punto.

;|

  TXP2.LSP (31 Marzo 2006)
  Copyright (C) 2006 Claudio Piccini. All rights reserved
  www.cg-cad.com

  Legge dal file PUNTI.TXT coordinate X Y Z 
  una etichetta e un valore numerico decimale.

  Esempio di file PUNTI.TXT:
    x            y      z etichetta valore num.
  706.3385   919.141108 0    "A"        -1.5
  731.027256 856.218884 0    "B"         0.33 
  654.002078 819.409167 0    "C"         2.3 
  632.234096 919.799307 0    "D"        12.45 
  528.417552 886.335928 0    "E"        99.99 
  503.300646 812.716491 0    "F"         0.99

|;

(defun myerror (s)                  
 (if (/= s "Function cancelled")
  (princ (strcat "\nError: " s))
 )
 (ripVar)
 (princ)
)

(defun salVar ()
 (setq orto (getvar "orthomode"))
 (setq snapp (getvar "osmode"))
 (setq snm (getvar "snapmode"))
 (setq piano (getvar "clayer"))  
 (setq nomeDir (getvar "dwgprefix"))
)

(defun ripVar ()
 (command "_redraw")
 (setvar "cmdecho" 1)
 (setvar "osmode" snapp)
 (setvar "snapmode" snm)
 (setvar "orthomode" orto)
 (setvar "clayer" piano)
 (setvar "cecolor" "BYLAYER")
 (setq *error* olderr)
 (princ)
)

(defun C:TXP2 (/ olderr snapp snm orto piano nomeDir 
                 stringa lista nf1 f1 p1 p2 
                 val eti ed xd entX
 )
 (setq olderr *error* *error* myerror)
 (setvar "cmdecho" 0)
 (salVar)
 (if (not (tblsearch "appid" "PUNTO_TXP"))(regapp "PUNTO_TXP")) 
 (command "osnap" "_non")
 (setq nf1 (strcat nomeDir "punti.txt"))
 (setq f1 (open nf1 "r")) ; apre il file PUNTI.TXT
 (setq stringa " ")
 (while (/= stringa nil)
  (setq stringa (read-line f1))
  (if (/= stringa nil)
   (progn
    (setq lista (strcat "(" stringa ")"))
    (setq lista (read lista))
    (setq p1 (list 
              (nth 0 lista) ; X
              (nth 1 lista) ; Y
              (nth 2 lista) ; Z
             )
    )
    (command "_point" p1) ; disegna il punto
    (setq ed (entget (entlast)))
    (setq eti (nth 3 lista)) ; etichetta
    (setq val (nth 4 lista)) ; valore numerico decimale
    (setq xd (list -3 (list "PUNTO_TXP"
                         (cons 1000 eti)
                         (cons 1002 "{")
                         (cons 1040 val)
                         (cons 1002 "}")
                      )
             )
    )
    (setq entX (append ed (list xd))) ; aggiunge la lista xd alla lista ed
    (entmod entX) ; aggiorna l'entita' punto
   )
  )
 )
 (close f1)
 (ripVar) ; ripristina l'ambiente
)
;;;eof

Test del Lisp

File PUNTI.TXT:
706.3385 919.141108 0 "A" -1.5
731.027256 856.218884 0 "B" 0.33
654.002078 819.409167 0 "C" 2.3
632.234096 919.799307 0 "D" 12.45
528.417552 886.335928 0 "E" 99.99
503.300646 812.716491 0 "F" 0.99

Command: txp2

Command: (leggiX)
Seleziona le entita' con una finestra:
Secondo punto della finestra:
((PUNTO_TXP (1000 . F) (1002 . {) (1040 . 0.99) (1002 . })))
((PUNTO_TXP (1000 . E) (1002 . {) (1040 . 99.99) (1002 . })))
((PUNTO_TXP (1000 . D) (1002 . {) (1040 . 12.45) (1002 . })))
((PUNTO_TXP (1000 . C) (1002 . {) (1040 . 2.3) (1002 . })))
((PUNTO_TXP (1000 . B) (1002 . {) (1040 . 0.33) (1002 . })))
((PUNTO_TXP (1000 . A) (1002 . {) (1040 . -1.5) (1002 . })))

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 31 Marzo 2006