@geode/opengeodeweb-front 10.34.0-rc.2 → 10.34.0-rc.21
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.
- package/.build/opengeodeweb_front_schemas.js +175 -0
- package/.build/server/utils/app_config.js +57 -0
- package/.build/server/utils/cleanup.js +135 -0
- package/.build/server/utils/cloud.js +156 -0
- package/.build/server/utils/microservices.js +153 -0
- package/.build/server/utils/path.js +108 -0
- package/.build/server/utils/scripts.js +134 -0
- package/.build/server/utils/server.js +44 -0
- package/.build/server/utils/server_config.js +51 -0
- package/.build/server/utils/stream.js +6 -0
- package/.build/server/utils/ws_client.js +100 -0
- package/.build/shared/app_mode.js +8 -0
- package/.build/shared/scripts.js +49 -0
- package/.build/shared/utils/call_raw.js +31 -0
- package/.build/shared/utils/call_schema.js +28 -0
- package/.build/shared/utils/fetch_raw.js +52 -0
- package/.build/shared/utils/fetch_schema.js +32 -0
- package/.build/shared/utils/file.js +14 -0
- package/.build/shared/utils/parse_boolean.js +23 -0
- package/.build/shared/utils/response_handlers/load.js +50 -0
- package/.build/shared/utils/types.js +1 -0
- package/.build/shared/utils/validate_schema.js +17 -0
- package/README.md +8 -0
- package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
- package/app/components/ActionButton.vue +28 -12
- package/app/components/Basic/Slider.vue +2 -2
- package/app/components/Basic/Switch.vue +2 -2
- package/app/components/CameraManager/List.vue +11 -11
- package/app/components/CameraManager/Saver.vue +8 -4
- package/app/components/CameraManager.vue +24 -12
- package/app/components/CameraOrientation.vue +31 -17
- package/app/components/ClippingPlaneCard.vue +13 -12
- package/app/components/ClippingPlanes.vue +31 -21
- package/app/components/CrsSelector.vue +26 -18
- package/app/components/DeleteDialog.vue +18 -16
- package/app/components/DragAndDrop.vue +55 -37
- package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
- package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
- package/app/components/ExtensionSelector.vue +34 -18
- package/app/components/FeedBack/ErrorBanner.vue +4 -3
- package/app/components/FeedBack/Snackers.vue +6 -5
- package/app/components/FetchingData.vue +8 -12
- package/app/components/FileSelector.vue +27 -17
- package/app/components/FileUploader.vue +51 -30
- package/app/components/GlassCard.vue +17 -13
- package/app/components/HybridRenderingView.vue +25 -12
- package/app/components/HybridViewerTooltip.vue +28 -26
- package/app/components/InfraConnected.vue +1 -1
- package/app/components/Launcher.vue +12 -10
- package/app/components/Loading/EcoMessages.vue +24 -13
- package/app/components/Loading/Header.vue +6 -7
- package/app/components/Loading/Progress.vue +6 -7
- package/app/components/Loading.vue +10 -14
- package/app/components/MissingFilesSelector.vue +35 -19
- package/app/components/ObjectSelector.vue +37 -21
- package/app/components/PackagesVersions.vue +16 -8
- package/app/components/Recaptcha.vue +17 -23
- package/app/components/RemoteRenderingView.vue +21 -15
- package/app/components/Ruler.vue +11 -9
- package/app/components/Screenshot.vue +25 -19
- package/app/components/SearchBar.vue +12 -6
- package/app/components/ShrinkFilter.vue +19 -14
- package/app/components/Step.vue +32 -12
- package/app/components/Stepper.vue +19 -7
- package/app/components/ToolPanel.vue +29 -13
- package/app/components/ViewToolbar.vue +53 -44
- package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
- package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
- package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
- package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
- package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
- package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
- package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
- package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
- package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
- package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
- package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
- package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
- package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
- package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
- package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
- package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
- package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
- package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
- package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
- package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
- package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
- package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
- package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
- package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
- package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
- package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
- package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
- package/app/components/Viewer/ObjectTree/Box.vue +32 -15
- package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
- package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
- package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
- package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
- package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
- package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
- package/app/components/Viewer/Options/ColorMapList.vue +52 -24
- package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
- package/app/components/Viewer/Options/ColorPicker.vue +239 -50
- package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
- package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
- package/app/components/Viewer/Options/OptionsSection.vue +7 -5
- package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
- package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
- package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
- package/app/components/Viewer/Options/TextureItem.vue +29 -22
- package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
- package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
- package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
- package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
- package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
- package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
- package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
- package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
- package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
- package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
- package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
- package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
- package/app/components/Viewer/Ui.vue +19 -14
- package/app/components/Wrapper.vue +16 -10
- package/app/components/ZScaling.vue +18 -10
- package/app/components/csv-preview/CsvPreviewer.vue +72 -50
- package/app/components/csv-preview/CsvSettings.vue +30 -50
- package/app/components/csv-preview/CsvTable.vue +34 -14
- package/app/composables/{batch_style.js → batch_style.ts} +9 -7
- package/app/composables/clipping_planes_widget.ts +204 -0
- package/app/composables/clipping_planes_widget_entries.ts +189 -0
- package/app/composables/copy_to_clipboard.ts +7 -0
- package/app/composables/global_attribute_style.ts +303 -0
- package/app/composables/hover_highlight.ts +127 -0
- package/app/composables/{model_collections.js → model_collections.ts} +28 -9
- package/app/composables/{model_components.js → model_components.ts} +28 -9
- package/app/composables/{project_manager.js → project_manager.ts} +77 -20
- package/app/composables/responsive_middle_truncate.ts +48 -0
- package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
- package/app/composables/stepper_tree.ts +79 -0
- package/app/composables/tree_filter.ts +194 -0
- package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
- package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
- package/app/composables/use_adaptive_styles.ts +186 -0
- package/app/composables/use_overlapping_picker.ts +263 -0
- package/app/composables/use_quick_colormap.ts +55 -0
- package/app/composables/virtual_tree.ts +271 -0
- package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
- package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
- package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
- package/app/stores/app.ts +252 -0
- package/app/stores/app_helpers/extension.ts +179 -0
- package/app/stores/{back.js → back.ts} +54 -28
- package/app/stores/camera_manager.ts +80 -0
- package/app/stores/{cloud.js → cloud.ts} +18 -13
- package/app/stores/data.ts +392 -0
- package/app/stores/data_helpers/collections.ts +138 -0
- package/app/stores/data_helpers/mesh.ts +169 -0
- package/app/stores/data_style.ts +167 -0
- package/app/stores/{feedback.js → feedback.ts} +19 -8
- package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
- package/app/stores/infra.ts +106 -0
- package/app/stores/{menu.js → menu.ts} +67 -36
- package/app/stores/treeview.ts +383 -0
- package/app/stores/{viewer.js → viewer.ts} +75 -42
- package/app/utils/attributes.ts +40 -0
- package/app/utils/clipping_planes.ts +222 -0
- package/app/utils/color_picker.js +54 -0
- package/app/utils/colormap.ts +102 -0
- package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
- package/app/utils/default_styles/{index.js → index.ts} +4 -3
- package/app/utils/default_styles/meshes.ts +264 -0
- package/app/utils/default_styles/{models.js → models.ts} +106 -52
- package/app/utils/{extension.js → extension.ts} +63 -19
- package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
- package/app/utils/{log.js → log.ts} +12 -2
- package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
- package/app/utils/status.ts +19 -0
- package/app/utils/{stores.js → stores.ts} +5 -5
- package/app/utils/{string.js → string.ts} +6 -6
- package/app/utils/{treeview.js → treeview.ts} +4 -1
- package/internal/database/{base_database.js → base_database.ts} +7 -3
- package/internal/database/database.ts +102 -0
- package/internal/database/{extended_database.js → extended_database.ts} +5 -1
- package/internal/database/tables/camera_positions.ts +6 -0
- package/internal/database/tables/{data.js → data.ts} +3 -1
- package/internal/database/tables/data_style.ts +6 -0
- package/internal/database/tables/model_component_datastyle.ts +6 -0
- package/internal/database/tables/model_component_type_datastyle.ts +6 -0
- package/internal/database/tables/model_components.ts +6 -0
- package/internal/database/tables/model_components_relation.ts +6 -0
- package/internal/database/tables/table_definition.ts +5 -0
- package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
- package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/cells/common.ts +50 -0
- package/internal/stores/data_style/mesh/cells/index.ts +161 -0
- package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
- package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
- package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/edges/common.ts +41 -0
- package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
- package/internal/stores/data_style/mesh/edges/index.ts +155 -0
- package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
- package/internal/stores/data_style/mesh/edges/width.ts +42 -0
- package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
- package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/points/common.ts +51 -0
- package/internal/stores/data_style/mesh/points/index.ts +133 -0
- package/internal/stores/data_style/mesh/points/size.ts +43 -0
- package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
- package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
- package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
- package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
- package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
- package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
- package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
- package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
- package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
- package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
- package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
- package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
- package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
- package/internal/stores/data_style/model/blocks/common.ts +67 -0
- package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
- package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
- package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
- package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
- package/internal/stores/data_style/model/color.ts +348 -0
- package/internal/stores/data_style/model/common.ts +262 -0
- package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
- package/internal/stores/data_style/model/corners/common.ts +71 -0
- package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
- package/internal/stores/data_style/model/corners/vertex.ts +315 -0
- package/internal/stores/data_style/model/corners/visibility.ts +39 -0
- package/internal/stores/data_style/model/edges/common.ts +29 -0
- package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
- package/internal/stores/data_style/model/edges/visibility.ts +55 -0
- package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
- package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
- package/internal/stores/data_style/model/lines/common.ts +63 -0
- package/internal/stores/data_style/model/lines/edge.ts +343 -0
- package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
- package/internal/stores/data_style/model/lines/vertex.ts +344 -0
- package/internal/stores/data_style/model/lines/visibility.ts +37 -0
- package/internal/stores/data_style/model/points/common.ts +25 -0
- package/internal/stores/data_style/model/points/index.ts +35 -0
- package/internal/stores/data_style/model/points/size.ts +44 -0
- package/internal/stores/data_style/model/points/visibility.ts +46 -0
- package/internal/stores/data_style/model/selection.ts +138 -0
- package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
- package/internal/stores/data_style/model/surfaces/common.ts +69 -0
- package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
- package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
- package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
- package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
- package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
- package/internal/stores/data_style/state.ts +281 -0
- package/internal/stores/data_style/types.ts +30 -0
- package/internal/stores/hybrid_viewer/brightness.ts +124 -0
- package/internal/stores/hybrid_viewer/camera.ts +326 -0
- package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
- package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
- package/internal/stores/hybrid_viewer/core.ts +64 -0
- package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
- package/internal/stores/hybrid_viewer/highlight.ts +183 -0
- package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
- package/internal/stores/hybrid_viewer/scene.ts +125 -0
- package/internal/stores/hybrid_viewer/viewport.ts +177 -0
- package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
- package/internal/utils/api_fetch.ts +133 -0
- package/internal/utils/upload_file.ts +115 -0
- package/internal/utils/viewer_call.ts +99 -0
- package/internal/utils/ws_client.ts +54 -0
- package/nuxt.config.ts +168 -0
- package/opengeodeweb_front_schemas.json +2 -2
- package/package.json +49 -13
- package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
- package/server/api/local/app/project_folder_path.post.ts +33 -0
- package/server/api/local/app/run_back.post.ts +39 -0
- package/server/api/local/app/run_viewer.post.ts +39 -0
- package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
- package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
- package/server/api/local/extensions/upload.put.ts +71 -0
- package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
- package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
- package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
- package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
- package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
- package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
- package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
- package/server/api/serverless/run_cloud.post.ts +92 -0
- package/server/utils/{app_config.js → app_config.ts} +40 -18
- package/server/utils/{cleanup.js → cleanup.ts} +76 -29
- package/server/utils/{cloud.js → cloud.ts} +33 -17
- package/server/utils/{extension.js → extension.ts} +31 -4
- package/server/utils/{microservices.js → microservices.ts} +68 -27
- package/server/utils/{path.js → path.ts} +36 -17
- package/server/utils/{scripts.js → scripts.ts} +49 -33
- package/server/utils/{server.js → server.ts} +13 -6
- package/server/utils/server_config.ts +74 -0
- package/server/utils/stream.ts +6 -0
- package/server/utils/ws_client.ts +165 -0
- package/shared/{scripts.js → scripts.ts} +15 -10
- package/shared/utils/call_raw.ts +73 -0
- package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
- package/shared/utils/fetch_raw.ts +125 -0
- package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
- package/shared/utils/file.ts +22 -0
- package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
- package/shared/utils/response_handlers/load.ts +109 -0
- package/shared/utils/types.ts +27 -0
- package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
- package/.github/workflows/config.json +0 -5
- package/.github/workflows/deploy.yml +0 -15
- package/.github/workflows/manual_release.yml +0 -11
- package/.github/workflows/merge_request.yml +0 -9
- package/.github/workflows/pr_update.yml +0 -11
- package/.github/workflows/prepare_deploy.yml +0 -9
- package/.github/workflows/schedule.yml +0 -18
- package/.github/workflows/test.yml +0 -14
- package/.github/workflows/test_pr.yml +0 -12
- package/.oxlintrc.json +0 -150
- package/.releaserc +0 -11
- package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
- package/app/composables/clipping_planes_widget.js +0 -249
- package/app/composables/global_attribute_style.js +0 -181
- package/app/composables/hover_highlight.js +0 -91
- package/app/composables/responsive_middle_truncate.js +0 -34
- package/app/composables/stepper_tree.js +0 -56
- package/app/composables/tree_filter.js +0 -138
- package/app/composables/use_adaptive_styles.js +0 -120
- package/app/composables/use_overlapping_picker.js +0 -169
- package/app/composables/use_quick_colormap.js +0 -32
- package/app/composables/virtual_tree.js +0 -191
- package/app/stores/app.js +0 -326
- package/app/stores/camera_manager.js +0 -57
- package/app/stores/data.js +0 -278
- package/app/stores/data_helpers/collections.js +0 -96
- package/app/stores/data_helpers/mesh.js +0 -122
- package/app/stores/data_style.js +0 -116
- package/app/stores/infra.js +0 -95
- package/app/stores/treeview.js +0 -290
- package/app/utils/attributes.js +0 -23
- package/app/utils/clipping_planes.js +0 -110
- package/app/utils/colormap.js +0 -64
- package/app/utils/default_styles/meshes.js +0 -191
- package/app/utils/status.js +0 -10
- package/commitlint.config.js +0 -20
- package/internal/database/database.js +0 -80
- package/internal/database/tables/camera_positions.js +0 -4
- package/internal/database/tables/data_style.js +0 -4
- package/internal/database/tables/model_component_datastyle.js +0 -4
- package/internal/database/tables/model_component_type_datastyle.js +0 -4
- package/internal/database/tables/model_components.js +0 -4
- package/internal/database/tables/model_components_relation.js +0 -4
- package/internal/stores/data_style/mesh/cells/cell.js +0 -196
- package/internal/stores/data_style/mesh/cells/common.js +0 -39
- package/internal/stores/data_style/mesh/cells/index.js +0 -81
- package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
- package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
- package/internal/stores/data_style/mesh/edges/common.js +0 -32
- package/internal/stores/data_style/mesh/edges/edge.js +0 -195
- package/internal/stores/data_style/mesh/edges/index.js +0 -81
- package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
- package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
- package/internal/stores/data_style/mesh/edges/width.js +0 -34
- package/internal/stores/data_style/mesh/points/common.js +0 -37
- package/internal/stores/data_style/mesh/points/index.js +0 -82
- package/internal/stores/data_style/mesh/points/size.js +0 -35
- package/internal/stores/data_style/mesh/points/vertex.js +0 -193
- package/internal/stores/data_style/mesh/points/visibility.js +0 -37
- package/internal/stores/data_style/mesh/polygons/common.js +0 -32
- package/internal/stores/data_style/mesh/polygons/index.js +0 -107
- package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
- package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
- package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
- package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
- package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
- package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
- package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
- package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
- package/internal/stores/data_style/model/blocks/common.js +0 -51
- package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
- package/internal/stores/data_style/model/blocks/vertex.js +0 -204
- package/internal/stores/data_style/model/blocks/visibility.js +0 -20
- package/internal/stores/data_style/model/color.js +0 -218
- package/internal/stores/data_style/model/common.js +0 -141
- package/internal/stores/data_style/model/corners/common.js +0 -51
- package/internal/stores/data_style/model/corners/vertex.js +0 -204
- package/internal/stores/data_style/model/corners/visibility.js +0 -20
- package/internal/stores/data_style/model/edges/common.js +0 -20
- package/internal/stores/data_style/model/edges/visibility.js +0 -38
- package/internal/stores/data_style/model/lines/common.js +0 -51
- package/internal/stores/data_style/model/lines/edge.js +0 -203
- package/internal/stores/data_style/model/lines/vertex.js +0 -204
- package/internal/stores/data_style/model/lines/visibility.js +0 -20
- package/internal/stores/data_style/model/points/common.js +0 -20
- package/internal/stores/data_style/model/points/index.js +0 -25
- package/internal/stores/data_style/model/points/size.js +0 -36
- package/internal/stores/data_style/model/points/visibility.js +0 -36
- package/internal/stores/data_style/model/selection.js +0 -89
- package/internal/stores/data_style/model/surfaces/common.js +0 -51
- package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
- package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
- package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
- package/internal/stores/data_style/state.js +0 -197
- package/internal/stores/hybrid_viewer/brightness.js +0 -82
- package/internal/stores/hybrid_viewer/camera.js +0 -274
- package/internal/stores/hybrid_viewer/highlight.js +0 -170
- package/internal/stores/hybrid_viewer/scene.js +0 -136
- package/internal/stores/hybrid_viewer/viewport.js +0 -140
- package/internal/utils/api_fetch.js +0 -52
- package/internal/utils/upload_file.js +0 -57
- package/internal/utils/viewer_call.js +0 -49
- package/internal/utils/ws_client.js +0 -29
- package/nuxt.config.js +0 -106
- package/scripts/generate_geode_objects.js +0 -24
- package/server/api/local/app/project_folder_path.post.js +0 -29
- package/server/api/local/app/run_back.post.js +0 -33
- package/server/api/local/app/run_viewer.post.js +0 -33
- package/server/api/local/extensions/upload.put.js +0 -72
- package/server/api/microservice/app/set_app_base_url.post.js +0 -25
- package/server/api/microservice/app/set_back_base_url.post.js +0 -22
- package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
- package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
- package/server/api/serverless/run_cloud.post.js +0 -44
- package/server/utils/server_config.js +0 -58
- package/server/utils/ws_client.js +0 -112
- package/shared/utils/call_raw.js +0 -46
- package/shared/utils/fetch_raw.js +0 -61
- package/shared/utils/file.js +0 -16
- package/shared/utils/response_handlers/load.js +0 -74
- package/tests/integration/data/uploads/test.og_brep +0 -0
- package/tests/integration/data/uploads/test.og_edc2d +0 -0
- package/tests/integration/data/uploads/test.og_edc3d +0 -0
- package/tests/integration/data/uploads/test.og_psf3d +0 -0
- package/tests/integration/data/uploads/test.og_rgd2d +0 -0
- package/tests/integration/data/uploads/test.og_rgd3d +0 -0
- package/tests/integration/data/uploads/test.vtu +0 -22
- package/tests/integration/setup.js +0 -92
- package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
- package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
- package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
- package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
- package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
- package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
- package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
- package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
- package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
- package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
- package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
- package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
- package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
- package/tests/integration/stores/viewer.nuxt.test.js +0 -69
- package/tests/setup_indexeddb.js +0 -4
- package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
- package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
- package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
- package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
- package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
- package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
- package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
- package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
- package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
- package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
- package/tests/unit/components/Step.nuxt.test.js +0 -51
- package/tests/unit/components/Stepper.nuxt.test.js +0 -41
- package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
- package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
- package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
- package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
- package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
- package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
- package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
- package/tests/unit/stores/app.nuxt.test.js +0 -189
- package/tests/unit/stores/back.nuxt.test.js +0 -147
- package/tests/unit/stores/cloud.nuxt.test.js +0 -90
- package/tests/unit/stores/data.nuxt.test.js +0 -162
- package/tests/unit/stores/feedback.nuxt.test.js +0 -90
- package/tests/unit/stores/infra.nuxt.test.js +0 -313
- package/tests/unit/stores/treeview.nuxt.test.js +0 -63
- package/tests/unit/stores/viewer.nuxt.test.js +0 -161
- package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
- package/tests/utils.js +0 -20
- package/tests/vitest.config.js +0 -67
- /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
- /package/shared/{app_mode.js → app_mode.ts} +0 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { Bounds } from "@kitware/vtk.js/types";
|
|
2
|
+
import type vtkActor from "@kitware/vtk.js/Rendering/Core/Actor";
|
|
3
|
+
import type { vtkCamera } from "@kitware/vtk.js/Rendering/Core/Camera";
|
|
4
|
+
|
|
5
|
+
const AXIS_SCALE = 0.45;
|
|
6
|
+
const SIZE_RATIO = 0.1;
|
|
7
|
+
const DEBOUNCE_DELAY = 200;
|
|
8
|
+
const CHANGE_THRESHOLD = 1e-4;
|
|
9
|
+
// oxlint-disable no-magic-numbers
|
|
10
|
+
const COLOR_BLUE = [0.12, 0.53, 0.9];
|
|
11
|
+
const COLOR_GREEN = [0.26, 0.63, 0.28];
|
|
12
|
+
const COLOR_ORANGE = [0.98, 0.55, 0];
|
|
13
|
+
const COLOR_PURPLE = [0.55, 0.14, 0.67];
|
|
14
|
+
const COLOR_RED = [0.9, 0.22, 0.21];
|
|
15
|
+
// oxlint-enable no-magic-numbers
|
|
16
|
+
const PLANE_COLORS = [COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_PURPLE, COLOR_RED];
|
|
17
|
+
const NORMAL_X = [1, 0, 0];
|
|
18
|
+
const NORMAL_Y = [0, 1, 0];
|
|
19
|
+
const NORMAL_Z = [0, 0, 1];
|
|
20
|
+
const DEFAULT_NORMALS = [NORMAL_X, NORMAL_Y, NORMAL_Z];
|
|
21
|
+
const RGB_MAX_VALUE = 255;
|
|
22
|
+
|
|
23
|
+
function getPlaneCssColor(index: number): string {
|
|
24
|
+
const rgb = PLANE_COLORS[index % PLANE_COLORS.length] ?? COLOR_BLUE;
|
|
25
|
+
return `rgb(${rgb.map((channel) => Math.round(channel * RGB_MAX_VALUE)).join(",")})`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function hasPlaneChanged(
|
|
29
|
+
origin: readonly number[],
|
|
30
|
+
normal: readonly number[],
|
|
31
|
+
currentOrigin: readonly number[] | undefined,
|
|
32
|
+
currentNormal: readonly number[] | undefined,
|
|
33
|
+
): boolean {
|
|
34
|
+
if (!currentOrigin) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return (
|
|
38
|
+
origin.some((val, idx) => Math.abs(val - (currentOrigin[idx] ?? 0)) > CHANGE_THRESHOLD) ||
|
|
39
|
+
normal.some((val, idx) => Math.abs(val - (currentNormal?.[idx] ?? 0)) > CHANGE_THRESHOLD)
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface PlaneVisualState {
|
|
44
|
+
readonly plane: { readonly opacity: number; readonly color: readonly number[] };
|
|
45
|
+
readonly normal: { readonly opacity: number; readonly color: readonly number[] };
|
|
46
|
+
readonly origin: { readonly opacity: number; readonly color: readonly number[] };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface PlaneStyle {
|
|
50
|
+
readonly active: PlaneVisualState;
|
|
51
|
+
readonly inactive: PlaneVisualState;
|
|
52
|
+
readonly static: {
|
|
53
|
+
readonly display2D: { readonly representation: number };
|
|
54
|
+
readonly outline: {
|
|
55
|
+
readonly color: readonly number[];
|
|
56
|
+
readonly opacity: number;
|
|
57
|
+
readonly representation: number;
|
|
58
|
+
readonly interpolation: number;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getPlaneStyle(rgb: readonly number[]): PlaneStyle {
|
|
64
|
+
return {
|
|
65
|
+
active: {
|
|
66
|
+
plane: { opacity: 1, color: rgb },
|
|
67
|
+
normal: { opacity: 1, color: rgb },
|
|
68
|
+
origin: { opacity: 1, color: rgb },
|
|
69
|
+
},
|
|
70
|
+
inactive: {
|
|
71
|
+
plane: { opacity: 0.5, color: rgb },
|
|
72
|
+
normal: { opacity: 1, color: rgb },
|
|
73
|
+
origin: { opacity: 1, color: rgb },
|
|
74
|
+
},
|
|
75
|
+
static: {
|
|
76
|
+
display2D: { representation: 0 },
|
|
77
|
+
outline: { color: [1, 1, 1], opacity: 1, representation: 1, interpolation: 0 },
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function computeSceneBounds(actors: readonly vtkActor[]): Bounds {
|
|
83
|
+
let bounds: Bounds = [Infinity, -Infinity, Infinity, -Infinity, Infinity, -Infinity];
|
|
84
|
+
for (const actor of actors) {
|
|
85
|
+
const boundsOfActor = actor.getBounds();
|
|
86
|
+
bounds = [
|
|
87
|
+
Math.min(bounds[0], boundsOfActor[0]),
|
|
88
|
+
Math.max(bounds[1], boundsOfActor[1]),
|
|
89
|
+
Math.min(bounds[2], boundsOfActor[2]),
|
|
90
|
+
Math.max(bounds[3], boundsOfActor[3]),
|
|
91
|
+
Math.min(bounds[4], boundsOfActor[4]),
|
|
92
|
+
Math.max(bounds[5], boundsOfActor[5]),
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
return bounds;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
interface SceneBoundsInfo {
|
|
99
|
+
readonly center: readonly number[];
|
|
100
|
+
readonly cubicBounds: readonly number[];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function computeSceneBoundsInfo(actors: readonly vtkActor[]): SceneBoundsInfo {
|
|
104
|
+
if (actors.length === 0) {
|
|
105
|
+
return { center: [0, 0, 0], cubicBounds: [-1, 1, -1, 1, -1, 1] };
|
|
106
|
+
}
|
|
107
|
+
const [xmin, xmax, ymin, ymax, zmin, zmax] = computeSceneBounds(actors);
|
|
108
|
+
const center = [
|
|
109
|
+
Number(((xmin + xmax) / 2).toFixed(4)),
|
|
110
|
+
Number(((ymin + ymax) / 2).toFixed(4)),
|
|
111
|
+
Number(((zmin + zmax) / 2).toFixed(4)),
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
const maxActorExtent = Math.max(
|
|
115
|
+
...actors.map((actor: vtkActor) => {
|
|
116
|
+
const bounds = actor.getBounds();
|
|
117
|
+
return Math.max(bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]);
|
|
118
|
+
}),
|
|
119
|
+
);
|
|
120
|
+
const halfExtent = maxActorExtent / 2;
|
|
121
|
+
const [centerX = 0, centerY = 0, centerZ = 0] = center;
|
|
122
|
+
const cubicBounds = [
|
|
123
|
+
centerX - halfExtent,
|
|
124
|
+
centerX + halfExtent,
|
|
125
|
+
centerY - halfExtent,
|
|
126
|
+
centerY + halfExtent,
|
|
127
|
+
centerZ - halfExtent,
|
|
128
|
+
centerZ + halfExtent,
|
|
129
|
+
];
|
|
130
|
+
return { center, cubicBounds };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface ActorEntry {
|
|
134
|
+
readonly actor: vtkActor;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
interface MainCameraOptions {
|
|
138
|
+
readonly focal_point?: readonly number[];
|
|
139
|
+
readonly position?: readonly number[];
|
|
140
|
+
readonly view_up?: readonly number[];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function resolveActiveActors(
|
|
144
|
+
targetAllVisible: boolean,
|
|
145
|
+
allItems: readonly { readonly id: string }[],
|
|
146
|
+
selectedDatasetIds: readonly string[],
|
|
147
|
+
hybridDb: Record<string, ActorEntry | undefined>,
|
|
148
|
+
): vtkActor[] {
|
|
149
|
+
const targetIds = targetAllVisible
|
|
150
|
+
? allItems.map((item: { id: string }) => item.id)
|
|
151
|
+
: selectedDatasetIds;
|
|
152
|
+
const targeted = targetIds
|
|
153
|
+
.map((id) => hybridDb[id]?.actor)
|
|
154
|
+
.filter((actor: vtkActor | undefined): actor is vtkActor => actor !== undefined);
|
|
155
|
+
if (targeted.length > 0) {
|
|
156
|
+
return targeted;
|
|
157
|
+
}
|
|
158
|
+
return Object.values(hybridDb)
|
|
159
|
+
.filter((entry: ActorEntry | undefined): entry is ActorEntry => entry !== undefined)
|
|
160
|
+
.map((entry: ActorEntry) => entry.actor);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function computeNormalizedViewDirection(
|
|
164
|
+
focalPoint: readonly number[],
|
|
165
|
+
position: readonly number[],
|
|
166
|
+
): readonly number[] | undefined {
|
|
167
|
+
const dir = [
|
|
168
|
+
(position[0] ?? 0) - (focalPoint[0] ?? 0),
|
|
169
|
+
(position[1] ?? 0) - (focalPoint[1] ?? 0),
|
|
170
|
+
(position[2] ?? 0) - (focalPoint[2] ?? 0),
|
|
171
|
+
];
|
|
172
|
+
const dirLen = Math.hypot(...dir);
|
|
173
|
+
if (dirLen === 0) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
return dir.map((component) => component / dirLen);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Aligns the local clipping-plane preview camera onto the same viewing direction as the
|
|
180
|
+
// Main viewer camera, re-centered on the clipped scene's bounds.
|
|
181
|
+
function alignCameraToMainCamera(
|
|
182
|
+
camera: vtkCamera,
|
|
183
|
+
mainCam: MainCameraOptions,
|
|
184
|
+
center: readonly number[],
|
|
185
|
+
): void {
|
|
186
|
+
if (!mainCam.focal_point || !mainCam.position) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const normDir = computeNormalizedViewDirection(mainCam.focal_point, mainCam.position);
|
|
190
|
+
if (!normDir) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const distance = camera.getDistance();
|
|
194
|
+
camera.setFocalPoint(center[0] ?? 0, center[1] ?? 0, center[2] ?? 0);
|
|
195
|
+
camera.setPosition(
|
|
196
|
+
(center[0] ?? 0) + (normDir[0] ?? 0) * distance,
|
|
197
|
+
(center[1] ?? 0) + (normDir[1] ?? 0) * distance,
|
|
198
|
+
(center[2] ?? 0) + (normDir[2] ?? 0) * distance,
|
|
199
|
+
);
|
|
200
|
+
if (mainCam.view_up) {
|
|
201
|
+
const [viewUpX = 0, viewUpY = 0, viewUpZ = 0] = mainCam.view_up;
|
|
202
|
+
camera.setViewUp(viewUpX, viewUpY, viewUpZ);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
AXIS_SCALE,
|
|
208
|
+
SIZE_RATIO,
|
|
209
|
+
DEBOUNCE_DELAY,
|
|
210
|
+
CHANGE_THRESHOLD,
|
|
211
|
+
PLANE_COLORS,
|
|
212
|
+
DEFAULT_NORMALS,
|
|
213
|
+
getPlaneCssColor,
|
|
214
|
+
hasPlaneChanged,
|
|
215
|
+
getPlaneStyle,
|
|
216
|
+
computeSceneBounds,
|
|
217
|
+
computeSceneBoundsInfo,
|
|
218
|
+
resolveActiveActors,
|
|
219
|
+
alignCameraToMainCamera,
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
export type { SceneBoundsInfo, MainCameraOptions };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const RGB_MAX = 255;
|
|
2
|
+
const PERCENT_MAX = 100;
|
|
3
|
+
|
|
4
|
+
function parseComponent(val, max = RGB_MAX) {
|
|
5
|
+
if (val.endsWith("%")) {
|
|
6
|
+
return (Number(val.slice(0, -1)) / PERCENT_MAX) * max;
|
|
7
|
+
}
|
|
8
|
+
return Number(val);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function parseColorString(colorText) {
|
|
12
|
+
if (!colorText || typeof colorText !== "string") {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const numbersMatch = colorText.match(/[\d.]+%?/gu);
|
|
17
|
+
if (!numbersMatch || (numbersMatch.length !== 3 && numbersMatch.length !== 4)) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const rawRed = parseComponent(numbersMatch[0]);
|
|
22
|
+
const rawGreen = parseComponent(numbersMatch[1]);
|
|
23
|
+
const rawBlue = parseComponent(numbersMatch[2]);
|
|
24
|
+
|
|
25
|
+
const red = Math.min(RGB_MAX, Math.max(0, Math.round(rawRed)));
|
|
26
|
+
const green = Math.min(RGB_MAX, Math.max(0, Math.round(rawGreen)));
|
|
27
|
+
const blue = Math.min(RGB_MAX, Math.max(0, Math.round(rawBlue)));
|
|
28
|
+
|
|
29
|
+
let alpha = 1;
|
|
30
|
+
if (numbersMatch.length === 4) {
|
|
31
|
+
const rawAlpha = parseComponent(numbersMatch[3], 1);
|
|
32
|
+
const calculatedAlpha = rawAlpha > 1 ? rawAlpha / RGB_MAX : rawAlpha;
|
|
33
|
+
const roundedAlpha = Number(calculatedAlpha.toFixed(2));
|
|
34
|
+
alpha = Math.min(1, Math.max(0, roundedAlpha));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (Number.isNaN(red) || Number.isNaN(green) || Number.isNaN(blue) || Number.isNaN(alpha)) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return { red, green, blue, alpha };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function formatColorString(color, mode) {
|
|
45
|
+
const { red, green, blue, alpha } = color;
|
|
46
|
+
const roundRed = Math.round(red);
|
|
47
|
+
const roundGreen = Math.round(green);
|
|
48
|
+
const roundBlue = Math.round(blue);
|
|
49
|
+
return mode === "rgb"
|
|
50
|
+
? `rgb(${roundRed}, ${roundGreen}, ${roundBlue})`
|
|
51
|
+
: `rgba(${roundRed}, ${roundGreen}, ${roundBlue}, ${alpha})`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { parseColorString, formatColorString };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// oxlint-disable unicorn/prefer-export-from
|
|
2
|
+
import colormaps from "@ogw_front/assets/colormaps.json";
|
|
3
|
+
|
|
4
|
+
import { newInstance as vtkColorTransferFunction } from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction";
|
|
5
|
+
|
|
6
|
+
interface ColormapPreset {
|
|
7
|
+
readonly Name: string;
|
|
8
|
+
readonly RGBPoints: readonly number[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface ColormapCategory {
|
|
12
|
+
readonly Name: string;
|
|
13
|
+
readonly Children: readonly ColormapPreset[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const typedColormaps = colormaps as readonly ColormapCategory[];
|
|
17
|
+
|
|
18
|
+
function getPresetByName(presetName: string): ColormapPreset | undefined {
|
|
19
|
+
return typedColormaps
|
|
20
|
+
.flatMap((category: ColormapCategory) => category.Children)
|
|
21
|
+
.find((preset: ColormapPreset) => preset.Name === presetName);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getRGBPointsFromPreset(presetName: string): readonly number[] {
|
|
25
|
+
return getPresetByName(presetName)?.RGBPoints ?? [];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getPresetsWithCurrentAtTop(
|
|
29
|
+
presetName: string,
|
|
30
|
+
): readonly (ColormapPreset | ColormapCategory)[] {
|
|
31
|
+
const currentPreset = getPresetByName(presetName);
|
|
32
|
+
return [currentPreset, ...typedColormaps].filter(
|
|
33
|
+
(preset: ColormapPreset | ColormapCategory | undefined): preset is NonNullable<typeof preset> =>
|
|
34
|
+
Boolean(preset),
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const LAST_POINT_OFFSET = 4;
|
|
39
|
+
const THREE = 3;
|
|
40
|
+
|
|
41
|
+
function buildColorTable(rgbPoints: readonly number[], width: number): Float32Array {
|
|
42
|
+
const lut = vtkColorTransferFunction();
|
|
43
|
+
for (let pointIdx = 0; pointIdx < rgbPoints.length; pointIdx += 4) {
|
|
44
|
+
lut.addRGBPoint(
|
|
45
|
+
rgbPoints[pointIdx] ?? 0,
|
|
46
|
+
rgbPoints[pointIdx + 1] ?? 0,
|
|
47
|
+
rgbPoints[pointIdx + 2] ?? 0,
|
|
48
|
+
rgbPoints[pointIdx + THREE] ?? 0,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
return lut.getUint8Table(rgbPoints[0] ?? 0, rgbPoints.at(-LAST_POINT_OFFSET) ?? 0, width, true);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function fillImageDataFromTable(
|
|
55
|
+
// ImageData can't satisfy prefer-readonly-parameter-types since lib.dom.d.ts types are inherently mutable, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
|
|
56
|
+
imageData: ImageData,
|
|
57
|
+
// Float32Array's numeric index signature is inherently mutable and can't satisfy prefer-readonly-parameter-types, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
|
|
58
|
+
table: Float32Array,
|
|
59
|
+
width: number,
|
|
60
|
+
height: number,
|
|
61
|
+
): void {
|
|
62
|
+
for (let xCoord = 0; xCoord < width; xCoord += 1) {
|
|
63
|
+
const alpha = table[xCoord * 4 + THREE] ?? 0;
|
|
64
|
+
const blue = table[xCoord * 4 + 2] ?? 0;
|
|
65
|
+
const green = table[xCoord * 4 + 1] ?? 0;
|
|
66
|
+
const red = table[xCoord * 4] ?? 0;
|
|
67
|
+
for (let yCoord = 0; yCoord < height; yCoord += 1) {
|
|
68
|
+
const pixelIdx = (yCoord * width + xCoord) * 4;
|
|
69
|
+
imageData.data[pixelIdx] = red;
|
|
70
|
+
imageData.data[pixelIdx + 1] = green;
|
|
71
|
+
imageData.data[pixelIdx + 2] = blue;
|
|
72
|
+
imageData.data[pixelIdx + THREE] = alpha;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function drawCanvasForPreset(
|
|
78
|
+
presetName: string,
|
|
79
|
+
// HTMLCanvasElement can't satisfy prefer-readonly-parameter-types since lib.dom.d.ts types are inherently mutable, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
|
|
80
|
+
canvas: HTMLCanvasElement | undefined | null,
|
|
81
|
+
): void {
|
|
82
|
+
if (!canvas) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const rgbPoints = getRGBPointsFromPreset(presetName);
|
|
86
|
+
if (rgbPoints.length === 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const ctx = canvas.getContext("2d");
|
|
90
|
+
if (!ctx) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const { height, width } = canvas;
|
|
94
|
+
const table = buildColorTable(rgbPoints, width);
|
|
95
|
+
const imageData = ctx.createImageData(width, height);
|
|
96
|
+
fillImageDataFromTable(imageData, table, width, height);
|
|
97
|
+
ctx.putImageData(imageData, 0, 0);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { drawCanvasForPreset, getRGBPointsFromPreset, getPresetByName, getPresetsWithCurrentAtTop };
|
|
101
|
+
|
|
102
|
+
export { default as colormaps } from "@ogw_front/assets/colormaps.json";
|
|
@@ -1,46 +1,59 @@
|
|
|
1
|
+
interface RGBAColor {
|
|
2
|
+
red: number;
|
|
3
|
+
green: number;
|
|
4
|
+
blue: number;
|
|
5
|
+
alpha: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface AttributeConfig {
|
|
9
|
+
name: string | undefined;
|
|
10
|
+
storedConfigs: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
|
|
1
13
|
// Mesh
|
|
2
14
|
const MESH_DEFAULT_ACTIVE_COLORING = "constant";
|
|
3
15
|
const POINTS_DEFAULT_VISIBILITY = true;
|
|
4
16
|
const POINTS_DEFAULT_SIZE = 10;
|
|
5
|
-
const POINTS_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
17
|
+
const POINTS_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
6
18
|
const EDGES_DEFAULT_VISIBILITY = true;
|
|
7
19
|
const EDGES_DEFAULT_WIDTH = 2;
|
|
8
|
-
const EDGES_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
20
|
+
const EDGES_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
9
21
|
const CELLS_DEFAULT_VISIBILITY = true;
|
|
10
|
-
const CELLS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
22
|
+
const CELLS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
11
23
|
const POLYGONS_DEFAULT_VISIBILITY = true;
|
|
12
|
-
const POLYGONS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
24
|
+
const POLYGONS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
13
25
|
const POLYHEDRA_DEFAULT_VISIBILITY = true;
|
|
14
|
-
const POLYHEDRA_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
26
|
+
const POLYHEDRA_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
15
27
|
|
|
16
28
|
// Model
|
|
17
|
-
const MODEL_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
29
|
+
const MODEL_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
18
30
|
const MODEL_DEFAULT_ACTIVE_COLORING = "constant";
|
|
19
31
|
|
|
20
32
|
const CORNERS_DEFAULT_VISIBILITY = true;
|
|
21
|
-
const CORNERS_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
33
|
+
const CORNERS_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
22
34
|
const CORNERS_DEFAULT_ACTIVE_COLORING = "constant";
|
|
23
35
|
const LINES_DEFAULT_VISIBILITY = true;
|
|
24
|
-
const LINES_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
36
|
+
const LINES_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
|
|
25
37
|
const LINES_DEFAULT_ACTIVE_COLORING = "constant";
|
|
26
38
|
const SURFACES_DEFAULT_VISIBILITY = true;
|
|
27
|
-
const SURFACES_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
39
|
+
const SURFACES_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
28
40
|
const SURFACES_DEFAULT_ACTIVE_COLORING = "constant";
|
|
29
41
|
const BLOCKS_DEFAULT_VISIBILITY = true;
|
|
30
|
-
const BLOCKS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
42
|
+
const BLOCKS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
|
|
31
43
|
const BLOCKS_DEFAULT_ACTIVE_COLORING = "constant";
|
|
32
44
|
|
|
33
45
|
const MESH_COMPONENT_TYPES = ["Corner", "Line", "Surface", "Block"];
|
|
34
46
|
|
|
35
|
-
const DEFAULT_MODEL_COMPONENT_TYPE_COLORS = {
|
|
47
|
+
const DEFAULT_MODEL_COMPONENT_TYPE_COLORS: Record<string, RGBAColor> = {
|
|
36
48
|
Corner: CORNERS_DEFAULT_COLOR,
|
|
37
49
|
Line: LINES_DEFAULT_COLOR,
|
|
38
50
|
Surface: SURFACES_DEFAULT_COLOR,
|
|
39
51
|
Block: BLOCKS_DEFAULT_COLOR,
|
|
40
52
|
};
|
|
41
53
|
|
|
42
|
-
const DEFAULT_NO_DATA_COLOR = { red: 128, green: 128, blue: 128, alpha: 1 };
|
|
54
|
+
const DEFAULT_NO_DATA_COLOR: RGBAColor = { red: 128, green: 128, blue: 128, alpha: 1 };
|
|
43
55
|
|
|
56
|
+
export type { RGBAColor, AttributeConfig };
|
|
44
57
|
export {
|
|
45
58
|
POINTS_DEFAULT_VISIBILITY,
|
|
46
59
|
POINTS_DEFAULT_SIZE,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
surfaceDefaultStyle,
|
|
16
16
|
} from "./meshes";
|
|
17
17
|
|
|
18
|
-
function default_styles() {
|
|
18
|
+
function default_styles(): Record<string, unknown> {
|
|
19
19
|
return {
|
|
20
20
|
BRep: brepDefaultStyle(),
|
|
21
21
|
CrossSection: crossSectionDefaultStyle(),
|
|
@@ -45,8 +45,9 @@ function default_styles() {
|
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
function getDefaultStyle(type) {
|
|
49
|
-
|
|
48
|
+
function getDefaultStyle(type: string): unknown {
|
|
49
|
+
const styles: Record<string, unknown> = default_styles();
|
|
50
|
+
return styles[type];
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
export { DEFAULT_MODEL_COMPONENT_TYPE_STYLES } from "./models";
|