This give a point at min z on 3Dpolyline.
(vl-load-com)
(defun c:min_z ( / js obj ename pr pt lst_pt lst_z id_seg nw_pt)
(princ "\nSelect 3DPolylines: ")
(while (null (setq js (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8)))))
(princ "\nObjects not valid!")
)
(repeat (setq n (sslength js))
(setq
obj (ssname js (setq n (1- n)))
ename (vlax-ename->vla-object obj)
pr -1
lst_pt nil
)
(repeat (if (zerop (vlax-get ename 'Closed)) (1+ (fix (vlax-curve-getEndParam ename))) (fix (vlax-curve-getEndParam ename)))
(setq
pt (vlax-curve-GetPointAtParam ename (setq pr (1+ pr)))
lst_pt (cons pt lst_pt)
)
)
(setq
lst_z (mapcar 'caddr lst_pt)
id_seg (- (length lst_z) (length (member (apply 'min lst_z) lst_z)))
)
(setq nw_pt
(vlax-invoke
(if (eq (getvar "CVPORT") 1)
(vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
)
'AddPoint
(nth id_seg lst_pt)
)
)
(vla-put-Normal nw_pt (vlax-3d-point '(0 0 1)))
)
(prin1)
)