7 jul 2008

Rutina "long-tramos" obtiene las longitudes de los tramos de una polilínea indicada:


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; by (c) Prexem - Victor Adolfo Bracamonte - 2008 ;;;
;;; www.prexem.blogspot.com ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:long-tramos (/ errant *error* e vla-e
long i f v c cant
xp c1 yp zp p
lp rlp cantp p1
p2 d
)
(vl-load-com)
(defun errlongtramos (m) (prompt "\n*fin*"))
(setq errant *error*
*error* errlongtramos
)
(setq e
(car
(entsel
"\nseleccione polilinea a medir tramos:"
)
)
)
(if
(or
(equal (cdr (assoc 0 (entget e))) "POLYLINE")
(equal (cdr (assoc 0 (entget e))) "LWPOLYLINE")
)
(progn
(setq
vla-e (vlax-ename->vla-object e)
long (vlax-get vla-e 'length)
v (vlax-get vla-e 'coordinates)
)
(princ "\nLongitud total: ")
(princ long)
(setq c 0)
(setq cant (/ (length v) 2))
(repeat cant
(setq xp (nth c v)
c1 (1+ c)
yp (nth c1 v)
zp 0.0
p (list xp yp zp)
lp (cons p lp)
c (1+ c1)
)
)
(setq rlp (reverse lp))
(setq cantp (length rlp))
(setq c 0)
(repeat cantp
(setq p1 (nth c rlp))
(setq c1 (1+ c))
(setq p2 (nth c1 rlp))
(setq d (distance p1 p2))
(setq c (1+ c))
(princ "\ntramo ")
(princ c1)
(princ ": ")
(princ d)
)
)
(princ "\n*EL OBJETO INDICADO NO ES POLILINEA*")
)
(setq *error* errant)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;