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
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.