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
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 12 Dicembre 2004
|