Skip to content

Commit 9ae8126

Browse files
Merge pull request #35 from Geode-solutions/next
Next
2 parents 5767099 + 9b3a2a7 commit 9ae8126

File tree

102 files changed

+1663
-903
lines changed

Some content is hidden

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

102 files changed

+1663
-903
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

CHANGELOG.md

Lines changed: 72 additions & 348 deletions
Large diffs are not rendered by default.

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: 6 additions & 2 deletions
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 = "0.3.0"
8+
version = "1.0.0-rc.4"
99
dynamic = ["dependencies"]
1010
authors = [
1111
{ name="Geode-solutions", email="[email protected]" },
@@ -36,7 +36,11 @@ dependencies = {file = ["requirements.txt"]}
3636
where = ["src"]
3737

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

4145
[tool.semantic_release]
4246
version_toml = [

src/opengeodeweb_viewer/__init__.py

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 registerObject(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 deregisterObject(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: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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 wslink import register as exportRpc
9+
10+
# Local application imports
11+
from opengeodeweb_viewer.vtk_protocol import VtkView
12+
from opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView
13+
from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView
14+
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
15+
16+
class VtkGenericView(VtkView):
17+
prefix = "opengeodeweb_viewer.generic."
18+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
19+
20+
def __init__(self, mesh_protocols, model_protocols):
21+
super().__init__()
22+
self.mesh_protocols = mesh_protocols
23+
self.model_protocols = model_protocols
24+
25+
@exportRpc(prefix + schemas_dict["register"]["rpc"])
26+
def register(self, params):
27+
print(self.schemas_dict["register"]["rpc"], f"{params=}", flush=True)
28+
validate_schema(params, self.schemas_dict["register"])
29+
viewer_object = params["viewer_object"]
30+
params.pop('viewer_object', None)
31+
print(f"{params=}", flush=True)
32+
if viewer_object == "mesh":
33+
self.mesh_protocols.registerMesh(params)
34+
elif viewer_object == "model":
35+
self.model_protocols.registerModel(params)
36+
37+
@exportRpc(prefix + schemas_dict["deregister"]["rpc"])
38+
def deregister(self, params):
39+
print(self.schemas_dict["deregister"]["rpc"], f"{params=}", flush=True)
40+
validate_schema(params, self.schemas_dict["deregister"])
41+
viewer_object = params["viewer_object"]
42+
params.pop('viewer_object', None)
43+
if viewer_object == "mesh":
44+
self.mesh_protocols.deregisterMesh(params)
45+
elif viewer_object == "model":
46+
self.model_protocols.deregisterModel(params)
47+
48+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"rpc": "deregister",
3+
"type": "object",
4+
"properties": {
5+
"viewer_object": {
6+
"type": "string",
7+
"enum": ["mesh", "model"]
8+
},
9+
"id": {
10+
"type": "string"
11+
}
12+
},
13+
"required": [
14+
"viewer_object",
15+
"id"
16+
],
17+
"additionalProperties": false
18+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"rpc": "register",
3+
"type": "object",
4+
"properties": {
5+
"viewer_object": {
6+
"type": "string",
7+
"enum": ["mesh", "model"]
8+
},
9+
"id": {
10+
"type": "string"
11+
},
12+
"file_name": {
13+
"type": "string"
14+
}
15+
},
16+
"required": [
17+
"viewer_object",
18+
"id",
19+
"file_name"
20+
],
21+
"additionalProperties": false
22+
}

0 commit comments

Comments
 (0)