Lisp »Tips 'n Tricks
»Xdata
»1
»2
»3
»4
»5
»6
TXC2
Legge dal file CERCHI.TXT coordinate X Y Z del punto, il diametro del cerchio e una etichetta.
Salva come lista xdata le coordinate X Y Z, il diametro e l'etichetta.
;|
TXC2.LSP (3 Aprile 2006)
Copyright (C) 2006 Claudio Piccini. All rights reserved
www.cg-cad.com
Legge dal file CERCHI.TXT coordinate X Y Z del punto,
il diametro del cerchio e una etichetta.
Salva come xdata XYZ, diam. e etichetta.
Esempio di file CERCHI.TXT:
x y z dia. etichetta
706.3385 919.141108 0 10 "C"
731.027256 856.218884 0 1 "B"
654.002078 819.409167 0 1.5 "C"
632.234096 919.799307 0 2 "B"
528.417552 886.335928 0 3.5 "E"
503.300646 812.716491 0 4 "C"
|;
(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:TXC2 (/ olderr snapp snm orto piano nomeDir
stringa lista nf1 f1
ed xd entX
)
(setq olderr *error* *error* myerror)
(setvar "cmdecho" 0)
(salVar)
(if (not (tblsearch "appid" "CERCHI_TXC"))(regapp "CERCHI_TXC"))
(command "osnap" "_non")
(setq nf1 (strcat nomeDir "cerchi.txt"))
(setq f1 (open nf1 "r")) ; apre il file CERCHI.TXT
(setq stringa " ")
(while (/= stringa nil)
(setq stringa (read-line f1))
(if (/= stringa nil)
(progn
(setq lista (strcat "(" stringa ")"))
(setq lista (read lista))
(command "_circle" (list
(nth 0 lista) ; X
(nth 1 lista) ; Y
(nth 2 lista) ; Z
)
"_d" (nth 3 lista) ; diamentro
)
(setq ed (entget (entlast))) ; legge l'entita'
(setq xd (list -3 (list "CERCHI_TXC"
(cons 1000 (nth 4 lista)) ; etichetta
(cons 1002 "{")
(cons 1040 (nth 0 lista)) ; X
(cons 1040 (nth 1 lista)) ; Y
(cons 1040 (nth 2 lista)) ; Z
(cons 1041 (nth 3 lista)) ; diametro
(cons 1002 "}")
)
)
)
(setq entX (append ed (list xd))) ; aggiunge la lista xd alla lista ed
(entmod entX) ; aggiorna l'entita' cerchio
)
)
)
(close f1)
(ripVar)
)
;;;eof
|
Test del Lisp
Command: txc2
Command: (leggix)
Seleziona le entita' con una finestra:
Secondo punto della finestra:
Command: !xd
(("CERCHI_TXC" (1000 . "C") (1002 . "{") (1040 . 503.301) (1040 . 812.716)
(1040 . 0.0) (1041 . 4.0) (1002 . "}")))
Per estrarre le coordinate X Y Z del punto (centro del cerchio) sono necessarie nuove combinazioni di funzioni CAR.
Command: !xd
(("CERCHI_TXC" (1000 . "C") (1002 . "{") (1040 . 503.301) (1040 . 812.716)
(1040 . 0.0) (1041 . 4.0) (1002 . "}")))
Command: (cdr (caddr (cdr (car xd))))
503.301 X
Command: (cdr (cadddr (cdr (car xd))))
812.716 Y
Command: (cdr (cadddr (cddr (car xd))))
0.0 Z
SCCX
Scala tutti i cerchi (con associata una lista xdata) appartenenti ad una etichetta (ad esempio "C").
;|
SCCX.LSP (3 Aprile 2006)
Copyright (C) 2006 Claudio Piccini. All rights reserved
www.cg-cad.com
Scala tutti i cerchi di una etichetta xdata
|;
(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"))
)
(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 leggi_scala_eX ( / p1 p2 s1 nEn
en ed xd
k kk eti
)
(setq p1 (getpoint "\n Seleziona le entita' con una finestra: "))
(initget (+ 1 32))
(setq p2 (getcorner p1 "\n Secondo punto della finestra: "))
(setq s1 (ssget "_C" p1 p2 '((-3 ("CERCHI_TXC")))))
(setq nEn (sslength s1))
(setq k 0 kk 0)
(repeat nEn
(setq en (ssname s1 k)
ed (entget en '("CERCHI_TXC"))
xd (cdr (assoc -3 ed))
)
(setq eti (strcase (cdadar xd)))
(if (= eti E)
(progn
(setq p1 (list
(cdr (caddr (cdr (car xd)))) ; X
(cdr (cadddr (cdr (car xd)))) ; Y
(cdr (cadddr (cddr (car xd)))) ; Z
)
)
(command "_scale" en "" p1 scala)
(setq kk (+ kk 1))
)
)
(setq k (+ k 1))
)
(princ "\n Scalati ")(princ kk)
(princ " cerchi ")(princ E)
)
(defun C:SCCX ( / olderr snapp snm orto piano
E scala
)
(setq olderr *error* *error* myerror)
(setvar "cmdecho" 0)
(salVar)
(setq E (strcase (getstring "\n Etichetta? ")))
(setq scala (getreal "\n Scala? "))
(leggi_scala_eX)
(ripVar)
)
;;;eof
|
Test del Lisp
Command: sccx
Etichetta? c
Scala? 10
Seleziona le entita' con una finestra:
Secondo punto della finestra:
Scalati 3 cerchi C
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 3 Aprile 2006
|