Skip to content

Commit da62c3f

Browse files
committed
fix(Render): no automatic rendering
1 parent f487dc1 commit da62c3f

20 files changed

+97
-174
lines changed

src/opengeodeweb_viewer/object/object_methods.py

Lines changed: 6 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -31,83 +31,34 @@ def registerObject(
3131

3232
renderWindow = self.getView("-1")
3333
renderer = renderWindow.GetRenderers().GetFirstRenderer()
34+
resetCamara = True
35+
for registered_actor in renderer.GetActors():
36+
if registered_actor.visibility == True:
37+
resetCamara = False
3438
renderer.AddActor(actor)
35-
renderer.ResetCamera()
36-
renderWindow.Render()
37-
self.render()
39+
if resetCamara:
40+
renderer.ResetCamera()
3841

3942
def deregisterObject(self, data_id: str) -> None:
4043
actor = self.get_object(data_id)["actor"]
4144
renderWindow = self.getView("-1")
4245
renderer = renderWindow.GetRenderers().GetFirstRenderer()
4346
renderer.RemoveActor(actor)
4447
self.deregister_object(data_id)
45-
self.render()
46-
47-
def applyTextures(self, data_id: str, textures: list[dict[str, str]]) -> None:
48-
textures_array: list[vtk.vtkTexture] = []
49-
images_reader_array: list[vtk.vtkXMLImageDataReader] = []
50-
51-
data = self.get_object(data_id)
52-
mapper = data["mapper"]
53-
actor = data["actor"]
54-
reader = data["reader"]
55-
56-
polydata_mapper = mapper.GetPolyDataMapper()
57-
poly_data = reader.GetPolyDataOutput()
58-
59-
for index, value in enumerate(textures):
60-
texture_name = value["texture_name"]
61-
id_texture = value["id"]
62-
print(f"{texture_name=} {id_texture=}", flush=True)
63-
64-
new_texture = vtk.vtkTexture()
65-
image_reader = vtk.vtkXMLImageDataReader()
66-
texture_path = self.get_data_file_path(data_id, id_texture)
67-
image_reader.SetFileName(texture_path)
68-
69-
shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
70-
polydata_mapper.MapDataArrayToMultiTextureAttribute(
71-
shader_texture_name,
72-
texture_name,
73-
vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS,
74-
)
75-
76-
if index == 0:
77-
new_texture.SetBlendingMode(
78-
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_REPLACE
79-
)
80-
else:
81-
new_texture.SetBlendingMode(
82-
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_ADD
83-
)
84-
85-
images_reader_array.append(image_reader)
86-
new_texture.SetInputConnection(image_reader.GetOutputPort())
87-
88-
actor.GetProperty().SetTexture(shader_texture_name, new_texture)
89-
90-
textures_array.append(new_texture)
91-
images_reader_array.append(image_reader)
92-
93-
self.render()
9448

9549
def SetVisibility(self, data_id: str, visibility: bool) -> None:
9650
actor = self.get_object(data_id)["actor"]
9751
actor.SetVisibility(visibility)
98-
self.render()
9952

10053
def SetOpacity(self, data_id: str, opacity: float) -> None:
10154
actor = self.get_object(data_id)["actor"]
10255
actor.GetProperty().SetOpacity(opacity)
103-
self.render()
10456

10557
def SetColor(self, data_id: str, red: int, green: int, blue: int) -> None:
10658
mapper = self.get_object(data_id)["mapper"]
10759
mapper.ScalarVisibilityOff()
10860
actor = self.get_object(data_id)["actor"]
10961
actor.GetProperty().SetColor([red / 255, green / 255, blue / 255])
110-
self.render()
11162

11263
def SetEdgesVisibility(self, data_id: str, visibility: bool) -> None:
11364
actor = self.get_object(data_id)["actor"]
@@ -116,12 +67,10 @@ def SetEdgesVisibility(self, data_id: str, visibility: bool) -> None:
11667
self.SetVisibility(data_id, visibility)
11768
else:
11869
actor.GetProperty().SetEdgeVisibility(visibility)
119-
self.render()
12070

12171
def SetEdgesWidth(self, data_id: str, width: float) -> None:
12272
actor = self.get_object(data_id)["actor"]
12373
actor.GetProperty().SetEdgeWidth(width)
124-
self.render()
12574

12675
def SetEdgesColor(self, data_id: str, red: int, green: int, blue: int) -> None:
12776
actor = self.get_object(data_id)["actor"]
@@ -130,7 +79,6 @@ def SetEdgesColor(self, data_id: str, red: int, green: int, blue: int) -> None:
13079
self.SetColor(data_id, red, green, blue)
13180
else:
13281
actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255])
133-
self.render()
13482

13583
def SetPointsVisibility(self, data_id: str, visibility: bool) -> None:
13684
actor = self.get_object(data_id)["actor"]
@@ -139,12 +87,10 @@ def SetPointsVisibility(self, data_id: str, visibility: bool) -> None:
13987
self.SetVisibility(data_id, visibility)
14088
else:
14189
actor.GetProperty().SetVertexVisibility(visibility)
142-
self.render()
14390

14491
def SetPointsSize(self, data_id: str, size: float) -> None:
14592
actor = self.get_object(data_id)["actor"]
14693
actor.GetProperty().SetPointSize(size)
147-
self.render()
14894

14995
def SetPointsColor(self, data_id: str, red: int, green: int, blue: int) -> None:
15096
actor = self.get_object(data_id)["actor"]
@@ -153,23 +99,20 @@ def SetPointsColor(self, data_id: str, red: int, green: int, blue: int) -> None:
15399
self.SetColor(data_id, red, green, blue)
154100
else:
155101
actor.GetProperty().SetVertexColor([red / 255, green / 255, blue / 255])
156-
self.render()
157102

158103
def SetBlocksVisibility(
159104
self, data_id: str, block_ids: list[int], visibility: bool
160105
) -> None:
161106
mapper = self.get_object(data_id)["mapper"]
162107
for block_id in block_ids:
163108
mapper.SetBlockVisibility(block_id, visibility)
164-
self.render()
165109

166110
def SetBlocksColor(
167111
self, data_id: str, block_ids: list[int], red: int, green: int, blue: int
168112
) -> None:
169113
mapper = self.get_object(data_id)["mapper"]
170114
for block_id in block_ids:
171115
mapper.SetBlockColor(block_id, [red / 255, green / 255, blue / 255])
172-
self.render()
173116

174117
def clearColors(self, data_id: str) -> None:
175118
db = self.get_object(data_id)

src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ def applyTextures(self, mesh_id: str, textures_info: list[dict[str, str]]) -> No
135135
break
136136
actor = cast(vtk.vtkActor, self.get_object(mesh_id)["actor"])
137137
actor.SetTexture(texture)
138-
self.render()
139138

140139
def displayAttributeOnVertices(self, data_id: str, name: str) -> None:
141140
reader = self.get_object(data_id)["reader"]
@@ -145,7 +144,6 @@ def displayAttributeOnVertices(self, data_id: str, name: str) -> None:
145144
mapper.ScalarVisibilityOn()
146145
mapper.SetScalarModeToUsePointData()
147146
mapper.SetScalarRange(points.GetScalars().GetRange())
148-
self.render()
149147

150148
def displayAttributeOnCells(self, data_id: str, name: str) -> None:
151149
reader = self.get_object(data_id)["reader"]
@@ -155,4 +153,3 @@ def displayAttributeOnCells(self, data_id: str, name: str) -> None:
155153
mapper.ScalarVisibilityOn()
156154
mapper.SetScalarModeToUseCellData()
157155
mapper.SetScalarRange(cells.GetScalars().GetRange())
158-
self.render()

src/opengeodeweb_viewer/rpc/viewer/schemas/render_now.json renamed to src/opengeodeweb_viewer/rpc/viewer/schemas/render.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"rpc": "render_now",
2+
"rpc": "render",
33
"type": "object",
44
"properties": {},
55
"required": [],

src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ def resetVisualization(self, params: RpcParams) -> None:
8282
renderer.SetBackground([180 / 255, 180 / 255, 180 / 255])
8383

8484
renderer.ResetCamera()
85-
renderWindow.Render()
86-
self.render()
8785

8886
@exportRpc(viewer_prefix + viewer_schemas_dict["set_background_color"]["rpc"])
8987
def setBackgroundColor(self, params: RpcParamsWithColor) -> None:
@@ -99,9 +97,6 @@ def setBackgroundColor(self, params: RpcParamsWithColor) -> None:
9997
renderer = renderWindow.GetRenderers().GetFirstRenderer()
10098

