diff --git a/requirements.txt b/requirements.txt index b150412..08d64bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -60,4 +60,3 @@ werkzeug==3.1.2 # flask # flask-cors -opengeodeweb-microservice==1.*,>=1.0.13 diff --git a/src/opengeodeweb_back/geode_objects/geode_graph.py b/src/opengeodeweb_back/geode_objects/geode_graph.py index 15f6e67..35d02e8 100644 --- a/src/opengeodeweb_back/geode_objects/geode_graph.py +++ b/src/opengeodeweb_back/geode_objects/geode_graph.py @@ -5,7 +5,7 @@ import opengeode as og # Local application imports -from .types import GeodeMeshType +from .types import GeodeMeshType, ViewerElementsType from .geode_vertex_set import GeodeVertexSet @@ -20,6 +20,10 @@ def __init__(self, graph: og.Graph | None = None) -> None: def geode_object_type(cls) -> GeodeMeshType: return "Graph" + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "edges" + def native_extension(self) -> str: return self.graph.native_extension() diff --git a/src/opengeodeweb_back/geode_objects/geode_grid2d.py b/src/opengeodeweb_back/geode_objects/geode_grid2d.py index f7d592e..61134d6 100644 --- a/src/opengeodeweb_back/geode_objects/geode_grid2d.py +++ b/src/opengeodeweb_back/geode_objects/geode_grid2d.py @@ -7,6 +7,7 @@ # Local application imports from .geode_mesh import GeodeMesh +from .types import ViewerElementsType class GeodeGrid2D(GeodeMesh): @@ -18,6 +19,10 @@ def is_3D(cls) -> bool: def is_viewable(cls) -> bool: return True + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polygons" + def builder(self) -> object: return None diff --git a/src/opengeodeweb_back/geode_objects/geode_grid3d.py b/src/opengeodeweb_back/geode_objects/geode_grid3d.py index 91458c9..757620f 100644 --- a/src/opengeodeweb_back/geode_objects/geode_grid3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_grid3d.py @@ -7,6 +7,7 @@ # Local application imports from .geode_mesh import GeodeMesh +from .types import ViewerElementsType class GeodeGrid3D(GeodeMesh): @@ -18,6 +19,10 @@ def is_3D(cls) -> bool: def is_viewable(cls) -> bool: return True + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polyhedra" + def builder(self) -> object: return None diff --git a/src/opengeodeweb_back/geode_objects/geode_model.py b/src/opengeodeweb_back/geode_objects/geode_model.py index 394f0d8..529fa48 100644 --- a/src/opengeodeweb_back/geode_objects/geode_model.py +++ b/src/opengeodeweb_back/geode_objects/geode_model.py @@ -6,7 +6,7 @@ import opengeode as og # Local application imports -from .types import ViewerType +from .types import ViewerType, ViewerElementsType from .geode_object import GeodeObject ComponentRegistry = dict[og.ComponentType, list[og.uuid]] @@ -17,5 +17,9 @@ class GeodeModel(GeodeObject): def viewer_type(cls) -> ViewerType: return "model" + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "default" + @abstractmethod def mesh_components(self) -> ComponentRegistry: ... diff --git a/src/opengeodeweb_back/geode_objects/geode_object.py b/src/opengeodeweb_back/geode_objects/geode_object.py index 580a846..1dcd42b 100644 --- a/src/opengeodeweb_back/geode_objects/geode_object.py +++ b/src/opengeodeweb_back/geode_objects/geode_object.py @@ -7,7 +7,7 @@ import opengeode as og # Local application imports -from .types import GeodeObjectType, ViewerType +from .types import GeodeObjectType, ViewerType, ViewerElementsType class GeodeObject(ABC): @@ -24,6 +24,10 @@ def geode_object_type(cls) -> GeodeObjectType: ... @abstractmethod def viewer_type(cls) -> ViewerType: ... + @classmethod + @abstractmethod + def viewer_elements_type(cls) -> ViewerElementsType: ... + @classmethod @abstractmethod def is_3D(cls) -> bool: ... diff --git a/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py b/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py index 846ae7a..0478760 100644 --- a/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py +++ b/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py @@ -6,7 +6,7 @@ import geode_viewables as viewables # Local application imports -from .types import GeodeMeshType +from .types import GeodeMeshType, ViewerElementsType from .geode_mesh import GeodeMesh @@ -21,6 +21,10 @@ def __init__(self, raster_image: og.RasterImage2D) -> None: def geode_object_type(cls) -> GeodeMeshType: return "RasterImage2D" + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polygons" + def native_extension(self) -> str: return self.raster_image.native_extension() diff --git a/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py b/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py index de131c7..a01bacf 100644 --- a/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py @@ -6,7 +6,7 @@ import geode_viewables as viewables # Local application imports -from .types import GeodeMeshType +from .types import GeodeMeshType, ViewerElementsType from .geode_mesh import GeodeMesh @@ -21,6 +21,10 @@ def __init__(self, raster_image: og.RasterImage3D) -> None: def geode_object_type(cls) -> GeodeMeshType: return "RasterImage3D" + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polyhedra" + def native_extension(self) -> str: return self.raster_image.native_extension() diff --git a/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py b/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py index d711203..2978272 100644 --- a/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py @@ -8,6 +8,7 @@ # Local application imports from .geode_vertex_set import GeodeVertexSet +from .types import ViewerElementsType class GeodeSolidMesh3D(GeodeVertexSet): @@ -25,6 +26,10 @@ def is_3D(cls) -> bool: def is_viewable(cls) -> bool: return True + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polyhedra" + def builder(self) -> og.SolidMeshBuilder3D: return og.SolidMeshBuilder3D.create(self.solid_mesh) diff --git a/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py b/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py index 199846f..d0b7259 100644 --- a/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +++ b/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py @@ -8,6 +8,7 @@ # Local application imports from .geode_vertex_set import GeodeVertexSet +from .types import ViewerElementsType class GeodeSurfaceMesh2D(GeodeVertexSet): @@ -27,6 +28,10 @@ def is_3D(cls) -> bool: def is_viewable(cls) -> bool: return True + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polygons" + def builder(self) -> og.SurfaceMeshBuilder2D: return og.SurfaceMeshBuilder2D.create(self.surface_mesh) diff --git a/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py b/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py index 8468c7b..f84c085 100644 --- a/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py @@ -8,6 +8,7 @@ # Local application imports from .geode_vertex_set import GeodeVertexSet +from .types import ViewerElementsType class GeodeSurfaceMesh3D(GeodeVertexSet): @@ -27,6 +28,10 @@ def is_3D(cls) -> bool: def is_viewable(cls) -> bool: return True + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "polygons" + def builder(self) -> og.SurfaceMeshBuilder3D: return og.SurfaceMeshBuilder3D.create(self.surface_mesh) diff --git a/src/opengeodeweb_back/geode_objects/geode_vertex_set.py b/src/opengeodeweb_back/geode_objects/geode_vertex_set.py index 98d623a..26b3ecd 100644 --- a/src/opengeodeweb_back/geode_objects/geode_vertex_set.py +++ b/src/opengeodeweb_back/geode_objects/geode_vertex_set.py @@ -5,7 +5,7 @@ import opengeode as og # Local application imports -from .types import GeodeMeshType +from .types import GeodeMeshType, ViewerElementsType from .geode_mesh import GeodeMesh @@ -22,6 +22,10 @@ def __init__(self, vertex_set: og.VertexSet | None = None) -> None: def geode_object_type(cls) -> GeodeMeshType: return "VertexSet" + @classmethod + def viewer_elements_type(cls) -> ViewerElementsType: + return "points" + def native_extension(self) -> str: return self.vertex_set.native_extension() diff --git a/src/opengeodeweb_back/geode_objects/types.py b/src/opengeodeweb_back/geode_objects/types.py index 57fbccf..0faa76b 100644 --- a/src/opengeodeweb_back/geode_objects/types.py +++ b/src/opengeodeweb_back/geode_objects/types.py @@ -73,3 +73,5 @@ def geode_object_type(value: str) -> GeodeObjectType: ViewerType = Literal["mesh", "model"] + +ViewerElementsType = Literal["points", "edges", "polygons", "polyhedra", "default"] diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index f6c9d95..6341911 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -237,6 +237,7 @@ def generate_native_viewable_and_light_viewable_from_object( data = Data.create( geode_object=geode_object.geode_object_type(), viewer_object=geode_object.viewer_type(), + viewer_elements_type=geode_object.viewer_elements_type(), ) data_path = create_data_folder_from_id(data.id) return save_all_viewables_and_return_info(geode_object, data, data_path) @@ -249,6 +250,7 @@ def generate_native_viewable_and_light_viewable_from_file( data = Data.create( geode_object=geode_object_type, viewer_object=generic_geode_object.viewer_type(), + viewer_elements_type=generic_geode_object.viewer_elements_type(), input_file=input_file, ) diff --git a/tests/test_models_routes.py b/tests/test_models_routes.py index cc55562..d6fbf7f 100644 --- a/tests/test_models_routes.py +++ b/tests/test_models_routes.py @@ -61,6 +61,7 @@ def test_export_project_route(client: FlaskClient, tmp_path: Path) -> None: id="test_data_1", geode_object="BRep", viewer_object="BRep", + viewer_elements_type="default", input_file="test_native.txt", native_file="test_native.txt", additional_files=[], @@ -69,6 +70,7 @@ def test_export_project_route(client: FlaskClient, tmp_path: Path) -> None: id="test_data_2", geode_object="Section", viewer_object="Section", + viewer_elements_type="default", input_file="test_input.txt", native_file="test_native2.txt", additional_files=[], @@ -129,7 +131,7 @@ def test_import_project_route(client: FlaskClient, tmp_path: Path) -> None: temp_db = tmp_path / "temp_project.db" conn = sqlite3.connect(str(temp_db)) conn.execute( - "CREATE TABLE datas (id TEXT PRIMARY KEY, geode_object TEXT, viewer_object TEXT, native_file TEXT, " + "CREATE TABLE datas (id TEXT PRIMARY KEY, geode_object TEXT, viewer_object TEXT, viewer_elements_type TEXT, native_file TEXT, " "viewable_file TEXT, light_viewable_file TEXT, input_file TEXT, additional_files TEXT)" ) conn.commit() diff --git a/tests/test_routes.py b/tests/test_routes.py index d40c68a..f669f55 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -204,6 +204,7 @@ def test_texture_coordinates(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodePolygonalSurface3D.geode_object_type(), viewer_object=GeodePolygonalSurface3D.viewer_type(), + viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(), input_file=file, ) data.native_file = file @@ -232,6 +233,7 @@ def test_vertex_attribute_names(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodePolygonalSurface3D.geode_object_type(), viewer_object=GeodePolygonalSurface3D.viewer_type(), + viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(), input_file=file, ) data.native_file = file @@ -261,6 +263,7 @@ def test_cell_attribute_names(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodeRegularGrid2D.geode_object_type(), viewer_object=GeodeRegularGrid2D.viewer_type(), + viewer_elements_type=GeodeRegularGrid2D.viewer_elements_type(), input_file=file, ) data.native_file = file @@ -290,6 +293,7 @@ def test_polygon_attribute_names(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodePolygonalSurface3D.geode_object_type(), viewer_object=GeodePolygonalSurface3D.viewer_type(), + viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(), input_file=file, ) data.native_file = file @@ -319,6 +323,7 @@ def test_polyhedron_attribute_names(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodePolyhedralSolid3D.geode_object_type(), viewer_object=GeodePolyhedralSolid3D.viewer_type(), + viewer_elements_type=GeodePolyhedralSolid3D.viewer_elements_type(), input_file=file, ) data.native_file = file @@ -352,6 +357,7 @@ def test_edge_attribute_names(client: FlaskClient, test_id: str) -> None: data = Data.create( geode_object=GeodeEdgedCurve3D.geode_object_type(), viewer_object=GeodeEdgedCurve3D.viewer_type(), + viewer_elements_type=GeodeEdgedCurve3D.viewer_elements_type(), input_file=file, ) data.native_file = file diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index 5da9bbd..792f336 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -111,6 +111,7 @@ def test_save_all_viewables_and_return_info(client: FlaskClient) -> None: data_entry = Data.create( geode_object=geode_object.geode_object_type(), viewer_object=geode_object.viewer_type(), + viewer_elements_type=geode_object.viewer_elements_type(), input_file=input_file, additional_files=additional_files, ) @@ -155,6 +156,7 @@ def test_save_all_viewables_commits_to_db(client: FlaskClient) -> None: data_entry = Data.create( geode_object=geode_object.geode_object_type(), viewer_object=geode_object.viewer_type(), + viewer_elements_type=geode_object.viewer_elements_type(), input_file=input_file, additional_files=[], )