(osnap pnt "_nea") fails on some objects. Therefore I use this solution:
(defun MeEntSel ( / CurEnt CurObj NeaPnt)
(if (setq CurEnt (entsel "\nSelect object: "))
(progn
(setq CurObj (vlax-ename->vla-object (car CurEnt))
NeaPnt (if (vl-position
(vla-get-ObjectName CurObj)
'("AcDbArc" "AcDbCircle" "AcDb2dPolyline")
)
(vlax-curve-getClosestPointToProjection
CurObj
(trans (cadr CurEnt) 1 0)
(trans (getvar "VIEWDIR") 1 0 1)
)
(osnap (cadr CurEnt) "_NEA")
)
)
(list (car CurEnt) (trans NeaPnt 0 1))
)
)
)