cg-Cad

Lisp »Tips 'n Tricks »TXT »1 »2 »3

LPTXT

;|

  LPTXT.LSP versione 1.0 [12.12.2004]
  Copyright (C) 2004 Claudio Piccini. All rights reserved
  www.cg-cad.com

  * Salva su file LINEE.TXT le coordinate x,y,z dei punti
    estremi delle linee presenti su un layer
  * Salva su file PUNTI.TXT le coordinate x,y,z dei punti
    presenti su un layer

|;

(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:LPTXT (/ olderr s1 nEnt nomeLayer 
                  k ent str10 str11
                  snapp snm orto piano nomeDir 
                  nf1 nf2 f1 f2
 )
 (setq olderr *error* *error* myerror)
 (setvar "cmdecho" 0)
 (salVar)
 (setq nf1 (strcat nomeDir "linee.txt"))
 (setq nf2 (strcat nomeDir "punti.txt"))
 (command "osnap" "_nea")
 (setq s1 (entsel "\n Seleziona un'entita' di riferimento:"))
 (setq ent (entget (car s1)))
 (setq nomeLayer (cdr (assoc 8 ent))) ; legge il layer
 (setq s1 (ssget "X" (list (cons 8 nomeLayer))))
 (setq nEnt (sslength s1))
 (setq k 0)               ; contatore entita'
 (setq f1 (open nf1 "w")) ; apre il file LINEE.TXT
 (setq f2 (open nf2 "w")) ; apre il file PUNTI.TXT
 (repeat nEnt
  (setq ent (entget (ssname s1 k)))
  (if (= "LINE" (cdr (assoc 0 ent)))
   (progn
    (setq str10 
     (strcat                                  ; codice 10 della linea
      (rtos (car   (cdr (assoc 10 ent))) 2 6) ; estrae e formatta X
      " "
      (rtos (cadr  (cdr (assoc 10 ent))) 2 6) ; estrae e formatta Y
      " "
      (rtos (caddr (cdr (assoc 10 ent))) 2 6) ; estrae e formatta Z
     )
    )
    (setq str11 
     (strcat                                  ; codice 11 della linea
      (rtos (car   (cdr (assoc 11 ent))) 2 6) ; estrae e formatta X
      " "
      (rtos (cadr  (cdr (assoc 11 ent))) 2 6) ; estrae e formatta Y
      " "
      (rtos (caddr (cdr (assoc 11 ent))) 2 6) ; estrae e formatta Z
     )
    )
    (write-line (strcat str10 " " str11) f1)
   )
  )
  (if (= "POINT" (cdr (assoc 0 ent)))
   (progn
    (setq str10 
     (strcat                                  ; codice 10 del punto
      (rtos (car   (cdr (assoc 10 ent))) 2 6) ; estrae e formatta X
      " "
      (rtos (cadr  (cdr (assoc 10 ent))) 2 6) ; estrae e formatta Y
      " "
      (rtos (caddr (cdr (assoc 10 ent))) 2 6) ; estrae e formatta Z
     )
    )
    (write-line str10 f2)
   )
  )
  (setq k (+ k 1))
 )
 (close f1) ; chiude LINEE.TXT
 (close f2) ; chiude PUNTI.TXT
 (ripVar)   ; ripristina l'ambiente
)
;;;eof

Test del lisp

Command: lptxt
Seleziona un'entita' di riferimento: pick qualcosa di rosso

Output: linee.txt

736.033687 688.565447 0 526.72614 482.765658 0
243.742336 772.223896 0 736.033687 688.565447 0
293.976149 287.004884 0 243.742336 772.223896 0
46.156013 655.102066 0 427.932979 399.107207 0

Output: punti.txt

706.3385 919.141108 0
731.027256 856.218884 0
654.002078 819.409167 0
632.234096 919.799307 0
528.417552 886.335928 0
503.300646 812.716491 0

LPTXT.LSP

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 12 Dicembre 2004