Cannot be done, You can "bypass" the "opening direction" (refer to niche object as an example), but not this, however I have windows that sense the core (a lintel) and is put there in correct position.
No, not directly. Although there is a filtering mechanism (see SetFilterForInput in Interface_Functions.cpp), but it is not suitable for this situation. You can reject the input after getting the coordinate from the user (hint: API_GetPointType contains the guid of the clicked element), and keep asking for input when the user clicks an invalid point.
You may also set the pointInfo.prompt message (it appears in the status bar at the bottom) to inform the user about what kind of input you are expecting.