Skip to content

Commit 25d62f1

Browse files
Merge pull request #29 from Geode-solutions/feat/new_rpcs
Feat/new rpcs
2 parents 64f7bd9 + 87075eb commit 25d62f1

File tree

97 files changed

+1495
-560
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+1495
-560
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ __pycache__/
99
latest_logs
1010
schemas.json
1111
build
12+
src/tests/tests_output/
1213
*.egg-info

generate_schemas.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ function return_json_schema(directoryPath, folder_path, project_name) {
6262
return acc;
6363
}, folders_schemas);
6464
} else {
65-
var new_folder_path = folder_path + "/" + folder.name;
65+
var new_folder_path = folder_path + "." + folder.name;
6666
var test = return_json_schema(folder.path, new_folder_path, project_name);
6767
folders_schemas[folder.name] = test;
6868
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"name": "@geode/opengeodeweb-viewer",
33
"scripts": {
4-
"json": "node generate_schemas.js"
4+
"json": "node generate_schemas.js",
5+
"test": "npm run json && pytest"
56
},
67
"dependencies": {
78
"glob": "^10.3.10"

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ dependencies = {file = ["requirements.txt"]}
3636
where = ["src"]
3737

3838
[tool.setuptools.package-data]
39-
"opengeodeweb_viewer.rpc.schemas" = ["*.json"]
39+
"opengeodeweb_viewer.rpc.viewer.schemas" = ["*.json"]
40+
"opengeodeweb_viewer.rpc.mesh.schemas" = ["*.json"]
41+
"opengeodeweb_viewer.rpc.model.schemas" = ["*.json"]
42+
4043

4144
[tool.semantic_release]
4245
version_toml = [
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
from .config import *
2-
from .function import *
2+
from .utils_functions import *
33
from .vtk_protocol import *

src/opengeodeweb_viewer/config.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ def dev_config():
2424
os.mkdir(os.environ.get("DATA_FOLDER_PATH"))
2525

2626

27-
def test_config():
27+
def test_config(path):
2828
default_config()
2929
print(f"{os.path.dirname(__file__)=}", flush=True)
30-
os.environ["DATA_FOLDER_PATH"] = os.path.join(
31-
os.path.dirname(__file__), "..", "tests", "data"
30+
os.environ["DATA_FOLDER_PATH"] = os.path.join(path,
31+
"data"
3232
)
33+
34+
print(f"{os.environ.get('DATA_FOLDER_PATH')=}", flush=True)

src/opengeodeweb_viewer/function.py

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Standard library imports
2+
import os
3+
4+
# Third party imports
5+
import vtk
6+
7+
# Local application imports
8+
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
9+
from opengeodeweb_viewer.vtk_protocol import VtkView
10+
11+
class VtkObjectView(VtkView):
12+
def __init__(self):
13+
super().__init__()
14+
15+
def register(self, id, file_name, reader, filter, mapper):
16+
actor = vtk.vtkActor()
17+
self.register_object(id, reader, filter, actor, mapper, {})
18+
19+
reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, file_name))
20+
21+
actor.SetMapper(mapper)
22+
mapper.SetColorModeToMapScalars()
23+
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
24+
mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(2, 0)
25+
mapper.SetResolveCoincidentTopologyPointOffsetParameter(-2)
26+
27+
renderWindow = self.getView("-1")
28+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
29+
renderer.AddActor(actor)
30+
renderer.ResetCamera()
31+
renderWindow.Render()
32+
self.render()
33+
34+
def deregister(self, id):
35+
actor = self.get_object(id)["actor"]
36+
renderWindow = self.getView("-1")
37+
renderer = renderWindow.GetRenderers().GetFirstRenderer()
38+
renderer.RemoveActor(actor)
39+
self.deregister_object(id)
40+
self.render()
41+
42+
def applyTextures(self, id, textures):
43+
textures_array = []
44+
images_reader_array = []
45+
46+
data = self.get_object(id)
47+
mapper = data["mapper"]
48+
actor = data["actor"]
49+
reader = data["reader"]
50+
51+
polydata_mapper = mapper.GetPolyDataMapper()
52+
poly_data = reader.GetPolyDataOutput()
53+
54+
for index, value in enumerate(textures):
55+
texture_name = value["texture_name"]
56+
texture_file_name = value["texture_file_name"]
57+
print(f"{texture_name=} {texture_file_name=}", flush=True)
58+
59+
new_texture = vtk.vtkTexture()
60+
image_reader = vtk.vtkXMLImageDataReader()
61+
image_reader.SetFileName(
62+
os.path.join(self.DATA_FOLDER_PATH, texture_file_name)
63+
)
64+
65+
shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
66+
polydata_mapper.MapDataArrayToMultiTextureAttribute(
67+
shader_texture_name,
68+
texture_name,
69+
vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS,
70+
)
71+
72+
if index == 0:
73+
new_texture.SetBlendingMode(
74+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_REPLACE
75+
)
76+
else:
77+
new_texture.SetBlendingMode(
78+
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_ADD
79+
)
80+
81+
images_reader_array.append(image_reader)
82+
new_texture.SetInputConnection(image_reader.GetOutputPort())
83+
84+
actor.GetProperty().SetTexture(shader_texture_name, new_texture)
85+
86+
textures_array.append(new_texture)
87+
images_reader_array.append(image_reader)
88+
89+
self.render()
90+
91+
92+
def SetVisibility(self, id, visibility):
93+
actor = self.get_object(id)["actor"]
94+
actor.SetVisibility(visibility)
95+
self.render()
96+
97+
def SetOpacity(self, id, opacity):
98+
actor = self.get_object(id)["actor"]
99+
actor.GetProperty().SetOpacity(opacity)
100+
self.render()
101+
102+
def SetColor(self, id, red, green, blue):
103+
reader = self.get_object(id)["reader"]
104+
mapper = self.get_object(id)["mapper"]
105+
mapper.ScalarVisibilityOff()
106+
actor = self.get_object(id)["actor"]
107+
actor.GetProperty().SetColor([red, green, blue])
108+
self.render()
109+
110+
def SetEdgeVisibility(self, id, visibility):
111+
actor = self.get_object(id)["actor"]
112+
actor.GetProperty().SetEdgeVisibility(visibility)
113+
self.render()
114+
115+
def SetVertexVisibility(self, id, visibility):
116+
actor = self.get_object(id)["actor"]
117+
actor.GetProperty().SetVertexVisibility(visibility)
118+
self.render()
119+
120+
def SetPointSize(self, id, size):
121+
actor = self.get_object(id)["actor"]
122+
actor.GetProperty().SetPointSize(size)
123+
self.render()
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Standard library imports
2+
import json
3+
import os
4+
5+
# Third party imports
6+
import vtk
7+
from vtk.web import protocols as vtk_protocols
8+
from vtkmodules.vtkIOImage import vtkPNGWriter, vtkJPEGWriter
9+
from vtkmodules.vtkRenderingCore import (vtkWindowToImageFilter)
10+
from wslink import register as exportRpc
11+
12+
# Local application imports
13+
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
14+
from opengeodeweb_viewer.object.object_methods import VtkObjectView
15+
16+
schemas_dir = os.path.join(os.path.dirname(__file__), "schemas")
17+
schemas_dict = get_schemas_dict(schemas_dir)
18+
prefix = "opengeodeweb_viewer.mesh."
19+
20+
class VtkMeshView(VtkObjectView):
21+
def __init__(self):
22+
super().__init__()
23+
self.prefix = prefix
24+
self.schemas_dict = schemas_dict
25+
26+
@exportRpc(prefix + schemas_dict["register"]["rpc"])
27+
def registerMesh(self, params):
28+
print(schemas_dict["register"]["rpc"], params, flush=True)
29+
validate_schema(params, schemas_dict["register"])
30+
id = params["id"]
31+
file_name = params["file_name"]
32+
try:
33+
reader = vtk.vtkXMLGenericDataObjectReader()
34+
filter = {}
35+
mapper = vtk.vtkDataSetMapper()
36+
mapper.SetInputConnection(reader.GetOutputPort())
37+
self.register(id, file_name, reader, filter, mapper)
38+
except Exception as e:
39+
print("error : ", str(e), flush=True)
40+
41+
@exportRpc(prefix + schemas_dict["deregister"]["rpc"])
42+
def deregisterMesh(self, params):
43+
print(schemas_dict["deregister"]["rpc"], params, flush=True)
44+
validate_schema(params, schemas_dict["deregister"])
45+
id = params["id"]
46+
self.deregister(id)
47+
48+
@exportRpc(prefix + schemas_dict["set_visibility"]["rpc"])
49+
def SetMeshVisibility(self, params):
50+
print(schemas_dict["set_visibility"]["rpc"], params, flush=True)
51+
validate_schema(params, schemas_dict["set_visibility"])
52+
id = params["id"]
53+
visibility = bool(params["visibility"])
54+
self.SetVisibility(id, visibility)
55+
56+
@exportRpc(prefix + schemas_dict["set_opacity"]["rpc"])
57+
def setMeshOpacity(self, params):
58+
print(schemas_dict["set_opacity"]["rpc"], params, flush=True)
59+
validate_schema(params, schemas_dict["set_opacity"])
60+
id = params["id"]
61+
opacity = float(params["opacity"])
62+
self.SetOpacity(id, opacity)
63+
64+
@exportRpc(prefix + schemas_dict["set_edge_visibility"]["rpc"])
65+
def setMeshEdgeVisibility(self, params):
66+
print(schemas_dict["set_edge_visibility"]["rpc"], params, flush=True)
67+
validate_schema(params, schemas_dict["set_edge_visibility"])
68+
id = params["id"]
69+
visibility = bool(params["visibility"])
70+
self.SetEdgeVisibility(id, visibility)
71+
72+
@exportRpc(prefix + schemas_dict["set_point_visibility"]["rpc"])
73+
def setMeshPointVisibility(self, params):
74+
print(schemas_dict["set_point_visibility"]["rpc"], params, flush=True)
75+
validate_schema(params, schemas_dict["set_point_visibility"])
76+
id = params["id"]
77+
visibility = bool(params["visibility"])
78+
self.SetVertexVisibility(id, visibility)
79+
80+
@exportRpc(prefix + schemas_dict["set_point_size"]["rpc"])
81+
def setMeshPointSize(self, params):
82+
print(schemas_dict["set_point_size"]["rpc"], params, flush=True)
83+
validate_schema(params, schemas_dict["set_point_size"])
84+
id = params["id"]
85+
size = float(params["size"])
86+
self.SetPointSize(id, size)
87+
88+
@exportRpc(prefix + schemas_dict["set_color"]["rpc"])
89+
def setMeshColor(self, params):
90+
print(schemas_dict["set_color"]["rpc"], params, flush=True)
91+
validate_schema(params, schemas_dict["set_color"])
92+
id = params["id"]
93+
red = params["red"]
94+
green = params["green"]
95+
blue = params["blue"]
96+
self.SetColor(id, red, green, blue)
97+
98+
@exportRpc(prefix + schemas_dict["display_vertex_attribute"]["rpc"])
99+
def setVertexAttribute(self, params):
100+
print(schemas_dict["display_vertex_attribute"]["rpc"], params, flush=True)
101+
validate_schema(params, schemas_dict["display_vertex_attribute"])
102+
id = params["id"]
103+
name = params["name"]
104+
reader = self.get_object(id)["reader"]
105+
points = reader.GetOutput().GetPointData()
106+
points.SetActiveScalars(name)
107+
mapper = self.get_object(id)["mapper"]
108+
mapper.ScalarVisibilityOn()
109+
mapper.SetScalarModeToUsePointData()
110+
mapper.SetScalarRange(points.GetScalars().GetRange())
111+
self.render()
112+
113+
@exportRpc(prefix + schemas_dict["display_polygon_attribute"]["rpc"])
114+
def setPolygonAttribute(self, params):
115+
print(schemas_dict["display_polygon_attribute"]["rpc"], params, flush=True)
116+
validate_schema(params, schemas_dict["display_polygon_attribute"])
117+
id = params["id"]
118+
name = params["name"]
119+
reader = self.get_object(id)["reader"]
120+
cells = reader.GetOutput().GetCellData()
121+
cells.SetActiveScalars(name)
122+
mapper = self.get_object(id)["mapper"]
123+
mapper.ScalarVisibilityOn()
124+
mapper.SetScalarModeToUseCellData()
125+
mapper.SetScalarRange(cells.GetScalars().GetRange())
126+
self.render()

src/opengeodeweb_viewer/rpc/schemas/apply_textures.json renamed to src/opengeodeweb_viewer/rpc/mesh/schemas/apply_textures.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,18 @@
1717
"type": "string"
1818
}
1919
},
20-
"required": ["texture_name", "texture_file_name"],
20+
"required": [
21+
"texture_name",
22+
"texture_file_name"
23+
],
2124
"additionalProperties": false
2225
},
2326
"minItems": 1
2427
}
2528
},
26-
"required": ["id", "textures"],
29+
"required": [
30+
"id",
31+
"textures"
32+
],
2733
"additionalProperties": false
28-
}
34+
}

0 commit comments

Comments
 (0)