diff --git a/requirements.txt b/requirements.txt index e9b9ed49..f326e1b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.1.3 diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 4da6bf52..c2153d96 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -15,6 +15,7 @@ vtkWorldPointPicker, vtkPicker, vtkCellPicker, + vtkPropPicker, vtkCompositePolyDataMapper, ) from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackball @@ -201,10 +202,16 @@ def getPointPosition(self, rpc_params: RpcParams) -> dict[str, float]: self.viewer_prefix, ) params = schemas.GetPointPosition.from_dict(rpc_params) - xyz = [params.x, params.y, 0.0] - picker = vtkWorldPointPicker() - picker.Pick(xyz, self.get_renderer()) - ppos = picker.GetPickPosition() + renderer = self.get_renderer() + # If clicking on an object + prop_picker = vtkPropPicker() + if prop_picker.Pick(params.x, params.y, 0.0, renderer): + ppos = prop_picker.GetPickPosition() + return {"x": ppos[0], "y": ppos[1], "z": ppos[2]} + # WorldPicker if notclicking on an object + world_picker = vtkWorldPointPicker() + world_picker.Pick([params.x, params.y, 0.0], renderer) + ppos = world_picker.GetPickPosition() return {"x": ppos[0], "y": ppos[1], "z": ppos[2]} def computeEpsilon(self, renderer: vtkRenderer, z: float) -> float: