That's a great update to the lisp.
Since the original post, I updated the lisp to also work with C3D pipe segments. It sums the 3D length (center-to-center) of selected pipe segments. Here is the complete code:
(defun c:TlenC3D ( / ss n)
(setq gTotalLength 0)
(setq ss (ssget ))
(setq n 0)
(if ss
(progn
(repeat (sslength ss)
(setq obj (vlax-ename->vla-object (ssname ss n)))
(setq objName (vlax-get-property obj 'ObjectName))
(cond
((= objName "AeccDbFeatureLine")(C3D:AddFeatureLineLength obj))
((= objName "AeccDbSvFigure")(C3D:AddSurveyFigureLength obj))
((= objName "AcDb3dPolyline")(C3D:AddPolyline3DLength obj))
((= objName "AcDbPolyline")(C3D:AddPolylineLength obj))
((= objName "AcDbArc")(C3D:AddArcLength obj))
((= objName "AcDbLine")(C3D:AddLineLength obj))
((= objName "AeccDbPipe")(C3D:AddPipeLength obj))
)
(setq n (+ n 1))
)
(princ (strcat "\nTotal Length: " (rtos gTotalLength 2 2)))
)
)
(princ)
)
(defun C3D:AddFeatureLineLength (obj / len)
(setq len (vlax-get-property obj 'Length2D))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nFeatureline: " (rtos len 2 2)))
)
(defun C3D:AddSurveyFigureLength (obj / len)
(setq len (vlax-get-property obj 'Length2D))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nSurveyFigure: " (rtos len 2 2)))
)
(defun C3D:AddPolyline3DLength (obj / len)
(setq len (vlax-get-property obj 'Length))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nPolyline3D: " (rtos len 2 2)))
)
(defun C3D:AddPolylineLength (obj / len)
(setq len (vlax-get-property obj 'Length))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nPolyline: " (rtos len 2 2)))
)
(defun C3D:AddArcLength (obj / len)
(setq len (vlax-get-property obj 'ArcLength))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nArc: " (rtos len 2 2)))
)
(defun C3D:AddLineLength (obj / len)
(setq len (vlax-get-property obj 'Length))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nLine: " (rtos len 2 2)))
)
(defun C3D:AddPipeLength (obj / len)
(setq len (vlax-get-property obj 'Length3D))
(setq gTotalLength (+ gTotalLength len))
(princ (strcat "\nPipe: " (rtos len 2 2)))
)
Hopefully someone else can get some use out of it.