From c8d482e40ef7555c72c5e8e9682346ead22d70e0 Mon Sep 17 00:00:00 2001 From: SpliiT Date: Tue, 19 May 2026 15:08:57 +0200 Subject: [PATCH 1/4] least changes needed --- .../rpc/viewer/viewer_protocols.py | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index bfc7645..1617621 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -231,17 +231,27 @@ def computeEpsilon(self, renderer: vtkRenderer, z: float) -> float: @exportRpc(viewer_prefix + viewer_schemas_dict["picked_ids"]["rpc"]) def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: - validate_schema( - rpc_params, self.viewer_schemas_dict["picked_ids"], self.viewer_prefix - ) + validate_schema(rpc_params, self.viewer_schemas_dict["picked_ids"], self.viewer_prefix) params = schemas.PickedIDS.from_dict(rpc_params) renderer = self.getView("-1").GetRenderers().GetFirstRenderer() - picker = vtkCellPicker(tolerance=0.005) - picker.Pick(params.x, params.y, 0, renderer) - actor = picker.GetActor() - viewer_id = picker.GetFlatBlockIndex() + + actors = [] + for _ in range(5): + picker = vtkCellPicker(tolerance=0.005) + picker.Pick(params.x, params.y, 0, renderer) + actor = picker.GetActor() + if not actor: + break + actors.append(actor) + actor.SetPickable(False) + + for actor in actors: + actor.SetPickable(True) + + viewer_id = picker.GetFlatBlockIndex() + array_ids = [ - id for id in params.ids if self.get_vtk_pipeline(id).actor == actor + id for id in params.ids if self.get_vtk_pipeline(id).actor in actors ] if not array_ids: return {"array_ids": [], "viewer_id": None} @@ -250,9 +260,7 @@ def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: mapper = pipeline.mapper if isinstance(mapper, vtkCompositePolyDataMapper): attr = mapper.GetCompositeDataDisplayAttributes() - if attr and not attr.GetBlockVisibility( - pipeline.blockDataSets[viewer_id] - ): + if attr and not attr.GetBlockVisibility(pipeline.blockDataSets[viewer_id]): array_ids, viewer_id = [], -1 return { "array_ids": array_ids, From a457a0f02ea43d75ba4b9e57e4b84e21cb9dedfd Mon Sep 17 00:00:00 2001 From: SpliiT Date: Tue, 19 May 2026 15:15:14 +0200 Subject: [PATCH 2/4] while actor --- .../rpc/viewer/viewer_protocols.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 1617621..053ae82 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -236,19 +236,19 @@ def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: renderer = self.getView("-1").GetRenderers().GetFirstRenderer() actors = [] - for _ in range(5): - picker = vtkCellPicker(tolerance=0.005) + picker = vtkCellPicker(tolerance=0.005) + picker.Pick(params.x, params.y, 0, renderer) + actor = picker.GetActor() + viewer_id = picker.GetFlatBlockIndex() + + while actor: + actors.append(actor) + actor.SetPickable(False) picker.Pick(params.x, params.y, 0, renderer) actor = picker.GetActor() - if not actor: - break - actors.append(actor) - actor.SetPickable(False) for actor in actors: - actor.SetPickable(True) - - viewer_id = picker.GetFlatBlockIndex() + actor.SetPickable(True) array_ids = [ id for id in params.ids if self.get_vtk_pipeline(id).actor in actors From 1999e86d56119c8fc9595bec0265f6797ccd7e43 Mon Sep 17 00:00:00 2001 From: SpliiT Date: Tue, 19 May 2026 15:15:57 +0200 Subject: [PATCH 3/4] feat(ContextMenu): New multiple context menu system From 27ef6b0ab8260dfef4fa82663f53ec4726220a87 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Tue, 19 May 2026 13:16:24 +0000 Subject: [PATCH 4/4] Apply prepare changes --- commitlint.config.js | 5 +++-- requirements.txt | 1 - .../rpc/viewer/viewer_protocols.py | 12 ++++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/commitlint.config.js b/commitlint.config.js index a397334..0c07c26 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -14,6 +14,7 @@ const Configuration = { "type-empty": [0], "type-enum": [2, "always", ["feat", "fix", "perf"]], }, -} + defaultIgnores: false, +}; -export default Configuration +export default Configuration; diff --git a/requirements.txt b/requirements.txt index 74d61ff..7819587 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 053ae82..3791b24 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -231,10 +231,12 @@ def computeEpsilon(self, renderer: vtkRenderer, z: float) -> float: @exportRpc(viewer_prefix + viewer_schemas_dict["picked_ids"]["rpc"]) def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: - validate_schema(rpc_params, self.viewer_schemas_dict["picked_ids"], self.viewer_prefix) + validate_schema( + rpc_params, self.viewer_schemas_dict["picked_ids"], self.viewer_prefix + ) params = schemas.PickedIDS.from_dict(rpc_params) renderer = self.getView("-1").GetRenderers().GetFirstRenderer() - + actors = [] picker = vtkCellPicker(tolerance=0.005) picker.Pick(params.x, params.y, 0, renderer) @@ -248,7 +250,7 @@ def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: actor = picker.GetActor() for actor in actors: - actor.SetPickable(True) + actor.SetPickable(True) array_ids = [ id for id in params.ids if self.get_vtk_pipeline(id).actor in actors @@ -260,7 +262,9 @@ def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str] | int | None]: mapper = pipeline.mapper if isinstance(mapper, vtkCompositePolyDataMapper): attr = mapper.GetCompositeDataDisplayAttributes() - if attr and not attr.GetBlockVisibility(pipeline.blockDataSets[viewer_id]): + if attr and not attr.GetBlockVisibility( + pipeline.blockDataSets[viewer_id] + ): array_ids, viewer_id = [], -1 return { "array_ids": array_ids,