From 72dfe4f591b7eb2ace745d5c2887c46af68d458c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 26 Mar 2026 16:24:05 +0100 Subject: [PATCH 1/6] temp --- src/opengeodeweb_viewer/object/object_methods.py | 10 ++++++++++ .../rpc/model/blocks/schemas/edges_visibility.json | 8 ++++++++ .../rpc/model/blocks/schemas/points_visibility.json | 8 ++++++++ src/opengeodeweb_viewer/vtk_protocol.py | 1 + 4 files changed, 27 insertions(+) create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 215aabae..1f54919f 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -140,3 +140,13 @@ def clearColors(self, data_id: str) -> None: output.GetPointData().SetActiveScalars("") output.GetCellData().SetActiveScalars("") mapper.ScalarVisibilityOff() + + def SetCategoryEdgesVisibility(self, data_id: str, category: str, visibility: bool) -> None: + actor = self.get_vtk_pipeline(data_id).category_actors.get(category) + if actor: + actor.GetProperty().SetEdgeVisibility(visibility) + + def SetCategoryPointsVisibility(self, data_id: str, category: str, visibility: bool) -> None: + actor = self.get_vtk_pipeline(data_id).category_actors.get(category) + if actor: + actor.GetProperty().SetVertexVisibility(visibility) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json new file mode 100644 index 00000000..0107aeab --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json @@ -0,0 +1,8 @@ +{ + "rpc": "edges_visibility", + "properties": { + "id": { "type": "string" }, + "visibility": { "type": "boolean" } + }, + "required": ["id", "visibility"] +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json new file mode 100644 index 00000000..1558425b --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json @@ -0,0 +1,8 @@ +{ + "rpc": "points_visibility", + "properties": { + "id": { "type": "string" }, + "visibility": { "type": "boolean" } + }, + "required": ["id", "visibility"] +} diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index 4fb092a0..425c5113 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -43,6 +43,7 @@ class VtkPipeline: filter: vtkAlgorithm | None = None actor: vtkActor = field(default_factory=vtkActor) blockDataSets: list[vtkDataObject | None] = field(default_factory=list) + category_actors: dict[str, vtkActor] = field(default_factory=dict) class VtkTypingMixin: From b8ffd366dfdaea06ea4a1c5a980703477d3ab2b8 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 26 Mar 2026 17:12:32 +0100 Subject: [PATCH 2/6] points visibility & edges visibility --- .../object/object_methods.py | 27 +++++++++------ .../rpc/model/blocks/schemas/__init__.py | 2 ++ .../blocks/schemas/edges_visibility.json | 13 +++++-- .../blocks/schemas/points_visibility.json | 13 +++++-- .../model/corners/model_corners_protocols.py | 34 ++++++++----------- .../rpc/model/corners/schemas/__init__.py | 2 ++ .../corners/schemas/edges_visibility.json | 15 ++++++++ .../corners/schemas/points_visibility.json | 15 ++++++++ .../rpc/model/lines/schemas/__init__.py | 2 ++ .../model/lines/schemas/edges_visibility.json | 15 ++++++++ .../lines/schemas/points_visibility.json | 15 ++++++++ .../rpc/model/model_protocols.py | 22 ++++++++++++ .../surfaces/model_surfaces_protocols.py | 24 ++++++------- .../rpc/model/surfaces/schemas/__init__.py | 2 ++ .../surfaces/schemas/edges_visibility.json | 15 ++++++++ .../surfaces/schemas/points_visibility.json | 15 ++++++++ 16 files changed, 181 insertions(+), 50 deletions(-) create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.json diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 1f54919f..187851c1 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -42,16 +42,31 @@ def registerObject( if actor.visibility == True: resetCamara = False renderer.AddActor(data.actor) + for category_actor in data.category_actors.values(): + renderer.AddActor(category_actor) if resetCamara: renderer.ResetCamera() def deregisterObject(self, data_id: str) -> None: - actor = self.get_vtk_pipeline(data_id).actor + pipeline = self.get_vtk_pipeline(data_id) + actor = pipeline.actor renderWindow = self.getView("-1") renderer = renderWindow.GetRenderers().GetFirstRenderer() renderer.RemoveActor(actor) + for category_actor in pipeline.category_actors.values(): + renderer.RemoveActor(category_actor) self.deregister_object(data_id) + def SetCategoryEdgesVisibility(self, data_id: str, category: str, visibility: bool) -> None: + actor = self.get_vtk_pipeline(data_id).category_actors.get(category) + if actor is not None: + actor.GetProperty().SetEdgeVisibility(visibility) + + def SetCategoryPointsVisibility(self, data_id: str, category: str, visibility: bool) -> None: + actor = self.get_vtk_pipeline(data_id).category_actors.get(category) + if actor is not None: + actor.GetProperty().SetVertexVisibility(visibility) + def SetVisibility(self, data_id: str, visibility: bool) -> None: actor = self.get_vtk_pipeline(data_id).actor actor.SetVisibility(visibility) @@ -140,13 +155,3 @@ def clearColors(self, data_id: str) -> None: output.GetPointData().SetActiveScalars("") output.GetCellData().SetActiveScalars("") mapper.ScalarVisibilityOff() - - def SetCategoryEdgesVisibility(self, data_id: str, category: str, visibility: bool) -> None: - actor = self.get_vtk_pipeline(data_id).category_actors.get(category) - if actor: - actor.GetProperty().SetEdgeVisibility(visibility) - - def SetCategoryPointsVisibility(self, data_id: str, category: str, visibility: bool) -> None: - actor = self.get_vtk_pipeline(data_id).category_actors.get(category) - if actor: - actor.GetProperty().SetVertexVisibility(visibility) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py index e983533c..12e51abf 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py @@ -1,2 +1,4 @@ from .visibility import * from .color import * +from .edges_visibility import * +from .points_visibility import * \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json index 0107aeab..ed1cc1bd 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.json @@ -1,8 +1,15 @@ { "rpc": "edges_visibility", + "type": "object", "properties": { - "id": { "type": "string" }, - "visibility": { "type": "boolean" } + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } }, - "required": ["id", "visibility"] + "required": ["id", "visibility"], + "additionalProperties": false } diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json index 1558425b..be25760d 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.json @@ -1,8 +1,15 @@ { "rpc": "points_visibility", + "type": "object", "properties": { - "id": { "type": "string" }, - "visibility": { "type": "boolean" } + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } }, - "required": ["id", "visibility"] + "required": ["id", "visibility"], + "additionalProperties": false } diff --git a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py index ef376891..2e4ea380 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py @@ -6,40 +6,36 @@ from opengeodeweb_microservice.schemas import get_schemas_dict # Local application imports -from opengeodeweb_viewer.utils_functions import ( - validate_schema, - RpcParams, -) +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView from . import schemas -class VtkModelCornersView(VtkModelView): - model_corners_prefix = "opengeodeweb_viewer.model.corners." - model_corners_schemas_dict = get_schemas_dict( +class VtkModelBlocksView(VtkModelView): + model_blocks_prefix = "opengeodeweb_viewer.model.blocks." + model_blocks_schemas_dict = get_schemas_dict( os.path.join(os.path.dirname(__file__), "schemas") ) def __init__(self) -> None: super().__init__() - @exportRpc(model_corners_prefix + model_corners_schemas_dict["visibility"]["rpc"]) - def setModelCornersPointsVisibility(self, rpc_params: RpcParams) -> None: + @exportRpc(model_blocks_prefix + model_blocks_schemas_dict["edges_visibility"]["rpc"]) + def setModelBlocksEdgesVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, - self.model_corners_schemas_dict["visibility"], - self.model_corners_prefix, + self.model_blocks_schemas_dict["edges_visibility"], + self.model_blocks_prefix, ) params = schemas.Visibility.from_dict(rpc_params) - self.SetBlocksVisibility(params.id, params.block_ids, params.visibility) + self.SetCategoryEdgesVisibility(params.id, "blocks", params.visibility) - @exportRpc(model_corners_prefix + model_corners_schemas_dict["color"]["rpc"]) - def setModelCornersPointsColor(self, rpc_params: RpcParams) -> None: + @exportRpc(model_blocks_prefix + model_blocks_schemas_dict["points_visibility"]["rpc"]) + def setModelBlocksPointsVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, - self.model_corners_schemas_dict["color"], - self.model_corners_prefix, + self.model_blocks_schemas_dict["points_visibility"], + self.model_blocks_prefix, ) - params = schemas.Color.from_dict(rpc_params) - color = params.color - self.SetBlocksColor(params.id, params.block_ids, color.r, color.g, color.b) + params = schemas.Visibility.from_dict(rpc_params) + self.SetCategoryPointsVisibility(params.id, "blocks", params.visibility) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py index e983533c..12e51abf 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py @@ -1,2 +1,4 @@ from .visibility import * from .color import * +from .edges_visibility import * +from .points_visibility import * \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.json b/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.json new file mode 100644 index 00000000..ed1cc1bd --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.json b/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.json new file mode 100644 index 00000000..be25760d --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py index e983533c..ed1367cb 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py @@ -1,2 +1,4 @@ from .visibility import * from .color import * +from .edges_visibility import * +from .points_visibility import * diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.json b/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.json new file mode 100644 index 00000000..ed1cc1bd --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.json b/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.json new file mode 100644 index 00000000..be25760d --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/model_protocols.py b/src/opengeodeweb_viewer/rpc/model/model_protocols.py index 6ca47947..edf46ce7 100644 --- a/src/opengeodeweb_viewer/rpc/model/model_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/model_protocols.py @@ -30,6 +30,7 @@ class VtkModelView(VtkObjectView): def __init__(self) -> None: super().__init__() + @exportRpc(model_prefix + model_schemas_dict["register"]["rpc"]) @exportRpc(model_prefix + model_schemas_dict["register"]["rpc"]) def registerModel(self, rpc_params: RpcParams) -> None: validate_schema( @@ -61,6 +62,27 @@ def registerModel(self, rpc_params: RpcParams) -> None: data.blockDataSets.append(None) data.blockDataSets.append(block) iterator.GoToNextItem() + + multiblock_output = reader.GetOutput() + category_iterator = multiblock_output.NewIterator() + category_iterator.InitTraversal() + while not category_iterator.IsDoneWithTraversal(): + category_block = category_iterator.GetCurrentDataObject() + category_name = multiblock_output.GetMetaData( + category_iterator.GetCurrentIndex() + ).Get(category_block.NAME()) + if category_block is not None: + category_filter = vtkGeometryFilter() + category_filter.SetInputDataObject(category_block) + category_filter.Update() + category_mapper = vtkCompositePolyDataMapper() + category_mapper.SetInputDataObject( + category_filter.GetOutputDataObject(0) + ) + category_actor = vtkActor() + category_actor.SetMapper(category_mapper) + data.category_actors[category_name] = category_actor + category_iterator.GoToNextItem() self.registerObject(data_id, file_name, data) except Exception as e: print(f"Error registering model {data_id}: {str(e)}", flush=True) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py index aaa3a818..81fd4953 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py @@ -6,10 +6,7 @@ from opengeodeweb_microservice.schemas import get_schemas_dict # Local application imports -from opengeodeweb_viewer.utils_functions import ( - validate_schema, - RpcParams, -) +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView from . import schemas @@ -23,23 +20,22 @@ class VtkModelSurfacesView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["visibility"]["rpc"]) - def setModelSurfacesPolygonsVisibility(self, rpc_params: RpcParams) -> None: + @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["edges_visibility"]["rpc"]) + def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, - self.model_surfaces_schemas_dict["visibility"], + self.model_surfaces_schemas_dict["edges_visibility"], self.model_surfaces_prefix, ) params = schemas.Visibility.from_dict(rpc_params) - self.SetBlocksVisibility(params.id, params.block_ids, params.visibility) + self.SetCategoryEdgesVisibility(params.id, "surfaces", params.visibility) - @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["color"]["rpc"]) - def setModelSurfacesPolygonsCOlor(self, rpc_params: RpcParams) -> None: + @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["points_visibility"]["rpc"]) + def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, - self.model_surfaces_schemas_dict["color"], + self.model_surfaces_schemas_dict["points_visibility"], self.model_surfaces_prefix, ) - params = schemas.Color.from_dict(rpc_params) - color = params.color - self.SetBlocksColor(params.id, params.block_ids, color.r, color.g, color.b) + params = schemas.Visibility.from_dict(rpc_params) + self.SetCategoryPointsVisibility(params.id, "surfaces", params.visibility) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py index 91183b4c..aed7ac2f 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py @@ -1,3 +1,5 @@ from .visibility import * from .color import * from .apply_textures import * +from .edges_visibility import * +from .points_visibility import * \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.json b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.json new file mode 100644 index 00000000..ed1cc1bd --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.json b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.json new file mode 100644 index 00000000..be25760d --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} From 2b17983edf3dbc45cebecc12c90060f35feae846 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 27 Mar 2026 14:32:43 +0100 Subject: [PATCH 3/6] temporary RPCs --- .../rpc/model/blocks/edges/__init__.py | 0 .../edges/model_surfaces_edges_protocols.py | 39 +++++++++++ .../model/blocks/edges/schemas/__init__.py | 3 + .../rpc/model/blocks/edges/schemas/color.json | 40 +++++++++++ .../rpc/model/blocks/edges/schemas/color.py | 23 ++++++ .../blocks/edges/schemas/visibility.json | 15 ++++ .../model/blocks/edges/schemas/visibility.py | 11 +++ .../rpc/model/blocks/edges/schemas/width.json | 15 ++++ .../rpc/model/blocks/edges/schemas/width.py | 11 +++ .../rpc/model/blocks/points/__init__.py | 0 .../points/model_surfaces_points_protocols.py | 34 +++++++++ .../model/blocks/points/schemas/__init__.py | 3 + .../model/blocks/points/schemas/color.json | 40 +++++++++++ .../rpc/model/blocks/points/schemas/color.py | 23 ++++++ .../rpc/model/blocks/points/schemas/size.json | 15 ++++ .../rpc/model/blocks/points/schemas/size.py | 11 +++ .../blocks/points/schemas/visibility.json | 15 ++++ .../model/blocks/points/schemas/visibility.py | 11 +++ .../rpc/model/corners/points/__init__.py | 0 .../points/model_surfaces_points_protocols.py | 34 +++++++++ .../model/corners/points/schemas/__init__.py | 3 + .../model/corners/points/schemas/color.json | 40 +++++++++++ .../rpc/model/corners/points/schemas/color.py | 23 ++++++ .../model/corners/points/schemas/size.json | 15 ++++ .../rpc/model/corners/points/schemas/size.py | 11 +++ .../corners/points/schemas/visibility.json | 15 ++++ .../corners/points/schemas/visibility.py | 11 +++ .../rpc/model/lines/edges/__init__.py | 0 .../edges/model_surfaces_edges_protocols.py | 39 +++++++++++ .../rpc/model/lines/edges/schemas/__init__.py | 3 + .../rpc/model/lines/edges/schemas/color.json | 40 +++++++++++ .../rpc/model/lines/edges/schemas/color.py | 23 ++++++ .../model/lines/edges/schemas/visibility.json | 15 ++++ .../model/lines/edges/schemas/visibility.py | 11 +++ .../rpc/model/lines/edges/schemas/width.json | 15 ++++ .../rpc/model/lines/edges/schemas/width.py | 11 +++ .../rpc/model/lines/points/__init__.py | 0 .../points/model_surfaces_points_protocols.py | 34 +++++++++ .../model/lines/points/schemas/__init__.py | 3 + .../rpc/model/lines/points/schemas/color.json | 40 +++++++++++ .../rpc/model/lines/points/schemas/color.py | 23 ++++++ .../rpc/model/lines/points/schemas/size.json | 15 ++++ .../rpc/model/lines/points/schemas/size.py | 11 +++ .../lines/points/schemas/visibility.json | 15 ++++ .../model/lines/points/schemas/visibility.py | 11 +++ .../rpc/model/surfaces/edges/__init__.py | 0 .../edges/model_surfaces_edges_protocols.py | 39 +++++++++++ .../model/surfaces/edges/schemas/__init__.py | 3 + .../model/surfaces/edges/schemas/color.json | 40 +++++++++++ .../rpc/model/surfaces/edges/schemas/color.py | 23 ++++++ .../surfaces/edges/schemas/visibility.json | 15 ++++ .../surfaces/edges/schemas/visibility.py | 11 +++ .../model/surfaces/edges/schemas/width.json | 15 ++++ .../rpc/model/surfaces/edges/schemas/width.py | 11 +++ .../rpc/model/surfaces/points/__init__.py | 0 .../points/model_surfaces_points_protocols.py | 34 +++++++++ .../model/surfaces/points/schemas/__init__.py | 3 + .../model/surfaces/points/schemas/color.json | 40 +++++++++++ .../model/surfaces/points/schemas/color.py | 23 ++++++ .../model/surfaces/points/schemas/size.json | 15 ++++ .../rpc/model/surfaces/points/schemas/size.py | 11 +++ .../surfaces/points/schemas/visibility.json | 15 ++++ .../surfaces/points/schemas/visibility.py | 11 +++ tests/data/123456789/cube.vtm | 58 +++++++++++++++ .../test_model_surfaces_edges_protocols.py | 70 +++++++++++++++++++ .../test_model_surfaces_points_protocols.py | 69 ++++++++++++++++++ 66 files changed, 1276 insertions(+) create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.json create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.json create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.py create mode 100644 tests/data/123456789/cube.vtm create mode 100644 tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py create mode 100644 tests/model/surfaces/points/test_model_surfaces_points_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py new file mode 100644 index 00000000..a609eb96 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py @@ -0,0 +1,39 @@ +# Standard library imports +import os + +# Third party imports +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict + +# Local application imports +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelBlocksEdgesView(VtkModelView): + model_blocks_edges_prefix = "opengeodeweb_viewer.model.blocks.edges." + model_blocks_edges_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["visibility"]["rpc"]) + def setModelBlocksEdgesVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["visibility"], self.model_blocks_edges_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetEdgesVisibility(params.id, params.visibility) + + @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["color"]["rpc"]) + def setModelBlocksEdgesColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["color"], self.model_blocks_edges_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) + + @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["width"]["rpc"]) + def setModelBlocksEdgesWidth(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["width"], self.model_blocks_edges_prefix) + params = schemas.Width.from_dict(rpc_params) + self.SetEdgesWidth(params.id, params.width) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py new file mode 100644 index 00000000..c8088709 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .visibility import Visibility +from .width import Width \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.json b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.json new file mode 100644 index 00000000..bba8d11c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.json @@ -0,0 +1,15 @@ +{ + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": ["id", "width"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.py new file mode 100644 index 00000000..eda85e61 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/width.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Width(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + width: float diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py new file mode 100644 index 00000000..84c68372 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py @@ -0,0 +1,34 @@ +import os +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelBlocksPointsView(VtkModelView): + model_blocks_points_prefix = "opengeodeweb_viewer.model.blocks.points." + model_blocks_points_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["visibility"]["rpc"]) + def setModelBlocksPointsVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_points_schemas_dict["visibility"], self.model_blocks_points_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetPointsVisibility(params.id, params.visibility) + + @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["size"]["rpc"]) + def setModelBlocksPointsSize(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_points_schemas_dict["size"], self.model_blocks_points_prefix) + params = schemas.Size.from_dict(rpc_params) + self.SetPointsSize(params.id, params.size) + + @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["color"]["rpc"]) + def setModelBlocksPointsColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_blocks_points_schemas_dict["color"], self.model_blocks_points_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py new file mode 100644 index 00000000..db4a9677 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .size import Size +from .visibility import Visibility \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.json b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.json new file mode 100644 index 00000000..eeee2f5a --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.json @@ -0,0 +1,15 @@ +{ + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": ["id", "size"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.py new file mode 100644 index 00000000..eb182790 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/size.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Size(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + size: float diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/__init__.py b/src/opengeodeweb_viewer/rpc/model/corners/points/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py new file mode 100644 index 00000000..3202f428 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py @@ -0,0 +1,34 @@ +import os +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelCornersPointsView(VtkModelView): + model_corners_points_prefix = "opengeodeweb_viewer.model.corners.points." + model_corners_points_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["visibility"]["rpc"]) + def setModelCornersPointsVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_corners_points_schemas_dict["visibility"], self.model_corners_points_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetPointsVisibility(params.id, params.visibility) + + @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["size"]["rpc"]) + def setModelCornersPointsSize(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_corners_points_schemas_dict["size"], self.model_corners_points_prefix) + params = schemas.Size.from_dict(rpc_params) + self.SetPointsSize(params.id, params.size) + + @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["color"]["rpc"]) + def setModelCornersPointsColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_corners_points_schemas_dict["color"], self.model_corners_points_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py new file mode 100644 index 00000000..f27dfd1f --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .visibility import Visibility +from .size import Size \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.json b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.json new file mode 100644 index 00000000..eeee2f5a --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.json @@ -0,0 +1,15 @@ +{ + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": ["id", "size"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.py b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.py new file mode 100644 index 00000000..eb182790 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/size.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Size(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + size: float diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py new file mode 100644 index 00000000..8d3369d4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py @@ -0,0 +1,39 @@ +# Standard library imports +import os + +# Third party imports +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict + +# Local application imports +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelLinesEdgesView(VtkModelView): + model_lines_edges_prefix = "opengeodeweb_viewer.model.lines.edges." + model_lines_edges_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["visibility"]["rpc"]) + def setModelLinesEdgesVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_edges_schemas_dict["visibility"], self.model_lines_edges_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetEdgesVisibility(params.id, params.visibility) + + @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["color"]["rpc"]) + def setModelLinesEdgesColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_edges_schemas_dict["color"], self.model_lines_edges_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) + + @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["width"]["rpc"]) + def setModelLinesEdgesWidth(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_edges_schemas_dict["width"], self.model_lines_edges_prefix) + params = schemas.Width.from_dict(rpc_params) + self.SetEdgesWidth(params.id, params.width) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py new file mode 100644 index 00000000..c8088709 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .visibility import Visibility +from .width import Width \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.json b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.json new file mode 100644 index 00000000..bba8d11c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.json @@ -0,0 +1,15 @@ +{ + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": ["id", "width"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.py new file mode 100644 index 00000000..eda85e61 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/width.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Width(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + width: float diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/points/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py new file mode 100644 index 00000000..f553d24c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py @@ -0,0 +1,34 @@ +import os +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelLinesPointsView(VtkModelView): + model_lines_points_prefix = "opengeodeweb_viewer.model.lines.points." + model_lines_points_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["visibility"]["rpc"]) + def setModelLinesPointsVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_points_schemas_dict["visibility"], self.model_lines_points_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetPointsVisibility(params.id, params.visibility) + + @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["size"]["rpc"]) + def setModelLinesPointsSize(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_points_schemas_dict["size"], self.model_lines_points_prefix) + params = schemas.Size.from_dict(rpc_params) + self.SetPointsSize(params.id, params.size) + + @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["color"]["rpc"]) + def setModelLinesPointsColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_lines_points_schemas_dict["color"], self.model_lines_points_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py new file mode 100644 index 00000000..db4a9677 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .size import Size +from .visibility import Visibility \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.json b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.json new file mode 100644 index 00000000..eeee2f5a --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.json @@ -0,0 +1,15 @@ +{ + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": ["id", "size"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.py b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.py new file mode 100644 index 00000000..eb182790 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/size.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Size(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + size: float diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py new file mode 100644 index 00000000..3d6a394f --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py @@ -0,0 +1,39 @@ +# Standard library imports +import os + +# Third party imports +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict + +# Local application imports +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelSurfacesEdgesView(VtkModelView): + model_surfaces_edges_prefix = "opengeodeweb_viewer.model.surfaces.edges." + model_surfaces_edges_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["visibility"]["rpc"]) + def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["visibility"], self.model_surfaces_edges_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetEdgesVisibility(params.id, params.visibility) + + @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["color"]["rpc"]) + def setModelSurfacesEdgesColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["color"], self.model_surfaces_edges_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) + + @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["width"]["rpc"]) + def setModelSurfacesEdgesWidth(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["width"], self.model_surfaces_edges_prefix) + params = schemas.Width.from_dict(rpc_params) + self.SetEdgesWidth(params.id, params.width) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py new file mode 100644 index 00000000..c8088709 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .visibility import Visibility +from .width import Width \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.json b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.json new file mode 100644 index 00000000..bba8d11c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.json @@ -0,0 +1,15 @@ +{ + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": ["id", "width"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.py new file mode 100644 index 00000000..eda85e61 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/width.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Width(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + width: float diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py new file mode 100644 index 00000000..6f37d2d2 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py @@ -0,0 +1,34 @@ +import os +from wslink import register as exportRpc +from opengeodeweb_microservice.schemas import get_schemas_dict +from opengeodeweb_viewer.utils_functions import validate_schema, RpcParams +from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView +from . import schemas + + +class VtkModelSurfacesPointsView(VtkModelView): + model_surfaces_points_prefix = "opengeodeweb_viewer.model.surfaces.points." + model_surfaces_points_schemas_dict = get_schemas_dict( + os.path.join(os.path.dirname(__file__), "schemas") + ) + + def __init__(self) -> None: + super().__init__() + + @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["visibility"]["rpc"]) + def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["visibility"], self.model_surfaces_points_prefix) + params = schemas.Visibility.from_dict(rpc_params) + self.SetPointsVisibility(params.id, params.visibility) + + @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["size"]["rpc"]) + def setModelSurfacesPointsSize(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["size"], self.model_surfaces_points_prefix) + params = schemas.Size.from_dict(rpc_params) + self.SetPointsSize(params.id, params.size) + + @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["color"]["rpc"]) + def setModelSurfacesPointsColor(self, rpc_params: RpcParams) -> None: + validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["color"], self.model_surfaces_points_prefix) + params = schemas.Color.from_dict(rpc_params) + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py new file mode 100644 index 00000000..db4a9677 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py @@ -0,0 +1,3 @@ +from .color import Color +from .size import Size +from .visibility import Visibility \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.json b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.json new file mode 100644 index 00000000..29f6f880 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.json @@ -0,0 +1,40 @@ +{ + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": ["r", "g", "b"], + "additionalProperties": false + } + }, + "required": ["id", "color"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.py new file mode 100644 index 00000000..01f0222c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/color.py @@ -0,0 +1,23 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ColorClass(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + + +@dataclass +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + color: ColorClass + id: str diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.json b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.json new file mode 100644 index 00000000..eeee2f5a --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.json @@ -0,0 +1,15 @@ +{ + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": ["id", "size"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.py new file mode 100644 index 00000000..eb182790 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/size.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Size(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + size: float diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.json b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.json new file mode 100644 index 00000000..dc6b4213 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.json @@ -0,0 +1,15 @@ +{ + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": ["id", "visibility"], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.py new file mode 100644 index 00000000..56a629d8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class Visibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/tests/data/123456789/cube.vtm b/tests/data/123456789/cube.vtm new file mode 100644 index 00000000..f6918d7a --- /dev/null +++ b/tests/data/123456789/cube.vtm @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py b/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py new file mode 100644 index 00000000..3717c993 --- /dev/null +++ b/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py @@ -0,0 +1,70 @@ +# Standard library imports +from typing import Callable + +# Third party imports +from opengeodeweb_viewer.rpc.model.surfaces.edges.model_surfaces_edges_protocols import ( + VtkModelSurfacesEdgesView, +) + +# Local application imports +from tests.model.test_model_protocols import test_register_model_cube +from tests.conftest import ServerMonitor + + +def test_surfaces_edges_visibility( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_register_model_cube(server, dataset_factory) + + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + assert server.compare_image("model/surfaces/edges/visibility_true.jpeg") == True + + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": False}], + ) + assert server.compare_image("model/surfaces/edges/visibility_false.jpeg") == True + + +def test_surfaces_edges_color( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_register_model_cube(server, dataset_factory) + + # Activer les edges d'abord + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + # Puis changer la couleur + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["color"]["rpc"], + [{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}], + ) + assert server.compare_image("model/surfaces/edges/color.jpeg") == True + + +def test_surfaces_edges_width( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_surfaces_edges_visibility(server, dataset_factory) + + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + + server.call( + VtkModelSurfacesEdgesView.model_surfaces_edges_prefix + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["width"]["rpc"], + [{"id": "123456789", "width": 5.0}], + ) + assert server.compare_image("model/surfaces/edges/width.jpeg") == True \ No newline at end of file diff --git a/tests/model/surfaces/points/test_model_surfaces_points_protocols.py b/tests/model/surfaces/points/test_model_surfaces_points_protocols.py new file mode 100644 index 00000000..0e4a94b1 --- /dev/null +++ b/tests/model/surfaces/points/test_model_surfaces_points_protocols.py @@ -0,0 +1,69 @@ +# Standard library imports +from typing import Callable + +# Third party imports +from opengeodeweb_viewer.rpc.model.surfaces.points.model_surfaces_points_protocols import ( + VtkModelSurfacesPointsView, +) + +# Local application imports +from tests.model.test_model_protocols import test_register_model_cube +from tests.conftest import ServerMonitor + + +def test_surfaces_points_visibility( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_register_model_cube(server, dataset_factory) + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + assert server.compare_image("model/surfaces/points/visibility_true.jpeg") == True + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": False}], + ) + assert server.compare_image("model/surfaces/points/visibility_false.jpeg") == True + + +def test_surfaces_points_color( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_surfaces_points_visibility(server, dataset_factory) + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["color"]["rpc"], + [{"id": "123456789", "color": {"r": 0, "g": 0, "b": 255}}], + ) + assert server.compare_image("model/surfaces/points/color.jpeg") == True + + +def test_surfaces_points_size( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + test_surfaces_points_visibility(server, dataset_factory) + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + + server.call( + VtkModelSurfacesPointsView.model_surfaces_points_prefix + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["size"]["rpc"], + [{"id": "123456789", "size": 8.0}], + ) + assert server.compare_image("model/surfaces/points/size.jpeg") == True \ No newline at end of file From 7810551db310aaad9f013647b93e4cb8b1850cbd Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Fri, 27 Mar 2026 13:33:59 +0000 Subject: [PATCH 4/6] Apply prepare changes --- opengeodeweb_viewer_schemas.json | 768 ++++++++++++++++++ requirements.txt | 1 - .../object/object_methods.py | 8 +- .../edges/model_surfaces_edges_protocols.py | 32 +- .../model/blocks/edges/schemas/__init__.py | 6 +- .../points/model_surfaces_points_protocols.py | 33 +- .../model/blocks/points/schemas/__init__.py | 6 +- .../rpc/model/blocks/schemas/__init__.py | 4 +- .../model/blocks/schemas/edges_visibility.py | 11 + .../model/blocks/schemas/points_visibility.py | 11 + .../model/corners/model_corners_protocols.py | 10 +- .../points/model_surfaces_points_protocols.py | 33 +- .../model/corners/points/schemas/__init__.py | 6 +- .../rpc/model/corners/schemas/__init__.py | 4 +- .../model/corners/schemas/edges_visibility.py | 11 + .../corners/schemas/points_visibility.py | 11 + .../edges/model_surfaces_edges_protocols.py | 32 +- .../rpc/model/lines/edges/schemas/__init__.py | 6 +- .../points/model_surfaces_points_protocols.py | 32 +- .../model/lines/points/schemas/__init__.py | 6 +- .../rpc/model/lines/schemas/__init__.py | 4 +- .../model/lines/schemas/edges_visibility.py | 11 + .../model/lines/schemas/points_visibility.py | 11 + .../edges/model_surfaces_edges_protocols.py | 33 +- .../model/surfaces/edges/schemas/__init__.py | 6 +- .../surfaces/model_surfaces_protocols.py | 10 +- .../points/model_surfaces_points_protocols.py | 34 +- .../model/surfaces/points/schemas/__init__.py | 6 +- .../rpc/model/surfaces/schemas/__init__.py | 4 +- .../surfaces/schemas/edges_visibility.py | 11 + .../surfaces/schemas/points_visibility.py | 11 + .../test_model_surfaces_edges_protocols.py | 18 +- .../test_model_surfaces_points_protocols.py | 18 +- 33 files changed, 1111 insertions(+), 97 deletions(-) create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.py create mode 100644 src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.py diff --git a/opengeodeweb_viewer_schemas.json b/opengeodeweb_viewer_schemas.json index 47ffb9db..8af28437 100644 --- a/opengeodeweb_viewer_schemas.json +++ b/opengeodeweb_viewer_schemas.json @@ -1140,6 +1140,182 @@ }, "model": { "blocks": { + "edges": { + "width": { + "$id": "opengeodeweb_viewer.model.blocks.edges.width", + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": [ + "id", + "width" + ], + "additionalProperties": false + }, + "visibility": { + "$id": "opengeodeweb_viewer.model.blocks.edges.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.blocks.edges.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, + "points": { + "visibility": { + "$id": "opengeodeweb_viewer.model.blocks.points.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "size": { + "$id": "opengeodeweb_viewer.model.blocks.points.size", + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": [ + "id", + "size" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.blocks.points.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, "visibility": { "$id": "opengeodeweb_viewer.model.blocks.visibility", "rpc": "visibility", @@ -1167,6 +1343,44 @@ ], "additionalProperties": false }, + "points_visibility": { + "$id": "opengeodeweb_viewer.model.blocks.points_visibility", + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "edges_visibility": { + "$id": "opengeodeweb_viewer.model.blocks.edges_visibility", + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, "color": { "$id": "opengeodeweb_viewer.model.blocks.color", "rpc": "color", @@ -1225,6 +1439,94 @@ } }, "corners": { + "points": { + "visibility": { + "$id": "opengeodeweb_viewer.model.corners.points.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "size": { + "$id": "opengeodeweb_viewer.model.corners.points.size", + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": [ + "id", + "size" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.corners.points.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, "visibility": { "$id": "opengeodeweb_viewer.model.corners.visibility", "rpc": "visibility", @@ -1252,6 +1554,44 @@ ], "additionalProperties": false }, + "points_visibility": { + "$id": "opengeodeweb_viewer.model.corners.points_visibility", + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "edges_visibility": { + "$id": "opengeodeweb_viewer.model.corners.edges_visibility", + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, "color": { "$id": "opengeodeweb_viewer.model.corners.color", "rpc": "color", @@ -1331,6 +1671,182 @@ } }, "lines": { + "edges": { + "width": { + "$id": "opengeodeweb_viewer.model.lines.edges.width", + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": [ + "id", + "width" + ], + "additionalProperties": false + }, + "visibility": { + "$id": "opengeodeweb_viewer.model.lines.edges.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.lines.edges.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, + "points": { + "visibility": { + "$id": "opengeodeweb_viewer.model.lines.points.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "size": { + "$id": "opengeodeweb_viewer.model.lines.points.size", + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": [ + "id", + "size" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.lines.points.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, "visibility": { "$id": "opengeodeweb_viewer.model.lines.visibility", "rpc": "visibility", @@ -1358,6 +1874,44 @@ ], "additionalProperties": false }, + "points_visibility": { + "$id": "opengeodeweb_viewer.model.lines.points_visibility", + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "edges_visibility": { + "$id": "opengeodeweb_viewer.model.lines.edges_visibility", + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, "color": { "$id": "opengeodeweb_viewer.model.lines.color", "rpc": "color", @@ -1505,6 +2059,182 @@ "additionalProperties": false }, "surfaces": { + "edges": { + "width": { + "$id": "opengeodeweb_viewer.model.surfaces.edges.width", + "rpc": "width", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "number" + } + }, + "required": [ + "id", + "width" + ], + "additionalProperties": false + }, + "visibility": { + "$id": "opengeodeweb_viewer.model.surfaces.edges.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.surfaces.edges.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, + "points": { + "visibility": { + "$id": "opengeodeweb_viewer.model.surfaces.points.visibility", + "rpc": "visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "size": { + "$id": "opengeodeweb_viewer.model.surfaces.points.size", + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "number" + } + }, + "required": [ + "id", + "size" + ], + "additionalProperties": false + }, + "color": { + "$id": "opengeodeweb_viewer.model.surfaces.points.color", + "rpc": "color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "color" + ], + "additionalProperties": false + } + }, "visibility": { "$id": "opengeodeweb_viewer.model.surfaces.visibility", "rpc": "visibility", @@ -1532,6 +2262,44 @@ ], "additionalProperties": false }, + "points_visibility": { + "$id": "opengeodeweb_viewer.model.surfaces.points_visibility", + "rpc": "points_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, + "edges_visibility": { + "$id": "opengeodeweb_viewer.model.surfaces.edges_visibility", + "rpc": "edges_visibility", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "visibility": { + "type": "boolean" + } + }, + "required": [ + "id", + "visibility" + ], + "additionalProperties": false + }, "color": { "$id": "opengeodeweb_viewer.model.surfaces.color", "rpc": "color", diff --git a/requirements.txt b/requirements.txt index 5750c624..13efd779 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.1.1 diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 187851c1..2036ea78 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -57,12 +57,16 @@ def deregisterObject(self, data_id: str) -> None: renderer.RemoveActor(category_actor) self.deregister_object(data_id) - def SetCategoryEdgesVisibility(self, data_id: str, category: str, visibility: bool) -> None: + def SetCategoryEdgesVisibility( + self, data_id: str, category: str, visibility: bool + ) -> None: actor = self.get_vtk_pipeline(data_id).category_actors.get(category) if actor is not None: actor.GetProperty().SetEdgeVisibility(visibility) - def SetCategoryPointsVisibility(self, data_id: str, category: str, visibility: bool) -> None: + def SetCategoryPointsVisibility( + self, data_id: str, category: str, visibility: bool + ) -> None: actor = self.get_vtk_pipeline(data_id).category_actors.get(category) if actor is not None: actor.GetProperty().SetVertexVisibility(visibility) diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py index a609eb96..0bf04aeb 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/model_surfaces_edges_protocols.py @@ -20,20 +20,38 @@ class VtkModelBlocksEdgesView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_blocks_edges_prefix + model_blocks_edges_schemas_dict["visibility"]["rpc"] + ) def setModelBlocksEdgesVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["visibility"], self.model_blocks_edges_prefix) + validate_schema( + rpc_params, + self.model_blocks_edges_schemas_dict["visibility"], + self.model_blocks_edges_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetEdgesVisibility(params.id, params.visibility) - @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["color"]["rpc"]) + @exportRpc( + model_blocks_edges_prefix + model_blocks_edges_schemas_dict["color"]["rpc"] + ) def setModelBlocksEdgesColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["color"], self.model_blocks_edges_prefix) + validate_schema( + rpc_params, + self.model_blocks_edges_schemas_dict["color"], + self.model_blocks_edges_prefix, + ) params = schemas.Color.from_dict(rpc_params) self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) - @exportRpc(model_blocks_edges_prefix + model_blocks_edges_schemas_dict["width"]["rpc"]) + @exportRpc( + model_blocks_edges_prefix + model_blocks_edges_schemas_dict["width"]["rpc"] + ) def setModelBlocksEdgesWidth(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_edges_schemas_dict["width"], self.model_blocks_edges_prefix) + validate_schema( + rpc_params, + self.model_blocks_edges_schemas_dict["width"], + self.model_blocks_edges_prefix, + ) params = schemas.Width.from_dict(rpc_params) - self.SetEdgesWidth(params.id, params.width) \ No newline at end of file + self.SetEdgesWidth(params.id, params.width) diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py index c8088709..cfe6b7ea 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/edges/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .visibility import Visibility -from .width import Width \ No newline at end of file +from .width import * +from .visibility import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py index 84c68372..433c8c72 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/model_surfaces_points_protocols.py @@ -15,20 +15,39 @@ class VtkModelBlocksPointsView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_blocks_points_prefix + + model_blocks_points_schemas_dict["visibility"]["rpc"] + ) def setModelBlocksPointsVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_points_schemas_dict["visibility"], self.model_blocks_points_prefix) + validate_schema( + rpc_params, + self.model_blocks_points_schemas_dict["visibility"], + self.model_blocks_points_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["size"]["rpc"]) + @exportRpc( + model_blocks_points_prefix + model_blocks_points_schemas_dict["size"]["rpc"] + ) def setModelBlocksPointsSize(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_points_schemas_dict["size"], self.model_blocks_points_prefix) + validate_schema( + rpc_params, + self.model_blocks_points_schemas_dict["size"], + self.model_blocks_points_prefix, + ) params = schemas.Size.from_dict(rpc_params) self.SetPointsSize(params.id, params.size) - @exportRpc(model_blocks_points_prefix + model_blocks_points_schemas_dict["color"]["rpc"]) + @exportRpc( + model_blocks_points_prefix + model_blocks_points_schemas_dict["color"]["rpc"] + ) def setModelBlocksPointsColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_blocks_points_schemas_dict["color"], self.model_blocks_points_prefix) + validate_schema( + rpc_params, + self.model_blocks_points_schemas_dict["color"], + self.model_blocks_points_prefix, + ) params = schemas.Color.from_dict(rpc_params) - self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py index db4a9677..231578e0 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/points/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .size import Size -from .visibility import Visibility \ No newline at end of file +from .visibility import * +from .size import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py index 12e51abf..b6670d68 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py @@ -1,4 +1,4 @@ from .visibility import * -from .color import * +from .points_visibility import * from .edges_visibility import * -from .points_visibility import * \ No newline at end of file +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.py b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.py new file mode 100644 index 00000000..8e844c29 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/edges_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class EdgesVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.py b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.py new file mode 100644 index 00000000..2f35f5ba --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/blocks/schemas/points_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PointsVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py index 2e4ea380..2f126270 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py @@ -20,7 +20,9 @@ class VtkModelBlocksView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_blocks_prefix + model_blocks_schemas_dict["edges_visibility"]["rpc"]) + @exportRpc( + model_blocks_prefix + model_blocks_schemas_dict["edges_visibility"]["rpc"] + ) def setModelBlocksEdgesVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, @@ -30,7 +32,9 @@ def setModelBlocksEdgesVisibility(self, rpc_params: RpcParams) -> None: params = schemas.Visibility.from_dict(rpc_params) self.SetCategoryEdgesVisibility(params.id, "blocks", params.visibility) - @exportRpc(model_blocks_prefix + model_blocks_schemas_dict["points_visibility"]["rpc"]) + @exportRpc( + model_blocks_prefix + model_blocks_schemas_dict["points_visibility"]["rpc"] + ) def setModelBlocksPointsVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, @@ -38,4 +42,4 @@ def setModelBlocksPointsVisibility(self, rpc_params: RpcParams) -> None: self.model_blocks_prefix, ) params = schemas.Visibility.from_dict(rpc_params) - self.SetCategoryPointsVisibility(params.id, "blocks", params.visibility) \ No newline at end of file + self.SetCategoryPointsVisibility(params.id, "blocks", params.visibility) diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py index 3202f428..d075c7b7 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/model_surfaces_points_protocols.py @@ -15,20 +15,39 @@ class VtkModelCornersPointsView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_corners_points_prefix + + model_corners_points_schemas_dict["visibility"]["rpc"] + ) def setModelCornersPointsVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_corners_points_schemas_dict["visibility"], self.model_corners_points_prefix) + validate_schema( + rpc_params, + self.model_corners_points_schemas_dict["visibility"], + self.model_corners_points_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["size"]["rpc"]) + @exportRpc( + model_corners_points_prefix + model_corners_points_schemas_dict["size"]["rpc"] + ) def setModelCornersPointsSize(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_corners_points_schemas_dict["size"], self.model_corners_points_prefix) + validate_schema( + rpc_params, + self.model_corners_points_schemas_dict["size"], + self.model_corners_points_prefix, + ) params = schemas.Size.from_dict(rpc_params) self.SetPointsSize(params.id, params.size) - @exportRpc(model_corners_points_prefix + model_corners_points_schemas_dict["color"]["rpc"]) + @exportRpc( + model_corners_points_prefix + model_corners_points_schemas_dict["color"]["rpc"] + ) def setModelCornersPointsColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_corners_points_schemas_dict["color"], self.model_corners_points_prefix) + validate_schema( + rpc_params, + self.model_corners_points_schemas_dict["color"], + self.model_corners_points_prefix, + ) params = schemas.Color.from_dict(rpc_params) - self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) diff --git a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py index f27dfd1f..231578e0 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/points/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .visibility import Visibility -from .size import Size \ No newline at end of file +from .visibility import * +from .size import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py index 12e51abf..b6670d68 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py @@ -1,4 +1,4 @@ from .visibility import * -from .color import * +from .points_visibility import * from .edges_visibility import * -from .points_visibility import * \ No newline at end of file +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.py b/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.py new file mode 100644 index 00000000..8e844c29 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/edges_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class EdgesVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.py b/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.py new file mode 100644 index 00000000..2f35f5ba --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/corners/schemas/points_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PointsVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py index 8d3369d4..6d0f690f 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/model_surfaces_edges_protocols.py @@ -20,20 +20,38 @@ class VtkModelLinesEdgesView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_lines_edges_prefix + model_lines_edges_schemas_dict["visibility"]["rpc"] + ) def setModelLinesEdgesVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_edges_schemas_dict["visibility"], self.model_lines_edges_prefix) + validate_schema( + rpc_params, + self.model_lines_edges_schemas_dict["visibility"], + self.model_lines_edges_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetEdgesVisibility(params.id, params.visibility) - @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["color"]["rpc"]) + @exportRpc( + model_lines_edges_prefix + model_lines_edges_schemas_dict["color"]["rpc"] + ) def setModelLinesEdgesColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_edges_schemas_dict["color"], self.model_lines_edges_prefix) + validate_schema( + rpc_params, + self.model_lines_edges_schemas_dict["color"], + self.model_lines_edges_prefix, + ) params = schemas.Color.from_dict(rpc_params) self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) - @exportRpc(model_lines_edges_prefix + model_lines_edges_schemas_dict["width"]["rpc"]) + @exportRpc( + model_lines_edges_prefix + model_lines_edges_schemas_dict["width"]["rpc"] + ) def setModelLinesEdgesWidth(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_edges_schemas_dict["width"], self.model_lines_edges_prefix) + validate_schema( + rpc_params, + self.model_lines_edges_schemas_dict["width"], + self.model_lines_edges_prefix, + ) params = schemas.Width.from_dict(rpc_params) - self.SetEdgesWidth(params.id, params.width) \ No newline at end of file + self.SetEdgesWidth(params.id, params.width) diff --git a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py index c8088709..cfe6b7ea 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/edges/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .visibility import Visibility -from .width import Width \ No newline at end of file +from .width import * +from .visibility import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py index f553d24c..24689093 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/model_surfaces_points_protocols.py @@ -15,20 +15,38 @@ class VtkModelLinesPointsView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_lines_points_prefix + model_lines_points_schemas_dict["visibility"]["rpc"] + ) def setModelLinesPointsVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_points_schemas_dict["visibility"], self.model_lines_points_prefix) + validate_schema( + rpc_params, + self.model_lines_points_schemas_dict["visibility"], + self.model_lines_points_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["size"]["rpc"]) + @exportRpc( + model_lines_points_prefix + model_lines_points_schemas_dict["size"]["rpc"] + ) def setModelLinesPointsSize(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_points_schemas_dict["size"], self.model_lines_points_prefix) + validate_schema( + rpc_params, + self.model_lines_points_schemas_dict["size"], + self.model_lines_points_prefix, + ) params = schemas.Size.from_dict(rpc_params) self.SetPointsSize(params.id, params.size) - @exportRpc(model_lines_points_prefix + model_lines_points_schemas_dict["color"]["rpc"]) + @exportRpc( + model_lines_points_prefix + model_lines_points_schemas_dict["color"]["rpc"] + ) def setModelLinesPointsColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_lines_points_schemas_dict["color"], self.model_lines_points_prefix) + validate_schema( + rpc_params, + self.model_lines_points_schemas_dict["color"], + self.model_lines_points_prefix, + ) params = schemas.Color.from_dict(rpc_params) - self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) diff --git a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py index db4a9677..231578e0 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/points/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .size import Size -from .visibility import Visibility \ No newline at end of file +from .visibility import * +from .size import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py index ed1367cb..b6670d68 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py @@ -1,4 +1,4 @@ from .visibility import * -from .color import * -from .edges_visibility import * from .points_visibility import * +from .edges_visibility import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.py b/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.py new file mode 100644 index 00000000..8e844c29 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/edges_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class EdgesVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.py b/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.py new file mode 100644 index 00000000..2f35f5ba --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/lines/schemas/points_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PointsVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py index 3d6a394f..40d67033 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/model_surfaces_edges_protocols.py @@ -20,20 +20,39 @@ class VtkModelSurfacesEdgesView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_surfaces_edges_prefix + + model_surfaces_edges_schemas_dict["visibility"]["rpc"] + ) def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["visibility"], self.model_surfaces_edges_prefix) + validate_schema( + rpc_params, + self.model_surfaces_edges_schemas_dict["visibility"], + self.model_surfaces_edges_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetEdgesVisibility(params.id, params.visibility) - @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["color"]["rpc"]) + @exportRpc( + model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["color"]["rpc"] + ) def setModelSurfacesEdgesColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["color"], self.model_surfaces_edges_prefix) + validate_schema( + rpc_params, + self.model_surfaces_edges_schemas_dict["color"], + self.model_surfaces_edges_prefix, + ) params = schemas.Color.from_dict(rpc_params) self.SetEdgesColor(params.id, params.color.r, params.color.g, params.color.b) - @exportRpc(model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["width"]["rpc"]) + @exportRpc( + model_surfaces_edges_prefix + model_surfaces_edges_schemas_dict["width"]["rpc"] + ) def setModelSurfacesEdgesWidth(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_edges_schemas_dict["width"], self.model_surfaces_edges_prefix) + validate_schema( + rpc_params, + self.model_surfaces_edges_schemas_dict["width"], + self.model_surfaces_edges_prefix, + ) params = schemas.Width.from_dict(rpc_params) - self.SetEdgesWidth(params.id, params.width) \ No newline at end of file + self.SetEdgesWidth(params.id, params.width) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py index c8088709..cfe6b7ea 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/edges/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .visibility import Visibility -from .width import Width \ No newline at end of file +from .width import * +from .visibility import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py index 81fd4953..7b6e2569 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py @@ -20,7 +20,9 @@ class VtkModelSurfacesView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["edges_visibility"]["rpc"]) + @exportRpc( + model_surfaces_prefix + model_surfaces_schemas_dict["edges_visibility"]["rpc"] + ) def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, @@ -30,7 +32,9 @@ def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: params = schemas.Visibility.from_dict(rpc_params) self.SetCategoryEdgesVisibility(params.id, "surfaces", params.visibility) - @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["points_visibility"]["rpc"]) + @exportRpc( + model_surfaces_prefix + model_surfaces_schemas_dict["points_visibility"]["rpc"] + ) def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, @@ -38,4 +42,4 @@ def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: self.model_surfaces_prefix, ) params = schemas.Visibility.from_dict(rpc_params) - self.SetCategoryPointsVisibility(params.id, "surfaces", params.visibility) \ No newline at end of file + self.SetCategoryPointsVisibility(params.id, "surfaces", params.visibility) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py index 6f37d2d2..df7f5cc5 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/model_surfaces_points_protocols.py @@ -15,20 +15,40 @@ class VtkModelSurfacesPointsView(VtkModelView): def __init__(self) -> None: super().__init__() - @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["visibility"]["rpc"]) + @exportRpc( + model_surfaces_points_prefix + + model_surfaces_points_schemas_dict["visibility"]["rpc"] + ) def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["visibility"], self.model_surfaces_points_prefix) + validate_schema( + rpc_params, + self.model_surfaces_points_schemas_dict["visibility"], + self.model_surfaces_points_prefix, + ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["size"]["rpc"]) + @exportRpc( + model_surfaces_points_prefix + model_surfaces_points_schemas_dict["size"]["rpc"] + ) def setModelSurfacesPointsSize(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["size"], self.model_surfaces_points_prefix) + validate_schema( + rpc_params, + self.model_surfaces_points_schemas_dict["size"], + self.model_surfaces_points_prefix, + ) params = schemas.Size.from_dict(rpc_params) self.SetPointsSize(params.id, params.size) - @exportRpc(model_surfaces_points_prefix + model_surfaces_points_schemas_dict["color"]["rpc"]) + @exportRpc( + model_surfaces_points_prefix + + model_surfaces_points_schemas_dict["color"]["rpc"] + ) def setModelSurfacesPointsColor(self, rpc_params: RpcParams) -> None: - validate_schema(rpc_params, self.model_surfaces_points_schemas_dict["color"], self.model_surfaces_points_prefix) + validate_schema( + rpc_params, + self.model_surfaces_points_schemas_dict["color"], + self.model_surfaces_points_prefix, + ) params = schemas.Color.from_dict(rpc_params) - self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) \ No newline at end of file + self.SetPointsColor(params.id, params.color.r, params.color.g, params.color.b) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py index db4a9677..231578e0 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/points/schemas/__init__.py @@ -1,3 +1,3 @@ -from .color import Color -from .size import Size -from .visibility import Visibility \ No newline at end of file +from .visibility import * +from .size import * +from .color import * diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py index aed7ac2f..892c6862 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py @@ -1,5 +1,5 @@ from .visibility import * +from .points_visibility import * +from .edges_visibility import * from .color import * from .apply_textures import * -from .edges_visibility import * -from .points_visibility import * \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.py b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.py new file mode 100644 index 00000000..8e844c29 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/edges_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class EdgesVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.py b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.py new file mode 100644 index 00000000..2f35f5ba --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/points_visibility.py @@ -0,0 +1,11 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PointsVisibility(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + visibility: bool diff --git a/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py b/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py index 3717c993..35279c40 100644 --- a/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py +++ b/tests/model/surfaces/edges/test_model_surfaces_edges_protocols.py @@ -18,14 +18,18 @@ def test_surfaces_edges_visibility( server.call( VtkModelSurfacesEdgesView.model_surfaces_edges_prefix - + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) assert server.compare_image("model/surfaces/edges/visibility_true.jpeg") == True server.call( VtkModelSurfacesEdgesView.model_surfaces_edges_prefix - + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": False}], ) assert server.compare_image("model/surfaces/edges/visibility_false.jpeg") == True @@ -39,7 +43,9 @@ def test_surfaces_edges_color( # Activer les edges d'abord server.call( VtkModelSurfacesEdgesView.model_surfaces_edges_prefix - + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) # Puis changer la couleur @@ -58,7 +64,9 @@ def test_surfaces_edges_width( server.call( VtkModelSurfacesEdgesView.model_surfaces_edges_prefix - + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) @@ -67,4 +75,4 @@ def test_surfaces_edges_width( + VtkModelSurfacesEdgesView.model_surfaces_edges_schemas_dict["width"]["rpc"], [{"id": "123456789", "width": 5.0}], ) - assert server.compare_image("model/surfaces/edges/width.jpeg") == True \ No newline at end of file + assert server.compare_image("model/surfaces/edges/width.jpeg") == True diff --git a/tests/model/surfaces/points/test_model_surfaces_points_protocols.py b/tests/model/surfaces/points/test_model_surfaces_points_protocols.py index 0e4a94b1..ebd6e12c 100644 --- a/tests/model/surfaces/points/test_model_surfaces_points_protocols.py +++ b/tests/model/surfaces/points/test_model_surfaces_points_protocols.py @@ -18,14 +18,18 @@ def test_surfaces_points_visibility( server.call( VtkModelSurfacesPointsView.model_surfaces_points_prefix - + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) assert server.compare_image("model/surfaces/points/visibility_true.jpeg") == True server.call( VtkModelSurfacesPointsView.model_surfaces_points_prefix - + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": False}], ) assert server.compare_image("model/surfaces/points/visibility_false.jpeg") == True @@ -38,7 +42,9 @@ def test_surfaces_points_color( server.call( VtkModelSurfacesPointsView.model_surfaces_points_prefix - + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) @@ -57,7 +63,9 @@ def test_surfaces_points_size( server.call( VtkModelSurfacesPointsView.model_surfaces_points_prefix - + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"]["rpc"], + + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["visibility"][ + "rpc" + ], [{"id": "123456789", "visibility": True}], ) @@ -66,4 +74,4 @@ def test_surfaces_points_size( + VtkModelSurfacesPointsView.model_surfaces_points_schemas_dict["size"]["rpc"], [{"id": "123456789", "size": 8.0}], ) - assert server.compare_image("model/surfaces/points/size.jpeg") == True \ No newline at end of file + assert server.compare_image("model/surfaces/points/size.jpeg") == True From 3e1821b489d1a2a9b0a88267bf84252f45bde122 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 27 Mar 2026 16:44:05 +0100 Subject: [PATCH 5/6] feat(component_color): add new rpc for model_components --- .../rpc/model/model_protocols.py | 9 +++ .../rpc/model/schemas/__init__.py | 1 + .../rpc/model/schemas/components_color.json | 55 +++++++++++++++++++ .../rpc/model/schemas/components_color.py | 17 ++++++ .../surfaces/model_surfaces_protocols.py | 6 +- 5 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 src/opengeodeweb_viewer/rpc/model/schemas/components_color.json create mode 100644 src/opengeodeweb_viewer/rpc/model/schemas/components_color.py diff --git a/src/opengeodeweb_viewer/rpc/model/model_protocols.py b/src/opengeodeweb_viewer/rpc/model/model_protocols.py index edf46ce7..633ec108 100644 --- a/src/opengeodeweb_viewer/rpc/model/model_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/model_protocols.py @@ -103,3 +103,12 @@ def setModelVisibility(self, rpc_params: RpcParams) -> None: ) params = schemas.Visibility.from_dict(rpc_params) self.SetVisibility(params.id, params.visibility) + + @exportRpc(model_prefix + model_schemas_dict["components_color"]["rpc"]) + def setModelComponentsColor(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, self.model_schemas_dict["components_color"], self.model_prefix + ) + params = schemas.ComponentsColor.from_dict(rpc_params) + color = params.color + self.SetBlocksColor(params.id, params.block_ids, color.r, color.g, color.b) diff --git a/src/opengeodeweb_viewer/rpc/model/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/model/schemas/__init__.py index a974c1d6..b2eb2b9f 100644 --- a/src/opengeodeweb_viewer/rpc/model/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/model/schemas/__init__.py @@ -1,3 +1,4 @@ from .visibility import * from .register import * from .deregister import * +from .components_color import * diff --git a/src/opengeodeweb_viewer/rpc/model/schemas/components_color.json b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.json new file mode 100644 index 00000000..08afcb6f --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.json @@ -0,0 +1,55 @@ +{ + "rpc": "components_color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "block_ids": { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "block_ids", + "color" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py new file mode 100644 index 00000000..c3c1fa3b --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py @@ -0,0 +1,17 @@ +from dataclasses import dataclass +from opengeodeweb_microservice.schemas import Color + + +@dataclass +class ComponentsColor: + id: str + block_ids: list[int] + color: Color + + @classmethod + def from_dict(cls, data: dict) -> "ComponentsColor": + return cls( + id=data["id"], + block_ids=data["block_ids"], + color=Color(**data["color"]), + ) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py index 7b6e2569..626e4b9f 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py @@ -32,10 +32,8 @@ def setModelSurfacesEdgesVisibility(self, rpc_params: RpcParams) -> None: params = schemas.Visibility.from_dict(rpc_params) self.SetCategoryEdgesVisibility(params.id, "surfaces", params.visibility) - @exportRpc( - model_surfaces_prefix + model_surfaces_schemas_dict["points_visibility"]["rpc"] - ) - def setModelSurfacesPointsVisibility(self, rpc_params: RpcParams) -> None: + @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["color"]["rpc"]) + def setModelSurfacesPolygonsColor(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, self.model_surfaces_schemas_dict["points_visibility"], From 27db1caf51032a630641f9e5402bae852fd4e055 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:44:42 +0000 Subject: [PATCH 6/6] Apply prepare changes --- opengeodeweb_viewer_schemas.json | 56 +++++++++++++++++++ .../rpc/model/schemas/components_color.py | 31 ++++++---- 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/opengeodeweb_viewer_schemas.json b/opengeodeweb_viewer_schemas.json index 8af28437..8a937514 100644 --- a/opengeodeweb_viewer_schemas.json +++ b/opengeodeweb_viewer_schemas.json @@ -2058,6 +2058,62 @@ ], "additionalProperties": false }, + "components_color": { + "$id": "opengeodeweb_viewer.model.components_color", + "rpc": "components_color", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "block_ids": { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + }, + "color": { + "type": "object", + "properties": { + "r": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "g": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "b": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "a": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + } + }, + "required": [ + "r", + "g", + "b" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "block_ids", + "color" + ], + "additionalProperties": false + }, "surfaces": { "edges": { "width": { diff --git a/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py index c3c1fa3b..71474acb 100644 --- a/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py +++ b/src/opengeodeweb_viewer/rpc/model/schemas/components_color.py @@ -1,17 +1,24 @@ +from dataclasses_json import DataClassJsonMixin from dataclasses import dataclass -from opengeodeweb_microservice.schemas import Color +from typing import Optional, List @dataclass -class ComponentsColor: - id: str - block_ids: list[int] - color: Color +class Color(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + b: int + g: int + r: int + a: Optional[float] = None + - @classmethod - def from_dict(cls, data: dict) -> "ComponentsColor": - return cls( - id=data["id"], - block_ids=data["block_ids"], - color=Color(**data["color"]), - ) +@dataclass +class ComponentsColor(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + block_ids: List[int] + color: Color + id: str