From ca97d88fcc9116021f971b734d1936cffdb7f2db Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 12 May 2026 09:59:55 +0200 Subject: [PATCH 1/4] feat(points): use of vtkPropPickerinstead of vtkWorldPointPicker for point_position --- src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 4da6bf52..2d86bd98 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,9 +202,8 @@ 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()) + picker = vtkPropPicker() + picker.Pick(params.x, params.y, 0.0, self.get_renderer()) ppos = picker.GetPickPosition() return {"x": ppos[0], "y": ppos[1], "z": ppos[2]} From b9e4980762a0cf3b72d44463f668441696015d85 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Tue, 12 May 2026 08:01:15 +0000 Subject: [PATCH 2/4] Apply prepare changes --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index f12c2e52..f326e1b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,7 +22,7 @@ frozenlist>=1 # via # aiohttp # aiosignal -idna==3.13 +idna==3.14 # via yarl kiwisolver>=1 # via matplotlib @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.1.3rc1 From c49d3ff440c145c25f9203d73549a94c839ca386 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Tue, 12 May 2026 08:03:11 +0000 Subject: [PATCH 3/4] Apply prepare changes --- requirements.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 00519dfd..f326e1b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,7 +22,6 @@ frozenlist>=1 # via # aiohttp # aiosignal -idna==3.14 idna==3.14 # via yarl kiwisolver>=1 @@ -62,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.1.3 From 806270d332444bb3c4323c5435a81211f0cdac36 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 12 May 2026 10:34:11 +0200 Subject: [PATCH 4/4] worldpicker and proppicker --- .../rpc/viewer/viewer_protocols.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 2d86bd98..c2153d96 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -202,9 +202,16 @@ def getPointPosition(self, rpc_params: RpcParams) -> dict[str, float]: self.viewer_prefix, ) params = schemas.GetPointPosition.from_dict(rpc_params) - picker = vtkPropPicker() - picker.Pick(params.x, params.y, 0.0, 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: