diff --git a/opengeodeweb_viewer_schemas.json b/opengeodeweb_viewer_schemas.json index 79765337..13e12ff3 100644 --- a/opengeodeweb_viewer_schemas.json +++ b/opengeodeweb_viewer_schemas.json @@ -53,6 +53,29 @@ ], "additionalProperties": false }, + "vertex_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.cells.vertex_scalar_range", + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "vertex_attribute": { "$id": "opengeodeweb_viewer.mesh.cells.vertex_attribute", "rpc": "vertex_attribute", @@ -121,6 +144,29 @@ ], "additionalProperties": false }, + "cell_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.cells.cell_scalar_range", + "rpc": "cell_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "cell_attribute": { "$id": "opengeodeweb_viewer.mesh.cells.cell_attribute", "rpc": "cell_attribute", @@ -181,6 +227,29 @@ ], "additionalProperties": false }, + "vertex_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.edges.vertex_scalar_range", + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "vertex_attribute": { "$id": "opengeodeweb_viewer.mesh.edges.vertex_attribute", "rpc": "vertex_attribute", @@ -289,6 +358,29 @@ ], "additionalProperties": false }, + "vertex_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.points.vertex_scalar_range", + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "vertex_attribute": { "$id": "opengeodeweb_viewer.mesh.points.vertex_attribute", "rpc": "vertex_attribute", @@ -397,6 +489,29 @@ ], "additionalProperties": false }, + "vertex_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.polygons.vertex_scalar_range", + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "vertex_attribute": { "$id": "opengeodeweb_viewer.mesh.polygons.vertex_attribute", "rpc": "vertex_attribute", @@ -417,6 +532,29 @@ ], "additionalProperties": false }, + "polygon_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.polygons.polygon_scalar_range", + "rpc": "polygon_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "polygon_attribute": { "$id": "opengeodeweb_viewer.mesh.polygons.polygon_attribute", "rpc": "polygon_attribute", @@ -506,6 +644,29 @@ ], "additionalProperties": false }, + "vertex_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.polyhedra.vertex_scalar_range", + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "vertex_attribute": { "$id": "opengeodeweb_viewer.mesh.polyhedra.vertex_attribute", "rpc": "vertex_attribute", @@ -526,6 +687,29 @@ ], "additionalProperties": false }, + "polyhedron_scalar_range": { + "$id": "opengeodeweb_viewer.mesh.polyhedra.polyhedron_scalar_range", + "rpc": "polyhedron_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false + }, "polyhedron_attribute": { "$id": "opengeodeweb_viewer.mesh.polyhedra.polyhedron_attribute", "rpc": "polyhedron_attribute", diff --git a/requirements.txt b/requirements.txt index bcde9674..065674ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.0.12 diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py index 9e25c0be..b2954c2d 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py @@ -63,3 +63,25 @@ def setMeshCellsCellAttribute(self, rpc_params: RpcParams) -> None: ) params = schemas.CellAttribute.from_dict(rpc_params) self.displayAttributeOnCells(params.id, params.name) + + @exportRpc( + mesh_cells_prefix + mesh_cells_schemas_dict["vertex_scalar_range"]["rpc"] + ) + def setMeshCellsVertexScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_cells_schemas_dict["vertex_scalar_range"], + self.mesh_cells_prefix, + ) + params = schemas.VertexScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) + + @exportRpc(mesh_cells_prefix + mesh_cells_schemas_dict["cell_scalar_range"]["rpc"]) + def setMeshCellsCellScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_cells_schemas_dict["cell_scalar_range"], + self.mesh_cells_prefix, + ) + params = schemas.CellScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/__init__.py index c77862a1..20497c47 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/__init__.py @@ -1,4 +1,6 @@ from .visibility import * +from .vertex_scalar_range import * from .vertex_attribute import * from .color import * +from .cell_scalar_range import * from .cell_attribute import * diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.json new file mode 100644 index 00000000..9efd4c4c --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "cell_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.py new file mode 100644 index 00000000..50137623 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/cell_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class CellScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.json new file mode 100644 index 00000000..68a8cabe --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.py new file mode 100644 index 00000000..735ba2a4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/vertex_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class VertexScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py index 1f0f62cf..7b23a9eb 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py @@ -49,3 +49,25 @@ def setMeshEdgesWidth(self, rpc_params: RpcParams) -> None: ) params = schemas.Width.from_dict(rpc_params) self.SetEdgesWidth(params.id, params.width) + + @exportRpc(mesh_edges_prefix + mesh_edges_schemas_dict["vertex_attribute"]["rpc"]) + def setMeshEdgesVertexAttribute(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_edges_schemas_dict["vertex_attribute"], + self.mesh_edges_prefix, + ) + params = schemas.VertexAttribute.from_dict(rpc_params) + self.displayAttributeOnVertices(params.id, params.name) + + @exportRpc( + mesh_edges_prefix + mesh_edges_schemas_dict["vertex_scalar_range"]["rpc"] + ) + def setMeshEdgesVertexScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_edges_schemas_dict["vertex_scalar_range"], + self.mesh_edges_prefix, + ) + params = schemas.VertexScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/__init__.py index 27cf1d77..1c778fe5 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/__init__.py @@ -1,5 +1,6 @@ from .width import * from .visibility import * +from .vertex_scalar_range import * from .vertex_attribute import * from .size import * from .color import * diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.json new file mode 100644 index 00000000..68a8cabe --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.py new file mode 100644 index 00000000..735ba2a4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/vertex_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class VertexScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py index 0b54166f..8e4a1c4b 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py @@ -146,3 +146,7 @@ def displayAttributeOnCells(self, data_id: str, name: str) -> None: mapper.ScalarVisibilityOn() mapper.SetScalarModeToUseCellData() mapper.SetScalarRange(cells.GetScalars().GetRange()) + + def displayScalarRange(self, data_id: str, minimum: float, maximum: float) -> None: + mapper = self.get_object(data_id).mapper + mapper.SetScalarRange(minimum, maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py index 81ed1318..bbd3f54f 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py @@ -59,3 +59,15 @@ def setMeshPointsVertexAttribute(self, rpc_params: RpcParams) -> None: ) params = schemas.VertexAttribute.from_dict(rpc_params) self.displayAttributeOnVertices(params.id, params.name) + + @exportRpc( + mesh_points_prefix + mesh_points_schemas_dict["vertex_scalar_range"]["rpc"] + ) + def setMeshPointsVertexScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_points_schemas_dict["vertex_scalar_range"], + self.mesh_points_prefix, + ) + params = schemas.VertexScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/__init__.py index 67bb8fc9..e4c14307 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/__init__.py @@ -1,4 +1,5 @@ from .visibility import * +from .vertex_scalar_range import * from .vertex_attribute import * from .size import * from .color import * diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.json new file mode 100644 index 00000000..68a8cabe --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.py new file mode 100644 index 00000000..735ba2a4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/points/schemas/vertex_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class VertexScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py index 78c5660a..77128a9e 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py @@ -67,3 +67,27 @@ def setMeshPolygonsPolygonAttribute(self, rpc_params: RpcParams) -> None: ) params = schemas.PolygonAttribute.from_dict(rpc_params) self.displayAttributeOnCells(params.id, params.name) + + @exportRpc( + mesh_polygons_prefix + mesh_polygons_schemas_dict["vertex_scalar_range"]["rpc"] + ) + def setMeshPolygonsVertexScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_polygons_schemas_dict["vertex_scalar_range"], + self.mesh_polygons_prefix, + ) + params = schemas.VertexScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) + + @exportRpc( + mesh_polygons_prefix + mesh_polygons_schemas_dict["polygon_scalar_range"]["rpc"] + ) + def setMeshPolygonsPolygonScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_polygons_schemas_dict["polygon_scalar_range"], + self.mesh_polygons_prefix, + ) + params = schemas.PolygonScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/__init__.py index 4085e8c9..ea22f65b 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/__init__.py @@ -1,4 +1,6 @@ from .visibility import * +from .vertex_scalar_range import * from .vertex_attribute import * +from .polygon_scalar_range import * from .polygon_attribute import * from .color import * diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.json new file mode 100644 index 00000000..75c20f19 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "polygon_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.py new file mode 100644 index 00000000..c90a1489 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/polygon_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PolygonScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.json new file mode 100644 index 00000000..68a8cabe --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.py new file mode 100644 index 00000000..735ba2a4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/vertex_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class VertexScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py index 1d87bfd5..88456db8 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py @@ -68,3 +68,29 @@ def setMeshPolyhedraPolyhedronAttribute(self, rpc_params: RpcParams) -> None: ) params = schemas.PolyhedronAttribute.from_dict(rpc_params) self.displayAttributeOnCells(params.id, params.name) + + @exportRpc( + mesh_polyhedra_prefix + + mesh_polyhedra_schemas_dict["vertex_scalar_range"]["rpc"] + ) + def setMeshPolyhedraVertexScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_polyhedra_schemas_dict["vertex_scalar_range"], + self.mesh_polyhedra_prefix, + ) + params = schemas.VertexScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) + + @exportRpc( + mesh_polyhedra_prefix + + mesh_polyhedra_schemas_dict["polyhedron_scalar_range"]["rpc"] + ) + def setMeshPolyhedraPolyhedronScalarRange(self, rpc_params: RpcParams) -> None: + validate_schema( + rpc_params, + self.mesh_polyhedra_schemas_dict["polyhedron_scalar_range"], + self.mesh_polyhedra_prefix, + ) + params = schemas.PolyhedronScalarRange.from_dict(rpc_params) + self.displayScalarRange(params.id, params.minimum, params.maximum) diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/__init__.py b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/__init__.py index 40aad4fc..1654103c 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/__init__.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/__init__.py @@ -1,4 +1,6 @@ from .visibility import * +from .vertex_scalar_range import * from .vertex_attribute import * +from .polyhedron_scalar_range import * from .polyhedron_attribute import * from .color import * diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.json new file mode 100644 index 00000000..31d646dd --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "polyhedron_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.py new file mode 100644 index 00000000..16b8dae6 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/polyhedron_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class PolyhedronScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.json b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.json new file mode 100644 index 00000000..68a8cabe --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.json @@ -0,0 +1,22 @@ +{ + "rpc": "vertex_scalar_range", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + }, + "required": [ + "id", + "minimum", + "maximum" + ], + "additionalProperties": false +} diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.py b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.py new file mode 100644 index 00000000..735ba2a4 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/vertex_scalar_range.py @@ -0,0 +1,12 @@ +from dataclasses_json import DataClassJsonMixin +from dataclasses import dataclass + + +@dataclass +class VertexScalarRange(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + + id: str + maximum: float + minimum: float diff --git a/tests/conftest.py b/tests/conftest.py index b4f13731..16f4fb71 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,13 +2,13 @@ from pathlib import Path from websocket import create_connection, WebSocketTimeoutException import json -from xprocess import ProcessStarter, XProcess +from xprocess import ProcessStarter, XProcess # type: ignore[import-untyped] from vtkmodules.vtkIOImage import vtkImageReader2, vtkPNGReader, vtkJPEGReader from vtkmodules.vtkImagingCore import vtkImageDifference import os import shutil import xml.etree.ElementTree as ET -from typing import Callable, Generator, Any, cast +from typing import Callable, Generator, Any from opengeodeweb_viewer import config from opengeodeweb_microservice.database.connection import get_session, init_database from opengeodeweb_microservice.database.data import Data @@ -159,7 +159,7 @@ def __init__(self, root_path: Path) -> None: self.root_path = Path(root_path) def get_xprocess_args(self) -> tuple[str, type, type]: - class Starter(ProcessStarter): + class Starter(ProcessStarter): # type: ignore terminate_on_interrupt = True pattern = "wslink: Starting factory" timeout = 10 diff --git a/tests/data/attributed_edged_curve.vtp b/tests/data/attributed_edged_curve.vtp new file mode 100644 index 00000000..7aa04b93 --- /dev/null +++ b/tests/data/attributed_edged_curve.vtp @@ -0,0 +1,22 @@ + + + + + + 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 + 0 0 0 3 0 0 3 3 0 0 3 0 0 0 4 3 0 4 3 3 4 0 3 4 1 1 1 2 1 1 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 1 2 2 1 1 3 2 1 3 2 2 3 1 2 3 4 1 1 5 1 1 5 2 1 4 2 1 4 1 3 5 1 3 5 2 3 4 2 3 1 1 3.5 1 2 3.5 + + + 0 0 0 3 0 0 3 3 0 0 3 0 0 0 4 3 0 4 3 3 4 0 3 4 1 1 1 2 1 1 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 1 2 2 1 1 3 2 1 3 2 2 3 1 2 3 4 1 1 5 1 1 5 2 1 4 2 1 4 1 3 5 1 3 5 2 3 4 2 3 1 1 3.5 1 2 3.5 + + + 0 1 1 2 2 3 3 0 0 1 1 5 5 4 4 0 1 2 2 6 6 5 5 1 3 2 2 6 6 7 7 3 4 5 5 6 6 7 7 4 0 3 3 7 7 4 4 0 8 9 9 10 10 11 11 8 12 13 13 14 14 15 15 12 16 17 17 18 18 19 19 16 8 9 9 13 13 12 12 8 12 13 13 17 17 16 16 12 9 10 10 14 14 13 13 9 13 14 14 18 18 17 17 13 11 10 10 14 14 15 15 11 15 14 14 18 18 19 19 15 8 11 11 15 15 12 12 8 12 15 15 19 19 16 16 12 20 21 21 22 22 23 23 20 20 21 21 25 25 24 24 20 21 22 22 26 26 25 25 21 23 22 22 26 26 27 27 23 24 25 25 26 26 27 27 24 20 23 23 27 27 24 24 20 16 19 19 29 29 28 28 16 + 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 + + + 0 1 1 2 2 3 3 0 0 1 1 5 5 4 4 0 1 2 2 6 6 5 5 1 3 2 2 6 6 7 7 3 4 5 5 6 6 7 7 4 0 3 3 7 7 4 4 0 8 9 9 10 10 11 11 8 12 13 13 14 14 15 15 12 16 17 17 18 18 19 19 16 8 9 9 13 13 12 12 8 12 13 13 17 17 16 16 12 9 10 10 14 14 13 13 9 13 14 14 18 18 17 17 13 11 10 10 14 14 15 15 11 15 14 14 18 18 19 19 15 8 11 11 15 15 12 12 8 12 15 15 19 19 16 16 12 20 21 21 22 22 23 23 20 20 21 21 25 25 24 24 20 21 22 22 26 26 25 25 21 23 22 22 26 26 27 27 23 24 25 25 26 26 27 27 24 20 23 23 27 27 24 24 20 16 19 19 29 29 28 28 16 + 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 + + + + diff --git a/tests/data/images/mesh/cells/cell_scalar_range.jpeg b/tests/data/images/mesh/cells/cell_scalar_range.jpeg new file mode 100644 index 00000000..d8107c96 Binary files /dev/null and b/tests/data/images/mesh/cells/cell_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/cells/vertex_scalar_range.jpeg b/tests/data/images/mesh/cells/vertex_scalar_range.jpeg new file mode 100644 index 00000000..f041a04b Binary files /dev/null and b/tests/data/images/mesh/cells/vertex_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/edges/vertex_attribute.jpeg b/tests/data/images/mesh/edges/vertex_attribute.jpeg new file mode 100644 index 00000000..99c2caed Binary files /dev/null and b/tests/data/images/mesh/edges/vertex_attribute.jpeg differ diff --git a/tests/data/images/mesh/edges/vertex_scalar_range.jpeg b/tests/data/images/mesh/edges/vertex_scalar_range.jpeg new file mode 100644 index 00000000..aac849a2 Binary files /dev/null and b/tests/data/images/mesh/edges/vertex_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/points/vertex_attribute.jpeg b/tests/data/images/mesh/points/vertex_attribute.jpeg new file mode 100644 index 00000000..7ffedaa8 Binary files /dev/null and b/tests/data/images/mesh/points/vertex_attribute.jpeg differ diff --git a/tests/data/images/mesh/points/vertex_scalar_range.jpeg b/tests/data/images/mesh/points/vertex_scalar_range.jpeg new file mode 100644 index 00000000..7d33fd37 Binary files /dev/null and b/tests/data/images/mesh/points/vertex_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/polygons/polygon_scalar_range.jpeg b/tests/data/images/mesh/polygons/polygon_scalar_range.jpeg new file mode 100644 index 00000000..6982377d Binary files /dev/null and b/tests/data/images/mesh/polygons/polygon_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/polygons/vertex_scalar_range.jpeg b/tests/data/images/mesh/polygons/vertex_scalar_range.jpeg new file mode 100644 index 00000000..7d33fd37 Binary files /dev/null and b/tests/data/images/mesh/polygons/vertex_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/polyhedra/polyhedron_scalar_range.jpeg b/tests/data/images/mesh/polyhedra/polyhedron_scalar_range.jpeg new file mode 100644 index 00000000..429eee81 Binary files /dev/null and b/tests/data/images/mesh/polyhedra/polyhedron_scalar_range.jpeg differ diff --git a/tests/data/images/mesh/polyhedra/vertex_scalar_range.jpeg b/tests/data/images/mesh/polyhedra/vertex_scalar_range.jpeg new file mode 100644 index 00000000..e723ec0f Binary files /dev/null and b/tests/data/images/mesh/polyhedra/vertex_scalar_range.jpeg differ diff --git a/tests/mesh/cells/test_mesh_cells_protocols.py b/tests/mesh/cells/test_mesh_cells_protocols.py index d38bbd3a..8782eccc 100644 --- a/tests/mesh/cells/test_mesh_cells_protocols.py +++ b/tests/mesh/cells/test_mesh_cells_protocols.py @@ -65,6 +65,13 @@ def test_cells_vertex_attribute( ) assert server.compare_image("mesh/cells/vertex_attribute.jpeg") == True + server.call( + VtkMeshCellsView.mesh_cells_prefix + + VtkMeshCellsView.mesh_cells_schemas_dict["vertex_scalar_range"]["rpc"], + [{"id": id, "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/cells/vertex_scalar_range.jpeg") == True + def test_cells_cell_attribute( server: ServerMonitor, dataset_factory: Callable[..., str] @@ -78,3 +85,10 @@ def test_cells_cell_attribute( [{"id": id, "name": "RGB_data"}], ) assert server.compare_image("mesh/cells/cell_attribute.jpeg") == True + + server.call( + VtkMeshCellsView.mesh_cells_prefix + + VtkMeshCellsView.mesh_cells_schemas_dict["cell_scalar_range"]["rpc"], + [{"id": id, "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/cells/cell_scalar_range.jpeg") == True diff --git a/tests/mesh/edges/test_mesh_edges_protocols.py b/tests/mesh/edges/test_mesh_edges_protocols.py index 114c9920..b60d9179 100644 --- a/tests/mesh/edges/test_mesh_edges_protocols.py +++ b/tests/mesh/edges/test_mesh_edges_protocols.py @@ -60,3 +60,29 @@ def test_edges_with_edged_curve( [{"id": "123456789", "visibility": False}], ) assert server.compare_image("mesh/edges/edged_curve_visibility.jpeg") == True + + +def test_edges_vertex_attribute( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + mesh_id = "123456789" + dataset_factory(id=mesh_id, viewable_file="attributed_edged_curve.vtp") + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": mesh_id}], + ) + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["vertex_attribute"]["rpc"], + [{"id": mesh_id, "name": "vertex_attribute"}], + ) + assert server.compare_image("mesh/edges/vertex_attribute.jpeg") == True + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["vertex_scalar_range"]["rpc"], + [{"id": mesh_id, "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/edges/vertex_scalar_range.jpeg") == True diff --git a/tests/mesh/points/test_mesh_points_protocols.py b/tests/mesh/points/test_mesh_points_protocols.py index 8cca6ec6..cad06dec 100644 --- a/tests/mesh/points/test_mesh_points_protocols.py +++ b/tests/mesh/points/test_mesh_points_protocols.py @@ -86,3 +86,24 @@ def test_points_with_point_set( [{"id": mesh_id, "visibility": False}], ) assert server.compare_image("mesh/points/point_set_visibility.jpeg") == True + + +def test_points_vertex_attribute( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + mesh_id = "123456789" + test_register_mesh(server, dataset_factory) + + server.call( + VtkMeshPointsView.mesh_points_prefix + + VtkMeshPointsView.mesh_points_schemas_dict["vertex_attribute"]["rpc"], + [{"id": mesh_id, "name": "lambert2SG"}], + ) + assert server.compare_image("mesh/points/vertex_attribute.jpeg") == True + + server.call( + VtkMeshPointsView.mesh_points_prefix + + VtkMeshPointsView.mesh_points_schemas_dict["vertex_scalar_range"]["rpc"], + [{"id": mesh_id, "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/points/vertex_scalar_range.jpeg") == True diff --git a/tests/mesh/polygons/test_mesh_polygons_protocols.py b/tests/mesh/polygons/test_mesh_polygons_protocols.py index 980fa9b9..85e807e0 100644 --- a/tests/mesh/polygons/test_mesh_polygons_protocols.py +++ b/tests/mesh/polygons/test_mesh_polygons_protocols.py @@ -51,6 +51,13 @@ def test_polygons_vertex_attribute( ) assert server.compare_image("mesh/polygons/vertex_attribute.jpeg") == True + server.call( + VtkMeshPolygonsView.mesh_polygons_prefix + + VtkMeshPolygonsView.mesh_polygons_schemas_dict["vertex_scalar_range"]["rpc"], + [{"id": "123456789", "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/polygons/vertex_scalar_range.jpeg") == True + def test_polygons_polygon_attribute( server: ServerMonitor, dataset_factory: Callable[..., str] @@ -70,3 +77,10 @@ def test_polygons_polygon_attribute( [{"id": "123456789", "name": "triangle_vertices"}], ) assert server.compare_image("mesh/polygons/polygon_attribute.jpeg") == True + + server.call( + VtkMeshPolygonsView.mesh_polygons_prefix + + VtkMeshPolygonsView.mesh_polygons_schemas_dict["polygon_scalar_range"]["rpc"], + [{"id": "123456789", "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/polygons/polygon_scalar_range.jpeg") == True diff --git a/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py b/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py index f1cff2c7..22453953 100644 --- a/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py +++ b/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py @@ -61,6 +61,15 @@ def test_vertex_attribute( ) assert server.compare_image("mesh/polyhedra/vertex_attribute.jpeg") == True + server.call( + VtkMeshPolyhedraView.mesh_polyhedra_prefix + + VtkMeshPolyhedraView.mesh_polyhedra_schemas_dict["vertex_scalar_range"][ + "rpc" + ], + [{"id": "123456789", "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/polyhedra/vertex_scalar_range.jpeg") == True + def test_polyhedron_attribute( server: ServerMonitor, dataset_factory: Callable[..., str] @@ -75,3 +84,12 @@ def test_polyhedron_attribute( [{"id": "123456789", "name": "toto_on_polyhedra"}], ) assert server.compare_image("mesh/polyhedra/polyhedron_attribute.jpeg") == True + + server.call( + VtkMeshPolyhedraView.mesh_polyhedra_prefix + + VtkMeshPolyhedraView.mesh_polyhedra_schemas_dict["polyhedron_scalar_range"][ + "rpc" + ], + [{"id": "123456789", "minimum": 0, "maximum": 10}], + ) + assert server.compare_image("mesh/polyhedra/polyhedron_scalar_range.jpeg") == True