diff --git a/pyproject.toml b/pyproject.toml index 6b3d131..4a3c665 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "OpenGeodeWeb-Viewer" -version = "1.9.1" +version = "1.10.0-rc.1" dynamic = ["dependencies"] authors = [ { name="Geode-solutions", email="team-web@geode-solutions.com" }, diff --git a/requirements.in b/requirements.in index 7520d92..82f4c74 100644 --- a/requirements.in +++ b/requirements.in @@ -1,3 +1,3 @@ -jsonschema -wslink +wslink<2 +fastjsonschema websocket-client \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2983880..c4d360d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,47 +1,42 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # pip-compile requirements.in # -aiohttp==3.9.3 +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.12.14 # via wslink -aiosignal==1.3.1 +aiosignal==1.4.0 # via aiohttp -async-timeout==4.0.3 +async-timeout==5.0.1 # via aiohttp -attrs==23.2.0 - # via - # aiohttp - # jsonschema - # referencing -frozenlist==1.4.1 +attrs==25.3.0 + # via aiohttp +fastjsonschema==2.21.1 + # via -r requirements.in +frozenlist==1.7.0 # via # aiohttp # aiosignal -idna==3.6 +idna==3.10 # via yarl -jsonschema==4.21.1 - # via -r requirements.in -jsonschema-specifications==2023.12.1 - # via jsonschema -multidict==6.0.5 +multidict==6.6.3 # via # aiohttp # yarl -python-dotenv==1.0.1 - # via -r requirements.in -referencing==0.33.0 +propcache==0.3.2 # via - # jsonschema - # jsonschema-specifications -rpds-py==0.18.0 + # aiohttp + # yarl +typing-extensions==4.14.1 # via - # jsonschema - # referencing -websocket-client==1.7.0 + # aiosignal + # multidict +websocket-client==1.8.0 # via -r requirements.in wslink==1.12.4 # via -r requirements.in -yarl==1.9.4 +yarl==1.20.1 # via aiohttp diff --git a/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json b/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json index d5b0bcb..9ec88df 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json +++ b/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json @@ -3,7 +3,8 @@ "type": "object", "properties": { "z_scale": { - "type": "number" + "type": "number", + "minimum": 1 } }, "required": [ diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index d50983d..df05f23 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -238,8 +238,9 @@ def toggleGridScale(self, params): params, self.viewer_schemas_dict["grid_scale"], self.viewer_prefix ) id, visibility = "grid_scale", params["visibility"] - actor = self.get_object(id)["actor"] - actor.SetVisibility(visibility) + if "grid_scale" in self.get_data_base(): + actor = self.get_object(id)["actor"] + actor.SetVisibility(visibility) self.render() @exportRpc(viewer_prefix + viewer_schemas_dict["axes"]["rpc"]) @@ -281,19 +282,18 @@ def renderNow(self, params): @exportRpc(viewer_prefix + viewer_schemas_dict["set_z_scaling"]["rpc"]) def setZScaling(self, params): - validate_schema( params, self.viewer_schemas_dict["set_z_scaling"], self.viewer_prefix ) z_scale = params["z_scale"] - renderWindow = self.getView("-1") renderer = renderWindow.GetRenderers().GetFirstRenderer() - - actors = renderer.GetActors() - - for actor in actors: - transform = vtkTransform() - transform.Scale(1, 1, z_scale) - actor.SetUserTransform(transform) + cam = renderer.GetActiveCamera() + transform = vtk.vtkTransform() + transform.Scale(1, 1, z_scale) + cam.SetModelTransformMatrix(transform.GetMatrix()) + + if "grid_scale" in self.get_data_base(): + cube_axes_actor = self.get_object("grid_scale")["actor"] + cube_axes_actor.SetUse2DMode(1) self.render() diff --git a/src/opengeodeweb_viewer/utils_functions.py b/src/opengeodeweb_viewer/utils_functions.py index 635b3c9..edf3163 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -3,8 +3,8 @@ import json # Third party imports -from jsonschema import validate -from jsonschema.exceptions import ValidationError +import fastjsonschema +from fastjsonschema import JsonSchemaException # Local application imports @@ -24,8 +24,9 @@ def get_schemas_dict(path): def validate_schema(params, schema, prefix=""): print(f"{prefix}{schema['rpc']}", f"{params=}", flush=True) try: - validate(instance=params, schema=schema) - except ValidationError as e: + validate = fastjsonschema.compile(schema) + validate(params) + except fastjsonschema.JsonSchemaException as e: print(f"Validation error: {e.message}", flush=True) raise Exception( { diff --git a/src/tests/data/images/viewer/combined_scaling_and_grid.jpeg b/src/tests/data/images/viewer/combined_scaling_and_grid.jpeg new file mode 100644 index 0000000..124529e Binary files /dev/null and b/src/tests/data/images/viewer/combined_scaling_and_grid.jpeg differ diff --git a/src/tests/data/images/viewer/scaling_and_grid_color.jpeg b/src/tests/data/images/viewer/scaling_and_grid_color.jpeg new file mode 100644 index 0000000..85df749 Binary files /dev/null and b/src/tests/data/images/viewer/scaling_and_grid_color.jpeg differ diff --git a/src/tests/data/take_screenshot_with_background.jpg b/src/tests/data/take_screenshot_with_background.jpg index 7edd297..b490cfc 100644 Binary files a/src/tests/data/take_screenshot_with_background.jpg and b/src/tests/data/take_screenshot_with_background.jpg differ diff --git a/src/tests/data/take_screenshot_with_background.png b/src/tests/data/take_screenshot_with_background.png index ef275f9..6dcfc0b 100644 Binary files a/src/tests/data/take_screenshot_with_background.png and b/src/tests/data/take_screenshot_with_background.png differ diff --git a/src/tests/data/take_screenshot_without_background.png b/src/tests/data/take_screenshot_without_background.png index 6dda998..d67f309 100644 Binary files a/src/tests/data/take_screenshot_without_background.png and b/src/tests/data/take_screenshot_without_background.png differ diff --git a/src/tests/test_viewer_protocols.py b/src/tests/test_viewer_protocols.py index 85a6781..262538a 100644 --- a/src/tests/test_viewer_protocols.py +++ b/src/tests/test_viewer_protocols.py @@ -298,3 +298,50 @@ def test_set_z_scaling(server): [{"z_scale": 2.5}], ) assert server.compare_image(3, "viewer/set_z_scaling.jpeg") == True + + +def test_combined_scaling_and_grid(server): + # test_set_z_scaling(server) + + # server.call( + # VtkViewerView.viewer_prefix + # + VtkViewerView.viewer_schemas_dict["set_background_color"]["rpc"], + # [{"color": {"r": 180, "g": 180, "b": 180}}], + # ) + # assert server.compare_image(3, "viewer/scaling_and_grid_color.jpeg") == True + + # server.call( + # VtkViewerView.viewer_prefix + # + VtkViewerView.viewer_schemas_dict["grid_scale"]["rpc"], + # [{"visibility": True}], + # ) + + # assert server.compare_image(3, "viewer/grid_scale_on.jpeg") == True + server.call( + VtkViewerView.viewer_prefix + + VtkViewerView.viewer_schemas_dict["reset_visualization"]["rpc"], + ) + + assert server.compare_image(3, "viewer/reset_visualization.jpeg") == True + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": "123456789", "file_name": "hat.vtp"}], + ) + assert server.compare_image(3, "viewer/register_hat.jpeg") == True + + server.call( + VtkViewerView.viewer_prefix + + VtkViewerView.viewer_schemas_dict["grid_scale"]["rpc"], + [{"visibility": True}], + ) + + assert server.compare_image(3, "viewer/grid_scale_on.jpeg") == True + + server.call( + VtkViewerView.viewer_prefix + + VtkViewerView.viewer_schemas_dict["set_z_scaling"]["rpc"], + [{"z_scale": 2.5}], + ) + + assert server.compare_image(3, "viewer/combined_scaling_and_grid.jpeg") == True