Skip to content

Commit 84f10a1

Browse files
Merge pull request #72 from Geode-solutions/next
No commit message
2 parents 55c3905 + 41536e4 commit 84f10a1

File tree

9 files changed

+151
-5
lines changed

9 files changed

+151
-5
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
55

66
[project]
77
name = "OpenGeodeWeb-Viewer"
8-
version = "1.7.1"
8+
version = "1.8.0-rc.1"
99
dynamic = ["dependencies"]
1010
authors = [
1111
{ name="Geode-solutions", email="team-web@geode-solutions.com" },
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"rpc": "render_now",
3+
"type": "object",
4+
"properties": {},
5+
"required": [],
6+
"additionalProperties": false
7+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"rpc": "update_camera",
3+
"type": "object",
4+
"properties": {
5+
"camera_options": {
6+
"type": "object",
7+
"properties": {
8+
"focal_point": {
9+
"type": "array",
10+
"items": {
11+
"type": "number"
12+
},
13+
"minItems": 3,
14+
"maxItems": 3
15+
},
16+
"view_up": {
17+
"type": "array",
18+
"items": {
19+
"type": "number"
20+
},
21+
"minItems": 3,
22+
"maxItems": 3
23+
},
24+
"position": {
25+
"type": "array",
26+
"items": {
27+
"type": "number"
28+
},
29+
"minItems": 3,
30+
"maxItems": 3
31+
},
32+
"view_angle": {
33+
"type": "number"
34+
},
35+
"clipping_range": {
36+
"type": "array",
37+
"items": {
38+
"type": "number"
39+
},
40+
"minItems": 2,
41+
"maxItems": 2
42+
}
43+
},
44+
"required": [
45+
"focal_point",
46+
"view_up",
47+
"position",
48+
"view_angle",
49+
"clipping_range"
50+
]
51+
}
52+
},
53+
"required": [
54+
"camera_options"
55+
]
56+
}

src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,3 +248,32 @@ def toggleAxes(self, params):
248248
actor = self.get_object(id)["actor"]
249249
actor.SetVisibility(visibility)
250250
self.render()
251+
252+
@exportRpc(viewer_prefix + viewer_schemas_dict["update_camera"]["rpc"])
253+
def updateCamera(self, params):
254+
validate_schema(
255+
params, self.viewer_schemas_dict["update_camera"], self.viewer_prefix
256+
)
257+
camera_options = params["camera_options"]
258+
focal_point = camera_options["focal_point"]
259+
view_up = camera_options["view_up"]
260+
position = camera_options["position"]
261+
view_angle = camera_options["view_angle"]
262+
clipping_range = camera_options["clipping_range"]
263+
264+
renderWindow = self.getView("-1")
265+
camera = renderWindow.GetRenderers().GetFirstRenderer().GetActiveCamera()
266+
267+
camera.SetFocalPoint(*focal_point)
268+
camera.SetViewUp(*view_up)
269+
camera.SetPosition(*position)
270+
camera.SetViewAngle(view_angle)
271+
camera.SetClippingRange(*clipping_range)
272+
self.render()
273+
274+
@exportRpc(viewer_prefix + viewer_schemas_dict["render_now"]["rpc"])
275+
def renderNow(self, params):
276+
validate_schema(
277+
params, self.viewer_schemas_dict["render_now"], self.viewer_prefix
278+
)
279+
self.render()

src/opengeodeweb_viewer/vtk_protocol.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def render(self, view=-1):
3535
renderer_bounds = renderer.ComputeVisiblePropBounds()
3636
grid_scale = self.get_object("grid_scale")["actor"]
3737
grid_scale.SetBounds(renderer_bounds)
38-
self.get_protocol("vtkWebPublishImageDelivery").imagePush({"view": view})
38+
self.getSharedObject("publisher").imagePush({"view": view})
3939

4040
def register_object(self, id, reader, filter, actor, mapper, textures):
4141
self.get_data_base()[id] = {

src/opengeodeweb_viewer/vtkw_server.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ def initialize(self):
6161
# Bring used components
6262
self.registerVtkWebProtocol(vtk_protocols.vtkWebMouseHandler())
6363
self.registerVtkWebProtocol(vtk_protocols.vtkWebViewPort())
64-
self.registerVtkWebProtocol(
65-
vtk_protocols.vtkWebPublishImageDelivery(decode=False)
66-
)
64+
publisher = vtk_protocols.vtkWebPublishImageDelivery(decode=False)
65+
publisher.deltaStaleTimeBeforeRender = 0.1
66+
self.registerVtkWebProtocol(publisher)
6767
self.setSharedObject("db", dict())
68+
self.setSharedObject("publisher", publisher)
6869

6970
# Custom API
7071
mesh_protocols = VtkMeshView()
14.1 KB
Loading
14.1 KB
Loading

src/tests/test_viewer_protocols.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,56 @@ def test_axes(server):
204204
)
205205

206206
assert server.compare_image(3, "viewer/axes_off.jpeg") == True
207+
208+
209+
def test_update_camera(server):
210+
test_register_mesh(server)
211+
212+
camera_options = {
213+
"focal_point": [-0.034399999999999986, 2.4513515, -0.10266900000000012],
214+
"view_up": [0.48981180389508683, 0.8647097694977263, -0.11118188386706776],
215+
"position": [-17.277630202755162, 13.419047188880267, 9.232808007244259],
216+
"view_angle": 30.0,
217+
"clipping_range": [11.403438348232822, 36.44815678922037],
218+
}
219+
220+
server.call(
221+
VtkViewerView.viewer_prefix
222+
+ VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"],
223+
[
224+
{
225+
"camera_options": camera_options,
226+
}
227+
],
228+
)
229+
assert server.compare_image(3, "viewer/update_camera.jpeg") == True
230+
231+
232+
def test_render_now(server):
233+
test_register_mesh(server)
234+
235+
camera_options = {
236+
"focal_point": [-0.034399999999999986, 2.4513515, -0.10266900000000012],
237+
"view_up": [0.48981180389508683, 0.8647097694977263, -0.11118188386706776],
238+
"position": [-17.277630202755162, 13.419047188880267, 9.232808007244259],
239+
"view_angle": 30.0,
240+
"clipping_range": [11.403438348232822, 36.44815678922037],
241+
}
242+
243+
server.call(
244+
VtkViewerView.viewer_prefix
245+
+ VtkViewerView.viewer_schemas_dict["update_camera"]["rpc"],
246+
[
247+
{
248+
"camera_options": camera_options,
249+
}
250+
],
251+
)
252+
server.compare_image(1, "mesh/register.jpeg")
253+
254+
server.call(
255+
VtkViewerView.viewer_prefix
256+
+ VtkViewerView.viewer_schemas_dict["render_now"]["rpc"],
257+
)
258+
259+
assert server.compare_image(3, "viewer/render_now.jpeg") == True

0 commit comments

Comments
 (0)