PDA

View Full Version : Lisp



Francisco Antao
2013-11-10, 12:29 PM
Hi
I am looking for a lisp that will calculate length of lines arcs and polylines

rkmcswain
2013-11-10, 01:34 PM
Hi
I am looking for a lisp that will calculate length of lines arcs and polylines

Grab TLEN.LSP from http://www.turvill.com/t2/free_stuff/index.htm

peter
2013-11-11, 06:28 AM
Revised to remove vlax-ename->vla-object

Just habit to pass vla-objects to vla functions

Good Trick



(defun C:PLLen (/ entSelection objSelection sngLength ssSelections)
(setq sngLength 0.0)
(if (setq ssSelections (ssget (list (cons 0 "*line,arc"))))
(repeat (setq intCount (sslength ssSelections))
(setq intCount (1- intCount)
entSelection (ssname ssSelections intCount)
sngLength (+ sngLength
(vlax-curve-getDistAtParam entSelection
(vlax-curve-getEndParam entSelection)
)
)
)
)
)
sngLength
)

BlackBox
2013-11-11, 03:10 PM
(defun C:PLLen (/ entSelection objSelection sngLength ssSelections)
(setq sngLength 0.0)
(if (setq ssSelections (ssget (list (cons 0 "*line,arc"))))
(repeat (setq intCount (sslength ssSelections))
(setq intCount (1- intCount)
entSelection (ssname ssSelections intCount)
objSelection (vlax-ename->vla-object entSelection)
sngLength (+ sngLength
(vlax-curve-getDistAtParam objSelection
(vlax-curve-getEndParam objSelection)
)
)
)
)
)
sngLength
)


No need to convert ENAME to VLA-Object, when using Vlax-Curve-* functions.



(defun c:FOO (/ ss i e len)
(if (and (setq ss (ssget '((0 . "ARC,*LINE")))) (setq len 0.0))
(progn
(repeat (setq i (sslength ss))
(setq len
(+ len
(vlax-curve-getdistatparam
(setq e (ssname ss (setq i (1- i))))
(vlax-curve-getendparam e)
)
)
)
)
(prompt "\nTotal length: ")
(princ len)
)
)
(princ)
)


... And a quick speed test on a 500 entity mix of 2D Polyline, 3D Polyline, Arc, Line, and Polyline entities:



(defun _PLLen (/ entSelection objSelection sngLength ssSelections)
(setq sngLength 0.0)
(if (setq ssSelections (ssget "_x" (list (cons 0 "*line,arc"))))
(repeat (setq intCount (sslength ssSelections))
(setq intCount (1- intCount)
entSelection (ssname ssSelections intCount)
objSelection (vlax-ename->vla-object entSelection)
sngLength (+ sngLength
(vlax-curve-getDistAtParam
objSelection
(vlax-curve-getEndParam objSelection)
)
)
)
)
)
sngLength
)

(defun _FOO (/ ss i e len)
(if (and (setq ss (ssget "_x" '((0 . "ARC,*LINE")))) (setq len 0.0))
(repeat (setq i (sslength ss))
(setq len
(+ len
(vlax-curve-getdistatparam
(setq e (ssname ss (setq i (1- i))))
(vlax-curve-getendparam e)
)
)
)
)
)
len
)


... Results from console:



_$ (bench '(_PLLen _FOO) '() 100)

_PLLEN
Elapsed: 6786
Average: 67.8600


_$

_FOO
Elapsed: 249
Average: 24.9000