OpenGeodeWeb-Back 5.10.0rc22__py3-none-any.whl → 5.14.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. opengeodeweb_back/app.py +173 -0
  2. opengeodeweb_back/app_config.py +1 -10
  3. opengeodeweb_back/geode_functions.py +44 -283
  4. opengeodeweb_back/geode_objects/__init__.py +61 -0
  5. opengeodeweb_back/geode_objects/geode_brep.py +102 -0
  6. opengeodeweb_back/geode_objects/geode_cross_section.py +75 -0
  7. opengeodeweb_back/geode_objects/geode_edged_curve2d.py +107 -0
  8. opengeodeweb_back/geode_objects/geode_edged_curve3d.py +107 -0
  9. opengeodeweb_back/geode_objects/geode_graph.py +76 -0
  10. opengeodeweb_back/geode_objects/geode_grid2d.py +30 -0
  11. opengeodeweb_back/geode_objects/geode_grid3d.py +30 -0
  12. opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py +71 -0
  13. opengeodeweb_back/geode_objects/geode_implicit_cross_section.py +81 -0
  14. opengeodeweb_back/geode_objects/geode_implicit_structural_model.py +85 -0
  15. opengeodeweb_back/geode_objects/geode_light_regular_grid2d.py +72 -0
  16. opengeodeweb_back/geode_objects/geode_light_regular_grid3d.py +72 -0
  17. opengeodeweb_back/geode_objects/geode_mesh.py +19 -0
  18. opengeodeweb_back/geode_objects/geode_model.py +22 -0
  19. opengeodeweb_back/geode_objects/geode_object.py +78 -0
  20. opengeodeweb_back/geode_objects/geode_point_set2d.py +105 -0
  21. opengeodeweb_back/geode_objects/geode_point_set3d.py +105 -0
  22. opengeodeweb_back/geode_objects/geode_polygonal_surface2d.py +73 -0
  23. opengeodeweb_back/geode_objects/geode_polygonal_surface3d.py +73 -0
  24. opengeodeweb_back/geode_objects/geode_polyhedral_solid3d.py +73 -0
  25. opengeodeweb_back/geode_objects/geode_raster_image2d.py +83 -0
  26. opengeodeweb_back/geode_objects/geode_raster_image3d.py +83 -0
  27. opengeodeweb_back/geode_objects/geode_regular_grid2d.py +78 -0
  28. opengeodeweb_back/geode_objects/geode_regular_grid3d.py +78 -0
  29. opengeodeweb_back/geode_objects/geode_section.py +106 -0
  30. opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +61 -0
  31. opengeodeweb_back/geode_objects/geode_structural_model.py +78 -0
  32. opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +66 -0
  33. opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +66 -0
  34. opengeodeweb_back/geode_objects/geode_tetrahedral_solid3d.py +73 -0
  35. opengeodeweb_back/geode_objects/geode_triangulated_surface2d.py +77 -0
  36. opengeodeweb_back/geode_objects/geode_triangulated_surface3d.py +77 -0
  37. opengeodeweb_back/geode_objects/geode_vertex_set.py +81 -0
  38. opengeodeweb_back/geode_objects/types.py +75 -0
  39. opengeodeweb_back/routes/blueprint_routes.py +352 -231
  40. opengeodeweb_back/routes/create/blueprint_create.py +121 -0
  41. opengeodeweb_back/routes/create/schemas/__init__.py +3 -0
  42. opengeodeweb_back/routes/create/schemas/create_aoi.json +45 -0
  43. opengeodeweb_back/routes/create/schemas/create_aoi.py +25 -0
  44. opengeodeweb_back/routes/create/schemas/create_point.json +29 -0
  45. opengeodeweb_back/routes/create/schemas/create_point.py +13 -0
  46. opengeodeweb_back/routes/create/schemas/create_voi.json +36 -0
  47. opengeodeweb_back/routes/create/schemas/create_voi.py +24 -0
  48. opengeodeweb_back/routes/models/blueprint_models.py +27 -27
  49. opengeodeweb_back/routes/models/schemas/__init__.py +2 -0
  50. opengeodeweb_back/routes/models/schemas/mesh_components.py +10 -0
  51. opengeodeweb_back/routes/models/schemas/vtm_component_indices.py +10 -0
  52. opengeodeweb_back/routes/schemas/__init__.py +17 -0
  53. opengeodeweb_back/routes/schemas/allowed_files.json +6 -8
  54. opengeodeweb_back/routes/schemas/allowed_files.py +10 -0
  55. opengeodeweb_back/routes/schemas/allowed_objects.json +1 -8
  56. opengeodeweb_back/routes/schemas/allowed_objects.py +10 -0
  57. opengeodeweb_back/routes/schemas/cell_attribute_names.json +13 -0
  58. opengeodeweb_back/routes/schemas/cell_attribute_names.py +10 -0
  59. opengeodeweb_back/routes/schemas/export_project.json +21 -0
  60. opengeodeweb_back/routes/schemas/export_project.py +12 -0
  61. opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +2 -2
  62. opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +11 -0
  63. opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +2 -2
  64. opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +10 -0
  65. opengeodeweb_back/routes/schemas/import_project.json +10 -0
  66. opengeodeweb_back/routes/schemas/import_project.py +10 -0
  67. opengeodeweb_back/routes/schemas/inspect_file.json +2 -2
  68. opengeodeweb_back/routes/schemas/inspect_file.py +11 -0
  69. opengeodeweb_back/routes/schemas/kill.json +10 -0
  70. opengeodeweb_back/routes/schemas/kill.py +10 -0
  71. opengeodeweb_back/routes/schemas/missing_files.json +2 -2
  72. opengeodeweb_back/routes/schemas/missing_files.py +11 -0
  73. opengeodeweb_back/routes/schemas/ping.py +10 -0
  74. opengeodeweb_back/routes/schemas/polygon_attribute_names.py +10 -0
  75. opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +10 -0
  76. opengeodeweb_back/routes/schemas/save_viewable_file.json +2 -2
  77. opengeodeweb_back/routes/schemas/save_viewable_file.py +11 -0
  78. opengeodeweb_back/routes/schemas/texture_coordinates.py +10 -0
  79. opengeodeweb_back/routes/schemas/upload_file.py +11 -0
  80. opengeodeweb_back/routes/schemas/vertex_attribute_names.py +10 -0
  81. opengeodeweb_back/test_utils.py +9 -3
  82. opengeodeweb_back/utils_functions.py +93 -88
  83. {opengeodeweb_back-5.10.0rc22.dist-info → opengeodeweb_back-5.14.1.dist-info}/METADATA +17 -22
  84. opengeodeweb_back-5.14.1.dist-info/RECORD +98 -0
  85. opengeodeweb_back-5.14.1.dist-info/entry_points.txt +2 -0
  86. opengeodeweb_back/geode_objects.py +0 -570
  87. opengeodeweb_back/routes/schemas/create_point.json +0 -29
  88. opengeodeweb_back-5.10.0rc22.dist-info/RECORD +0 -30
  89. {opengeodeweb_back-5.10.0rc22.dist-info → opengeodeweb_back-5.14.1.dist-info}/WHEEL +0 -0
  90. {opengeodeweb_back-5.10.0rc22.dist-info → opengeodeweb_back-5.14.1.dist-info}/licenses/LICENSE +0 -0
  91. {opengeodeweb_back-5.10.0rc22.dist-info → opengeodeweb_back-5.14.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,78 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_geosciences as og_geosciences
7
+ import opengeode_inspector as og_inspector
8
+ import geode_viewables as viewables
9
+
10
+ # Local application imports
11
+ from .types import GeodeModelType
12
+ from .geode_brep import GeodeBRep
13
+
14
+
15
+ class GeodeStructuralModel(GeodeBRep):
16
+ structural_model: og_geosciences.StructuralModel
17
+
18
+ def __init__(
19
+ self, structural_model: og_geosciences.StructuralModel | None = None
20
+ ) -> None:
21
+ self.structural_model = (
22
+ structural_model
23
+ if structural_model is not None
24
+ else og_geosciences.StructuralModel()
25
+ )
26
+ super().__init__(self.structural_model)
27
+
28
+ @classmethod
29
+ def geode_object_type(cls) -> GeodeModelType:
30
+ return "StructuralModel"
31
+
32
+ def native_extension(self) -> str:
33
+ return self.structural_model.native_extension()
34
+
35
+ def builder(self) -> og_geosciences.StructuralModelBuilder:
36
+ return og_geosciences.StructuralModelBuilder(self.structural_model)
37
+
38
+ @classmethod
39
+ def load(cls, filename: str) -> GeodeStructuralModel:
40
+ return GeodeStructuralModel(og_geosciences.load_structural_model(filename))
41
+
42
+ @classmethod
43
+ def additional_files(cls, filename: str) -> og.AdditionalFiles:
44
+ return og_geosciences.structural_model_additional_files(filename)
45
+
46
+ @classmethod
47
+ def is_loadable(cls, filename: str) -> og.Percentage:
48
+ return og_geosciences.is_structural_model_loadable(filename)
49
+
50
+ @classmethod
51
+ def input_extensions(cls) -> list[str]:
52
+ return og_geosciences.StructuralModelInputFactory.list_creators()
53
+
54
+ @classmethod
55
+ def output_extensions(cls) -> list[str]:
56
+ return og_geosciences.StructuralModelOutputFactory.list_creators()
57
+
58
+ @classmethod
59
+ def object_priority(cls, filename: str) -> int:
60
+ return og_geosciences.structural_model_object_priority(filename)
61
+
62
+ def is_saveable(self, filename: str) -> bool:
63
+ return og_geosciences.is_structural_model_saveable(
64
+ self.structural_model, filename
65
+ )
66
+
67
+ def save(self, filename: str) -> list[str]:
68
+ return og_geosciences.save_structural_model(self.structural_model, filename)
69
+
70
+ def save_viewable(self, filename_without_extension: str) -> str:
71
+ return viewables.save_viewable_structural_model(
72
+ self.structural_model, filename_without_extension
73
+ )
74
+
75
+ def save_light_viewable(self, filename_without_extension: str) -> str:
76
+ return viewables.save_light_viewable_structural_model(
77
+ self.structural_model, filename_without_extension
78
+ )
@@ -0,0 +1,66 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_geosciences as og_geosciences
7
+ import opengeode_inspector as og_inspector
8
+ import geode_viewables as viewables
9
+
10
+ # Local application imports
11
+ from .types import GeodeMeshType
12
+ from .geode_vertex_set import GeodeVertexSet
13
+
14
+
15
+ class GeodeSurfaceMesh2D(GeodeVertexSet):
16
+ surface_mesh: og.SurfaceMesh2D
17
+
18
+ def __init__(self, surface_mesh: og.SurfaceMesh2D | None = None) -> None:
19
+ self.surface_mesh = (
20
+ surface_mesh if surface_mesh is not None else og.SurfaceMesh2D.create()
21
+ )
22
+ super().__init__(self.surface_mesh)
23
+
24
+ @classmethod
25
+ def is_3D(cls) -> bool:
26
+ return False
27
+
28
+ @classmethod
29
+ def is_viewable(cls) -> bool:
30
+ return True
31
+
32
+ def builder(self) -> og.SurfaceMeshBuilder2D:
33
+ return og.SurfaceMeshBuilder2D.create(self.surface_mesh)
34
+
35
+ def inspect(self) -> og_inspector.SurfaceInspectionResult:
36
+ return og_inspector.inspect_surface2D(self.surface_mesh)
37
+
38
+ def assign_crs(
39
+ self, crs_name: str, info: og_geosciences.GeographicCoordinateSystemInfo
40
+ ) -> None:
41
+ builder = self.builder()
42
+ og_geosciences.assign_surface_mesh_geographic_coordinate_system_info2D(
43
+ self.surface_mesh, builder, crs_name, info
44
+ )
45
+
46
+ def convert_crs(
47
+ self, crs_name: str, info: og_geosciences.GeographicCoordinateSystemInfo
48
+ ) -> None:
49
+ builder = self.builder()
50
+ og_geosciences.convert_surface_mesh_coordinate_reference_system2D(
51
+ self.surface_mesh, builder, crs_name, info
52
+ )
53
+
54
+ def create_crs(
55
+ self, crs_name: str, input: og.CoordinateSystem2D, output: og.CoordinateSystem2D
56
+ ) -> None:
57
+ builder = self.builder()
58
+ og.create_surface_mesh_coordinate_system2D(
59
+ self.surface_mesh, builder, crs_name, input, output
60
+ )
61
+
62
+ def polygon_attribute_manager(self) -> og.AttributeManager:
63
+ return self.surface_mesh.polygon_attribute_manager()
64
+
65
+ def texture_manager(self) -> og.TextureManager2D:
66
+ return self.surface_mesh.texture_manager()
@@ -0,0 +1,66 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_geosciences as og_geosciences
7
+ import opengeode_inspector as og_inspector
8
+ import geode_viewables as viewables
9
+
10
+ # Local application imports
11
+ from .types import GeodeMeshType
12
+ from .geode_vertex_set import GeodeVertexSet
13
+
14
+
15
+ class GeodeSurfaceMesh3D(GeodeVertexSet):
16
+ surface_mesh: og.SurfaceMesh3D
17
+
18
+ def __init__(self, surface_mesh: og.SurfaceMesh3D | None = None) -> None:
19
+ self.surface_mesh = (
20
+ surface_mesh if surface_mesh is not None else og.SurfaceMesh3D.create()
21
+ )
22
+ super().__init__(self.surface_mesh)
23
+
24
+ @classmethod
25
+ def is_3D(cls) -> bool:
26
+ return True
27
+
28
+ @classmethod
29
+ def is_viewable(cls) -> bool:
30
+ return True
31
+
32
+ def builder(self) -> og.SurfaceMeshBuilder3D:
33
+ return og.SurfaceMeshBuilder3D.create(self.surface_mesh)
34
+
35
+ def inspect(self) -> og_inspector.SurfaceInspectionResult:
36
+ return og_inspector.inspect_surface3D(self.surface_mesh)
37
+
38
+ def assign_crs(
39
+ self, crs_name: str, info: og_geosciences.GeographicCoordinateSystemInfo
40
+ ) -> None:
41
+ builder = self.builder()
42
+ og_geosciences.assign_surface_mesh_geographic_coordinate_system_info3D(
43
+ self.surface_mesh, builder, crs_name, info
44
+ )
45
+
46
+ def convert_crs(
47
+ self, crs_name: str, info: og_geosciences.GeographicCoordinateSystemInfo
48
+ ) -> None:
49
+ builder = self.builder()
50
+ og_geosciences.convert_surface_mesh_coordinate_reference_system3D(
51
+ self.surface_mesh, builder, crs_name, info
52
+ )
53
+
54
+ def create_crs(
55
+ self, crs_name: str, input: og.CoordinateSystem2D, output: og.CoordinateSystem2D
56
+ ) -> None:
57
+ builder = self.builder()
58
+ og.create_surface_mesh_coordinate_system3D(
59
+ self.surface_mesh, builder, crs_name, input, output
60
+ )
61
+
62
+ def polygon_attribute_manager(self) -> og.AttributeManager:
63
+ return self.surface_mesh.polygon_attribute_manager()
64
+
65
+ def texture_manager(self) -> og.TextureManager2D:
66
+ return self.surface_mesh.texture_manager()
@@ -0,0 +1,73 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_inspector as og_inspector
7
+ import geode_viewables as viewables
8
+
9
+ # Local application imports
10
+ from .types import GeodeMeshType
11
+ from .geode_solid_mesh3d import GeodeSolidMesh3D
12
+
13
+
14
+ class GeodeTetrahedralSolid3D(GeodeSolidMesh3D):
15
+ tetrahedral_solid: og.TetrahedralSolid3D
16
+
17
+ def __init__(self, tetrahedral_solid: og.TetrahedralSolid3D | None = None) -> None:
18
+ self.tetrahedral_solid = (
19
+ tetrahedral_solid
20
+ if tetrahedral_solid is not None
21
+ else og.TetrahedralSolid3D.create()
22
+ )
23
+ super().__init__(self.tetrahedral_solid)
24
+
25
+ @classmethod
26
+ def geode_object_type(cls) -> GeodeMeshType:
27
+ return "TetrahedralSolid3D"
28
+
29
+ def native_extension(self) -> str:
30
+ return self.tetrahedral_solid.native_extension()
31
+
32
+ def builder(self) -> og.TetrahedralSolidBuilder3D:
33
+ return og.TetrahedralSolidBuilder3D.create(self.tetrahedral_solid)
34
+
35
+ @classmethod
36
+ def load(cls, filename: str) -> GeodeTetrahedralSolid3D:
37
+ return GeodeTetrahedralSolid3D(og.load_tetrahedral_solid3D(filename))
38
+
39
+ @classmethod
40
+ def additional_files(cls, filename: str) -> og.AdditionalFiles:
41
+ return og.tetrahedral_solid_additional_files3D(filename)
42
+
43
+ @classmethod
44
+ def is_loadable(cls, filename: str) -> og.Percentage:
45
+ return og.is_tetrahedral_solid_loadable3D(filename)
46
+
47
+ @classmethod
48
+ def input_extensions(cls) -> list[str]:
49
+ return og.TetrahedralSolidInputFactory3D.list_creators()
50
+
51
+ @classmethod
52
+ def output_extensions(cls) -> list[str]:
53
+ return og.TetrahedralSolidOutputFactory3D.list_creators()
54
+
55
+ @classmethod
56
+ def object_priority(cls, filename: str) -> int:
57
+ return og.tetrahedral_solid_object_priority3D(filename)
58
+
59
+ def is_saveable(self, filename: str) -> bool:
60
+ return og.is_tetrahedral_solid_saveable3D(self.tetrahedral_solid, filename)
61
+
62
+ def save(self, filename: str) -> list[str]:
63
+ return og.save_tetrahedral_solid3D(self.tetrahedral_solid, filename)
64
+
65
+ def save_viewable(self, filename_without_extension: str) -> str:
66
+ return viewables.save_viewable_tetrahedral_solid3D(
67
+ self.tetrahedral_solid, filename_without_extension
68
+ )
69
+
70
+ def save_light_viewable(self, filename_without_extension: str) -> str:
71
+ return viewables.save_light_viewable_tetrahedral_solid3D(
72
+ self.tetrahedral_solid, filename_without_extension
73
+ )
@@ -0,0 +1,77 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_inspector as og_inspector
7
+ import geode_viewables as viewables
8
+
9
+ # Local application imports
10
+ from .types import GeodeMeshType
11
+ from .geode_surface_mesh2d import GeodeSurfaceMesh2D
12
+
13
+
14
+ class GeodeTriangulatedSurface2D(GeodeSurfaceMesh2D):
15
+ triangulated_surface: og.TriangulatedSurface2D
16
+
17
+ def __init__(
18
+ self, triangulated_surface: og.TriangulatedSurface2D | None = None
19
+ ) -> None:
20
+ self.triangulated_surface = (
21
+ triangulated_surface
22
+ if triangulated_surface is not None
23
+ else og.TriangulatedSurface2D.create()
24
+ )
25
+ super().__init__(self.triangulated_surface)
26
+
27
+ @classmethod
28
+ def geode_object_type(cls) -> GeodeMeshType:
29
+ return "TriangulatedSurface2D"
30
+
31
+ def native_extension(self) -> str:
32
+ return self.triangulated_surface.native_extension()
33
+
34
+ def builder(self) -> og.TriangulatedSurfaceBuilder2D:
35
+ return og.TriangulatedSurfaceBuilder2D.create(self.triangulated_surface)
36
+
37
+ @classmethod
38
+ def load(cls, filename: str) -> GeodeTriangulatedSurface2D:
39
+ return GeodeTriangulatedSurface2D(og.load_triangulated_surface2D(filename))
40
+
41
+ @classmethod
42
+ def additional_files(cls, filename: str) -> og.AdditionalFiles:
43
+ return og.triangulated_surface_additional_files2D(filename)
44
+
45
+ @classmethod
46
+ def is_loadable(cls, filename: str) -> og.Percentage:
47
+ return og.is_triangulated_surface_loadable2D(filename)
48
+
49
+ @classmethod
50
+ def input_extensions(cls) -> list[str]:
51
+ return og.TriangulatedSurfaceInputFactory2D.list_creators()
52
+
53
+ @classmethod
54
+ def output_extensions(cls) -> list[str]:
55
+ return og.TriangulatedSurfaceOutputFactory2D.list_creators()
56
+
57
+ @classmethod
58
+ def object_priority(cls, filename: str) -> int:
59
+ return og.triangulated_surface_object_priority2D(filename)
60
+
61
+ def is_saveable(self, filename: str) -> bool:
62
+ return og.is_triangulated_surface_saveable2D(
63
+ self.triangulated_surface, filename
64
+ )
65
+
66
+ def save(self, filename: str) -> list[str]:
67
+ return og.save_triangulated_surface2D(self.triangulated_surface, filename)
68
+
69
+ def save_viewable(self, filename_without_extension: str) -> str:
70
+ return viewables.save_viewable_triangulated_surface2D(
71
+ self.triangulated_surface, filename_without_extension
72
+ )
73
+
74
+ def save_light_viewable(self, filename_without_extension: str) -> str:
75
+ return viewables.save_light_viewable_triangulated_surface2D(
76
+ self.triangulated_surface, filename_without_extension
77
+ )
@@ -0,0 +1,77 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_inspector as og_inspector
7
+ import geode_viewables as viewables
8
+
9
+ # Local application imports
10
+ from .types import GeodeMeshType
11
+ from .geode_surface_mesh3d import GeodeSurfaceMesh3D
12
+
13
+
14
+ class GeodeTriangulatedSurface3D(GeodeSurfaceMesh3D):
15
+ triangulated_surface: og.TriangulatedSurface3D
16
+
17
+ def __init__(
18
+ self, triangulated_surface: og.TriangulatedSurface3D | None = None
19
+ ) -> None:
20
+ self.triangulated_surface = (
21
+ triangulated_surface
22
+ if triangulated_surface is not None
23
+ else og.TriangulatedSurface3D.create()
24
+ )
25
+ super().__init__(self.triangulated_surface)
26
+
27
+ @classmethod
28
+ def geode_object_type(cls) -> GeodeMeshType:
29
+ return "TriangulatedSurface3D"
30
+
31
+ def native_extension(self) -> str:
32
+ return self.triangulated_surface.native_extension()
33
+
34
+ def builder(self) -> og.TriangulatedSurfaceBuilder3D:
35
+ return og.TriangulatedSurfaceBuilder3D.create(self.triangulated_surface)
36
+
37
+ @classmethod
38
+ def load(cls, filename: str) -> GeodeTriangulatedSurface3D:
39
+ return GeodeTriangulatedSurface3D(og.load_triangulated_surface3D(filename))
40
+
41
+ @classmethod
42
+ def additional_files(cls, filename: str) -> og.AdditionalFiles:
43
+ return og.triangulated_surface_additional_files3D(filename)
44
+
45
+ @classmethod
46
+ def is_loadable(cls, filename: str) -> og.Percentage:
47
+ return og.is_triangulated_surface_loadable3D(filename)
48
+
49
+ @classmethod
50
+ def input_extensions(cls) -> list[str]:
51
+ return og.TriangulatedSurfaceInputFactory3D.list_creators()
52
+
53
+ @classmethod
54
+ def output_extensions(cls) -> list[str]:
55
+ return og.TriangulatedSurfaceOutputFactory3D.list_creators()
56
+
57
+ @classmethod
58
+ def object_priority(cls, filename: str) -> int:
59
+ return og.triangulated_surface_object_priority3D(filename)
60
+
61
+ def is_saveable(self, filename: str) -> bool:
62
+ return og.is_triangulated_surface_saveable3D(
63
+ self.triangulated_surface, filename
64
+ )
65
+
66
+ def save(self, filename: str) -> list[str]:
67
+ return og.save_triangulated_surface3D(self.triangulated_surface, filename)
68
+
69
+ def save_viewable(self, filename_without_extension: str) -> str:
70
+ return viewables.save_viewable_triangulated_surface3D(
71
+ self.triangulated_surface, filename_without_extension
72
+ )
73
+
74
+ def save_light_viewable(self, filename_without_extension: str) -> str:
75
+ return viewables.save_light_viewable_triangulated_surface3D(
76
+ self.triangulated_surface, filename_without_extension
77
+ )
@@ -0,0 +1,81 @@
1
+ # Standard library imports
2
+ from __future__ import annotations
3
+
4
+ # Third party imports
5
+ import opengeode as og
6
+ import opengeode_inspector as og_inspector
7
+ import geode_viewables as viewables
8
+
9
+ # Local application imports
10
+ from .types import GeodeMeshType, ViewerType
11
+ from .geode_mesh import GeodeMesh
12
+
13
+
14
+ class GeodeVertexSet(GeodeMesh):
15
+ vertex_set: og.VertexSet
16
+
17
+ def __init__(self, vertex_set: og.VertexSet | None = None) -> None:
18
+ self.vertex_set = (
19
+ vertex_set if vertex_set is not None else og.VertexSet.create()
20
+ )
21
+ super().__init__(self.vertex_set)
22
+
23
+ @classmethod
24
+ def geode_object_type(cls) -> GeodeMeshType:
25
+ return "VertexSet"
26
+
27
+ def native_extension(self) -> str:
28
+ return self.vertex_set.native_extension()
29
+
30
+ @classmethod
31
+ def is_3D(cls) -> bool:
32
+ return False
33
+
34
+ @classmethod
35
+ def is_viewable(cls) -> bool:
36
+ return False
37
+
38
+ def builder(self) -> og.VertexSetBuilder:
39
+ return og.VertexSetBuilder.create(self.vertex_set)
40
+
41
+ @classmethod
42
+ def load(cls, filename: str) -> GeodeVertexSet:
43
+ return GeodeVertexSet(og.load_vertex_set(filename))
44
+
45
+ @classmethod
46
+ def additional_files(cls, filename: str) -> og.AdditionalFiles:
47
+ return og.vertex_set_additional_files(filename)
48
+
49
+ @classmethod
50
+ def is_loadable(cls, filename: str) -> og.Percentage:
51
+ return og.is_vertex_set_loadable(filename)
52
+
53
+ @classmethod
54
+ def input_extensions(cls) -> list[str]:
55
+ return og.VertexSetInputFactory.list_creators()
56
+
57
+ @classmethod
58
+ def output_extensions(cls) -> list[str]:
59
+ return og.VertexSetOutputFactory.list_creators()
60
+
61
+ @classmethod
62
+ def object_priority(cls, filename: str) -> int:
63
+ return og.vertex_set_object_priority(filename)
64
+
65
+ def is_saveable(self, filename: str) -> bool:
66
+ return og.is_vertex_set_saveable(self.vertex_set, filename)
67
+
68
+ def save(self, filename: str) -> list[str]:
69
+ return og.save_vertex_set(self.vertex_set, filename)
70
+
71
+ def save_viewable(self, filename_without_extension: str) -> str:
72
+ return ""
73
+
74
+ def save_light_viewable(self, filename_without_extension: str) -> str:
75
+ return ""
76
+
77
+ def inspect(self) -> object:
78
+ return None
79
+
80
+ def vertex_attribute_manager(self) -> og.AttributeManager:
81
+ return self.vertex_set.vertex_attribute_manager()
@@ -0,0 +1,75 @@
1
+ # Standard library imports
2
+ from typing import Literal, get_args, cast
3
+
4
+ # Third party imports
5
+
6
+ # Local application imports
7
+
8
+ GeodePointMeshType = Literal[
9
+ "PointSet2D",
10
+ "PointSet3D",
11
+ ]
12
+ GeodeEdgeMeshType = Literal[
13
+ "EdgedCurve2D",
14
+ "EdgedCurve3D",
15
+ ]
16
+ GeodePolygonMeshType = Literal[
17
+ "RasterImage2D",
18
+ "PolygonalSurface2D",
19
+ "PolygonalSurface3D",
20
+ "TriangulatedSurface2D",
21
+ "TriangulatedSurface3D",
22
+ "RegularGrid2D",
23
+ "LightRegularGrid2D",
24
+ ]
25
+ GeodePolyhedronMeshType = Literal[
26
+ "RasterImage3D",
27
+ "PolyhedralSolid3D",
28
+ "TetrahedralSolid3D",
29
+ "HybridSolid3D",
30
+ "RegularGrid3D",
31
+ "LightRegularGrid3D",
32
+ ]
33
+ GeodeMeshType = (
34
+ Literal[
35
+ "VertexSet",
36
+ "Graph",
37
+ ]
38
+ | GeodePointMeshType
39
+ | GeodeEdgeMeshType
40
+ | GeodePolygonMeshType
41
+ | GeodePolyhedronMeshType
42
+ )
43
+ GeodeModelType = Literal[
44
+ "BRep",
45
+ "Section",
46
+ "StructuralModel",
47
+ "CrossSection",
48
+ "ImplicitStructuralModel",
49
+ "ImplicitCrossSection",
50
+ ]
51
+ GeodeObjectType = GeodeMeshType | GeodeModelType
52
+
53
+
54
+ def _flatten_literal_args(literal: object) -> tuple[str, ...]:
55
+ flattened: list[str] = []
56
+ for arg in get_args(literal):
57
+ if isinstance(arg, str):
58
+ flattened.append(arg)
59
+ else:
60
+ flattened.extend(_flatten_literal_args(arg))
61
+ return tuple(flattened)
62
+
63
+
64
+ GeodeObjectType_values = _flatten_literal_args(GeodeObjectType)
65
+
66
+
67
+ def geode_object_type(value: str) -> GeodeObjectType:
68
+ if value not in GeodeObjectType_values:
69
+ raise ValueError(
70
+ f"Invalid GeodeObjectType: {value!r}. Must be one of {GeodeObjectType_values}"
71
+ )
72
+ return cast(GeodeObjectType, value)
73
+
74
+
75
+ ViewerType = Literal["mesh", "model"]