diff --git a/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json b/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json new file mode 100644 index 0000000..d5b0bcb --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json @@ -0,0 +1,13 @@ +{ + "rpc": "set_z_scaling", + "type": "object", + "properties": { + "z_scale": { + "type": "number" + } + }, + "required": [ + "z_scale" + ], + "additionalProperties": false +} \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index f78483e..d50983d 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -7,6 +7,7 @@ from vtkmodules.vtkIOImage import vtkPNGWriter, vtkJPEGWriter from vtkmodules.vtkRenderingAnnotation import vtkCubeAxesActor from vtkmodules.vtkRenderingCore import vtkWindowToImageFilter +from vtkmodules.vtkCommonTransforms import vtkTransform from wslink import register as exportRpc # Local application imports @@ -277,3 +278,22 @@ def renderNow(self, params): params, self.viewer_schemas_dict["render_now"], self.viewer_prefix ) self.render() + + @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) + self.render() diff --git a/src/tests/data/images/viewer/polygon_attribute.jpeg b/src/tests/data/images/viewer/polygon_attribute.jpeg new file mode 100644 index 0000000..f0849e5 Binary files /dev/null and b/src/tests/data/images/viewer/polygon_attribute.jpeg differ diff --git a/src/tests/data/images/viewer/set_z_scaling.jpeg b/src/tests/data/images/viewer/set_z_scaling.jpeg new file mode 100644 index 0000000..cf8aeef Binary files /dev/null and b/src/tests/data/images/viewer/set_z_scaling.jpeg differ diff --git a/src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg b/src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg new file mode 100644 index 0000000..5ab696d Binary files /dev/null and b/src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg differ diff --git a/src/tests/test_viewer_protocols.py b/src/tests/test_viewer_protocols.py index b1ff472..85a6781 100644 --- a/src/tests/test_viewer_protocols.py +++ b/src/tests/test_viewer_protocols.py @@ -257,3 +257,44 @@ def test_render_now(server): ) assert server.compare_image(3, "viewer/render_now.jpeg") == True + + +def test_set_z_scaling(server): + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": "12345678", "file_name": "polygon_attribute.vtp"}], + ) + assert server.compare_image(3, "viewer/polygon_attribute.jpeg") == True + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": "123456789", "file_name": "vertex_attribute.vtp"}], + ) + assert server.compare_image(3, "viewer/vertex_and_polygon_attribute.jpeg") == True + + camera_options = { + "focal_point": [6.05, 5.7, 1.5], + "view_up": [-0.019853719211915175, 0.9994261532466464, 0.02744438084681784], + "position": [-19.898328271321652, 5.221831172558093, 0.1417477620371277], + "view_angle": 30.0, + "clipping_range": [20.16946812228507, 31.94497749971925], + } + + server.call( + VtkViewerView.viewer_prefix + + VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"], + [ + { + "camera_options": camera_options, + } + ], + ) + server.compare_image(3, "mesh/register.jpeg") + + server.call( + VtkViewerView.viewer_prefix + + VtkViewerView.viewer_schemas_dict["set_z_scaling"]["rpc"], + [{"z_scale": 2.5}], + ) + assert server.compare_image(3, "viewer/set_z_scaling.jpeg") == True