10199
renderer.SetBackground([red / 255, green / 255, blue / 255])
102-
renderer.ResetCamera()
103-
renderWindow.Render()
104-
self.render()
105100

106101
@exportRpc(viewer_prefix + viewer_schemas_dict["reset_camera"]["rpc"])
107102
def resetCamera(self, params: RpcParams) -> None:
@@ -110,8 +105,6 @@ def resetCamera(self, params: RpcParams) -> None:
110105
)
111106
renderWindow = self.getView("-1")
112107
renderWindow.GetRenderers().GetFirstRenderer().ResetCamera()
113-
renderWindow.Render()
114-
self.render()
115108

116109
@exportRpc(viewer_prefix + viewer_schemas_dict["take_screenshot"]["rpc"])
117110
def takeScreenshot(self, params: RpcParams) -> dict[str, str | bytes]:
@@ -183,7 +176,6 @@ def updateData(self, params: RpcParams) -> None:
183176
tag,
184177
)
185178
mapper.SetScalarRange(scalars.GetRange())
186-
self.render()
187179

188180
@exportRpc(viewer_prefix + viewer_schemas_dict["get_point_position"]["rpc"])
189181
def getPointPosition(self, params: RpcParams) -> dict[str, float]:
@@ -247,15 +239,13 @@ def toggleGridScale(self, params: RpcParams) -> None:
247239
if "grid_scale" in self.get_data_base():
248240
actor = self.get_object(id)["actor"]
249241
actor.SetVisibility(visibility)
250-
self.render()
251242

252243
@exportRpc(viewer_prefix + viewer_schemas_dict["axes"]["rpc"])
253244
def toggleAxes(self, params: RpcParams) -> None:
254245
validate_schema(params, self.viewer_schemas_dict["axes"], self.viewer_prefix)
255246
id, visibility = "axes", params["visibility"]
256247
actor = self.get_object(id)["actor"]
257248
actor.SetVisibility(visibility)
258-
self.render()
259249

260250
@exportRpc(viewer_prefix + viewer_schemas_dict["update_camera"]["rpc"])
261251
def updateCamera(self, params: RpcParams) -> None:
@@ -277,13 +267,10 @@ def updateCamera(self, params: RpcParams) -> None:
277267
camera.SetPosition(*position)
278268
camera.SetViewAngle(view_angle)
279269
camera.SetClippingRange(*clipping_range)
280-
self.render()
281270

282-
@exportRpc(viewer_prefix + viewer_schemas_dict["render_now"]["rpc"])
271+
@exportRpc(viewer_prefix + viewer_schemas_dict["render"]["rpc"])
283272
def renderNow(self, params: RpcParams) -> None:
284-
validate_schema(
285-
params, self.viewer_schemas_dict["render_now"], self.viewer_prefix
286-
)
273+
validate_schema(params, self.viewer_schemas_dict["render"], self.viewer_prefix)
287274
self.render()
288275

289276
@exportRpc(viewer_prefix + viewer_schemas_dict["set_z_scaling"]["rpc"])
@@ -302,4 +289,3 @@ def setZScaling(self, params: RpcParams) -> None:
302289
if "grid_scale" in self.get_data_base():
303290
cube_axes_actor = self.get_object("grid_scale")["actor"]
304291
cube_axes_actor.SetUse2DMode(1)
305-
self.render()

tests/conftest.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from opengeodeweb_viewer import config
1212
from opengeodeweb_microservice.database.connection import get_session, init_database
1313
from opengeodeweb_microservice.database.data import Data
14+
from opengeodeweb_viewer.rpc.viewer.viewer_protocols import VtkViewerView
1415

