Skip to content
Merged
11 changes: 11 additions & 0 deletions src/opengeodeweb_viewer/rpc/viewer/schemas/render_now.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"rpc": "render_now",
"type": "object",
"properties": {
"view": {
"type": "integer",
"default": -1
}
},
"required": []
}
58 changes: 58 additions & 0 deletions src/opengeodeweb_viewer/rpc/viewer/schemas/update_camera.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"rpc": "update_camera",
"type": "object",
"properties": {
"camera_options": {
"focal_point": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"maxItems": 3
},
"view_up": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"maxItems": 3
},
"position": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"maxItems": 3
},
"view_angle": {
"type": "number"
},
"clipping_range": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2,
"maxItems": 2
},
"required": [
"focal_point",
"view_up",
"position",
"view_angle",
"clipping_range"
]
},
"bool_render": {
"type": "boolean",
"default": true
}
},
"required": [
"camera_options",
"bool_render"
]
}
52 changes: 52 additions & 0 deletions src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,3 +224,55 @@ def updateData(self, params):
actor = self.get_object(id)["actor"]
actor.SetVisibility(visibility)
self.render()

@exportRpc(viewer_prefix + viewer_schemas_dict["update_camera"]["rpc"])
def updateCamera(self, params):
validate_schema(
params, self.viewer_schemas_dict["update_camera"], self.viewer_prefix
)

print(f"params: {params}", flush=True)

camera_options = params["camera_options"]
focal_point = camera_options["focal_point"]
view_up = camera_options["view_up"]
position = camera_options["position"]
view_angle = camera_options["view_angle"]
clipping_range = camera_options["clipping_range"]
bool_render = params["bool_render"]

renderWindow = self.getView("-1")
camera = renderWindow.GetRenderers().GetFirstRenderer().GetActiveCamera()

camera.SetFocalPoint(*focal_point)
camera.SetViewUp(*view_up)
camera.SetPosition(*position)
camera.SetViewAngle(view_angle)
camera.SetClippingRange(*clipping_range)

print(f"bool_render: {bool_render}", flush=True)
if bool_render == True:
print("render", flush=True)
renderWindow.Render()
self.render()
return

@exportRpc(viewer_prefix + viewer_schemas_dict["render_now"]["rpc"])
def renderNow(self, params):
validate_schema(
params, self.viewer_schemas_dict["render_now"], self.viewer_prefix
)

view = params.get("view", -1)

if "grid_scale" in self.get_data_base():
renderer = self.get_renderer()
renderer_bounds = renderer.ComputeVisiblePropBounds()
grid_scale = self.get_object("grid_scale")["actor"]
grid_scale.SetBounds(renderer_bounds)

self.get_protocol("vtkWebPublishImageDelivery").imagePush({"view": view})

return {"status": "success"}


Binary file added src/tests/data/images/viewer/render_now.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/tests/data/images/viewer/update_camera.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
71 changes: 71 additions & 0 deletions src/tests/test_viewer_protocols.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,74 @@ def test_grid_scale(server):
)

assert server.compare_image(3, "viewer/grid_scale_on.jpeg") == True


def test_update_camera(server):
test_register_mesh(server)


camera_options = {
"focal_point": [-0.034399999999999986, 2.4513515, -0.10266900000000012],
"view_up": [0.48981180389508683, 0.8647097694977263, -0.11118188386706776],
"position": [-17.277630202755162, 13.419047188880267, 9.232808007244259],
"view_angle": 30.0,
"clipping_range": [11.403438348232822, 36.44815678922037],
}

server.call(
VtkViewerView.viewer_prefix
+ VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"],
[
{
"camera_options": camera_options,
"bool_render": False
}
],
)
server.compare_image(1, "mesh/register.jpeg")


server.call(
VtkViewerView.viewer_prefix
+ VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"],
[
{
"camera_options": camera_options,
"bool_render": True
}
],
)
assert server.compare_image(3, "viewer/update_camera.jpeg") == True


def test_render_now(server):
test_register_mesh(server)


camera_options = {
"focal_point": [-0.034399999999999986, 2.4513515, -0.10266900000000012],
"view_up": [0.48981180389508683, 0.8647097694977263, -0.11118188386706776],
"position": [-17.277630202755162, 13.419047188880267, 9.232808007244259],
"view_angle": 30.0,
"clipping_range": [11.403438348232822, 36.44815678922037],
}

server.call(
VtkViewerView.viewer_prefix
+ VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"],
[
{
"camera_options": camera_options,
"bool_render": False
}
],
)
server.compare_image(1, "mesh/register.jpeg")

server.call(
VtkViewerView.viewer_prefix
+ VtkViewerView.viewer_schemas_dict["render_now"]["rpc"],
[{"view": -1}]
)

assert server.compare_image(3, "viewer/render_now.jpeg") == True