Like you've already pointed out, adding a [2D] LWPolyline over top of the [3D] Polyline is the only way I am able to achieve the desire '2d' snap as well.
Here's a quick automation, that will prevent you from having to manually draw the [2D] LWPolyline... Select the [3D] Polyline, specify your start point, and then the PERP point (of the [3D] Polyline):
Code:
(vl-load-com)
(defun c:Perp2d (/ *error* ss oSource oPline)
(prompt "\nSelect polyline to snap Perp2d: ")
(defun *error* (msg)
(if oSource (vla-highlight oSource :vlax-false))
(if oPline (vla-delete oPline))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (and (setq ss (ssget ":S:E" '((0 . "POLYLINE"))))
(setq oSource (vlax-ename->vla-object
(ssname ss 0)
)
)
)
(progn
(vla-highlight oSource :vlax-true)
(vla-put-layer
(setq oPline (vla-addpolyline
(vla-get-modelspace
(vla-get-activedocument (vlax-get-acad-object))
)
(vla-get-coordinates oSource)
)
)
(vla-get-layer oSource)
)
(command "._pline" pause "_perp" pause "")
)
)
(*error* nil)
)