matterviz 0.3.5 → 0.3.6
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/.vscode/launch.json +13 -0
- package/.vscodeignore +7 -0
- package/dist/assets/STLExporter-BpTH3YHE.js +8 -0
- package/dist/assets/browser-DdDecX_W.js +1 -0
- package/dist/assets/export-qgn-H9y6.js +2 -0
- package/dist/assets/main-DiKYzti2.css +1 -0
- package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
- package/dist/extension.js +31293 -0
- package/dist/src/lib/FilePicker.svelte +360 -0
- package/dist/src/lib/MillerIndexInput.svelte +66 -0
- package/dist/src/lib/api/mp.ts +26 -0
- package/dist/src/lib/api/optimade.ts +204 -0
- package/dist/src/lib/brillouin/BrillouinZone.svelte +549 -0
- package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +144 -0
- package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +146 -0
- package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +146 -0
- package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +476 -0
- package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +92 -0
- package/dist/src/lib/brillouin/compute.ts +529 -0
- package/dist/src/lib/brillouin/index.ts +8 -0
- package/dist/src/lib/brillouin/types.ts +51 -0
- package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +327 -0
- package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
- package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
- package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +94 -0
- package/dist/src/lib/chempot-diagram/chempot-worker.ts +11 -0
- package/dist/src/lib/chempot-diagram/color.ts +42 -0
- package/dist/src/lib/chempot-diagram/compute.ts +1014 -0
- package/dist/src/lib/chempot-diagram/index.ts +6 -0
- package/dist/src/lib/chempot-diagram/pointer.ts +56 -0
- package/dist/src/lib/chempot-diagram/temperature.ts +77 -0
- package/dist/src/lib/chempot-diagram/types.ts +130 -0
- package/dist/src/lib/colors/index.ts +249 -0
- package/dist/src/lib/composition/BarChart.svelte +297 -0
- package/dist/src/lib/composition/BubbleChart.svelte +218 -0
- package/dist/src/lib/composition/Composition.svelte +165 -0
- package/dist/src/lib/composition/Formula.svelte +268 -0
- package/dist/src/lib/composition/FormulaFilter.svelte +1257 -0
- package/dist/src/lib/composition/PieChart.svelte +323 -0
- package/dist/src/lib/composition/format.ts +155 -0
- package/dist/src/lib/composition/index.ts +37 -0
- package/dist/src/lib/composition/parse.ts +605 -0
- package/dist/src/lib/constants.ts +134 -0
- package/dist/src/lib/controls.ts +42 -0
- package/dist/src/lib/convex-hull/ConvexHull.svelte +157 -0
- package/dist/src/lib/convex-hull/ConvexHull2D.svelte +825 -0
- package/dist/src/lib/convex-hull/ConvexHull3D.svelte +1801 -0
- package/dist/src/lib/convex-hull/ConvexHull4D.svelte +1398 -0
- package/dist/src/lib/convex-hull/ConvexHullControls.svelte +535 -0
- package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +125 -0
- package/dist/src/lib/convex-hull/ConvexHullStats.svelte +929 -0
- package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +131 -0
- package/dist/src/lib/convex-hull/GasPressureControls.svelte +247 -0
- package/dist/src/lib/convex-hull/StructurePopup.svelte +151 -0
- package/dist/src/lib/convex-hull/TemperatureSlider.svelte +140 -0
- package/dist/src/lib/convex-hull/barycentric-coords.ts +246 -0
- package/dist/src/lib/convex-hull/demo-temperature.ts +63 -0
- package/dist/src/lib/convex-hull/gas-thermodynamics.ts +405 -0
- package/dist/src/lib/convex-hull/helpers.ts +932 -0
- package/dist/src/lib/convex-hull/index.ts +202 -0
- package/dist/src/lib/convex-hull/thermodynamics.ts +2192 -0
- package/dist/src/lib/convex-hull/types.ts +267 -0
- package/dist/src/lib/coordination/CoordinationBarPlot.svelte +311 -0
- package/dist/src/lib/coordination/calc-coordination.ts +93 -0
- package/dist/src/lib/coordination/index.ts +9 -0
- package/dist/src/lib/effects.svelte.ts +48 -0
- package/dist/src/lib/element/BohrAtom.svelte +147 -0
- package/dist/src/lib/element/ElementHeading.svelte +26 -0
- package/dist/src/lib/element/ElementPhoto.svelte +57 -0
- package/dist/src/lib/element/ElementStats.svelte +80 -0
- package/dist/src/lib/element/ElementTile.svelte +484 -0
- package/dist/src/lib/element/data.json.gz.d.ts +4 -0
- package/dist/src/lib/element/data.ts +14 -0
- package/dist/src/lib/element/index.ts +8 -0
- package/dist/src/lib/element/types.ts +62 -0
- package/dist/src/lib/feedback/ClickFeedback.svelte +58 -0
- package/dist/src/lib/feedback/DragOverlay.svelte +42 -0
- package/dist/src/lib/feedback/index.ts +4 -0
- package/dist/src/lib/fermi-surface/FermiSlice.svelte +189 -0
- package/dist/src/lib/fermi-surface/FermiSurface.svelte +600 -0
- package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +448 -0
- package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +794 -0
- package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
- package/dist/src/lib/fermi-surface/compute.ts +728 -0
- package/dist/src/lib/fermi-surface/constants.ts +32 -0
- package/dist/src/lib/fermi-surface/export.ts +64 -0
- package/dist/src/lib/fermi-surface/index.ts +14 -0
- package/dist/src/lib/fermi-surface/marching-cubes.ts +3 -0
- package/dist/src/lib/fermi-surface/parse.ts +574 -0
- package/dist/src/lib/fermi-surface/symmetry.ts +56 -0
- package/dist/src/lib/fermi-surface/types.ts +159 -0
- package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
- package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
- package/dist/src/lib/heatmap-matrix/index.ts +167 -0
- package/dist/src/lib/heatmap-matrix/shared.ts +7 -0
- package/dist/src/lib/icons.ts +650 -0
- package/dist/src/lib/index.ts +61 -0
- package/dist/src/lib/io/decompress.ts +92 -0
- package/dist/src/lib/io/export.ts +385 -0
- package/dist/src/lib/io/fetch.ts +46 -0
- package/dist/src/lib/io/file-drop.ts +51 -0
- package/dist/src/lib/io/index.ts +7 -0
- package/dist/src/lib/io/is-binary.ts +24 -0
- package/dist/src/lib/io/types.ts +8 -0
- package/dist/src/lib/io/url-drop.ts +141 -0
- package/dist/src/lib/isosurface/Isosurface.svelte +285 -0
- package/dist/src/lib/isosurface/IsosurfaceControls.svelte +277 -0
- package/dist/src/lib/isosurface/index.ts +7 -0
- package/dist/src/lib/isosurface/parse.ts +656 -0
- package/dist/src/lib/isosurface/slice.ts +175 -0
- package/dist/src/lib/isosurface/types.ts +309 -0
- package/dist/src/lib/labels.ts +320 -0
- package/dist/src/lib/layout/FullscreenToggle.svelte +50 -0
- package/dist/src/lib/layout/InfoCard.svelte +120 -0
- package/dist/src/lib/layout/InfoTag.svelte +185 -0
- package/dist/src/lib/layout/PropertyFilter.svelte +246 -0
- package/dist/src/lib/layout/SettingsSection.svelte +148 -0
- package/dist/src/lib/layout/SubpageGrid.svelte +82 -0
- package/dist/src/lib/layout/fullscreen.ts +65 -0
- package/dist/src/lib/layout/index.ts +11 -0
- package/dist/src/lib/layout/json-tree/JsonNode.svelte +548 -0
- package/dist/src/lib/layout/json-tree/JsonTree.svelte +1230 -0
- package/dist/src/lib/layout/json-tree/JsonValue.svelte +334 -0
- package/dist/src/lib/layout/json-tree/index.ts +3 -0
- package/dist/src/lib/layout/json-tree/types.ts +126 -0
- package/dist/src/lib/layout/json-tree/utils.ts +682 -0
- package/dist/src/lib/marching-cubes.ts +614 -0
- package/dist/src/lib/math.ts +1081 -0
- package/dist/src/lib/overlays/ContextMenu.svelte +162 -0
- package/dist/src/lib/overlays/CopyButton.svelte +45 -0
- package/dist/src/lib/overlays/DragControlTab.svelte +98 -0
- package/dist/src/lib/overlays/DraggablePane.svelte +487 -0
- package/dist/src/lib/overlays/InfoPaneCards.svelte +149 -0
- package/dist/src/lib/overlays/index.ts +3 -0
- package/dist/src/lib/periodic-table/PeriodicTable.svelte +469 -0
- package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +557 -0
- package/dist/src/lib/periodic-table/PropertySelect.svelte +37 -0
- package/dist/src/lib/periodic-table/index.ts +12 -0
- package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
- package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +444 -0
- package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
- package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
- package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
- package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +203 -0
- package/dist/src/lib/phase-diagram/build-diagram.ts +186 -0
- package/dist/src/lib/phase-diagram/colors.ts +58 -0
- package/dist/src/lib/phase-diagram/diagram-input.ts +40 -0
- package/dist/src/lib/phase-diagram/index.ts +13 -0
- package/dist/src/lib/phase-diagram/parse.ts +348 -0
- package/dist/src/lib/phase-diagram/svg-to-diagram.ts +1023 -0
- package/dist/src/lib/phase-diagram/types.ts +144 -0
- package/dist/src/lib/phase-diagram/utils.ts +775 -0
- package/dist/src/lib/plot/AxisLabel.svelte +51 -0
- package/dist/src/lib/plot/BarPlot.svelte +2113 -0
- package/dist/src/lib/plot/BarPlotControls.svelte +66 -0
- package/dist/src/lib/plot/BinnedScatterPlot.svelte +1114 -0
- package/dist/src/lib/plot/ColorBar.svelte +721 -0
- package/dist/src/lib/plot/ColorScaleSelect.svelte +54 -0
- package/dist/src/lib/plot/ElementScatter.svelte +63 -0
- package/dist/src/lib/plot/FillArea.svelte +223 -0
- package/dist/src/lib/plot/Histogram.svelte +1558 -0
- package/dist/src/lib/plot/HistogramControls.svelte +212 -0
- package/dist/src/lib/plot/InteractiveAxisLabel.svelte +96 -0
- package/dist/src/lib/plot/Line.svelte +84 -0
- package/dist/src/lib/plot/PlotAxis.svelte +169 -0
- package/dist/src/lib/plot/PlotControls.svelte +537 -0
- package/dist/src/lib/plot/PlotLegend.svelte +569 -0
- package/dist/src/lib/plot/PlotTooltip.svelte +67 -0
- package/dist/src/lib/plot/PortalSelect.svelte +253 -0
- package/dist/src/lib/plot/ReferenceLine3D.svelte +156 -0
- package/dist/src/lib/plot/ReferencePlane.svelte +175 -0
- package/dist/src/lib/plot/ScatterPlot.svelte +2778 -0
- package/dist/src/lib/plot/ScatterPlot3D.svelte +529 -0
- package/dist/src/lib/plot/ScatterPlot3DControls.svelte +437 -0
- package/dist/src/lib/plot/ScatterPlot3DScene.svelte +912 -0
- package/dist/src/lib/plot/ScatterPlotControls.svelte +306 -0
- package/dist/src/lib/plot/ScatterPoint.svelte +182 -0
- package/dist/src/lib/plot/SpacegroupBarPlot.svelte +293 -0
- package/dist/src/lib/plot/Surface3D.svelte +197 -0
- package/dist/src/lib/plot/ZeroLines.svelte +97 -0
- package/dist/src/lib/plot/ZoomRect.svelte +23 -0
- package/dist/src/lib/plot/adaptive-density.ts +316 -0
- package/dist/src/lib/plot/auto-place.ts +184 -0
- package/dist/src/lib/plot/axis-utils.ts +122 -0
- package/dist/src/lib/plot/binned-scatter-types.ts +83 -0
- package/dist/src/lib/plot/data-cleaning.ts +1069 -0
- package/dist/src/lib/plot/data-transform.ts +69 -0
- package/dist/src/lib/plot/defaults.ts +9 -0
- package/dist/src/lib/plot/fill-utils.ts +494 -0
- package/dist/src/lib/plot/hover-lock.svelte.ts +60 -0
- package/dist/src/lib/plot/index.ts +53 -0
- package/dist/src/lib/plot/interactions.ts +119 -0
- package/dist/src/lib/plot/layout.ts +425 -0
- package/dist/src/lib/plot/reference-line.ts +426 -0
- package/dist/src/lib/plot/scales.ts +654 -0
- package/dist/src/lib/plot/svg.ts +23 -0
- package/dist/src/lib/plot/types.ts +1144 -0
- package/dist/src/lib/plot/utils/label-placement.ts +541 -0
- package/dist/src/lib/plot/utils/series-visibility.ts +140 -0
- package/dist/src/lib/plot/utils.ts +11 -0
- package/dist/src/lib/rdf/RdfPlot.svelte +247 -0
- package/dist/src/lib/rdf/calc-rdf.ts +167 -0
- package/dist/src/lib/rdf/index.ts +27 -0
- package/dist/src/lib/sanitize.ts +126 -0
- package/dist/src/lib/settings.ts +1479 -0
- package/dist/src/lib/spectral/Bands.svelte +1040 -0
- package/dist/src/lib/spectral/BandsAndDos.svelte +134 -0
- package/dist/src/lib/spectral/BrillouinBandsDos.svelte +252 -0
- package/dist/src/lib/spectral/Dos.svelte +697 -0
- package/dist/src/lib/spectral/helpers.ts +1381 -0
- package/dist/src/lib/spectral/index.ts +8 -0
- package/dist/src/lib/spectral/types.ts +112 -0
- package/dist/src/lib/state.svelte.ts +64 -0
- package/dist/src/lib/structure/Arrow.svelte +72 -0
- package/dist/src/lib/structure/AtomLegend.svelte +815 -0
- package/dist/src/lib/structure/Bond.svelte +140 -0
- package/dist/src/lib/structure/CanvasTooltip.svelte +33 -0
- package/dist/src/lib/structure/CellSelect.svelte +349 -0
- package/dist/src/lib/structure/Cylinder.svelte +45 -0
- package/dist/src/lib/structure/Lattice.svelte +196 -0
- package/dist/src/lib/structure/Structure.svelte +2248 -0
- package/dist/src/lib/structure/StructureControls.svelte +1273 -0
- package/dist/src/lib/structure/StructureExportPane.svelte +252 -0
- package/dist/src/lib/structure/StructureInfoPane.svelte +737 -0
- package/dist/src/lib/structure/StructureScene.svelte +2255 -0
- package/dist/src/lib/structure/atom-properties.ts +316 -0
- package/dist/src/lib/structure/bond-order-perception.ts +447 -0
- package/dist/src/lib/structure/bonding.ts +944 -0
- package/dist/src/lib/structure/export.ts +861 -0
- package/dist/src/lib/structure/index.ts +291 -0
- package/dist/src/lib/structure/label-placement.ts +130 -0
- package/dist/src/lib/structure/measure.ts +45 -0
- package/dist/src/lib/structure/parse.ts +1705 -0
- package/dist/src/lib/structure/partial-occupancy.ts +183 -0
- package/dist/src/lib/structure/pbc.ts +164 -0
- package/dist/src/lib/structure/supercell.ts +226 -0
- package/dist/src/lib/structure/validation.ts +11 -0
- package/dist/src/lib/symmetry/SymmetryStats.svelte +226 -0
- package/dist/src/lib/symmetry/WyckoffTable.svelte +120 -0
- package/dist/src/lib/symmetry/cell-transform.ts +118 -0
- package/dist/src/lib/symmetry/index.ts +348 -0
- package/dist/src/lib/symmetry/spacegroups.ts +404 -0
- package/dist/src/lib/table/HeatmapTable.svelte +1833 -0
- package/dist/src/lib/table/ToggleMenu.svelte +385 -0
- package/dist/src/lib/table/index.ts +139 -0
- package/dist/src/lib/theme/ThemeControl.svelte +53 -0
- package/dist/src/lib/theme/index.ts +107 -0
- package/dist/src/lib/theme/themes.mjs +297 -0
- package/dist/src/lib/time.ts +71 -0
- package/dist/src/lib/tooltip/TooltipContent.svelte +58 -0
- package/dist/src/lib/tooltip/index.ts +2 -0
- package/dist/src/lib/tooltip/types.ts +13 -0
- package/dist/src/lib/trajectory/Trajectory.svelte +1545 -0
- package/dist/src/lib/trajectory/TrajectoryError.svelte +128 -0
- package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +357 -0
- package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +313 -0
- package/dist/src/lib/trajectory/constants.ts +7 -0
- package/dist/src/lib/trajectory/extract.ts +196 -0
- package/dist/src/lib/trajectory/format-detect.ts +96 -0
- package/dist/src/lib/trajectory/frame-reader.ts +456 -0
- package/dist/src/lib/trajectory/helpers.ts +217 -0
- package/dist/src/lib/trajectory/index.ts +218 -0
- package/dist/src/lib/trajectory/parse/ase.ts +109 -0
- package/dist/src/lib/trajectory/parse/hdf5.ts +173 -0
- package/dist/src/lib/trajectory/parse/index.ts +411 -0
- package/dist/src/lib/trajectory/parse/lammps.ts +215 -0
- package/dist/src/lib/trajectory/parse/vasp.ts +102 -0
- package/dist/src/lib/trajectory/parse/xyz.ts +143 -0
- package/dist/src/lib/trajectory/plotting.ts +599 -0
- package/dist/src/lib/trajectory/types.ts +13 -0
- package/dist/src/lib/utils.ts +56 -0
- package/dist/src/lib/xrd/XrdPlot.svelte +615 -0
- package/dist/src/lib/xrd/broadening.ts +130 -0
- package/dist/src/lib/xrd/calc-xrd.ts +397 -0
- package/dist/src/lib/xrd/index.ts +38 -0
- package/dist/src/lib/xrd/parse.ts +858 -0
- package/dist/webview.js +29421 -0
- package/icon.png +0 -0
- package/license +1 -1
- package/matterviz-0.3.2.vsix +0 -0
- package/matterviz-0.3.4.vsix +0 -0
- package/matterviz-0.3.5.vsix +0 -0
- package/package.json +1460 -215
- package/readme.md +171 -98
- package/scripts/sync-config.ts +101 -0
- package/src/declarations.d.ts +2 -0
- package/src/extension.ts +972 -0
- package/src/node-io.ts +65 -0
- package/src/types.ts +17 -0
- package/src/webview/JsonBrowser.svelte +1079 -0
- package/src/webview/PlotPanel.svelte +346 -0
- package/src/webview/detect.ts +444 -0
- package/src/webview/main.ts +764 -0
- package/src/webview/plot-utils.ts +250 -0
- package/test-fixtures/all-viz-types.json.gz +0 -0
- package/test-fixtures/plot-demo-data.json.gz +0 -0
- package/tests/detect.test.ts +604 -0
- package/tests/extension.test.ts +2041 -0
- package/tests/node-io.test.ts +39 -0
- package/tests/plot-utils.test.ts +302 -0
- package/tests/vite-plugin-json-gz.test.ts +114 -0
- package/tests/vscode-mock.ts +18 -0
- package/tests/webview.test.ts +231 -0
- package/tsconfig.json +20 -0
- package/vite-plugin-json-gz.ts +29 -0
- package/vite.config.ts +34 -0
- package/vite.extension.config.ts +34 -0
- package/dist/EmptyState.svelte.d.ts +0 -9
- package/dist/FilePicker.svelte +0 -360
- package/dist/FilePicker.svelte.d.ts +0 -17
- package/dist/Icon.svelte.d.ts +0 -13
- package/dist/MillerIndexInput.svelte +0 -66
- package/dist/MillerIndexInput.svelte.d.ts +0 -7
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/api/optimade.d.ts +0 -45
- package/dist/api/optimade.js +0 -135
- package/dist/brillouin/BrillouinZone.svelte +0 -546
- package/dist/brillouin/BrillouinZone.svelte.d.ts +0 -83
- package/dist/brillouin/BrillouinZoneControls.svelte +0 -144
- package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +0 -17
- package/dist/brillouin/BrillouinZoneExportPane.svelte +0 -148
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +0 -15
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +0 -146
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +0 -13
- package/dist/brillouin/BrillouinZoneScene.svelte +0 -476
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +0 -48
- package/dist/brillouin/BrillouinZoneTooltip.svelte +0 -92
- package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +0 -8
- package/dist/brillouin/compute.d.ts +0 -17
- package/dist/brillouin/compute.js +0 -426
- package/dist/brillouin/index.d.ts +0 -8
- package/dist/brillouin/index.js +0 -8
- package/dist/brillouin/types.d.ts +0 -48
- package/dist/brillouin/types.js +0 -1
- package/dist/chempot-diagram/ChemPotDiagram.svelte +0 -327
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +0 -13
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +0 -847
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +0 -16
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +0 -3194
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +0 -16
- package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +0 -7
- package/dist/chempot-diagram/async-compute.svelte.d.ts +0 -3
- package/dist/chempot-diagram/async-compute.svelte.js +0 -78
- package/dist/chempot-diagram/chempot-worker.d.ts +0 -1
- package/dist/chempot-diagram/chempot-worker.js +0 -11
- package/dist/chempot-diagram/color.d.ts +0 -10
- package/dist/chempot-diagram/color.js +0 -32
- package/dist/chempot-diagram/compute.d.ts +0 -48
- package/dist/chempot-diagram/compute.js +0 -812
- package/dist/chempot-diagram/index.d.ts +0 -6
- package/dist/chempot-diagram/index.js +0 -6
- package/dist/chempot-diagram/pointer.d.ts +0 -16
- package/dist/chempot-diagram/pointer.js +0 -40
- package/dist/chempot-diagram/temperature.d.ts +0 -15
- package/dist/chempot-diagram/temperature.js +0 -36
- package/dist/chempot-diagram/types.d.ts +0 -86
- package/dist/chempot-diagram/types.js +0 -28
- package/dist/colors/index.d.ts +0 -47
- package/dist/colors/index.js +0 -203
- package/dist/composition/BarChart.svelte +0 -297
- package/dist/composition/BarChart.svelte.d.ts +0 -39
- package/dist/composition/BubbleChart.svelte +0 -218
- package/dist/composition/BubbleChart.svelte.d.ts +0 -28
- package/dist/composition/Composition.svelte +0 -164
- package/dist/composition/Composition.svelte.d.ts +0 -15
- package/dist/composition/Formula.svelte +0 -265
- package/dist/composition/Formula.svelte.d.ts +0 -19
- package/dist/composition/FormulaFilter.svelte +0 -1259
- package/dist/composition/FormulaFilter.svelte.d.ts +0 -51
- package/dist/composition/PieChart.svelte +0 -323
- package/dist/composition/PieChart.svelte.d.ts +0 -37
- package/dist/composition/format.d.ts +0 -15
- package/dist/composition/format.js +0 -109
- package/dist/composition/index.d.ts +0 -20
- package/dist/composition/index.js +0 -14
- package/dist/composition/parse.d.ts +0 -55
- package/dist/composition/parse.js +0 -459
- package/dist/constants.d.ts +0 -29
- package/dist/constants.js +0 -99
- package/dist/controls.d.ts +0 -14
- package/dist/controls.js +0 -30
- package/dist/convex-hull/ConvexHull.svelte +0 -157
- package/dist/convex-hull/ConvexHull.svelte.d.ts +0 -13
- package/dist/convex-hull/ConvexHull2D.svelte +0 -814
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +0 -11
- package/dist/convex-hull/ConvexHull3D.svelte +0 -1790
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +0 -8
- package/dist/convex-hull/ConvexHull4D.svelte +0 -1386
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +0 -8
- package/dist/convex-hull/ConvexHullControls.svelte +0 -546
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +0 -48
- package/dist/convex-hull/ConvexHullInfoPane.svelte +0 -122
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +0 -18
- package/dist/convex-hull/ConvexHullStats.svelte +0 -922
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +0 -15
- package/dist/convex-hull/ConvexHullTooltip.svelte +0 -131
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +0 -33
- package/dist/convex-hull/GasPressureControls.svelte +0 -247
- package/dist/convex-hull/GasPressureControls.svelte.d.ts +0 -11
- package/dist/convex-hull/StructurePopup.svelte +0 -116
- package/dist/convex-hull/StructurePopup.svelte.d.ts +0 -18
- package/dist/convex-hull/TemperatureSlider.svelte +0 -137
- package/dist/convex-hull/TemperatureSlider.svelte.d.ts +0 -8
- package/dist/convex-hull/barycentric-coords.d.ts +0 -18
- package/dist/convex-hull/barycentric-coords.js +0 -182
- package/dist/convex-hull/demo-temperature.d.ts +0 -6
- package/dist/convex-hull/demo-temperature.js +0 -40
- package/dist/convex-hull/gas-thermodynamics.d.ts +0 -16
- package/dist/convex-hull/gas-thermodynamics.js +0 -316
- package/dist/convex-hull/helpers.d.ts +0 -103
- package/dist/convex-hull/helpers.js +0 -689
- package/dist/convex-hull/index.d.ts +0 -118
- package/dist/convex-hull/index.js +0 -57
- package/dist/convex-hull/thermodynamics.d.ts +0 -66
- package/dist/convex-hull/thermodynamics.js +0 -1752
- package/dist/convex-hull/types.d.ts +0 -162
- package/dist/convex-hull/types.js +0 -36
- package/dist/coordination/CoordinationBarPlot.svelte +0 -311
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +0 -30
- package/dist/coordination/calc-coordination.d.ts +0 -15
- package/dist/coordination/calc-coordination.js +0 -63
- package/dist/coordination/index.d.ts +0 -8
- package/dist/coordination/index.js +0 -7
- package/dist/element/BohrAtom.svelte +0 -147
- package/dist/element/BohrAtom.svelte.d.ts +0 -20
- package/dist/element/ElementHeading.svelte +0 -26
- package/dist/element/ElementHeading.svelte.d.ts +0 -8
- package/dist/element/ElementPhoto.svelte +0 -57
- package/dist/element/ElementPhoto.svelte.d.ts +0 -9
- package/dist/element/ElementStats.svelte +0 -80
- package/dist/element/ElementStats.svelte.d.ts +0 -8
- package/dist/element/ElementTile.svelte +0 -484
- package/dist/element/ElementTile.svelte.d.ts +0 -29
- package/dist/element/Nucleus.svelte.d.ts +0 -17
- package/dist/element/data.d.ts +0 -2
- package/dist/element/data.js +0 -2
- package/dist/element/data.json.gz.d.ts +0 -2
- package/dist/element/index.d.ts +0 -8
- package/dist/element/index.js +0 -8
- package/dist/element/types.d.ts +0 -57
- package/dist/element/types.js +0 -1
- package/dist/feedback/ClickFeedback.svelte +0 -58
- package/dist/feedback/ClickFeedback.svelte.d.ts +0 -12
- package/dist/feedback/DragOverlay.svelte +0 -42
- package/dist/feedback/DragOverlay.svelte.d.ts +0 -7
- package/dist/feedback/Spinner.svelte.d.ts +0 -7
- package/dist/feedback/StatusMessage.svelte.d.ts +0 -9
- package/dist/feedback/index.d.ts +0 -4
- package/dist/feedback/index.js +0 -4
- package/dist/fermi-surface/FermiSlice.svelte +0 -189
- package/dist/fermi-surface/FermiSlice.svelte.d.ts +0 -24
- package/dist/fermi-surface/FermiSurface.svelte +0 -600
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +0 -83
- package/dist/fermi-surface/FermiSurfaceControls.svelte +0 -452
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +0 -35
- package/dist/fermi-surface/FermiSurfaceScene.svelte +0 -792
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +0 -50
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +0 -8
- package/dist/fermi-surface/compute.d.ts +0 -5
- package/dist/fermi-surface/compute.js +0 -538
- package/dist/fermi-surface/constants.d.ts +0 -9
- package/dist/fermi-surface/constants.js +0 -27
- package/dist/fermi-surface/export.d.ts +0 -5
- package/dist/fermi-surface/export.js +0 -63
- package/dist/fermi-surface/index.d.ts +0 -12
- package/dist/fermi-surface/index.js +0 -13
- package/dist/fermi-surface/marching-cubes.d.ts +0 -2
- package/dist/fermi-surface/marching-cubes.js +0 -2
- package/dist/fermi-surface/parse.d.ts +0 -2
- package/dist/fermi-surface/parse.js +0 -495
- package/dist/fermi-surface/symmetry.d.ts +0 -3
- package/dist/fermi-surface/symmetry.js +0 -46
- package/dist/fermi-surface/types.d.ts +0 -113
- package/dist/fermi-surface/types.js +0 -4
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +0 -1527
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +0 -110
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +0 -30
- package/dist/heatmap-matrix/index.d.ts +0 -53
- package/dist/heatmap-matrix/index.js +0 -100
- package/dist/heatmap-matrix/shared.d.ts +0 -2
- package/dist/heatmap-matrix/shared.js +0 -4
- package/dist/icons.d.ts +0 -569
- package/dist/icons.js +0 -648
- package/dist/index.d.ts +0 -39
- package/dist/index.js +0 -39
- package/dist/io/decompress.d.ts +0 -10
- package/dist/io/decompress.js +0 -74
- package/dist/io/export.d.ts +0 -16
- package/dist/io/export.js +0 -316
- package/dist/io/fetch.d.ts +0 -5
- package/dist/io/fetch.js +0 -39
- package/dist/io/file-drop.d.ts +0 -7
- package/dist/io/file-drop.js +0 -43
- package/dist/io/index.d.ts +0 -7
- package/dist/io/index.js +0 -7
- package/dist/io/is-binary.d.ts +0 -1
- package/dist/io/is-binary.js +0 -20
- package/dist/io/types.d.ts +0 -8
- package/dist/io/types.js +0 -1
- package/dist/io/url-drop.d.ts +0 -2
- package/dist/io/url-drop.js +0 -117
- package/dist/isosurface/Isosurface.svelte +0 -285
- package/dist/isosurface/Isosurface.svelte.d.ts +0 -8
- package/dist/isosurface/IsosurfaceControls.svelte +0 -291
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +0 -9
- package/dist/isosurface/index.d.ts +0 -5
- package/dist/isosurface/index.js +0 -6
- package/dist/isosurface/parse.d.ts +0 -6
- package/dist/isosurface/parse.js +0 -553
- package/dist/isosurface/slice.d.ts +0 -11
- package/dist/isosurface/slice.js +0 -140
- package/dist/isosurface/types.d.ts +0 -56
- package/dist/isosurface/types.js +0 -227
- package/dist/labels.d.ts +0 -53
- package/dist/labels.js +0 -274
- package/dist/layout/FullscreenToggle.svelte +0 -50
- package/dist/layout/FullscreenToggle.svelte.d.ts +0 -7
- package/dist/layout/InfoCard.svelte +0 -120
- package/dist/layout/InfoCard.svelte.d.ts +0 -21
- package/dist/layout/InfoTag.svelte +0 -183
- package/dist/layout/InfoTag.svelte.d.ts +0 -19
- package/dist/layout/PropertyFilter.svelte +0 -244
- package/dist/layout/PropertyFilter.svelte.d.ts +0 -24
- package/dist/layout/SettingsSection.svelte +0 -148
- package/dist/layout/SettingsSection.svelte.d.ts +0 -17
- package/dist/layout/SubpageGrid.svelte +0 -82
- package/dist/layout/SubpageGrid.svelte.d.ts +0 -14
- package/dist/layout/fullscreen.d.ts +0 -9
- package/dist/layout/fullscreen.js +0 -53
- package/dist/layout/index.d.ts +0 -10
- package/dist/layout/index.js +0 -8
- package/dist/layout/json-tree/JsonNode.svelte +0 -548
- package/dist/layout/json-tree/JsonNode.svelte.d.ts +0 -11
- package/dist/layout/json-tree/JsonTree.svelte +0 -1222
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +0 -6
- package/dist/layout/json-tree/JsonValue.svelte +0 -334
- package/dist/layout/json-tree/JsonValue.svelte.d.ts +0 -9
- package/dist/layout/json-tree/index.d.ts +0 -3
- package/dist/layout/json-tree/index.js +0 -3
- package/dist/layout/json-tree/types.d.ts +0 -73
- package/dist/layout/json-tree/types.js +0 -3
- package/dist/layout/json-tree/utils.d.ts +0 -29
- package/dist/layout/json-tree/utils.js +0 -649
- package/dist/marching-cubes.d.ts +0 -14
- package/dist/marching-cubes.js +0 -542
- package/dist/math.d.ts +0 -91
- package/dist/math.js +0 -896
- package/dist/overlays/ContextMenu.svelte +0 -162
- package/dist/overlays/ContextMenu.svelte.d.ts +0 -25
- package/dist/overlays/CopyButton.svelte +0 -45
- package/dist/overlays/CopyButton.svelte.d.ts +0 -8
- package/dist/overlays/DraggablePane.svelte +0 -564
- package/dist/overlays/DraggablePane.svelte.d.ts +0 -36
- package/dist/overlays/InfoPaneCards.svelte +0 -149
- package/dist/overlays/InfoPaneCards.svelte.d.ts +0 -22
- package/dist/overlays/index.d.ts +0 -2
- package/dist/overlays/index.js +0 -2
- package/dist/periodic-table/PeriodicTable.svelte +0 -469
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +0 -55
- package/dist/periodic-table/PeriodicTableControls.svelte +0 -557
- package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +0 -24
- package/dist/periodic-table/PropertySelect.svelte +0 -37
- package/dist/periodic-table/PropertySelect.svelte.d.ts +0 -13
- package/dist/periodic-table/TableInset.svelte.d.ts +0 -9
- package/dist/periodic-table/index.d.ts +0 -10
- package/dist/periodic-table/index.js +0 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1084
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +0 -44
- package/dist/phase-diagram/PhaseDiagramControls.svelte +0 -449
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +0 -30
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +0 -15
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +0 -192
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +0 -19
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +0 -392
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +0 -16
- package/dist/phase-diagram/TdbInfoPanel.svelte +0 -203
- package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +0 -12
- package/dist/phase-diagram/build-diagram.d.ts +0 -11
- package/dist/phase-diagram/build-diagram.js +0 -167
- package/dist/phase-diagram/colors.d.ts +0 -35
- package/dist/phase-diagram/colors.js +0 -51
- package/dist/phase-diagram/diagram-input.d.ts +0 -33
- package/dist/phase-diagram/diagram-input.js +0 -3
- package/dist/phase-diagram/index.d.ts +0 -13
- package/dist/phase-diagram/index.js +0 -13
- package/dist/phase-diagram/parse.d.ts +0 -55
- package/dist/phase-diagram/parse.js +0 -276
- package/dist/phase-diagram/svg-to-diagram.d.ts +0 -2
- package/dist/phase-diagram/svg-to-diagram.js +0 -867
- package/dist/phase-diagram/types.d.ts +0 -99
- package/dist/phase-diagram/types.js +0 -1
- package/dist/phase-diagram/utils.d.ts +0 -118
- package/dist/phase-diagram/utils.js +0 -606
- package/dist/plot/AxisLabel.svelte +0 -51
- package/dist/plot/AxisLabel.svelte.d.ts +0 -16
- package/dist/plot/BarPlot.svelte +0 -2265
- package/dist/plot/BarPlot.svelte.d.ts +0 -83
- package/dist/plot/BarPlotControls.svelte +0 -66
- package/dist/plot/BarPlotControls.svelte.d.ts +0 -18
- package/dist/plot/ColorBar.svelte +0 -719
- package/dist/plot/ColorBar.svelte.d.ts +0 -31
- package/dist/plot/ColorScaleSelect.svelte +0 -54
- package/dist/plot/ColorScaleSelect.svelte.d.ts +0 -15
- package/dist/plot/ElementScatter.svelte +0 -63
- package/dist/plot/ElementScatter.svelte.d.ts +0 -14
- package/dist/plot/FillArea.svelte +0 -225
- package/dist/plot/FillArea.svelte.d.ts +0 -21
- package/dist/plot/Histogram.svelte +0 -1672
- package/dist/plot/Histogram.svelte.d.ts +0 -50
- package/dist/plot/HistogramControls.svelte +0 -212
- package/dist/plot/HistogramControls.svelte.d.ts +0 -22
- package/dist/plot/InteractiveAxisLabel.svelte +0 -94
- package/dist/plot/InteractiveAxisLabel.svelte.d.ts +0 -14
- package/dist/plot/Line.svelte +0 -84
- package/dist/plot/Line.svelte.d.ts +0 -15
- package/dist/plot/PlotControls.svelte +0 -537
- package/dist/plot/PlotControls.svelte.d.ts +0 -4
- package/dist/plot/PlotLegend.svelte +0 -569
- package/dist/plot/PlotLegend.svelte.d.ts +0 -29
- package/dist/plot/PlotTooltip.svelte +0 -67
- package/dist/plot/PlotTooltip.svelte.d.ts +0 -17
- package/dist/plot/PortalSelect.svelte +0 -253
- package/dist/plot/PortalSelect.svelte.d.ts +0 -16
- package/dist/plot/ReferenceLine.svelte.d.ts +0 -20
- package/dist/plot/ReferenceLine3D.svelte +0 -154
- package/dist/plot/ReferenceLine3D.svelte.d.ts +0 -14
- package/dist/plot/ReferencePlane.svelte +0 -178
- package/dist/plot/ReferencePlane.svelte.d.ts +0 -14
- package/dist/plot/ScatterPlot.svelte +0 -2845
- package/dist/plot/ScatterPlot.svelte.d.ts +0 -93
- package/dist/plot/ScatterPlot3D.svelte +0 -502
- package/dist/plot/ScatterPlot3D.svelte.d.ts +0 -94
- package/dist/plot/ScatterPlot3DControls.svelte +0 -437
- package/dist/plot/ScatterPlot3DControls.svelte.d.ts +0 -20
- package/dist/plot/ScatterPlot3DScene.svelte +0 -912
- package/dist/plot/ScatterPlot3DScene.svelte.d.ts +0 -74
- package/dist/plot/ScatterPlotControls.svelte +0 -307
- package/dist/plot/ScatterPlotControls.svelte.d.ts +0 -17
- package/dist/plot/ScatterPoint.svelte +0 -191
- package/dist/plot/ScatterPoint.svelte.d.ts +0 -21
- package/dist/plot/SpacegroupBarPlot.svelte +0 -293
- package/dist/plot/SpacegroupBarPlot.svelte.d.ts +0 -9
- package/dist/plot/Surface3D.svelte +0 -200
- package/dist/plot/Surface3D.svelte.d.ts +0 -13
- package/dist/plot/ZeroLines.svelte +0 -96
- package/dist/plot/ZeroLines.svelte.d.ts +0 -32
- package/dist/plot/ZoomRect.svelte +0 -23
- package/dist/plot/ZoomRect.svelte.d.ts +0 -8
- package/dist/plot/axis-utils.d.ts +0 -19
- package/dist/plot/axis-utils.js +0 -80
- package/dist/plot/data-cleaning.d.ts +0 -37
- package/dist/plot/data-cleaning.js +0 -855
- package/dist/plot/data-transform.d.ts +0 -16
- package/dist/plot/data-transform.js +0 -45
- package/dist/plot/defaults.d.ts +0 -19
- package/dist/plot/defaults.js +0 -9
- package/dist/plot/fill-utils.d.ts +0 -51
- package/dist/plot/fill-utils.js +0 -337
- package/dist/plot/hover-lock.svelte.d.ts +0 -14
- package/dist/plot/hover-lock.svelte.js +0 -46
- package/dist/plot/index.d.ts +0 -37
- package/dist/plot/index.js +0 -37
- package/dist/plot/interactions.d.ts +0 -12
- package/dist/plot/interactions.js +0 -100
- package/dist/plot/layout.d.ts +0 -60
- package/dist/plot/layout.js +0 -230
- package/dist/plot/reference-line.d.ts +0 -60
- package/dist/plot/reference-line.js +0 -316
- package/dist/plot/scales.d.ts +0 -48
- package/dist/plot/scales.js +0 -484
- package/dist/plot/svg.d.ts +0 -1
- package/dist/plot/svg.js +0 -11
- package/dist/plot/types.d.ts +0 -859
- package/dist/plot/types.js +0 -103
- package/dist/plot/utils/label-placement.d.ts +0 -47
- package/dist/plot/utils/label-placement.js +0 -256
- package/dist/plot/utils/series-visibility.d.ts +0 -9
- package/dist/plot/utils/series-visibility.js +0 -67
- package/dist/plot/utils.d.ts +0 -1
- package/dist/plot/utils.js +0 -14
- package/dist/rdf/RdfPlot.svelte +0 -247
- package/dist/rdf/RdfPlot.svelte.d.ts +0 -27
- package/dist/rdf/calc-rdf.d.ts +0 -4
- package/dist/rdf/calc-rdf.js +0 -111
- package/dist/rdf/index.d.ts +0 -23
- package/dist/rdf/index.js +0 -2
- package/dist/sanitize.d.ts +0 -4
- package/dist/sanitize.js +0 -114
- package/dist/settings.d.ts +0 -255
- package/dist/settings.js +0 -1132
- package/dist/spectral/Bands.svelte +0 -1040
- package/dist/spectral/Bands.svelte.d.ts +0 -40
- package/dist/spectral/BandsAndDos.svelte +0 -128
- package/dist/spectral/BandsAndDos.svelte.d.ts +0 -18
- package/dist/spectral/BrillouinBandsDos.svelte +0 -248
- package/dist/spectral/BrillouinBandsDos.svelte.d.ts +0 -20
- package/dist/spectral/Dos.svelte +0 -697
- package/dist/spectral/Dos.svelte.d.ts +0 -29
- package/dist/spectral/helpers.d.ts +0 -117
- package/dist/spectral/helpers.js +0 -1023
- package/dist/spectral/index.d.ts +0 -6
- package/dist/spectral/index.js +0 -7
- package/dist/spectral/types.d.ts +0 -84
- package/dist/spectral/types.js +0 -2
- package/dist/state.svelte.d.ts +0 -25
- package/dist/state.svelte.js +0 -45
- package/dist/structure/Arrow.svelte +0 -72
- package/dist/structure/Arrow.svelte.d.ts +0 -15
- package/dist/structure/AtomLegend.svelte +0 -798
- package/dist/structure/AtomLegend.svelte.d.ts +0 -34
- package/dist/structure/Bond.svelte +0 -140
- package/dist/structure/Bond.svelte.d.ts +0 -9
- package/dist/structure/CanvasTooltip.svelte +0 -33
- package/dist/structure/CanvasTooltip.svelte.d.ts +0 -12
- package/dist/structure/CellSelect.svelte +0 -351
- package/dist/structure/CellSelect.svelte.d.ts +0 -13
- package/dist/structure/Cylinder.svelte +0 -45
- package/dist/structure/Cylinder.svelte.d.ts +0 -10
- package/dist/structure/Lattice.svelte +0 -196
- package/dist/structure/Lattice.svelte.d.ts +0 -17
- package/dist/structure/Structure.svelte +0 -1999
- package/dist/structure/Structure.svelte.d.ts +0 -87
- package/dist/structure/StructureControls.svelte +0 -1298
- package/dist/structure/StructureControls.svelte.d.ts +0 -31
- package/dist/structure/StructureExportPane.svelte +0 -251
- package/dist/structure/StructureExportPane.svelte.d.ts +0 -17
- package/dist/structure/StructureInfoPane.svelte +0 -735
- package/dist/structure/StructureInfoPane.svelte.d.ts +0 -19
- package/dist/structure/StructureScene.svelte +0 -1905
- package/dist/structure/StructureScene.svelte.d.ts +0 -108
- package/dist/structure/atom-properties.d.ts +0 -37
- package/dist/structure/atom-properties.js +0 -200
- package/dist/structure/bond-order-perception.d.ts +0 -13
- package/dist/structure/bond-order-perception.js +0 -367
- package/dist/structure/bonding.d.ts +0 -42
- package/dist/structure/bonding.js +0 -525
- package/dist/structure/export.d.ts +0 -20
- package/dist/structure/export.js +0 -727
- package/dist/structure/index.d.ts +0 -125
- package/dist/structure/index.js +0 -171
- package/dist/structure/label-placement.d.ts +0 -14
- package/dist/structure/label-placement.js +0 -72
- package/dist/structure/measure.d.ts +0 -6
- package/dist/structure/measure.js +0 -29
- package/dist/structure/parse.d.ts +0 -66
- package/dist/structure/parse.js +0 -1363
- package/dist/structure/partial-occupancy.d.ts +0 -25
- package/dist/structure/partial-occupancy.js +0 -99
- package/dist/structure/pbc.d.ts +0 -9
- package/dist/structure/pbc.js +0 -123
- package/dist/structure/supercell.d.ts +0 -8
- package/dist/structure/supercell.js +0 -170
- package/dist/structure/validation.d.ts +0 -2
- package/dist/structure/validation.js +0 -10
- package/dist/symmetry/SymmetryStats.svelte +0 -226
- package/dist/symmetry/SymmetryStats.svelte.d.ts +0 -21
- package/dist/symmetry/WyckoffTable.svelte +0 -113
- package/dist/symmetry/WyckoffTable.svelte.d.ts +0 -11
- package/dist/symmetry/cell-transform.d.ts +0 -12
- package/dist/symmetry/cell-transform.js +0 -91
- package/dist/symmetry/index.d.ts +0 -43
- package/dist/symmetry/index.js +0 -229
- package/dist/symmetry/spacegroups.d.ts +0 -9
- package/dist/symmetry/spacegroups.js +0 -394
- package/dist/table/HeatmapTable.svelte +0 -1854
- package/dist/table/HeatmapTable.svelte.d.ts +0 -49
- package/dist/table/ToggleMenu.svelte +0 -376
- package/dist/table/ToggleMenu.svelte.d.ts +0 -11
- package/dist/table/index.d.ts +0 -74
- package/dist/table/index.js +0 -38
- package/dist/theme/ThemeControl.svelte +0 -53
- package/dist/theme/ThemeControl.svelte.d.ts +0 -9
- package/dist/theme/index.d.ts +0 -29
- package/dist/theme/index.js +0 -79
- package/dist/theme/themes.mjs +0 -285
- package/dist/time.d.ts +0 -4
- package/dist/time.js +0 -70
- package/dist/tooltip/TooltipContent.svelte +0 -58
- package/dist/tooltip/TooltipContent.svelte.d.ts +0 -31
- package/dist/tooltip/index.d.ts +0 -2
- package/dist/tooltip/index.js +0 -2
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/tooltip/types.js +0 -1
- package/dist/trajectory/Trajectory.svelte +0 -1517
- package/dist/trajectory/Trajectory.svelte.d.ts +0 -77
- package/dist/trajectory/TrajectoryError.svelte +0 -128
- package/dist/trajectory/TrajectoryError.svelte.d.ts +0 -13
- package/dist/trajectory/TrajectoryExportPane.svelte +0 -357
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +0 -17
- package/dist/trajectory/TrajectoryInfoPane.svelte +0 -313
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +0 -17
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -7
- package/dist/trajectory/extract.d.ts +0 -5
- package/dist/trajectory/extract.js +0 -162
- package/dist/trajectory/format-detect.d.ts +0 -9
- package/dist/trajectory/format-detect.js +0 -76
- package/dist/trajectory/frame-reader.d.ts +0 -17
- package/dist/trajectory/frame-reader.js +0 -332
- package/dist/trajectory/helpers.d.ts +0 -14
- package/dist/trajectory/helpers.js +0 -172
- package/dist/trajectory/index.d.ts +0 -63
- package/dist/trajectory/index.js +0 -126
- package/dist/trajectory/parse/ase.d.ts +0 -2
- package/dist/trajectory/parse/ase.js +0 -73
- package/dist/trajectory/parse/hdf5.d.ts +0 -2
- package/dist/trajectory/parse/hdf5.js +0 -127
- package/dist/trajectory/parse/index.d.ts +0 -12
- package/dist/trajectory/parse/index.js +0 -299
- package/dist/trajectory/parse/lammps.d.ts +0 -5
- package/dist/trajectory/parse/lammps.js +0 -179
- package/dist/trajectory/parse/vasp.d.ts +0 -2
- package/dist/trajectory/parse/vasp.js +0 -68
- package/dist/trajectory/parse/xyz.d.ts +0 -2
- package/dist/trajectory/parse/xyz.js +0 -110
- package/dist/trajectory/plotting.d.ts +0 -28
- package/dist/trajectory/plotting.js +0 -423
- package/dist/trajectory/types.d.ts +0 -11
- package/dist/trajectory/types.js +0 -1
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js +0 -36
- package/dist/xrd/XrdPlot.svelte +0 -615
- package/dist/xrd/XrdPlot.svelte.d.ts +0 -28
- package/dist/xrd/broadening.d.ts +0 -20
- package/dist/xrd/broadening.js +0 -97
- package/dist/xrd/calc-xrd.d.ts +0 -37
- package/dist/xrd/calc-xrd.js +0 -337
- package/dist/xrd/index.d.ts +0 -37
- package/dist/xrd/index.js +0 -4
- package/dist/xrd/parse.d.ts +0 -13
- package/dist/xrd/parse.js +0 -749
- /package/dist/{EmptyState.svelte → src/lib/EmptyState.svelte} +0 -0
- /package/dist/{Icon.svelte → src/lib/Icon.svelte} +0 -0
- /package/dist/{app.css → src/lib/app.css} +0 -0
- /package/dist/{chempot-diagram → src/lib/chempot-diagram}/ChemPotScene3D.svelte +0 -0
- /package/dist/{colors → src/lib/colors}/alloy-colors.json +0 -0
- /package/dist/{colors → src/lib/colors}/dark-mode-colors.json +0 -0
- /package/dist/{colors → src/lib/colors}/jmol-colors.json +0 -0
- /package/dist/{colors → src/lib/colors}/muted-colors.json +0 -0
- /package/dist/{colors → src/lib/colors}/pastel-colors.json +0 -0
- /package/dist/{colors → src/lib/colors}/vesta-colors.json +0 -0
- /package/dist/{element → src/lib/element}/Nucleus.svelte +0 -0
- /package/dist/{element → src/lib/element}/data.json +0 -0
- /package/dist/{element → src/lib/element}/data.json.gz +0 -0
- /package/dist/{element → src/lib/element}/data.schema.json +0 -0
- /package/dist/{element-image-urls.json → src/lib/element-image-urls.json} +0 -0
- /package/dist/{feedback → src/lib/feedback}/Spinner.svelte +0 -0
- /package/dist/{feedback → src/lib/feedback}/StatusMessage.svelte +0 -0
- /package/dist/{periodic-table → src/lib/periodic-table}/TableInset.svelte +0 -0
- /package/dist/{plot → src/lib/plot}/ReferenceLine.svelte +0 -0
- /package/dist/{xrd → src/lib/xrd}/atomic_scattering_params.json +0 -0
package/dist/structure/export.js
DELETED
|
@@ -1,727 +0,0 @@
|
|
|
1
|
-
import { get_electro_neg_formula } from '../composition';
|
|
2
|
-
import { download } from '../io/fetch';
|
|
3
|
-
import * as math from '../math';
|
|
4
|
-
import { Color, Group, Matrix4, Mesh, MeshStandardMaterial, ShaderMaterial } from 'three';
|
|
5
|
-
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js';
|
|
6
|
-
import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter.js';
|
|
7
|
-
// Type guard to check if a material has a color property (duck typing for bundler compatibility)
|
|
8
|
-
// Uses duck typing to work across different Three.js instances (Threlte vs vanilla Three.js)
|
|
9
|
-
export function has_color_property(mat) {
|
|
10
|
-
if (!(`color` in mat))
|
|
11
|
-
return false;
|
|
12
|
-
const color = mat.color;
|
|
13
|
-
if (!color || typeof color !== `object`)
|
|
14
|
-
return false;
|
|
15
|
-
// Check for Color-like object with numeric r/g/b channels (duck typing)
|
|
16
|
-
const color_obj = color;
|
|
17
|
-
const red_channel = color_obj.r;
|
|
18
|
-
const green_channel = color_obj.g;
|
|
19
|
-
const blue_channel = color_obj.b;
|
|
20
|
-
return (typeof red_channel === `number` &&
|
|
21
|
-
typeof green_channel === `number` &&
|
|
22
|
-
typeof blue_channel === `number`);
|
|
23
|
-
}
|
|
24
|
-
// Extract color from a ShaderMaterial by checking common color uniform patterns
|
|
25
|
-
function extract_shader_color(shader_mat) {
|
|
26
|
-
const uniforms = shader_mat.uniforms;
|
|
27
|
-
if (!uniforms)
|
|
28
|
-
return null;
|
|
29
|
-
// Check for common color uniform names
|
|
30
|
-
for (const key of [`color`, `diffuse`, `baseColor`, `uColor`]) {
|
|
31
|
-
if (uniforms[key]?.value instanceof Color) {
|
|
32
|
-
return uniforms[key].value.clone();
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// For gradient bonds, try to extract midpoint color from instanceColorStart/End attributes
|
|
36
|
-
// These are set as geometry attributes, not uniforms, so we return a default gray
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
// Convert ShaderMaterial to MeshStandardMaterial for export compatibility
|
|
40
|
-
function convert_shader_to_standard(shader_mat) {
|
|
41
|
-
const extracted_color = extract_shader_color(shader_mat);
|
|
42
|
-
const standard_mat = new MeshStandardMaterial({
|
|
43
|
-
color: extracted_color ?? new Color(0.5, 0.5, 0.5),
|
|
44
|
-
metalness: 0.1,
|
|
45
|
-
roughness: 0.5,
|
|
46
|
-
});
|
|
47
|
-
standard_mat.name = shader_mat.name || `converted_shader_material`;
|
|
48
|
-
return standard_mat;
|
|
49
|
-
}
|
|
50
|
-
// Extract bond gradient colors from geometry attributes for a specific instance
|
|
51
|
-
// Returns midpoint color between start and end colors for the bond
|
|
52
|
-
export function extract_bond_color_for_instance(geometry, instance_idx) {
|
|
53
|
-
const color_start_attr = geometry.getAttribute(`instanceColorStart`);
|
|
54
|
-
const color_end_attr = geometry.getAttribute(`instanceColorEnd`);
|
|
55
|
-
if (!color_start_attr || !color_end_attr)
|
|
56
|
-
return null;
|
|
57
|
-
if (instance_idx < 0 || instance_idx >= color_start_attr.count)
|
|
58
|
-
return null;
|
|
59
|
-
// Get RGB values for this instance and compute midpoint color
|
|
60
|
-
const start_rgb = [
|
|
61
|
-
color_start_attr.getX(instance_idx),
|
|
62
|
-
color_start_attr.getY(instance_idx),
|
|
63
|
-
color_start_attr.getZ(instance_idx),
|
|
64
|
-
];
|
|
65
|
-
const end_rgb = [
|
|
66
|
-
color_end_attr.getX(instance_idx),
|
|
67
|
-
color_end_attr.getY(instance_idx),
|
|
68
|
-
color_end_attr.getZ(instance_idx),
|
|
69
|
-
];
|
|
70
|
-
const [mid_r, mid_g, mid_b] = math.scale(math.add(start_rgb, end_rgb), 0.5);
|
|
71
|
-
return new Color(mid_r, mid_g, mid_b);
|
|
72
|
-
}
|
|
73
|
-
// Remove custom/non-standard attributes from geometry that cause export issues
|
|
74
|
-
// Standard GLTF attributes: position, normal, tangent, texcoord_N, color_N, joints_N, weights_N
|
|
75
|
-
export function clean_geometry_for_export(geometry) {
|
|
76
|
-
const standard_attrs = new Set([
|
|
77
|
-
`position`,
|
|
78
|
-
`normal`,
|
|
79
|
-
`tangent`,
|
|
80
|
-
`uv`,
|
|
81
|
-
`uv1`,
|
|
82
|
-
`uv2`,
|
|
83
|
-
`uv3`,
|
|
84
|
-
`color`,
|
|
85
|
-
`skinIndex`,
|
|
86
|
-
`skinWeight`,
|
|
87
|
-
]);
|
|
88
|
-
const attrs_to_remove = [];
|
|
89
|
-
for (const attr_name of Object.keys(geometry.attributes)) {
|
|
90
|
-
// Keep standard attributes and those starting with underscore (GLTF custom)
|
|
91
|
-
// But remove instance-specific attributes that cause accessor count mismatches
|
|
92
|
-
const lower_name = attr_name.toLowerCase();
|
|
93
|
-
if (lower_name.includes(`instance`) ||
|
|
94
|
-
(lower_name.includes(`color`) && !standard_attrs.has(lower_name)))
|
|
95
|
-
attrs_to_remove.push(attr_name);
|
|
96
|
-
}
|
|
97
|
-
for (const attr_name of attrs_to_remove) {
|
|
98
|
-
geometry.deleteAttribute(attr_name);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Generate MTL (Wavefront Material) content from scene materials
|
|
102
|
-
export function generate_mtl_content(scene) {
|
|
103
|
-
const lines = [`# MTL file generated by MatterViz`, ``];
|
|
104
|
-
const processed_materials = new Set();
|
|
105
|
-
scene.traverse((object) => {
|
|
106
|
-
if (!(object instanceof Mesh))
|
|
107
|
-
return;
|
|
108
|
-
const materials = Array.isArray(object.material) ? object.material : [object.material];
|
|
109
|
-
for (const mat of materials) {
|
|
110
|
-
// Skip if already processed or no name
|
|
111
|
-
const mat_name = mat.name || `default_material`;
|
|
112
|
-
if (processed_materials.has(mat_name))
|
|
113
|
-
continue;
|
|
114
|
-
processed_materials.add(mat_name);
|
|
115
|
-
lines.push(`newmtl ${mat_name}`);
|
|
116
|
-
// Get diffuse color (main color)
|
|
117
|
-
if (has_color_property(mat)) {
|
|
118
|
-
const color = mat.color;
|
|
119
|
-
lines.push(`Kd ${color.r.toFixed(6)} ${color.g.toFixed(6)} ${color.b.toFixed(6)}`);
|
|
120
|
-
// Ambient is typically a fraction of diffuse
|
|
121
|
-
lines.push(`Ka ${(color.r * 0.2).toFixed(6)} ${(color.g * 0.2).toFixed(6)} ${(color.b * 0.2).toFixed(6)}`);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// Default white if no color
|
|
125
|
-
lines.push(`Kd 1.000000 1.000000 1.000000`);
|
|
126
|
-
lines.push(`Ka 0.200000 0.200000 0.200000`);
|
|
127
|
-
}
|
|
128
|
-
// Specular properties
|
|
129
|
-
lines.push(`Ks 0.500000 0.500000 0.500000`);
|
|
130
|
-
lines.push(`Ns 96.078431`); // Specular exponent
|
|
131
|
-
// Transparency (d = 1.0 is fully opaque)
|
|
132
|
-
const opacity = `opacity` in mat && typeof mat.opacity === `number` ? mat.opacity : 1.0;
|
|
133
|
-
lines.push(`d ${opacity.toFixed(6)}`);
|
|
134
|
-
// Illumination model (2 = highlight on)
|
|
135
|
-
lines.push(`illum 2`);
|
|
136
|
-
lines.push(``);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
return lines.join(`\n`);
|
|
140
|
-
}
|
|
141
|
-
// Extract color from material, returning RGB values or null if not found
|
|
142
|
-
function extract_material_color(mat) {
|
|
143
|
-
if (has_color_property(mat)) {
|
|
144
|
-
return { r: mat.color.r, g: mat.color.g, b: mat.color.b };
|
|
145
|
-
}
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
// Helper function to convert InstancedMesh to regular Mesh objects for export
|
|
149
|
-
// This is necessary because GLB/OBJ exporters don't handle InstancedMesh properly
|
|
150
|
-
// Note: Threlte's InstancedMesh sets isInstancedMesh=true but type remains "Mesh"
|
|
151
|
-
// Type guard for InstancedMesh (Three.js uses isInstancedMesh property, not exposed in Object3D type)
|
|
152
|
-
const is_instanced_mesh = (obj) => obj.isInstancedMesh || obj.type === `InstancedMesh`;
|
|
153
|
-
function convert_instanced_meshes_to_regular(scene) {
|
|
154
|
-
// STEP 1: Collect material colors from ORIGINAL scene BEFORE cloning
|
|
155
|
-
// This is crucial because scene.clone() may not properly preserve Threlte's material colors
|
|
156
|
-
const material_colors = new Map();
|
|
157
|
-
const bond_colors_map = new Map();
|
|
158
|
-
scene.traverse((object) => {
|
|
159
|
-
const is_instanced = is_instanced_mesh(object);
|
|
160
|
-
if (!is_instanced)
|
|
161
|
-
return;
|
|
162
|
-
const instanced_mesh = object;
|
|
163
|
-
const mesh_id = instanced_mesh.uuid;
|
|
164
|
-
// Check if this is a shader material (bonds)
|
|
165
|
-
const mat = instanced_mesh.material;
|
|
166
|
-
const is_shader = Array.isArray(mat)
|
|
167
|
-
? mat.some((m) => m instanceof ShaderMaterial)
|
|
168
|
-
: mat instanceof ShaderMaterial;
|
|
169
|
-
if (is_shader) {
|
|
170
|
-
// Extract bond colors for each instance from geometry attributes
|
|
171
|
-
const instance_colors = new Map();
|
|
172
|
-
for (let idx = 0; idx < instanced_mesh.count; idx++) {
|
|
173
|
-
const bond_color = extract_bond_color_for_instance(instanced_mesh.geometry, idx);
|
|
174
|
-
if (bond_color) {
|
|
175
|
-
instance_colors.set(idx, bond_color);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
bond_colors_map.set(mesh_id, instance_colors);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
// Extract shared material color for atoms
|
|
182
|
-
const single_mat = Array.isArray(mat) ? mat[0] : mat;
|
|
183
|
-
const color = extract_material_color(single_mat);
|
|
184
|
-
if (color) {
|
|
185
|
-
material_colors.set(mesh_id, color);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
// STEP 2: Clone the scene
|
|
190
|
-
const cloned_scene = scene.clone();
|
|
191
|
-
// STEP 3: Find all InstancedMesh objects in the cloned scene and build uuid mapping
|
|
192
|
-
const original_meshes = [];
|
|
193
|
-
const cloned_meshes = [];
|
|
194
|
-
scene.traverse((object) => {
|
|
195
|
-
if (is_instanced_mesh(object))
|
|
196
|
-
original_meshes.push(object);
|
|
197
|
-
});
|
|
198
|
-
cloned_scene.traverse((object) => {
|
|
199
|
-
if (is_instanced_mesh(object))
|
|
200
|
-
cloned_meshes.push(object);
|
|
201
|
-
});
|
|
202
|
-
// STEP 4: Convert each InstancedMesh to individual Mesh objects
|
|
203
|
-
for (let mesh_idx = 0; mesh_idx < cloned_meshes.length; mesh_idx++) {
|
|
204
|
-
const instanced_mesh = cloned_meshes[mesh_idx];
|
|
205
|
-
const original_mesh = original_meshes[mesh_idx];
|
|
206
|
-
const original_uuid = original_mesh?.uuid || instanced_mesh.uuid;
|
|
207
|
-
const parent = instanced_mesh.parent;
|
|
208
|
-
if (!parent || !instanced_mesh.instanceMatrix)
|
|
209
|
-
continue;
|
|
210
|
-
// Create a group to hold all the individual meshes
|
|
211
|
-
const group = new Group();
|
|
212
|
-
group.name = instanced_mesh.name;
|
|
213
|
-
// Get the base transform from the InstancedMesh
|
|
214
|
-
const base_matrix = new Matrix4();
|
|
215
|
-
base_matrix.copy(instanced_mesh.matrix);
|
|
216
|
-
// Get stored colors for this mesh
|
|
217
|
-
const stored_color = material_colors.get(original_uuid);
|
|
218
|
-
const stored_bond_colors = bond_colors_map.get(original_uuid);
|
|
219
|
-
// Check if material is a ShaderMaterial
|
|
220
|
-
const original_material = instanced_mesh.material;
|
|
221
|
-
const has_shader = Array.isArray(original_material)
|
|
222
|
-
? original_material.some((mat) => mat instanceof ShaderMaterial)
|
|
223
|
-
: original_material instanceof ShaderMaterial;
|
|
224
|
-
// Create individual meshes for each instance
|
|
225
|
-
const instance_matrix = new Matrix4();
|
|
226
|
-
for (let idx = 0; idx < instanced_mesh.count; idx++) {
|
|
227
|
-
instanced_mesh.getMatrixAt(idx, instance_matrix);
|
|
228
|
-
// Clone geometry
|
|
229
|
-
const cloned_geometry = instanced_mesh.geometry.clone();
|
|
230
|
-
// Clean up custom attributes from shader-based geometries
|
|
231
|
-
if (has_shader) {
|
|
232
|
-
clean_geometry_for_export(cloned_geometry);
|
|
233
|
-
}
|
|
234
|
-
// Create material - always create fresh MeshStandardMaterial for reliability
|
|
235
|
-
const new_material = new MeshStandardMaterial({
|
|
236
|
-
metalness: 0.1,
|
|
237
|
-
roughness: 0.5,
|
|
238
|
-
});
|
|
239
|
-
new_material.name = `material_${mesh_idx}_${idx}`;
|
|
240
|
-
// Apply the correct color
|
|
241
|
-
const bond_color = stored_bond_colors?.get(idx);
|
|
242
|
-
if (bond_color) {
|
|
243
|
-
// Bond with gradient color - use stored midpoint color
|
|
244
|
-
new_material.color.copy(bond_color);
|
|
245
|
-
}
|
|
246
|
-
else if (stored_color) {
|
|
247
|
-
// Atom with shared material color
|
|
248
|
-
new_material.color.setRGB(stored_color.r, stored_color.g, stored_color.b);
|
|
249
|
-
}
|
|
250
|
-
else if (instanced_mesh.instanceColor) {
|
|
251
|
-
// Fallback: per-instance colors from instanceColor attribute
|
|
252
|
-
const color_r = instanced_mesh.instanceColor.getX(idx);
|
|
253
|
-
const color_g = instanced_mesh.instanceColor.getY(idx);
|
|
254
|
-
const color_b = instanced_mesh.instanceColor.getZ(idx);
|
|
255
|
-
new_material.color.setRGB(color_r, color_g, color_b);
|
|
256
|
-
}
|
|
257
|
-
// If no color found, material stays default white
|
|
258
|
-
const mesh = new Mesh(cloned_geometry, new_material);
|
|
259
|
-
// Combine base transform with instance transform
|
|
260
|
-
const combined_matrix = new Matrix4();
|
|
261
|
-
combined_matrix.multiplyMatrices(base_matrix, instance_matrix);
|
|
262
|
-
mesh.applyMatrix4(combined_matrix);
|
|
263
|
-
group.add(mesh);
|
|
264
|
-
}
|
|
265
|
-
// Replace the InstancedMesh with the Group in the parent
|
|
266
|
-
parent.remove(instanced_mesh);
|
|
267
|
-
parent.add(group);
|
|
268
|
-
// Update world matrices after scene graph modification
|
|
269
|
-
group.updateMatrixWorld(true);
|
|
270
|
-
}
|
|
271
|
-
// Update all world matrices in the modified scene
|
|
272
|
-
cloned_scene.updateMatrixWorld(true);
|
|
273
|
-
// Convert any remaining ShaderMaterials to standard materials (e.g. non-instanced bonds)
|
|
274
|
-
// Also clean up custom geometry attributes that cause export validation errors
|
|
275
|
-
cloned_scene.traverse((object) => {
|
|
276
|
-
if (object instanceof Mesh) {
|
|
277
|
-
let has_shader_material = false;
|
|
278
|
-
if (object.material instanceof ShaderMaterial) {
|
|
279
|
-
object.material = convert_shader_to_standard(object.material);
|
|
280
|
-
has_shader_material = true;
|
|
281
|
-
}
|
|
282
|
-
else if (Array.isArray(object.material)) {
|
|
283
|
-
has_shader_material = object.material.some((mat) => mat instanceof ShaderMaterial);
|
|
284
|
-
object.material = object.material.map((mat) => mat instanceof ShaderMaterial ? convert_shader_to_standard(mat) : mat);
|
|
285
|
-
}
|
|
286
|
-
// Clean up custom attributes from geometries that had shader materials
|
|
287
|
-
if (has_shader_material && object.geometry) {
|
|
288
|
-
clean_geometry_for_export(object.geometry);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
});
|
|
292
|
-
return cloned_scene;
|
|
293
|
-
}
|
|
294
|
-
// Generate a filename for structure exports based on structure metadata
|
|
295
|
-
// Sanitize string for use in filenames by removing problematic characters.
|
|
296
|
-
const sanitize_filename_part = (text) => text
|
|
297
|
-
.replace(/<\/?[^>]+>/g, ``) // strip HTML tags
|
|
298
|
-
.replace(/[/\\:*?"<>|]/g, `_`) // replace filesystem-invalid chars
|
|
299
|
-
.replace(/_+/g, `_`) // condense consecutive underscores
|
|
300
|
-
.replace(/^_|_$/g, ``); // remove leading/trailing underscores
|
|
301
|
-
export function create_structure_filename(structure, extension) {
|
|
302
|
-
if (!structure)
|
|
303
|
-
return `structure.${extension}`;
|
|
304
|
-
const parts = [];
|
|
305
|
-
// Helper to sanitize and push non-empty parts
|
|
306
|
-
const safe_push = (value) => {
|
|
307
|
-
const sanitized = value ? sanitize_filename_part(value) : ``;
|
|
308
|
-
if (sanitized)
|
|
309
|
-
parts.push(sanitized);
|
|
310
|
-
};
|
|
311
|
-
safe_push(structure.id);
|
|
312
|
-
// Add formula (plain text to avoid HTML in filenames)
|
|
313
|
-
const formula = get_electro_neg_formula(structure, true);
|
|
314
|
-
if (formula && formula !== `Unknown`) {
|
|
315
|
-
safe_push(formula.replaceAll(` `, ``));
|
|
316
|
-
}
|
|
317
|
-
// Add space group if available
|
|
318
|
-
if (`symmetry` in structure &&
|
|
319
|
-
structure.symmetry &&
|
|
320
|
-
typeof structure.symmetry === `object` &&
|
|
321
|
-
`space_group_symbol` in structure.symmetry) {
|
|
322
|
-
const space_group = structure.symmetry.space_group_symbol;
|
|
323
|
-
if (space_group && typeof space_group === `string`) {
|
|
324
|
-
safe_push(space_group.replaceAll(` `, ``));
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
// Add lattice system if available
|
|
328
|
-
if (`lattice` in structure &&
|
|
329
|
-
structure.lattice &&
|
|
330
|
-
typeof structure.lattice === `object` &&
|
|
331
|
-
`lattice_system` in structure.lattice) {
|
|
332
|
-
const lattice_system = structure.lattice.lattice_system;
|
|
333
|
-
if (lattice_system && typeof lattice_system === `string`) {
|
|
334
|
-
safe_push(lattice_system);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
// Add number of sites
|
|
338
|
-
if (structure.sites?.length)
|
|
339
|
-
parts.push(`${structure.sites.length}sites`);
|
|
340
|
-
const base_name = parts.length > 0 ? parts.join(`-`) : `structure`;
|
|
341
|
-
return `${base_name}.${extension}`;
|
|
342
|
-
}
|
|
343
|
-
// Generate XYZ content string without saving
|
|
344
|
-
export function structure_to_xyz_str(structure) {
|
|
345
|
-
if (!structure?.sites)
|
|
346
|
-
throw new Error(`No structure or sites to export`);
|
|
347
|
-
const lines = [];
|
|
348
|
-
// First line: number of atoms
|
|
349
|
-
lines.push(String(structure.sites.length));
|
|
350
|
-
// Second line: comment (structure ID, formula, or default)
|
|
351
|
-
const comment_parts = [];
|
|
352
|
-
if (structure.id)
|
|
353
|
-
comment_parts.push(structure.id);
|
|
354
|
-
const formula = get_electro_neg_formula(structure, true);
|
|
355
|
-
if (formula && formula !== `Unknown`)
|
|
356
|
-
comment_parts.push(formula);
|
|
357
|
-
// Include extended XYZ lattice information when available so round-trips preserve lattice
|
|
358
|
-
if (`lattice` in structure && structure.lattice?.matrix?.length === 3) {
|
|
359
|
-
const lattice_values = structure.lattice.matrix
|
|
360
|
-
.flat()
|
|
361
|
-
.map((value) => (Number.isFinite(value) ? value : 0).toFixed(8))
|
|
362
|
-
.join(` `);
|
|
363
|
-
comment_parts.push(`Lattice="${lattice_values}"`);
|
|
364
|
-
}
|
|
365
|
-
const comment = comment_parts.length > 0 ? comment_parts.join(` `) : `Generated from structure`;
|
|
366
|
-
lines.push(comment);
|
|
367
|
-
// Cache converter for fractional→Cartesian (if lattice available)
|
|
368
|
-
const frac_to_cart = `lattice` in structure && structure.lattice?.matrix?.length === 3
|
|
369
|
-
? math.create_frac_to_cart(structure.lattice.matrix)
|
|
370
|
-
: null;
|
|
371
|
-
// Atom lines: element symbol followed by x, y, z coordinates
|
|
372
|
-
for (const site of structure.sites) {
|
|
373
|
-
// Extract element symbol from species
|
|
374
|
-
let element_symbol = `X`; // default fallback
|
|
375
|
-
if (site.species && Array.isArray(site.species) && site.species.length > 0) {
|
|
376
|
-
// species is an array of Species objects with element property
|
|
377
|
-
const first_species = site.species[0];
|
|
378
|
-
if (first_species && `element` in first_species && first_species.element)
|
|
379
|
-
element_symbol = first_species.element;
|
|
380
|
-
}
|
|
381
|
-
// Get coordinates - prefer xyz; fallback to abc (converted to cartesian if lattice available)
|
|
382
|
-
let coords;
|
|
383
|
-
if (site.xyz && Array.isArray(site.xyz) && site.xyz.length >= 3) {
|
|
384
|
-
coords = site.xyz.slice(0, 3);
|
|
385
|
-
}
|
|
386
|
-
else if (site.abc?.length >= 3 && frac_to_cart) {
|
|
387
|
-
coords = frac_to_cart(site.abc);
|
|
388
|
-
}
|
|
389
|
-
else
|
|
390
|
-
coords = [0, 0, 0]; // fallback
|
|
391
|
-
// Format coordinates to reasonable precision
|
|
392
|
-
const [x, y, z] = coords.map((coord) => coord.toFixed(6));
|
|
393
|
-
lines.push(`${element_symbol} ${x} ${y} ${z}`);
|
|
394
|
-
}
|
|
395
|
-
return lines.join(`\n`);
|
|
396
|
-
}
|
|
397
|
-
// Generate a valid CIF data block name from structure formula
|
|
398
|
-
// CIF block names can contain alphanumerics, underscores, but no spaces or special chars
|
|
399
|
-
function get_cif_block_name(structure) {
|
|
400
|
-
try {
|
|
401
|
-
// Count atoms per element (rounded to nearest integer for occupancy)
|
|
402
|
-
const element_counts = {};
|
|
403
|
-
for (const site of structure.sites) {
|
|
404
|
-
if (!site.species || !Array.isArray(site.species))
|
|
405
|
-
continue;
|
|
406
|
-
for (const species of site.species) {
|
|
407
|
-
if (!species.element)
|
|
408
|
-
continue;
|
|
409
|
-
const count = species.occu ?? 1;
|
|
410
|
-
element_counts[species.element] = (element_counts[species.element] ?? 0) + count;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
// Sort elements alphabetically and build formula string
|
|
414
|
-
const elements = Object.keys(element_counts).sort();
|
|
415
|
-
if (elements.length === 0)
|
|
416
|
-
throw new Error(`No elements found`);
|
|
417
|
-
const formula = elements
|
|
418
|
-
.map((el) => {
|
|
419
|
-
const count = Math.round(element_counts[el]);
|
|
420
|
-
if (count === 0)
|
|
421
|
-
return null; // filter out near-zero occupancies
|
|
422
|
-
return count === 1 ? el : `${el}${count}`;
|
|
423
|
-
})
|
|
424
|
-
.filter((part) => part !== null)
|
|
425
|
-
.join(``);
|
|
426
|
-
if (!formula)
|
|
427
|
-
throw new Error(`All occupancies round to zero`);
|
|
428
|
-
return formula;
|
|
429
|
-
}
|
|
430
|
-
catch {
|
|
431
|
-
// Fall back to structure.id (sanitized) or generic name
|
|
432
|
-
if (structure.id) {
|
|
433
|
-
// Remove invalid CIF characters (keep alphanumerics and underscores)
|
|
434
|
-
// and condense consecutive underscores for cleaner block names
|
|
435
|
-
return structure.id.replace(/[^a-zA-Z0-9_]/g, `_`).replace(/_+/g, `_`);
|
|
436
|
-
}
|
|
437
|
-
return `structure`;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
// Generate CIF content string without saving
|
|
441
|
-
export function structure_to_cif_str(structure) {
|
|
442
|
-
if (!structure?.sites)
|
|
443
|
-
throw new Error(`No structure or sites to export`);
|
|
444
|
-
if (!(`lattice` in structure) || !structure.lattice) {
|
|
445
|
-
throw new Error(`No lattice information for CIF export`);
|
|
446
|
-
}
|
|
447
|
-
const lines = [];
|
|
448
|
-
// CIF header with data block (required by pymatgen and CIF spec)
|
|
449
|
-
lines.push(`# CIF file generated by MatterViz`);
|
|
450
|
-
const block_name = get_cif_block_name(structure);
|
|
451
|
-
lines.push(`data_${block_name}`);
|
|
452
|
-
lines.push(``);
|
|
453
|
-
// Cell parameters
|
|
454
|
-
const lattice = structure.lattice;
|
|
455
|
-
if (lattice.a && lattice.b && lattice.c) {
|
|
456
|
-
lines.push(`_cell_length_a ${lattice.a.toFixed(6)}`);
|
|
457
|
-
lines.push(`_cell_length_b ${lattice.b.toFixed(6)}`);
|
|
458
|
-
lines.push(`_cell_length_c ${lattice.c.toFixed(6)}`);
|
|
459
|
-
}
|
|
460
|
-
if (lattice.alpha && lattice.beta && lattice.gamma) {
|
|
461
|
-
lines.push(`_cell_angle_alpha ${lattice.alpha.toFixed(6)}`);
|
|
462
|
-
lines.push(`_cell_angle_beta ${lattice.beta.toFixed(6)}`);
|
|
463
|
-
lines.push(`_cell_angle_gamma ${lattice.gamma.toFixed(6)}`);
|
|
464
|
-
}
|
|
465
|
-
// Space group information
|
|
466
|
-
if (`symmetry` in structure &&
|
|
467
|
-
structure.symmetry &&
|
|
468
|
-
typeof structure.symmetry === `object`) {
|
|
469
|
-
const symmetry = structure.symmetry;
|
|
470
|
-
const { space_group_number, space_group_symbol } = symmetry;
|
|
471
|
-
if (typeof space_group_symbol === `string` && space_group_symbol) {
|
|
472
|
-
lines.push(`_space_group_name_H-M_alt ${space_group_symbol}`);
|
|
473
|
-
}
|
|
474
|
-
if ((typeof space_group_number === `number` || typeof space_group_number === `string`) &&
|
|
475
|
-
space_group_number) {
|
|
476
|
-
lines.push(`_space_group_IT_number ${space_group_number}`);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
lines.push(``);
|
|
480
|
-
// Atom site loop header
|
|
481
|
-
lines.push(`loop_`);
|
|
482
|
-
lines.push(`_atom_site_label`);
|
|
483
|
-
lines.push(`_atom_site_type_symbol`);
|
|
484
|
-
lines.push(`_atom_site_fract_x`);
|
|
485
|
-
lines.push(`_atom_site_fract_y`);
|
|
486
|
-
lines.push(`_atom_site_fract_z`);
|
|
487
|
-
lines.push(`_atom_site_occupancy`);
|
|
488
|
-
// Cache inverse transpose for Cartesian→fractional conversion (avoids recomputing per site)
|
|
489
|
-
const cart_to_frac = lattice.matrix?.length === 3 ? math.create_cart_to_frac(lattice.matrix) : null;
|
|
490
|
-
// Atom sites
|
|
491
|
-
for (let idx = 0; idx < structure.sites.length; idx++) {
|
|
492
|
-
const site = structure.sites[idx];
|
|
493
|
-
if (!site)
|
|
494
|
-
continue; // Skip if site is undefined
|
|
495
|
-
// Extract element symbol from species
|
|
496
|
-
let element_symbol = `X`; // default fallback
|
|
497
|
-
let occupancy = 1;
|
|
498
|
-
if (site.species && Array.isArray(site.species) && site.species.length > 0) {
|
|
499
|
-
const first_species = site.species[0];
|
|
500
|
-
if (first_species && `element` in first_species && first_species.element) {
|
|
501
|
-
element_symbol = first_species.element;
|
|
502
|
-
occupancy = first_species?.occu ?? 1;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
// Get fractional coordinates
|
|
506
|
-
let frac_coords;
|
|
507
|
-
if (site.abc && Array.isArray(site.abc) && site.abc.length >= 3) {
|
|
508
|
-
frac_coords = site.abc.slice(0, 3);
|
|
509
|
-
}
|
|
510
|
-
else if (site.xyz?.length >= 3 && cart_to_frac) {
|
|
511
|
-
frac_coords = cart_to_frac(site.xyz);
|
|
512
|
-
}
|
|
513
|
-
else
|
|
514
|
-
throw new Error(`No valid coordinates found for site ${idx}`);
|
|
515
|
-
// Format: label element_symbol x y z
|
|
516
|
-
const label = site.label || `${element_symbol}${idx + 1}`;
|
|
517
|
-
lines.push(`${label} ${element_symbol} ${frac_coords[0].toFixed(8)} ${frac_coords[1].toFixed(8)} ${frac_coords[2].toFixed(8)} ${occupancy.toFixed(8)}`);
|
|
518
|
-
}
|
|
519
|
-
return lines.join(`\n`);
|
|
520
|
-
}
|
|
521
|
-
// Generate VASP POSCAR content string without saving
|
|
522
|
-
export function structure_to_poscar_str(structure) {
|
|
523
|
-
if (!structure?.sites)
|
|
524
|
-
throw new Error(`No structure or sites to export`);
|
|
525
|
-
if (!(`lattice` in structure) || !structure.lattice) {
|
|
526
|
-
throw new Error(`No lattice information for POSCAR export`);
|
|
527
|
-
}
|
|
528
|
-
const lines = [];
|
|
529
|
-
// Use plain text formula for POSCAR title to avoid HTML tags
|
|
530
|
-
const formula = get_electro_neg_formula(structure, true);
|
|
531
|
-
const title = structure.id ||
|
|
532
|
-
(formula && formula !== `Unknown` ? formula : null) ||
|
|
533
|
-
`Generated from structure`;
|
|
534
|
-
lines.push(title);
|
|
535
|
-
lines.push(`1.0`); // Scale factor (1.0 for direct coordinates)
|
|
536
|
-
const lattice = structure.lattice;
|
|
537
|
-
if (lattice.matrix && Array.isArray(lattice.matrix) && lattice.matrix.length >= 3) {
|
|
538
|
-
// Convert 3x3 matrix to 3 vectors
|
|
539
|
-
const matrix = lattice.matrix;
|
|
540
|
-
lines.push(`${matrix[0][0].toFixed(8)} ${matrix[0][1].toFixed(8)} ${matrix[0][2].toFixed(8)}`);
|
|
541
|
-
lines.push(`${matrix[1][0].toFixed(8)} ${matrix[1][1].toFixed(8)} ${matrix[1][2].toFixed(8)}`);
|
|
542
|
-
lines.push(`${matrix[2][0].toFixed(8)} ${matrix[2][1].toFixed(8)} ${matrix[2][2].toFixed(8)}`);
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
throw new Error(`No valid lattice matrix for POSCAR export`);
|
|
546
|
-
}
|
|
547
|
-
// Count atoms by element
|
|
548
|
-
const element_counts = new Map();
|
|
549
|
-
const element_symbols = [];
|
|
550
|
-
for (const site of structure.sites) {
|
|
551
|
-
let element_symbol = `X`; // default fallback
|
|
552
|
-
if (site.species && Array.isArray(site.species) && site.species.length > 0) {
|
|
553
|
-
const first_species = site.species[0];
|
|
554
|
-
if (first_species && `element` in first_species && first_species.element) {
|
|
555
|
-
element_symbol = first_species.element;
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
if (!element_counts.has(element_symbol)) {
|
|
559
|
-
element_counts.set(element_symbol, 0);
|
|
560
|
-
element_symbols.push(element_symbol);
|
|
561
|
-
}
|
|
562
|
-
element_counts.set(element_symbol, Number(element_counts.get(element_symbol)) + 1);
|
|
563
|
-
}
|
|
564
|
-
// Element symbols line
|
|
565
|
-
lines.push(element_symbols.join(` `));
|
|
566
|
-
// Atom counts line
|
|
567
|
-
lines.push(element_symbols.map((el) => element_counts.get(el)).join(` `));
|
|
568
|
-
// Check if any site has selective dynamics
|
|
569
|
-
const has_selective_dynamics = structure.sites.some((site) => site.properties?.selective_dynamics);
|
|
570
|
-
if (has_selective_dynamics) {
|
|
571
|
-
lines.push(`Selective dynamics`);
|
|
572
|
-
}
|
|
573
|
-
// Coordinate mode (Direct = fractional coordinates)
|
|
574
|
-
lines.push(`Direct`);
|
|
575
|
-
// Cache inverse transpose for Cartesian→fractional conversion (avoids recomputing per site)
|
|
576
|
-
const cart_to_frac = lattice.matrix?.length === 3 ? math.create_cart_to_frac(lattice.matrix) : null;
|
|
577
|
-
// Atom coordinates grouped by element
|
|
578
|
-
for (const element_symbol of element_symbols) {
|
|
579
|
-
for (const site of structure.sites) {
|
|
580
|
-
let site_element = `X`;
|
|
581
|
-
if (site.species && Array.isArray(site.species) && site.species.length > 0) {
|
|
582
|
-
const first_species = site.species[0];
|
|
583
|
-
if (first_species && `element` in first_species && first_species.element) {
|
|
584
|
-
site_element = first_species.element;
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
if (site_element === element_symbol) {
|
|
588
|
-
// Get fractional coordinates
|
|
589
|
-
let frac_coords;
|
|
590
|
-
if (site.abc && Array.isArray(site.abc) && site.abc.length >= 3) {
|
|
591
|
-
frac_coords = site.abc.slice(0, 3);
|
|
592
|
-
}
|
|
593
|
-
else if (site.xyz?.length >= 3 && cart_to_frac) {
|
|
594
|
-
frac_coords = cart_to_frac(site.xyz.slice(0, 3));
|
|
595
|
-
}
|
|
596
|
-
else {
|
|
597
|
-
throw new Error(`No valid coordinates found for site`);
|
|
598
|
-
}
|
|
599
|
-
let selective_dynamics_str = ``;
|
|
600
|
-
if (has_selective_dynamics) {
|
|
601
|
-
const sel_dyn = (site.properties?.selective_dynamics ?? [
|
|
602
|
-
true,
|
|
603
|
-
true,
|
|
604
|
-
true,
|
|
605
|
-
]);
|
|
606
|
-
selective_dynamics_str = ` ${sel_dyn[0] ? `T` : `F`} ${sel_dyn[1] ? `T` : `F`} ${sel_dyn[2] ? `T` : `F`}`;
|
|
607
|
-
}
|
|
608
|
-
lines.push(`${frac_coords[0].toFixed(8)} ${frac_coords[1].toFixed(8)} ${frac_coords[2].toFixed(8)}${selective_dynamics_str}`);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
return lines.join(`\n`);
|
|
613
|
-
}
|
|
614
|
-
// Generate JSON content string without saving
|
|
615
|
-
export function structure_to_json_str(structure) {
|
|
616
|
-
if (!structure)
|
|
617
|
-
throw new Error(`No structure to export`);
|
|
618
|
-
return JSON.stringify(structure, null, 2);
|
|
619
|
-
}
|
|
620
|
-
// Export structure as CIF format
|
|
621
|
-
export function export_structure_as_cif(structure) {
|
|
622
|
-
try {
|
|
623
|
-
const content = structure_to_cif_str(structure);
|
|
624
|
-
const filename = create_structure_filename(structure, `cif`);
|
|
625
|
-
download(content, filename, `chemical/x-cif`);
|
|
626
|
-
}
|
|
627
|
-
catch (error) {
|
|
628
|
-
console.error(`Failed to export CIF:`, error);
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
// Export structure as VASP POSCAR format
|
|
632
|
-
export function export_structure_as_poscar(structure) {
|
|
633
|
-
try {
|
|
634
|
-
const content = structure_to_poscar_str(structure);
|
|
635
|
-
const filename = create_structure_filename(structure, `poscar`);
|
|
636
|
-
download(content, filename, `text/plain`);
|
|
637
|
-
}
|
|
638
|
-
catch (error) {
|
|
639
|
-
console.error(`Failed to export POSCAR:`, error);
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
// Export structure as XYZ format. Format specification:
|
|
643
|
-
// - Line 1: Number of atoms
|
|
644
|
-
// - Line 2: Comment line (structure ID, formula, etc.)
|
|
645
|
-
// - Remaining lines: Element symbol followed by x, y, z coordinates (in Angstrom)
|
|
646
|
-
export function export_structure_as_xyz(structure) {
|
|
647
|
-
try {
|
|
648
|
-
const xyz_content = structure_to_xyz_str(structure);
|
|
649
|
-
const filename = create_structure_filename(structure, `xyz`);
|
|
650
|
-
download(xyz_content, filename, `text/plain`);
|
|
651
|
-
}
|
|
652
|
-
catch (error) {
|
|
653
|
-
console.error(`Error exporting XYZ:`, error);
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
// Export structure in pymatgen JSON format
|
|
657
|
-
export function export_structure_as_json(structure) {
|
|
658
|
-
try {
|
|
659
|
-
const data = structure_to_json_str(structure);
|
|
660
|
-
const filename = create_structure_filename(structure, `json`);
|
|
661
|
-
download(data, filename, `application/json`);
|
|
662
|
-
}
|
|
663
|
-
catch (error) {
|
|
664
|
-
console.error(`Error exporting JSON:`, error);
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
// Export Three.js scene as GLB (binary GLTF) file
|
|
668
|
-
// GLB preserves materials and colors, making it ideal for element visualization
|
|
669
|
-
export function export_structure_as_glb(scene, structure) {
|
|
670
|
-
try {
|
|
671
|
-
if (!scene) {
|
|
672
|
-
console.warn(`No scene available for GLB export`);
|
|
673
|
-
return;
|
|
674
|
-
}
|
|
675
|
-
// Convert instanced meshes to regular meshes for export
|
|
676
|
-
const export_scene = convert_instanced_meshes_to_regular(scene);
|
|
677
|
-
const exporter = new GLTFExporter();
|
|
678
|
-
const filename = create_structure_filename(structure, `glb`);
|
|
679
|
-
// Export as binary GLB format
|
|
680
|
-
exporter.parse(export_scene, (result) => {
|
|
681
|
-
if (result instanceof ArrayBuffer) {
|
|
682
|
-
const blob = new Blob([result], { type: `model/gltf-binary` });
|
|
683
|
-
download(blob, filename, `model/gltf-binary`);
|
|
684
|
-
}
|
|
685
|
-
else {
|
|
686
|
-
console.error(`GLB export returned unexpected format`);
|
|
687
|
-
}
|
|
688
|
-
}, (error) => {
|
|
689
|
-
console.error(`GLB export failed:`, error);
|
|
690
|
-
}, { binary: true });
|
|
691
|
-
}
|
|
692
|
-
catch (error) {
|
|
693
|
-
console.error(`Error exporting GLB:`, error);
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
// Export Three.js scene as OBJ (Wavefront Object) file with accompanying MTL file for materials
|
|
697
|
-
// OBJ exports geometry with material references, MTL contains color definitions
|
|
698
|
-
export function export_structure_as_obj(scene, structure) {
|
|
699
|
-
try {
|
|
700
|
-
if (!scene) {
|
|
701
|
-
console.warn(`No scene available for OBJ export`);
|
|
702
|
-
return;
|
|
703
|
-
}
|
|
704
|
-
// Convert instanced meshes to regular meshes for export
|
|
705
|
-
const export_scene = convert_instanced_meshes_to_regular(scene);
|
|
706
|
-
const obj_exporter = new OBJExporter();
|
|
707
|
-
const base_filename = create_structure_filename(structure, ``).replace(/\.$/, ``);
|
|
708
|
-
const obj_filename = `${base_filename}.obj`;
|
|
709
|
-
const mtl_filename = `${base_filename}.mtl`;
|
|
710
|
-
// Generate OBJ content with material library reference
|
|
711
|
-
let obj_content = obj_exporter.parse(export_scene);
|
|
712
|
-
// Add material library reference at the beginning of the OBJ file
|
|
713
|
-
obj_content = `mtllib ${mtl_filename}\n${obj_content}`;
|
|
714
|
-
// Generate MTL content with material color definitions
|
|
715
|
-
const mtl_content = generate_mtl_content(export_scene);
|
|
716
|
-
// Download both files
|
|
717
|
-
const obj_blob = new Blob([obj_content], { type: `text/plain` });
|
|
718
|
-
const mtl_blob = new Blob([mtl_content], { type: `text/plain` });
|
|
719
|
-
download(obj_blob, obj_filename, `text/plain`);
|
|
720
|
-
// Small delay to prevent some browsers from blocking rapid successive downloads as potential abuse.
|
|
721
|
-
// A more robust solution might be to zip both files together.
|
|
722
|
-
setTimeout(() => download(mtl_blob, mtl_filename, `text/plain`), 100);
|
|
723
|
-
}
|
|
724
|
-
catch (error) {
|
|
725
|
-
console.error(`Error exporting OBJ:`, error);
|
|
726
|
-
}
|
|
727
|
-
}
|