1516
type RpcTestParams = list[
1617
dict[str, str | int | float | bool | dict[str, int] | list[str]] | int
@@ -38,7 +39,7 @@ def call(self, rpc: str, params: RpcTestParams = None) -> None:
3839
self.ws.send(
3940
json.dumps(
4041
{
41-
"id": "rpc:test",
42+
"id": "rpc:" + rpc,
4243
"method": rpc,
4344
"args": params,
4445
}
@@ -98,29 +99,27 @@ def images_diff(self, first_image_path: str, second_image_path: str) -> float:
9899
print(f"{images_diff.GetThresholdedError()=}")
99100
return images_diff.GetThresholdedError()
100101

101-
def compare_image(self, nb_messages: int, filename: str) -> bool:
102-
for message in range(nb_messages):
103-
print(f"{message=}", flush=True)
102+
def compare_image(self, filename: str) -> bool:
103+
self.call(
104+
VtkViewerView.viewer_prefix
105+
+ VtkViewerView.viewer_schemas_dict["render"]["rpc"]
106+
)
107+
while True:
104108
image = self.ws.recv()
105109
if isinstance(image, bytes):
110+
response = self.ws.recv()
111+
print(f"{response=}", flush=True)
112+
format = json.loads(response)["result"]["format"]
106113
test_file_path = os.path.abspath(
107-
os.path.join(self.test_output_dir, "test.jpeg")
114+
os.path.join(self.test_output_dir, f"test.{format}")
108115
)
109116
with open(test_file_path, "wb") as f:
110117
f.write(image)
111118
f.close()
112-
if isinstance(image, bytes):
113-
response = self.ws.recv()
114-
print(f"{response=}", flush=True)
115-
format = json.loads(response)["result"]["format"]
116-
test_file_path = os.path.abspath(
117-
os.path.join(self.test_output_dir, f"test.{format}")
118-
)
119-
with open(test_file_path, "wb") as f:
120-
f.write(image)
121-
f.close()
122-
path_image = os.path.join(self.images_dir_path, filename)
123-
return self.images_diff(test_file_path, path_image) == 0.0
119+
path_image = os.path.join(self.images_dir_path, filename)
120+
return self.images_diff(test_file_path, path_image) == 0.0
121+
else:
122+
print("response =", image, flush=True)
124123
return False
125124

126125
def _init_ws(self) -> None:
@@ -140,10 +139,8 @@ def _drain_initial_messages(
140139
) -> None:
141140
self.ws.settimeout(timeout)
142141
for i in range(max_messages):
143-
print(f"{i=}", flush=True)
144142
try:
145143
response = self.ws.recv()
146-
print(f"{response=}", flush=True)
147144
except WebSocketTimeoutException:
148145
print(
149146
f"Timeout on message {i}, but continuing to try remaining messages...",
File renamed without changes.

tests/mesh/edges/test_mesh_edges_protocols.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_edges_visibility(
2020
+ VtkMeshEdgesView.mesh_edges_schemas_dict["visibility"]["rpc"],
2121
[{"id": "123456789", "visibility": True}],
2222
)
23-
assert server.compare_image(3, "mesh/edges/visibility.jpeg") == True
23+
assert server.compare_image("mesh/edges/visibility.jpeg") == True
2424

2525

2626
def test_edges_color(
@@ -33,7 +33,7 @@ def test_edges_color(
3333
+ VtkMeshEdgesView.mesh_edges_schemas_dict["color"]["rpc"],
3434
[{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}],
3535
)
36-
assert server.compare_image(3, "mesh/edges/color.jpeg") == True
36+
assert server.compare_image("mesh/edges/color.jpeg") == True
3737

3838

3939
def test_edges_with_edged_curve(
@@ -45,18 +45,18 @@ def test_edges_with_edged_curve(
4545
VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"],
4646
[{"id": "123456789"}],
4747
)
48-
assert server.compare_image(3, "mesh/edges/register_edged_curve.jpeg") == True
48+
assert server.compare_image("mesh/edges/register_edged_curve.jpeg") == True
4949

5050
server.call(
5151
VtkMeshEdgesView.mesh_edges_prefix
5252
+ VtkMeshEdgesView.mesh_edges_schemas_dict["color"]["rpc"],
5353
[{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}],
5454
)
55-
assert server.compare_image(3, "mesh/edges/edged_curve_color.jpeg") == True
55+
assert server.compare_image("mesh/edges/edged_curve_color.jpeg") == True
5656

5757
server.call(
5858
VtkMeshEdgesView.mesh_edges_prefix
5959
+ VtkMeshEdgesView.mesh_edges_schemas_dict["visibility"]["rpc"],
6060
[{"id": "123456789", "visibility": False}],
6161
)
62-
assert server.compare_image(3, "mesh/edges/edged_curve_visibility.jpeg") == True
62+
assert server.compare_image("mesh/edges/edged_curve_visibility.jpeg") == True

0 commit comments

Comments
 (0)