Skip to content

Next #35

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 52 commits into from
Nov 29, 2024
Merged

Next #35

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
64f7bd9
JulienChampagnol Nov 6, 2024
06992c6
feat(rpc): set_viewer_background_color
JulienChampagnol Nov 13, 2024
66836bc
feat(rpc): set_opacity
JulienChampagnol Nov 14, 2024
d79292e
wip(classes): new layout
JulienChampagnol Nov 18, 2024
d8a6f48
fix classes import
JulienChampagnol Nov 18, 2024
36d9974
import new folders
JulienChampagnol Nov 18, 2024
096bd7e
get_schemas_dict function
JulienChampagnol Nov 18, 2024
50510c8
register new classes
JulienChampagnol Nov 18, 2024
b1f21f5
new classes
JulienChampagnol Nov 18, 2024
522581a
schemas
JulienChampagnol Nov 18, 2024
d6ab160
imports
JulienChampagnol Nov 18, 2024
ca7d28d
rename
JulienChampagnol Nov 18, 2024
0d77266
test_config dynamic path
JulienChampagnol Nov 19, 2024
a532994
VtkView init
JulienChampagnol Nov 19, 2024
093daa4
test data
JulienChampagnol Nov 19, 2024
0c3ec58
generi object methods
JulienChampagnol Nov 19, 2024
6bdf7df
save schemas state
JulienChampagnol Nov 19, 2024
06a1713
tests viewer okay
JulienChampagnol Nov 19, 2024
9885b56
object rpcs
JulienChampagnol Nov 20, 2024
608a816
schemas in child classes
JulienChampagnol Nov 20, 2024
8bca026
tidy
JulienChampagnol Nov 22, 2024
bc1c969
passing tests
JulienChampagnol Nov 22, 2024
d315c2d
add print in all rpcs before validation
JulienChampagnol Nov 22, 2024
6278b65
call self everywhere
JulienChampagnol Nov 22, 2024
acbbae0
prefix & schemas_dict in classes
JulienChampagnol Nov 25, 2024
6e5aaf0
comment test_set_point_size
JulienChampagnol Nov 25, 2024
9ef9a51
harmonise functions name
JulienChampagnol Nov 25, 2024
6396928
harmonise functions name 2
JulienChampagnol Nov 25, 2024
87075eb
prefix & dict on failing tests
JulienChampagnol Nov 25, 2024
25d62f1
Merge pull request #29 from Geode-solutions/feat/new_rpcs
JulienChampagnol Nov 25, 2024
94b70c7
0.4.0-rc.1
Nov 25, 2024
ac8ca3e
save tests wip
JulienChampagnol Nov 25, 2024
03ba21b
wip(generic protocols): new class with rpcs
JulienChampagnol Nov 26, 2024
07610d8
rename functions not to overlap
JulienChampagnol Nov 26, 2024
563f41b
feat(generic rpcs): refactor all classes/tests
JulienChampagnol Nov 28, 2024
297b005
feat(generic rpcs): refactor all classes/tests
JulienChampagnol Nov 28, 2024
581a07d
Merge branch 'feat/new_rpcs' of https://github.com/Geode-solutions/Op…
JulienChampagnol Nov 28, 2024
1553280
cleanup prints
JulienChampagnol Nov 28, 2024
22ada37
comment vtk failing tests
JulienChampagnol Nov 28, 2024
719ddd5
Merge pull request #31 from Geode-solutions/feat/new_rpcs
JulienChampagnol Nov 28, 2024
6ea16a0
0.4.0-rc.2
Nov 28, 2024
c2fb4e7
feat(new rpcs): refactor rpcs
JulienChampagnol Nov 28, 2024
5e2ac53
Merge branch 'next' of https://github.com/Geode-solutions/OpenGeodeWe…
JulienChampagnol Nov 28, 2024
fdf90cb
1.0.0-rc.1
Nov 28, 2024
f2fdc20
fix(viewer schemas): remove 'viewer' prefix
JulienChampagnol Nov 28, 2024
994acd0
Merge pull request #32 from Geode-solutions/fix/viewer_protocols_typo
JulienChampagnol Nov 28, 2024
65eafe0
1.0.0-rc.2
Nov 28, 2024
cb101e5
fix(schemas): generic rpc in global final schema
JulienChampagnol Nov 29, 2024
6c75ac2
Merge pull request #33 from Geode-solutions/fix/generic_rpc_in_schemas
JulienChampagnol Nov 29, 2024
f0e26da
1.0.0-rc.3
Nov 29, 2024
88e87a0
fix(schemas): export generic schemas in package
JulienChampagnol Nov 29, 2024
9b3a2a7
1.0.0-rc.4
Nov 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ __pycache__/
latest_logs
schemas.json
build
src/tests/tests_output/
*.egg-info
420 changes: 72 additions & 348 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion generate_schemas.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ function return_json_schema(directoryPath, folder_path, project_name) {
return acc;
}, folders_schemas);
} else {
var new_folder_path = folder_path + "/" + folder.name;
var new_folder_path = folder_path + "." + folder.name;
var test = return_json_schema(folder.path, new_folder_path, project_name);
folders_schemas[folder.name] = test;
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"name": "@geode/opengeodeweb-viewer",
"scripts": {
"json": "node generate_schemas.js"
"json": "node generate_schemas.js",
"test": "npm run json && pytest"
},
"dependencies": {
"glob": "^10.3.10"
Expand Down
8 changes: 6 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "OpenGeodeWeb-Viewer"
version = "0.3.0"
version = "1.0.0-rc.4"
dynamic = ["dependencies"]
authors = [
{ name="Geode-solutions", email="[email protected]" },
Expand Down Expand Up @@ -36,7 +36,11 @@ dependencies = {file = ["requirements.txt"]}
where = ["src"]

[tool.setuptools.package-data]
"opengeodeweb_viewer.rpc.schemas" = ["*.json"]
"opengeodeweb_viewer.rpc.generic.schemas" = ["*.json"]
"opengeodeweb_viewer.rpc.mesh.schemas" = ["*.json"]
"opengeodeweb_viewer.rpc.model.schemas" = ["*.json"]
"opengeodeweb_viewer.rpc.viewer.schemas" = ["*.json"]


[tool.semantic_release]
version_toml = [
Expand Down
2 changes: 1 addition & 1 deletion src/opengeodeweb_viewer/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from .config import *
from .function import *
from .utils_functions import *
from .vtk_protocol import *
8 changes: 5 additions & 3 deletions src/opengeodeweb_viewer/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ def dev_config():
os.mkdir(os.environ.get("DATA_FOLDER_PATH"))


def test_config():
def test_config(path):
default_config()
print(f"{os.path.dirname(__file__)=}", flush=True)
os.environ["DATA_FOLDER_PATH"] = os.path.join(
os.path.dirname(__file__), "..", "tests", "data"
os.environ["DATA_FOLDER_PATH"] = os.path.join(path,
"data"
)

print(f"{os.environ.get('DATA_FOLDER_PATH')=}", flush=True)
17 changes: 0 additions & 17 deletions src/opengeodeweb_viewer/function.py

This file was deleted.

123 changes: 123 additions & 0 deletions src/opengeodeweb_viewer/object/object_methods.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Standard library imports
import os

# Third party imports
import vtk

# Local application imports
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema
from opengeodeweb_viewer.vtk_protocol import VtkView

class VtkObjectView(VtkView):
def __init__(self):
super().__init__()

def registerObject(self, id, file_name, reader, filter, mapper):
actor = vtk.vtkActor()
self.register_object(id, reader, filter, actor, mapper, {})

reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, file_name))

actor.SetMapper(mapper)
mapper.SetColorModeToMapScalars()
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(2, 0)
mapper.SetResolveCoincidentTopologyPointOffsetParameter(-2)

renderWindow = self.getView("-1")
renderer = renderWindow.GetRenderers().GetFirstRenderer()
renderer.AddActor(actor)
renderer.ResetCamera()
renderWindow.Render()
self.render()

def deregisterObject(self, id):
actor = self.get_object(id)["actor"]
renderWindow = self.getView("-1")
renderer = renderWindow.GetRenderers().GetFirstRenderer()
renderer.RemoveActor(actor)
self.deregister_object(id)
self.render()

def applyTextures(self, id, textures):
textures_array = []
images_reader_array = []

data = self.get_object(id)
mapper = data["mapper"]
actor = data["actor"]
reader = data["reader"]

polydata_mapper = mapper.GetPolyDataMapper()
poly_data = reader.GetPolyDataOutput()

for index, value in enumerate(textures):
texture_name = value["texture_name"]
texture_file_name = value["texture_file_name"]
print(f"{texture_name=} {texture_file_name=}", flush=True)

new_texture = vtk.vtkTexture()
image_reader = vtk.vtkXMLImageDataReader()
image_reader.SetFileName(
os.path.join(self.DATA_FOLDER_PATH, texture_file_name)
)

shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
polydata_mapper.MapDataArrayToMultiTextureAttribute(
shader_texture_name,
texture_name,
vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS,
)

if index == 0:
new_texture.SetBlendingMode(
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_REPLACE
)
else:
new_texture.SetBlendingMode(
vtk.vtkTexture.VTK_TEXTURE_BLENDING_MODE_ADD
)

images_reader_array.append(image_reader)
new_texture.SetInputConnection(image_reader.GetOutputPort())

actor.GetProperty().SetTexture(shader_texture_name, new_texture)

textures_array.append(new_texture)
images_reader_array.append(image_reader)

self.render()


def SetVisibility(self, id, visibility):
actor = self.get_object(id)["actor"]
actor.SetVisibility(visibility)
self.render()

def SetOpacity(self, id, opacity):
actor = self.get_object(id)["actor"]
actor.GetProperty().SetOpacity(opacity)
self.render()

def SetColor(self, id, red, green, blue):
reader = self.get_object(id)["reader"]
mapper = self.get_object(id)["mapper"]
mapper.ScalarVisibilityOff()
actor = self.get_object(id)["actor"]
actor.GetProperty().SetColor([red, green, blue])
self.render()

def SetEdgeVisibility(self, id, visibility):
actor = self.get_object(id)["actor"]
actor.GetProperty().SetEdgeVisibility(visibility)
self.render()

def SetVertexVisibility(self, id, visibility):
actor = self.get_object(id)["actor"]
actor.GetProperty().SetVertexVisibility(visibility)
self.render()

def SetPointSize(self, id, size):
actor = self.get_object(id)["actor"]
actor.GetProperty().SetPointSize(size)
self.render()
48 changes: 48 additions & 0 deletions src/opengeodeweb_viewer/rpc/generic/generic_protocols.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Standard library imports
import json
import os

# Third party imports
import vtk
from vtk.web import protocols as vtk_protocols
from wslink import register as exportRpc

# Local application imports
from opengeodeweb_viewer.vtk_protocol import VtkView
from opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView
from opengeodeweb_viewer.rpc.model.model_protocols import VtkModelView
from opengeodeweb_viewer.utils_functions import get_schemas_dict, validate_schema

class VtkGenericView(VtkView):
prefix = "opengeodeweb_viewer.generic."
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))

def __init__(self, mesh_protocols, model_protocols):
super().__init__()
self.mesh_protocols = mesh_protocols
self.model_protocols = model_protocols

@exportRpc(prefix + schemas_dict["register"]["rpc"])
def register(self, params):
print(self.schemas_dict["register"]["rpc"], f"{params=}", flush=True)
validate_schema(params, self.schemas_dict["register"])
viewer_object = params["viewer_object"]
params.pop('viewer_object', None)
print(f"{params=}", flush=True)
if viewer_object == "mesh":
self.mesh_protocols.registerMesh(params)
elif viewer_object == "model":
self.model_protocols.registerModel(params)

@exportRpc(prefix + schemas_dict["deregister"]["rpc"])
def deregister(self, params):
print(self.schemas_dict["deregister"]["rpc"], f"{params=}", flush=True)
validate_schema(params, self.schemas_dict["deregister"])
viewer_object = params["viewer_object"]
params.pop('viewer_object', None)
if viewer_object == "mesh":
self.mesh_protocols.deregisterMesh(params)
elif viewer_object == "model":
self.model_protocols.deregisterModel(params)


18 changes: 18 additions & 0 deletions src/opengeodeweb_viewer/rpc/generic/schemas/deregister.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"rpc": "deregister",
"type": "object",
"properties": {
"viewer_object": {
"type": "string",
"enum": ["mesh", "model"]
},
"id": {
"type": "string"
}
},
"required": [
"viewer_object",
"id"
],
"additionalProperties": false
}
22 changes: 22 additions & 0 deletions src/opengeodeweb_viewer/rpc/generic/schemas/register.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"rpc": "register",
"type": "object",
"properties": {
"viewer_object": {
"type": "string",
"enum": ["mesh", "model"]
},
"id": {
"type": "string"
},
"file_name": {
"type": "string"
}
},
"required": [
"viewer_object",
"id",
"file_name"
],
"additionalProperties": false
}
Loading