Skip to content

Commit 9885b56

Browse files
object rpcs
1 parent 06a1713 commit 9885b56

33 files changed

+279
-268
lines changed

src/opengeodeweb_viewer/object/methods.py

Lines changed: 0 additions & 69 deletions
This file was deleted.
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# Standard library imports
2+
import os
3+
4+
# Third party imports
5+
import vtk
6+
from wslink import register as exportRpc
7+
8+
# Local application imports
9+
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
10+
from opengeodeweb_viewer.vtk_protocol import VtkView
11+
12+
schemas_dir = os.path.join(os.path.dirname(__file__), "schemas")
13+
schemas_dict = get_schemas_dict(schemas_dir)
14+
15+
16+
class VtkObjectView(VtkView):
17+
def __init__(self):
18+
super().__init__()
19+
20+
@exportRpc(schemas_dict["register"]["rpc"])
21+
def registerObject(self, params):
22+
validate_schema(params, schemas_dict["register"])
23+
try:
24+
id = params["id"]
25+
file_name = params["file_name"]
26+
FOLDER_PATH = os.path.dirname(__file__)
27+
28+
actor = vtk.vtkActor()
29+
if ".vtm" in file_name:
30+
reader = vtk.vtkXMLMultiBlockDataReader()
31+
filter = vtk.vtkGeometryFilter()
32+
filter.SetInputConnection(reader.GetOutputPort())
33+
mapper = vtk.vtkCompositePolyDataMapper()
34+
mapper.SetInputConnection(filter.GetOutputPort())
35+
else:
36+
reader = vtk.vtkXMLGenericDataObjectReader()
37+
filter = {}
38+
mapper = vtk.vtkDataSetMapper()
39+
mapper.SetInputConnection(reader.GetOutputPort())
40+
41+
self.register_object(id, reader, filter, actor, mapper, {})
42+
43+
reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, file_name))
44+
45+
actor.SetMapper(mapper)
46+
mapper.SetColorModeToMapScalars()
47+
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
48+
mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(2, 0)
49+
mapper.SetResolveCoincidentTopologyPointOffsetParameter(-2)
50+
51+
renderWindow = self.getView("-1")
52+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
53+
renderer.AddActor(actor)
54+
renderer.ResetCamera()
55+
renderWindow.Render()
56+
self.render()
57+
except Exception as e:
58+
print("error : ", str(e), flush=True)
59+
60+
@exportRpc(schemas_dict["deregister"]["rpc"])
61+
def deregisterObject(self, params):
62+
validate_schema(params, schemas_dict["deregister"])
63+
print(f"{params=}", flush=True)
64+
id = params["id"]
65+
object = self.get_object(id)
66+
actor = object["actor"]
67+
renderWindow = self.getView("-1")
68+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
69+
renderer.RemoveActor(actor)
70+
print(f"{object=}", flush=True)
71+
self.deregister_object(id)
72+
self.render()
73+
74+
75+
@exportRpc(schemas_dict["apply_textures"]["rpc"])
76+
def applyTextures(self, params):
77+
validate_schema(params, schemas_dict["apply_textures"])
78+
print(f"{params=}", flush=True)
79+
id = params["id"]
80+
textures = params["textures"]
81+
textures_array = []
82+
images_reader_array = []
83+
84+
data = self.get_object(id)
85+
mapper = data["mapper"]
86+
actor = data["actor"]
87+
reader = data["reader"]
88+
89+
polydata_mapper = mapper.GetPolyDataMapper()
90+
poly_data = reader.GetPolyDataOutput()
91+
92+
for index, value in enumerate(textures):
93+
texture_name = value["texture_name"]
94+
texture_file_name = value["texture_file_name"]
95+
print(f"{texture_name=} {texture_file_name=}", flush=True)
96+
97+
new_texture = vtk.vtkTexture()
98+
image_reader = vtk.vtkXMLImageDataReader()
99+
image_reader.SetFileName(
100+
os.path.join(self.DATA_FOLDER_PATH, texture_file_name)
101+
)
102+
103+
shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
104+
polydata_mapper.MapDataArrayToMultiTextureAttribute(
105+
shader_texture_name,
106+
texture_name,
107+
vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS,
108+
)
109+
110+
if index == 0:
111+
new_texture.SetBlendingMode(
112+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_REPLACE
113+
)
114+
else:
115+
new_texture.SetBlendingMode(
116+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_ADD
117+
)
118+
119+
images_reader_array.append(image_reader)
120+
new_texture.SetInputConnection(image_reader.GetOutputPort())
121+
122+
actor.GetProperty().SetTexture(shader_texture_name, new_texture)
123+
124+
textures_array.append(new_texture)
125+
images_reader_array.append(image_reader)
126+
127+
self.render()
128+
129+
130+
def SetVisibility(self, params):
131+
validate_schema(params, schemas_dict["set_visibility"])
132+
id = params["id"]
133+
visibility = bool(params["visibility"])
134+
actor = self.get_object(id)["actor"]
135+
actor.SetVisibility(visibility)
136+
self.render()
137+
138+
def SetOpacity(self, params):
139+
print(f"{params=}", flush=True)
140+
validate_schema(params, schemas_dict["set_opacity"])
141+
id = params["id"]
142+
opacity = float(params["opacity"])
143+
actor = self.get_object(id)["actor"]
144+
actor.GetProperty().SetOpacity(opacity)
145+
self.render()
146+
147+
def SetColor(self, params):
148+
validate_schema(params, schemas_dict["set_color"])
149+
id = params["id"]
150+
color = params["color"]
151+
mapper = self.get_object(id)["mapper"]
152+
mapper.ScalarVisibilityOff()
153+
actor = self.get_object(id)["actor"]
154+
actor.GetProperty().SetColor(color)
155+
self.render()
156+
157+
def SetEdgeVisibility(self, params):
158+
print(f"{params=}", flush=True)
159+
validate_schema(params, schemas_dict["set_edge_visibility"])
160+
id = params["id"]
161+
visibility = bool(params["visibility"])
162+
actor = self.get_object(id)["actor"]
163+
actor.GetProperty().SetEdgeVisibility(visibility)
164+
self.render()
165+
166+
def SetVertexVisibility(self, params):
167+
print(f"{params=}", flush=True)
168+
validate_schema(params, schemas_dict["set_vertex_visility"])
169+
id = params["id"]
170+
visibility = bool(params["visibility"])
171+
actor = self.get_object(id)["actor"]
172+
actor.GetProperty().SetVertexVisibility(visibility)
173+
self.render()
174+
175+
def SetPointSize(self, params):
176+
validate_schema(params, schemas_dict["set_point_size"])
177+
id = params["id"]
178+
size = float(params["size"])
179+
actor = self.get_object(id)["actor"]
180+
actor.GetProperty().SetPointSize(size)
181+
self.render()
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
{
2-
"rpc": "delete_object_pipeline",
2+
"rpc": "object.deregister",
33
"type": "object",
44
"properties": {
55
"id": {
66
"type": "string"
77
}
88
},
9-
"required": ["id"],
9+
"required": [
10+
"id"
11+
],
1012
"additionalProperties": false
11-
}
13+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"rpc": "create_object_pipeline",
2+
"rpc": "object.register",
33
"type": "object",
44
"properties": {
55
"id": {
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
{
2-
"type": "object",
3-
"properties": {
4-
"id": {
5-
"type": "string"
6-
},
7-
"visibility": {
8-
"type": "boolean"
9-
}
2+
"type": "object",
3+
"properties": {
4+
"id": {
5+
"type": "string"
106
},
11-
"required": [
12-
"id",
13-
"visibility"
14-
],
15-
"additionalProperties": false
7+
"visibility": {
8+
"type": "boolean"
9+
}
10+
},
11+
"required": [
12+
"id",
13+
"visibility"
14+
],
15+
"additionalProperties": false
1616
}

src/opengeodeweb_viewer/rpc/mesh/protocols.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
# Local application imports
1313
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
14-
from opengeodeweb_viewer.object.methods import VtkObjectView
14+
from opengeodeweb_viewer.object.protocols import VtkObjectView
1515

1616

1717
schemas_dir = os.path.join(os.path.dirname(__file__), "schemas")
@@ -21,8 +21,8 @@ class VtkMeshView(VtkObjectView):
2121
def __init__(self):
2222
super().__init__()
2323

24-
@exportRpc(schemas_dict["toggle_object_visibility"]["rpc"])
25-
def toggle_object_visibility(self, params):
24+
@exportRpc(schemas_dict["set_visibility"]["rpc"])
25+
def SetVisibility(self, params):
2626
print(schemas_dict["toggle_object_visibility"]["rpc"], flush=True)
2727
validate_schema(params, schemas_dict["toggle_object_visibility"])
2828
super().SetVisibility(params)
@@ -33,17 +33,17 @@ def SetOpacity(self, params):
3333
validate_schema(params, schemas_dict["set_opacity"])
3434
super().SetOpacity(params)
3535

36-
@exportRpc(schemas_dict["toggle_edge_visibility"]["rpc"])
36+
@exportRpc(schemas_dict["set_edge_visibility"]["rpc"])
3737
def setEdgeVisibility(self, params):
38-
print(schemas_dict["toggle_edge_visibility"]["rpc"], flush=True)
39-
validate_schema(params, schemas_dict["toggle_edge_visibility"])
38+
print(schemas_dict["set_edge_visibility"]["rpc"], flush=True)
39+
validate_schema(params, schemas_dict["set_edge_visibility"])
4040
print(f"{params=}", flush=True)
4141
super().SetEdgeVisibility(params)
4242

43-
@exportRpc(schemas_dict["toggle_point_visibility"]["rpc"])
43+
@exportRpc(schemas_dict["set_point_visibility"]["rpc"])
4444
def setPointVisibility(self, params):
45-
print(schemas_dict["toggle_point_visibility"]["rpc"], flush=True)
46-
validate_schema(params, schemas_dict["toggle_point_visibility"])
45+
print(schemas_dict["set_point_visibility"]["rpc"], flush=True)
46+
validate_schema(params, schemas_dict["set_point_visibility"])
4747
super().SetVertexVisibility(params)
4848

4949
@exportRpc(schemas_dict["set_point_size"]["rpc"])

src/opengeodeweb_viewer/rpc/mesh/schemas/set_color.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"rpc": "set_color",
2+
"rpc": "mesh.set_color",
33
"type": "object",
44
"properties": {
55
"id": {

src/opengeodeweb_viewer/rpc/mesh/schemas/toggle_object_visibility.json renamed to src/opengeodeweb_viewer/rpc/mesh/schemas/set_edge_visibility.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"rpc": "toggle_object_visibility",
2+
"rpc": "mesh.set_edge_visibility",
33
"type": "object",
44
"properties": {
55
"id": {

src/opengeodeweb_viewer/rpc/mesh/schemas/set_opacity.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"rpc": "set_opacity",
2+
"rpc": "mesh.set_opacity",
33
"type": "object",
44
"properties": {
55
"id": {

0 commit comments

Comments
 (0)