Skip to content

Commit e81296a

Browse files
committed
feat(schemas): remove dockerfile + a few changes
1 parent 1c878be commit e81296a

20 files changed

+367
-413
lines changed

Dockerfile

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import os
2-
import json
3-
import jsonschema
41
from jsonschema import validate
2+
from jsonschema.exceptions import ValidationError
53

64

75
def validate_schemas(params, schema):
86
try:
97
validate(instance=params, schema=schema)
10-
except jsonschema.exceptions.ValidationError as e:
8+
except ValidationError as e:
119
print(400, f"Validation error: {e.message}")
Lines changed: 365 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,365 @@
1+
import json
2+
import os
3+
from vtk.web import protocols as vtk_protocols
4+
from wslink import register as exportRpc
5+
import vtk
6+
from opengeodeweb_viewer.function import validate_schemas
7+
8+
schemas = os.path.join(os.path.dirname(__file__), "rpc/schemas")
9+
10+
with open(
11+
os.path.join(schemas, "create_visualization.json"),
12+
"r",
13+
) as file:
14+
create_visualization_json = json.load(file)
15+
16+
with open(
17+
os.path.join(schemas, "reset_camera.json"),
18+
"r",
19+
) as file:
20+
reset_camera_json = json.load(file)
21+
22+
with open(
23+
os.path.join(schemas, "create_object_pipeline.json"),
24+
"r",
25+
) as file:
26+
create_object_pipeline_json = json.load(file)
27+
28+
with open(
29+
os.path.join(schemas, "delete_object_pipeline.json"),
30+
"r",
31+
) as file:
32+
delete_object_pipeline_json = json.load(file)
33+
34+
with open(
35+
os.path.join(schemas, "toggle_object_visibility.json"),
36+
"r",
37+
) as file:
38+
toggle_object_visibility_json = json.load(file)
39+
40+
with open(
41+
os.path.join(schemas, "update_data.json"),
42+
"r",
43+
) as file:
44+
update_data_json = json.load(file)
45+
46+
with open(
47+
os.path.join(schemas, "apply_textures.json"),
48+
"r",
49+
) as file:
50+
apply_textures_json = json.load(file)
51+
52+
with open(
53+
os.path.join(schemas, "get_point_position.json"),
54+
"r",
55+
) as file:
56+
get_point_position_json = json.load(file)
57+
58+
with open(
59+
os.path.join(schemas, "reset.json"),
60+
"r",
61+
) as file:
62+
reset_json = json.load(file)
63+
64+
with open(
65+
os.path.join(schemas, "toggle_edge_visibility.json"),
66+
"r",
67+
) as file:
68+
toggle_edge_visibility_json = json.load(file)
69+
70+
with open(
71+
os.path.join(schemas, "toggle_point_visibility.json"),
72+
"r",
73+
) as file:
74+
toggle_point_visibility_json = json.load(file)
75+
76+
with open(
77+
os.path.join(schemas, "point_size.json"),
78+
"r",
79+
) as file:
80+
point_size_json = json.load(file)
81+
82+
with open(
83+
os.path.join(schemas, "set_color.json"),
84+
"r",
85+
) as file:
86+
set_color_json = json.load(file)
87+
88+
with open(
89+
os.path.join(schemas, "set_vertex_attribute.json"),
90+
"r",
91+
) as file:
92+
set_vertex_attribute_json = json.load(file)
93+
94+
95+
class VtkView(vtk_protocols.vtkWebProtocol):
96+
def __init__(self):
97+
self.DataReader = vtk.vtkXMLPolyDataReader()
98+
self.ImageReader = vtk.vtkXMLImageDataReader()
99+
100+
@exportRpc(create_visualization_json["rpc"])
101+
def create_visualization(self, params):
102+
validate_schemas(params, create_visualization_json)
103+
104+
renderWindow = self.getView("-1")
105+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
106+
renderer.SetBackground([180 / 255, 180 / 255, 180 / 255])
107+
108+
renderer.ResetCamera()
109+
renderWindow.Render()
110+
111+
return self.reset_camera()
112+
113+
@exportRpc(reset_camera_json["rpc"])
114+
def reset_camera(self, params):
115+
validate_schemas(params, reset_camera_json)
116+
renderWindow = self.getView("-1")
117+
renderWindow.GetRenderers().GetFirstRenderer().ResetCamera()
118+
renderWindow.Render()
119+
120+
return -1
121+
122+
@exportRpc(create_object_pipeline_json["rpc"])
123+
def create_object_pipeline(self, params):
124+
validate_schemas(params, create_object_pipeline_json)
125+
try:
126+
print(f"{params=}", flush=True)
127+
id = params["id"]
128+
file_name = params["file_name"]
129+
130+
actor = vtk.vtkActor()
131+
if ".vtm" in file_name:
132+
reader = vtk.vtkXMLMultiBlockDataReader()
133+
filter = vtk.vtkGeometryFilter()
134+
filter.SetInputConnection(reader.GetOutputPort())
135+
mapper = vtk.vtkCompositePolyDataMapper()
136+
mapper.SetInputConnection(filter.GetOutputPort())
137+
self.register_object(id, reader, filter, actor, mapper, {})
138+
else:
139+
reader = vtk.vtkXMLGenericDataObjectReader()
140+
mapper = vtk.vtkDataSetMapper()
141+
mapper.SetInputConnection(reader.GetOutputPort())
142+
self.register_object(id, reader, {}, actor, mapper, {})
143+
144+
reader.SetFileName(f"/data/{file_name}")
145+
146+
actor.SetMapper(mapper)
147+
mapper.SetColorModeToMapScalars()
148+
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
149+
mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(2, 0)
150+
mapper.SetResolveCoincidentTopologyPointOffsetParameter(-2)
151+
152+
renderWindow = self.getView("-1")
153+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
154+
renderer.AddActor(actor)
155+
156+
renderer.ResetCamera()
157+
158+
self.render()
159+
except Exception as e:
160+
print("error : ", str(e), flush=True)
161+
162+
@exportRpc(delete_object_pipeline_json["rpc"])
163+
def delete_object_pipeline(self, params):
164+
validate_schemas(params, delete_object_pipeline_json)
165+
print(f"{params=}", flush=True)
166+
id = params["id"]
167+
object = self.get_object(id)
168+
actor = object["actor"]
169+
renderWindow = self.getView("-1")
170+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
171+
renderer.RemoveActor(actor)
172+
self.deregister_object(id)
173+
self.render()
174+
175+
@exportRpc(toggle_object_visibility_json["rpc"])
176+
def toggle_object_visibility(self, params):
177+
validate_schemas(params, toggle_object_visibility_json)
178+
print(f"{params=}", flush=True)
179+
id = params["id"]
180+
is_visible = params["is_visible"]
181+
object = self.get_object(id)
182+
actor = object["actor"]
183+
actor.SetVisibility(is_visible)
184+
self.render()
185+
186+
@exportRpc(apply_textures_json["rpc"])
187+
def apply_textures(self, params):
188+
validate_schemas(params, apply_textures_json)
189+
print(f"{params=}", flush=True)
190+
id = params["id"]
191+
textures = params["textures"]
192+
textures_array = []
193+
images_reader_array = []
194+
195+
data = self.get_object(id)
196+
mapper = data["mapper"]
197+
actor = data["actor"]
198+
reader = data["reader"]
199+
200+
polydata_mapper = mapper.GetPolyDataMapper()
201+
poly_data = reader.GetPolyDataOutput()
202+
203+
for index, value in enumerate(textures):
204+
texture_name = value["texture_name"]["value"]
205+
texture_file_name = value["texture_file_name"]["value"]
206+
207+
new_texture = vtk.vtkTexture()
208+
image_reader = vtk.vtkXMLImageDataReader()
209+
image_reader.SetFileName(f"/data/{texture_file_name}")
210+
211+
shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
212+
polydata_mapper.MapDataArrayToMultiTextureAttribute(
213+
shader_texture_name,
214+
texture_name,
215+
vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS,
216+
)
217+
218+
if index == 0:
219+
new_texture.SetBlendingMode(
220+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_REPLACE
221+
)
222+
else:
223+
new_texture.SetBlendingMode(
224+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_ADD
225+
)
226+
227+
images_reader_array.append(image_reader)
228+
new_texture.SetInputConnection(image_reader.GetOutputPort())
229+
230+
actor.GetProperty().SetTexture(shader_texture_name, new_texture)
231+
232+
textures_array.append(new_texture)
233+
images_reader_array.append(image_reader)
234+
235+
self.render()
236+
237+
@exportRpc(update_data_json["rpc"])
238+
def update_data(self, params):
239+
validate_schemas(params, update_data_json)
240+
print(f"{params=}", flush=True)
241+
id = params["id"]
242+
243+
data = self.get_object(id)
244+
reader = data["reader"]
245+
reader.Update()
246+
mapper = data["mapper"]
247+
tag = vtk.reference(0)
248+
scalars = vtk.vtkAbstractMapper.GetAbstractScalars(
249+
reader.GetOutput(),
250+
mapper.GetScalarMode(),
251+
mapper.GetArrayAccessMode(),
252+
mapper.GetArrayId(),
253+
mapper.GetArrayName(),
254+
tag,
255+
)
256+
mapper.SetScalarRange(scalars.GetRange())
257+
self.render()
258+
259+
@exportRpc(get_point_position_json["rpc"])
260+
def get_point_position(self, params):
261+
validate_schemas(params, get_point_position_json)
262+
x = float(params["x"])
263+
y = float(params["y"])
264+
print(f"{x=}", flush=True)
265+
print(f"{y=}", flush=True)
266+
xyz = [x, y, 0.0]
267+
picker = vtk.vtkWorldPointPicker()
268+
picker.Pick(xyz, self.get_renderer())
269+
ppos = picker.GetPickPosition()
270+
return {"x": ppos[0], "y": ppos[1], "z": ppos[2]}
271+
272+
@exportRpc(reset_json["rpc"])
273+
def reset(self):
274+
print("COUCOU 2")
275+
276+
# validate_schemas(params, reset_json)
277+
renderWindow = self.getView("-1")
278+
renderWindow.GetRenderers().GetFirstRenderer().RemoveAllViewProps()
279+
print("reset")
280+
281+
@exportRpc(toggle_edge_visibility_json["rpc"])
282+
def setEdgeVisibility(self, params):
283+
validate_schemas(params, toggle_edge_visibility_json)
284+
print(f"{params=}", flush=True)
285+
id = params["id"]
286+
visibility = bool(params["visibility"])
287+
actor = self.get_object(id)["actor"]
288+
actor.GetProperty().SetEdgeVisibility(visibility)
289+
self.render()
290+
291+
@exportRpc(toggle_point_visibility_json["rpc"])
292+
def setPointVisibility(self, params):
293+
validate_schemas(params, toggle_point_visibility_json)
294+
id = params["id"]
295+
visibility = bool(params["visibility"])
296+
actor = self.get_object(id)["actor"]
297+
actor.GetProperty().SetVertexVisibility(visibility)
298+
self.render()
299+
300+
@exportRpc(point_size_json["rpc"])
301+
def setPointSize(self, params):
302+
validate_schemas(params, point_size_json)
303+
id = params["id"]
304+
size = float(params["size"])
305+
actor = self.get_object(id)["actor"]
306+
actor.GetProperty().SetPointSize(size)
307+
self.render()
308+
309+
@exportRpc(set_color_json["rpc"])
310+
def setColor(self, params):
311+
validate_schemas(params, set_color_json)
312+
id = params["id"]
313+
red = params["red"]
314+
green = params["green"]
315+
blue = params["blue"]
316+
self.get_object(id)["mapper"].ScalarVisibilityOff()
317+
actor = self.get_object(id)["actor"]
318+
actor.GetProperty().SetColor(red, green, blue)
319+
self.render()
320+
321+
@exportRpc(set_vertex_attribute_json["rpc"])
322+
def setVertexAttribute(self, params):
323+
validate_schemas(params, set_vertex_attribute_json)
324+
print(f"{params=}", flush=True)
325+
id = params["id"]
326+
name = params["name"]
327+
mapper = self.get_object(id)["mapper"]
328+
mapper.SelectColorArray(name)
329+
mapper.ScalarVisibilityOn()
330+
mapper.SetScalarModeToUsePointFieldData()
331+
self.render()
332+
333+
def getProtocol(self, name):
334+
for p in self.coreServer.getLinkProtocols():
335+
if type(p).__name__ == name:
336+
return p
337+
338+
def render(self, view=-1):
339+
self.getProtocol("vtkWebPublishImageDelivery").imagePush({"view": view})
340+
341+
def get_data_base(self):
342+
return self.getSharedObject("db")
343+
344+
def get_renderer(self):
345+
return self.getSharedObject("renderer")
346+
347+
def get_object(self, id):
348+
return self.get_data_base()[id]
349+
350+
def get_protocol(self, name):
351+
for p in self.coreServer.getLinkProtocols():
352+
if type(p).__name__ == name:
353+
return p
354+
355+
def render(self, view=-1):
356+
self.getProtocol("vtkWebPublishImageDelivery").imagePush({"view": view})
357+
358+
def register_object(self, id, reader, filter, actor, mapper, textures):
359+
self.get_data_base()[id] = {
360+
"reader": reader,
361+
"filter": filter,
362+
"actor": actor,
363+
"mapper": mapper,
364+
"textures": textures,
365+
}
File renamed without changes.

0 commit comments

Comments
 (0)