diff --git a/opengeodeweb_viewer_schemas.json b/opengeodeweb_viewer_schemas.json index 7976533..13e12ff 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 229c58f..065674a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.0.12rc1 diff --git a/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py index 9e25c0b..c402143 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.displayScalarRangeOnVertices(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.displayScalarRangeOnCells(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 c77862a..20497c4 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 0000000..9efd4c4 --- /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 0000000..5013762 --- /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 0000000..68a8cab --- /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 0000000..735ba2a --- /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 1f0f62c..b5e143d 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,15 @@ 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_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.displayScalarRangeOnVertices(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 27cf1d7..1c778fe 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 0000000..68a8cab --- /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 0000000..735ba2a --- /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 0b54166..e8110db 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py @@ -146,3 +146,19 @@ def displayAttributeOnCells(self, data_id: str, name: str) -> None: mapper.ScalarVisibilityOn() mapper.SetScalarModeToUseCellData() mapper.SetScalarRange(cells.GetScalars().GetRange()) + + def displayScalarRangeOnVertices( + self, data_id: str, minimum: float, maximum: float + ) -> None: + mapper = self.get_object(data_id).mapper + mapper.ScalarVisibilityOn() + mapper.SetScalarModeToUsePointData() + mapper.SetScalarRange(minimum, maximum) + + def displayScalarRangeOnCells( + self, data_id: str, minimum: float, maximum: float + ) -> None: + mapper = self.get_object(data_id).mapper + mapper.ScalarVisibilityOn() + mapper.SetScalarModeToUseCellData() + 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 81ed131..9ed8c45 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.displayScalarRangeOnVertices(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 67bb8fc..e4c1430 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 0000000..68a8cab --- /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 0000000..735ba2a --- /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 78c5660..3bfff46 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.displayScalarRangeOnVertices(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.displayScalarRangeOnCells(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 4085e8c..ea22f65 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 0000000..75c20f1 --- /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 0000000..c90a148 --- /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 0000000..68a8cab --- /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 0000000..735ba2a --- /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 1d87bfd..b121ca8 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.displayScalarRangeOnVertices(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.displayScalarRangeOnCells(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 40aad4f..1654103 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 0000000..31d646d --- /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 0000000..16b8dae --- /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 0000000..68a8cab --- /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 0000000..735ba2a --- /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 b4f1373..16f4fb7 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/images/mesh/polygons/scalar_range.jpeg b/tests/data/images/mesh/polygons/scalar_range.jpeg new file mode 100644 index 0000000..6982377 Binary files /dev/null and b/tests/data/images/mesh/polygons/scalar_range.jpeg differ diff --git a/tests/mesh/polygons/test_mesh_polygons_protocols.py b/tests/mesh/polygons/test_mesh_polygons_protocols.py index 980fa9b..d9ac6d7 100644 --- a/tests/mesh/polygons/test_mesh_polygons_protocols.py +++ b/tests/mesh/polygons/test_mesh_polygons_protocols.py @@ -70,3 +70,28 @@ def test_polygons_polygon_attribute( [{"id": "123456789", "name": "triangle_vertices"}], ) assert server.compare_image("mesh/polygons/polygon_attribute.jpeg") == True + + +def test_polygons_scalar_range( + server: ServerMonitor, dataset_factory: Callable[..., str] +) -> None: + + dataset_factory(id="123456789", viewable_file="triangulated_surface2d.vtp") + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": "123456789"}], + ) + + server.call( + VtkMeshPolygonsView.mesh_polygons_prefix + + VtkMeshPolygonsView.mesh_polygons_schemas_dict["polygon_attribute"]["rpc"], + [{"id": "123456789", "name": "triangle_vertices"}], + ) + + 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/scalar_range.jpeg") == True