matterviz 0.4.0 → 0.4.1
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/dist/brillouin/BrillouinZone.svelte +68 -145
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -14
- package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
- package/dist/brillouin/BrillouinZoneScene.svelte +49 -203
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
- package/dist/brillouin/ReciprocalVectors.svelte +39 -0
- package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
- package/dist/brillouin/compute.d.ts +2 -0
- package/dist/brillouin/compute.js +80 -77
- package/dist/brillouin/geometry.d.ts +8 -0
- package/dist/brillouin/geometry.js +57 -0
- package/dist/brillouin/index.d.ts +2 -0
- package/dist/brillouin/index.js +2 -0
- package/dist/brillouin/types.d.ts +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +100 -191
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +176 -464
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
- package/dist/chempot-diagram/color.d.ts +3 -6
- package/dist/chempot-diagram/color.js +5 -5
- package/dist/chempot-diagram/compute.d.ts +3 -3
- package/dist/chempot-diagram/compute.js +3 -1
- package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
- package/dist/chempot-diagram/controls-state.svelte.js +42 -0
- package/dist/chempot-diagram/export.d.ts +47 -0
- package/dist/chempot-diagram/export.js +133 -0
- package/dist/chempot-diagram/index.d.ts +1 -0
- package/dist/chempot-diagram/index.js +1 -0
- package/dist/chempot-diagram/pointer.d.ts +0 -10
- package/dist/chempot-diagram/pointer.js +4 -4
- package/dist/chempot-diagram/types.d.ts +3 -3
- package/dist/colors/index.js +2 -2
- package/dist/composition/FormulaFilter.svelte +6 -5
- package/dist/composition/PieChart.svelte +5 -5
- package/dist/composition/chem-sys.js +3 -2
- package/dist/composition/format.js +3 -2
- package/dist/composition/parse.d.ts +0 -1
- package/dist/composition/parse.js +17 -19
- package/dist/controls.d.ts +1 -0
- package/dist/controls.js +0 -1
- package/dist/convex-hull/ConvexHull.svelte +8 -10
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
- package/dist/convex-hull/ConvexHull2D.svelte +94 -175
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +176 -680
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +180 -680
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
- package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
- package/dist/convex-hull/ConvexHullControls.svelte +88 -7
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
- package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
- package/dist/convex-hull/ConvexHullStats.svelte +29 -168
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
- package/dist/convex-hull/barycentric-coords.d.ts +2 -4
- package/dist/convex-hull/barycentric-coords.js +6 -33
- package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
- package/dist/convex-hull/canvas-interactions.svelte.js +278 -0
- package/dist/convex-hull/helpers.d.ts +39 -7
- package/dist/convex-hull/helpers.js +154 -69
- package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
- package/dist/convex-hull/hull-state.svelte.js +124 -0
- package/dist/convex-hull/index.d.ts +9 -7
- package/dist/convex-hull/index.js +7 -2
- package/dist/convex-hull/thermodynamics.js +91 -920
- package/dist/convex-hull/types.d.ts +12 -4
- package/dist/convex-hull/types.js +12 -0
- package/dist/coordination/CoordinationBarPlot.svelte +4 -11
- package/dist/element/BohrAtom.svelte +2 -1
- package/dist/element/ElementTile.svelte.d.ts +1 -1
- package/dist/element/index.d.ts +4 -0
- package/dist/element/index.js +18 -0
- package/dist/feedback/DragOverlay.svelte +3 -1
- package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
- package/dist/feedback/StatusMessage.svelte +13 -3
- package/dist/fermi-surface/FermiSurface.svelte +67 -146
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -224
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
- package/dist/fermi-surface/compute.js +11 -10
- package/dist/fermi-surface/export.js +4 -15
- package/dist/fermi-surface/index.d.ts +0 -1
- package/dist/fermi-surface/index.js +0 -1
- package/dist/fermi-surface/parse.d.ts +1 -1
- package/dist/fermi-surface/parse.js +64 -75
- package/dist/fermi-surface/types.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +55 -40
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
- package/dist/heatmap-matrix/index.d.ts +3 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/io/ExportPane.svelte +166 -0
- package/dist/io/ExportPane.svelte.d.ts +17 -0
- package/dist/io/decompress.js +1 -2
- package/dist/io/export.d.ts +5 -1
- package/dist/io/export.js +32 -28
- package/dist/io/fetch.d.ts +2 -1
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +13 -0
- package/dist/io/index.d.ts +2 -0
- package/dist/io/index.js +10 -0
- package/dist/io/types.d.ts +13 -0
- package/dist/isosurface/parse.js +46 -44
- package/dist/labels.js +1 -1
- package/dist/layout/FullscreenButton.svelte +33 -0
- package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
- package/dist/layout/FullscreenToggle.svelte +8 -14
- package/dist/layout/ViewerChrome.svelte +116 -0
- package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
- package/dist/layout/fullscreen.d.ts +4 -0
- package/dist/layout/fullscreen.svelte.d.ts +8 -0
- package/dist/layout/fullscreen.svelte.js +37 -0
- package/dist/layout/index.d.ts +3 -0
- package/dist/layout/index.js +3 -0
- package/dist/math.d.ts +7 -3
- package/dist/math.js +18 -21
- package/dist/overlays/index.d.ts +4 -0
- package/dist/periodic-table/PeriodicTable.svelte +9 -8
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
- package/dist/phase-diagram/colors.js +1 -1
- package/dist/phase-diagram/parse.d.ts +2 -1
- package/dist/plot/bar/BarPlot.svelte +79 -316
- package/dist/plot/bar/BarPlot.svelte.d.ts +7 -15
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/bar/SpacegroupBarPlot.svelte +2 -1
- package/dist/plot/box/BoxPlot.svelte +76 -246
- package/dist/plot/box/BoxPlot.svelte.d.ts +4 -3
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
- package/dist/plot/box/Violin.svelte.d.ts +1 -1
- package/dist/plot/box/box-plot.d.ts +3 -2
- package/dist/plot/box/box-plot.js +5 -2
- package/dist/plot/box/kde.d.ts +2 -1
- package/dist/plot/box/kde.js +4 -4
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +4 -1
- package/dist/plot/core/components/ColorBar.svelte +5 -5
- package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
- package/dist/plot/core/components/Line.svelte +3 -2
- package/dist/plot/core/components/Line.svelte.d.ts +3 -2
- package/dist/plot/core/components/PlotAxis.svelte +2 -1
- package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
- package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/core/components/ReferenceLine3D.svelte +2 -2
- package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
- package/dist/plot/core/components/ReferencePlane.svelte +2 -2
- package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
- package/dist/plot/core/data-cleaning.js +18 -18
- package/dist/plot/core/fill-utils.d.ts +4 -3
- package/dist/plot/core/fill-utils.js +6 -3
- package/dist/plot/core/interactions.d.ts +5 -1
- package/dist/plot/core/interactions.js +14 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
- package/dist/plot/core/pan-zoom.svelte.js +221 -0
- package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -0
- package/dist/plot/core/reference-line.d.ts +10 -10
- package/dist/plot/core/reference-line.js +6 -6
- package/dist/plot/core/scales.d.ts +17 -25
- package/dist/plot/core/scales.js +10 -8
- package/dist/plot/core/svg.d.ts +2 -1
- package/dist/plot/core/types.d.ts +18 -7
- package/dist/plot/core/utils/label-placement.d.ts +1 -1
- package/dist/plot/core/utils/label-placement.js +3 -3
- package/dist/plot/core/utils.d.ts +2 -1
- package/dist/plot/histogram/Histogram.svelte +77 -314
- package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
- package/dist/plot/sankey/Sankey.svelte +2 -5
- package/dist/plot/sankey/Sankey.svelte.d.ts +1 -1
- package/dist/plot/sankey/sankey.js +3 -1
- package/dist/plot/scatter/BinnedScatterPlot.svelte +3 -5
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +4 -4
- package/dist/plot/scatter/ScatterPlot.svelte +160 -450
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +7 -15
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/binned-scatter-types.d.ts +4 -11
- package/dist/plot/scatter/index.d.ts +1 -1
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +15 -26
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +9 -10
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +122 -121
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
- package/dist/plot/scatter-3d/Surface3D.svelte +6 -5
- package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
- package/dist/plot/sunburst/Sunburst.svelte +16 -20
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
- package/dist/plot/sunburst/SunburstControls.svelte.d.ts +1 -1
- package/dist/plot/sunburst/sunburst.js +4 -1
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/sanitize.js +13 -2
- package/dist/scene/SceneCamera.svelte +62 -0
- package/dist/scene/SceneCamera.svelte.d.ts +19 -0
- package/dist/scene/bind-renderer.svelte.d.ts +2 -0
- package/dist/scene/bind-renderer.svelte.js +14 -0
- package/dist/scene/index.d.ts +4 -0
- package/dist/scene/index.js +5 -0
- package/dist/scene/props.js +52 -0
- package/dist/scene/types.d.ts +26 -0
- package/dist/scene/types.js +1 -0
- package/dist/settings.d.ts +14 -2
- package/dist/settings.js +59 -1
- package/dist/spectral/Bands.svelte +8 -7
- package/dist/spectral/Bands.svelte.d.ts +3 -2
- package/dist/spectral/BandsAndDos.svelte +22 -24
- package/dist/spectral/BrillouinBandsDos.svelte +3 -3
- package/dist/spectral/Dos.svelte +5 -4
- package/dist/spectral/Dos.svelte.d.ts +2 -1
- package/dist/spectral/helpers.d.ts +6 -6
- package/dist/spectral/helpers.js +43 -37
- package/dist/state.svelte.d.ts +0 -7
- package/dist/state.svelte.js +0 -6
- package/dist/structure/Arrow.svelte +2 -4
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/CanvasTooltip.svelte +1 -0
- package/dist/structure/CellSelect.svelte +11 -3
- package/dist/structure/CellSelect.svelte.d.ts +2 -1
- package/dist/structure/Lattice.svelte +2 -2
- package/dist/structure/Structure.svelte +291 -355
- package/dist/structure/Structure.svelte.d.ts +5 -15
- package/dist/structure/StructureControls.svelte +217 -2
- package/dist/structure/StructureControls.svelte.d.ts +5 -3
- package/dist/structure/StructureExportPane.svelte +54 -156
- package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
- package/dist/structure/StructureInfoPane.svelte +5 -3
- package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
- package/dist/structure/StructureScene.svelte +365 -198
- package/dist/structure/StructureScene.svelte.d.ts +22 -20
- package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
- package/dist/structure/{label-placement.js → atom-label-placement.js} +12 -2
- package/dist/structure/atom-properties.d.ts +1 -1
- package/dist/structure/atom-properties.js +11 -16
- package/dist/structure/bond-order-perception.js +2 -4
- package/dist/structure/bonding.d.ts +3 -0
- package/dist/structure/bonding.js +91 -48
- package/dist/structure/export.d.ts +24 -4
- package/dist/structure/export.js +64 -122
- package/dist/structure/index.d.ts +2 -0
- package/dist/structure/index.js +2 -0
- package/dist/structure/parse.d.ts +3 -2
- package/dist/structure/parse.js +333 -370
- package/dist/structure/partial-occupancy.d.ts +0 -1
- package/dist/structure/partial-occupancy.js +1 -1
- package/dist/structure/pbc.d.ts +1 -1
- package/dist/structure/pbc.js +186 -13
- package/dist/structure/polyhedra.d.ts +41 -0
- package/dist/structure/polyhedra.js +602 -0
- package/dist/structure/site.d.ts +4 -0
- package/dist/structure/site.js +1 -0
- package/dist/structure/supercell.js +3 -2
- package/dist/structure/validation.js +5 -6
- package/dist/symmetry/SymmetryElementControls.svelte +69 -0
- package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
- package/dist/symmetry/SymmetryElements.svelte +354 -0
- package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
- package/dist/symmetry/SymmetryStats.svelte +111 -6
- package/dist/symmetry/WyckoffTable.svelte +68 -7
- package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
- package/dist/symmetry/cell-transform.js +7 -14
- package/dist/symmetry/index.d.ts +14 -4
- package/dist/symmetry/index.js +301 -80
- package/dist/symmetry/spacegroups.d.ts +5 -1
- package/dist/symmetry/spacegroups.js +15 -1
- package/dist/symmetry/symmetry-elements.d.ts +33 -0
- package/dist/symmetry/symmetry-elements.js +521 -0
- package/dist/symmetry/wyckoff-db.d.ts +9 -0
- package/dist/symmetry/wyckoff-db.js +87 -0
- package/dist/table/HeatmapTable.svelte +4 -15
- package/dist/table/HeatmapTable.svelte.d.ts +1 -1
- package/dist/trajectory/Trajectory.svelte +58 -61
- package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
- package/dist/trajectory/TrajectoryExportPane.svelte +15 -24
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
- package/dist/trajectory/TrajectoryInfoPane.svelte +3 -2
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
- package/dist/trajectory/constants.js +6 -2
- package/dist/trajectory/extract.js +17 -37
- package/dist/trajectory/format-detect.d.ts +0 -1
- package/dist/trajectory/format-detect.js +3 -9
- package/dist/trajectory/frame-reader.d.ts +0 -1
- package/dist/trajectory/frame-reader.js +62 -128
- package/dist/trajectory/helpers.d.ts +10 -2
- package/dist/trajectory/helpers.js +56 -36
- package/dist/trajectory/parse/ase.d.ts +9 -1
- package/dist/trajectory/parse/ase.js +47 -32
- package/dist/trajectory/parse/diagnostics.d.ts +3 -0
- package/dist/trajectory/parse/diagnostics.js +14 -0
- package/dist/trajectory/parse/index.d.ts +1 -1
- package/dist/trajectory/parse/index.js +54 -102
- package/dist/trajectory/parse/lammps.d.ts +0 -2
- package/dist/trajectory/parse/lammps.js +8 -6
- package/dist/trajectory/parse/pymatgen.d.ts +2 -0
- package/dist/trajectory/parse/pymatgen.js +74 -0
- package/dist/trajectory/parse/vasp.js +4 -3
- package/dist/trajectory/parse/xyz.d.ts +9 -21
- package/dist/trajectory/parse/xyz.js +28 -33
- package/dist/trajectory/plotting.d.ts +0 -1
- package/dist/trajectory/plotting.js +3 -100
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +1 -1
- package/dist/xrd/XrdPlot.svelte +14 -29
- package/dist/xrd/broadening.d.ts +2 -1
- package/dist/xrd/calc-xrd.js +6 -11
- package/dist/xrd/index.d.ts +2 -2
- package/package.json +29 -16
- package/dist/element/data.json +0 -11864
- package/dist/fermi-surface/marching-cubes.d.ts +0 -2
- package/dist/fermi-surface/marching-cubes.js +0 -2
- package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
- package/dist/plot/core/hover-lock.svelte.js +0 -45
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { AXIS_COLORS, NEG_AXIS_COLORS } from '../colors'
|
|
3
2
|
import type { Vec3 } from '../math'
|
|
4
3
|
import * as math from '../math'
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
4
|
+
import { bind_renderer, build_orbit_props, SceneCamera } from '../scene'
|
|
5
|
+
import type { SceneControlProps, ThreltePointerEvent } from '../scene'
|
|
6
|
+
import { DEFAULTS } from '../settings'
|
|
7
7
|
import Cylinder from '../structure/Cylinder.svelte'
|
|
8
|
-
import { T
|
|
8
|
+
import { T } from '@threlte/core'
|
|
9
9
|
import * as extras from '@threlte/extras'
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import {
|
|
11
|
+
cartesian_to_fractional,
|
|
12
|
+
default_camera_position,
|
|
13
|
+
k_lattice_inverse,
|
|
14
|
+
k_space_size,
|
|
15
|
+
polyhedron_centroid,
|
|
16
|
+
polyhedron_geometry,
|
|
17
|
+
} from './geometry'
|
|
18
|
+
import ReciprocalVectors from './ReciprocalVectors.svelte'
|
|
13
19
|
import type { BrillouinZoneData, BZHoverData, IrreducibleBZData } from './types'
|
|
14
20
|
|
|
15
|
-
// Threlte pointer event type for mesh interactions
|
|
16
|
-
type ThreltePointerEvent = { point: Vector3; nativeEvent: PointerEvent }
|
|
17
|
-
|
|
18
21
|
let {
|
|
19
22
|
bz_data = $bindable(),
|
|
20
23
|
camera_position = $bindable(),
|
|
@@ -43,7 +46,6 @@
|
|
|
43
46
|
directional_light = DEFAULTS.structure.directional_light,
|
|
44
47
|
gizmo = DEFAULTS.structure.show_gizmo,
|
|
45
48
|
auto_rotate = DEFAULTS.structure.auto_rotate,
|
|
46
|
-
camera_is_moving = $bindable(false),
|
|
47
49
|
scene = $bindable(),
|
|
48
50
|
camera = $bindable(),
|
|
49
51
|
k_path_points = [],
|
|
@@ -52,10 +54,9 @@
|
|
|
52
54
|
hovered_qpoint_index = null,
|
|
53
55
|
hover_data = $bindable<BZHoverData | null>(null),
|
|
54
56
|
on_kpath_hover,
|
|
55
|
-
}: {
|
|
57
|
+
}: SceneControlProps & {
|
|
56
58
|
bz_data?: BrillouinZoneData
|
|
57
59
|
camera_position?: Vec3 | undefined
|
|
58
|
-
camera_projection?: CameraProjection
|
|
59
60
|
surface_color?: string
|
|
60
61
|
surface_opacity?: number
|
|
61
62
|
edge_color?: string
|
|
@@ -67,22 +68,6 @@
|
|
|
67
68
|
ibz_data?: IrreducibleBZData | null
|
|
68
69
|
ibz_color?: string
|
|
69
70
|
ibz_opacity?: number
|
|
70
|
-
rotation_damping?: number
|
|
71
|
-
max_zoom?: number
|
|
72
|
-
min_zoom?: number
|
|
73
|
-
rotate_speed?: number
|
|
74
|
-
zoom_speed?: number
|
|
75
|
-
pan_speed?: number
|
|
76
|
-
zoom_to_cursor?: boolean
|
|
77
|
-
fov?: number
|
|
78
|
-
initial_zoom?: number
|
|
79
|
-
ambient_light?: number
|
|
80
|
-
directional_light?: number
|
|
81
|
-
gizmo?: boolean | ComponentProps<typeof extras.Gizmo>
|
|
82
|
-
auto_rotate?: number
|
|
83
|
-
camera_is_moving?: boolean
|
|
84
|
-
scene?: Scene
|
|
85
|
-
camera?: Camera
|
|
86
71
|
k_path_points?: Vec3[]
|
|
87
72
|
k_path_labels?: { position: Vec3; label: string | null }[]
|
|
88
73
|
hovered_k_point?: Vec3 | null
|
|
@@ -91,83 +76,32 @@
|
|
|
91
76
|
on_kpath_hover?: (qpoint_index: number | null) => void
|
|
92
77
|
} = $props()
|
|
93
78
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
camera = threlte.camera.current
|
|
98
|
-
if (threlte.renderer) {
|
|
99
|
-
Object.assign(threlte.renderer.domElement, { __renderer: threlte.renderer })
|
|
100
|
-
}
|
|
79
|
+
bind_renderer((threlte_scene, threlte_camera) => {
|
|
80
|
+
scene = threlte_scene
|
|
81
|
+
camera = threlte_camera
|
|
101
82
|
})
|
|
102
83
|
|
|
103
84
|
extras.interactivity()
|
|
104
85
|
|
|
105
|
-
//
|
|
106
|
-
const rotation_target = $derived
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
[0, 0, 0] as Vec3,
|
|
111
|
-
)
|
|
112
|
-
return math.scale(sum, 1 / bz_data.vertices.length)
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
// BZ size for camera positioning: average magnitude of k-vectors
|
|
116
|
-
const bz_size = $derived.by(() => {
|
|
117
|
-
if (!bz_data?.k_lattice) return 10
|
|
118
|
-
const mags = bz_data.k_lattice.map((vec) => Math.hypot(...vec))
|
|
119
|
-
return mags.reduce((sum, mag) => sum + mag, 0) / 3
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
const computed_camera_position = $derived.by(() =>
|
|
123
|
-
camera_position || ([10, 3, 8].map((coord) => coord * Math.max(1, bz_size)) as Vec3)
|
|
86
|
+
// BZ centroid as rotation center; mean k-vector magnitude for camera positioning
|
|
87
|
+
const rotation_target = $derived(polyhedron_centroid(bz_data?.vertices))
|
|
88
|
+
const bz_size = $derived(k_space_size(bz_data?.k_lattice))
|
|
89
|
+
const computed_camera_position = $derived(
|
|
90
|
+
camera_position || default_camera_position(bz_size),
|
|
124
91
|
)
|
|
125
92
|
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
className: `responsive-gizmo`,
|
|
129
|
-
...Object.fromEntries(
|
|
130
|
-
[...AXIS_COLORS, ...NEG_AXIS_COLORS].map(([axis, color, hover]) => [
|
|
131
|
-
axis,
|
|
132
|
-
{
|
|
133
|
-
color,
|
|
134
|
-
labelColor: `#111`,
|
|
135
|
-
opacity: axis.startsWith(`n`) ? 0.9 : 0.8,
|
|
136
|
-
hover: {
|
|
137
|
-
color: hover,
|
|
138
|
-
labelColor: `#222`,
|
|
139
|
-
opacity: axis.startsWith(`n`) ? 1 : 0.9,
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
]),
|
|
143
|
-
),
|
|
144
|
-
...(typeof gizmo === `object` ? gizmo : {}),
|
|
145
|
-
offset: { left: 5, bottom: 5 },
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
const is_ortho = $derived(camera_projection === `orthographic`)
|
|
149
|
-
const orbit_controls_props = $derived({
|
|
150
|
-
position: [0, 0, 0],
|
|
93
|
+
const orbit_controls_props = $derived(build_orbit_props({
|
|
94
|
+
camera_projection,
|
|
151
95
|
target: rotation_target,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
autoRotate: Boolean(auto_rotate),
|
|
162
|
-
autoRotateSpeed: auto_rotate,
|
|
163
|
-
enableDamping: Boolean(rotation_damping),
|
|
164
|
-
dampingFactor: rotation_damping,
|
|
165
|
-
onstart: () => (camera_is_moving = true),
|
|
166
|
-
onend: () => (camera_is_moving = false),
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
const vector_colors = [`red`, `green`, `blue`]
|
|
170
|
-
const vector_labels = [`b₁`, `b₂`, `b₃`]
|
|
96
|
+
rotate_speed,
|
|
97
|
+
zoom_speed,
|
|
98
|
+
zoom_to_cursor,
|
|
99
|
+
pan_speed,
|
|
100
|
+
max_zoom,
|
|
101
|
+
min_zoom,
|
|
102
|
+
auto_rotate,
|
|
103
|
+
rotation_damping,
|
|
104
|
+
}))
|
|
171
105
|
|
|
172
106
|
// K-path styling. The invisible hover proxy is twice the visible thickness so the cursor
|
|
173
107
|
// snaps to the path even when it isn't directly over the thin visible segment.
|
|
@@ -186,49 +120,12 @@
|
|
|
186
120
|
return lens[Math.floor(lens.length / 2)] * 10
|
|
187
121
|
})
|
|
188
122
|
|
|
189
|
-
// Create mesh geometry from faces with fan triangulation
|
|
190
|
-
function create_mesh_geometry(
|
|
191
|
-
vertices: Vec3[],
|
|
192
|
-
faces: number[][],
|
|
193
|
-
): BufferGeometry | null {
|
|
194
|
-
if (faces.length === 0) return null
|
|
195
|
-
|
|
196
|
-
const positions: number[] = []
|
|
197
|
-
const normals: number[] = []
|
|
198
|
-
|
|
199
|
-
for (const face of faces) {
|
|
200
|
-
if (face.length < 3) continue
|
|
201
|
-
for (let face_idx = 1; face_idx < face.length - 1; face_idx++) {
|
|
202
|
-
const indices = [face[0], face[face_idx], face[face_idx + 1]]
|
|
203
|
-
if (indices.some((idx) => idx < 0 || idx >= vertices.length)) continue
|
|
204
|
-
const [v0, v1, v2] = indices.map((idx) => vertices[idx])
|
|
205
|
-
positions.push(...v0, ...v1, ...v2)
|
|
206
|
-
|
|
207
|
-
const e1: Vec3 = math.subtract(v1, v0)
|
|
208
|
-
const e2: Vec3 = math.subtract(v2, v0)
|
|
209
|
-
const normal_vec = math.cross_3d(e1, e2)
|
|
210
|
-
const len = Math.hypot(...normal_vec)
|
|
211
|
-
const norm = len > 1e-10 ? normal_vec.map((coord) => coord / len) : [0, 0, 0]
|
|
212
|
-
normals.push(...norm, ...norm, ...norm)
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
const geometry = new BufferGeometry()
|
|
217
|
-
geometry.setAttribute(
|
|
218
|
-
`position`,
|
|
219
|
-
new BufferAttribute(new Float32Array(positions), 3),
|
|
220
|
-
)
|
|
221
|
-
geometry.setAttribute(`normal`, new BufferAttribute(new Float32Array(normals), 3))
|
|
222
|
-
geometry.computeBoundingSphere()
|
|
223
|
-
return geometry
|
|
224
|
-
}
|
|
225
|
-
|
|
226
123
|
const bz_geometry = $derived(
|
|
227
|
-
bz_data ?
|
|
124
|
+
bz_data ? polyhedron_geometry(bz_data.vertices, bz_data.faces) : null,
|
|
228
125
|
)
|
|
229
126
|
const ibz_geometry = $derived(
|
|
230
127
|
show_ibz && ibz_data
|
|
231
|
-
?
|
|
128
|
+
? polyhedron_geometry(ibz_data.vertices, ibz_data.faces)
|
|
232
129
|
: null,
|
|
233
130
|
)
|
|
234
131
|
|
|
@@ -242,21 +139,8 @@
|
|
|
242
139
|
return () => prev?.dispose()
|
|
243
140
|
})
|
|
244
141
|
|
|
245
|
-
//
|
|
246
|
-
const k_lattice_inv = $derived
|
|
247
|
-
if (!bz_data?.k_lattice) return null
|
|
248
|
-
try {
|
|
249
|
-
return math.matrix_inverse_3x3(bz_data.k_lattice)
|
|
250
|
-
} catch {
|
|
251
|
-
return null
|
|
252
|
-
}
|
|
253
|
-
})
|
|
254
|
-
|
|
255
|
-
// Convert Cartesian k-coordinates to fractional (reciprocal lattice units)
|
|
256
|
-
function cartesian_to_fractional(cart: Vec3): Vec3 | null {
|
|
257
|
-
if (!k_lattice_inv) return null
|
|
258
|
-
return math.mat3x3_vec3_multiply(k_lattice_inv, cart)
|
|
259
|
-
}
|
|
142
|
+
// Inverse of k_lattice for Cartesian->fractional conversion
|
|
143
|
+
const k_lattice_inv = $derived(k_lattice_inverse(bz_data?.k_lattice))
|
|
260
144
|
|
|
261
145
|
// Throttle state for pointer move events
|
|
262
146
|
let last_hover_time = 0
|
|
@@ -289,7 +173,7 @@
|
|
|
289
173
|
if (!bz_data) return null
|
|
290
174
|
|
|
291
175
|
const position_cartesian: Vec3 = [event.point.x, event.point.y, event.point.z]
|
|
292
|
-
const position_fractional = cartesian_to_fractional(position_cartesian)
|
|
176
|
+
const position_fractional = cartesian_to_fractional(k_lattice_inv, position_cartesian)
|
|
293
177
|
|
|
294
178
|
const { clientX, clientY } = event.nativeEvent
|
|
295
179
|
const ibz_vol = ibz_data?.volume ?? null
|
|
@@ -342,24 +226,14 @@
|
|
|
342
226
|
}
|
|
343
227
|
</script>
|
|
344
228
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
{
|
|
352
|
-
|
|
353
|
-
makeDefault
|
|
354
|
-
position={computed_camera_position}
|
|
355
|
-
zoom={initial_zoom}
|
|
356
|
-
near={-100}
|
|
357
|
-
>
|
|
358
|
-
<extras.OrbitControls {...orbit_controls_props}>
|
|
359
|
-
{#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
|
|
360
|
-
</extras.OrbitControls>
|
|
361
|
-
</T.OrthographicCamera>
|
|
362
|
-
{/if}
|
|
229
|
+
<SceneCamera
|
|
230
|
+
{camera_projection}
|
|
231
|
+
position={computed_camera_position}
|
|
232
|
+
{fov}
|
|
233
|
+
zoom={initial_zoom}
|
|
234
|
+
orbit_props={orbit_controls_props}
|
|
235
|
+
{gizmo}
|
|
236
|
+
/>
|
|
363
237
|
|
|
364
238
|
<T.DirectionalLight position={[3, 10, 10]} intensity={directional_light} />
|
|
365
239
|
<T.AmbientLight intensity={ambient_light} />
|
|
@@ -370,7 +244,7 @@
|
|
|
370
244
|
{#if bz_geometry}
|
|
371
245
|
<T.Mesh
|
|
372
246
|
geometry={bz_geometry}
|
|
373
|
-
onpointermove={(
|
|
247
|
+
onpointermove={(event: ThreltePointerEvent) => handle_hover(event, false)}
|
|
374
248
|
onpointerleave={() => handle_leave(false)}
|
|
375
249
|
>
|
|
376
250
|
<T.MeshStandardMaterial
|
|
@@ -393,7 +267,7 @@
|
|
|
393
267
|
{#if show_ibz && ibz_geometry}
|
|
394
268
|
<T.Mesh
|
|
395
269
|
geometry={ibz_geometry}
|
|
396
|
-
onpointermove={(
|
|
270
|
+
onpointermove={(event: ThreltePointerEvent) => handle_hover(event, true)}
|
|
397
271
|
onpointerleave={() => handle_leave(true)}
|
|
398
272
|
>
|
|
399
273
|
<T.MeshStandardMaterial
|
|
@@ -416,28 +290,7 @@
|
|
|
416
290
|
|
|
417
291
|
<!-- Reciprocal lattice vectors -->
|
|
418
292
|
{#if show_vectors && bz_data.k_lattice}
|
|
419
|
-
{
|
|
420
|
-
{@const scaled_vec = vec.map((coord) => coord * vector_scale) as Vec3}
|
|
421
|
-
{@const label_position = scaled_vec.map((coord) => coord * 1.15) as Vec3}
|
|
422
|
-
<Arrow
|
|
423
|
-
position={[0, 0, 0]}
|
|
424
|
-
vector={scaled_vec}
|
|
425
|
-
color={vector_colors[idx]}
|
|
426
|
-
scale={1}
|
|
427
|
-
shaft_radius={bz_size * 0.008}
|
|
428
|
-
arrow_head_radius={bz_size * 0.028}
|
|
429
|
-
arrow_head_length={-0.1}
|
|
430
|
-
/>
|
|
431
|
-
<!-- Vector label beyond tip -->
|
|
432
|
-
<extras.HTML center position={label_position}>
|
|
433
|
-
<span
|
|
434
|
-
style:color={vector_colors[idx]}
|
|
435
|
-
style:font-size="1.2em"
|
|
436
|
-
>
|
|
437
|
-
{vector_labels[idx]}
|
|
438
|
-
</span>
|
|
439
|
-
</extras.HTML>
|
|
440
|
-
{/each}
|
|
293
|
+
<ReciprocalVectors k_lattice={bz_data.k_lattice} {vector_scale} size={bz_size} />
|
|
441
294
|
{/if}
|
|
442
295
|
|
|
443
296
|
<!-- K-path visualization -->
|
|
@@ -513,10 +366,3 @@
|
|
|
513
366
|
{/if}
|
|
514
367
|
{/if}
|
|
515
368
|
</T.Group>
|
|
516
|
-
|
|
517
|
-
<style>
|
|
518
|
-
:global(.brillouin-zone .responsive-gizmo) {
|
|
519
|
-
width: clamp(70px, 18cqmin, 100px) !important;
|
|
520
|
-
height: clamp(70px, 18cqmin, 100px) !important;
|
|
521
|
-
}
|
|
522
|
-
</style>
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import type { Vec3 } from '../math';
|
|
2
|
-
import {
|
|
3
|
-
import * as extras from '@threlte/extras';
|
|
4
|
-
import type { ComponentProps } from 'svelte';
|
|
5
|
-
import type { Camera, Scene } from 'three';
|
|
2
|
+
import type { SceneControlProps } from '../scene';
|
|
6
3
|
import type { BrillouinZoneData, BZHoverData, IrreducibleBZData } from './types';
|
|
7
|
-
type $$ComponentProps = {
|
|
4
|
+
type $$ComponentProps = SceneControlProps & {
|
|
8
5
|
bz_data?: BrillouinZoneData;
|
|
9
6
|
camera_position?: Vec3 | undefined;
|
|
10
|
-
camera_projection?: CameraProjection;
|
|
11
7
|
surface_color?: string;
|
|
12
8
|
surface_opacity?: number;
|
|
13
9
|
edge_color?: string;
|
|
@@ -18,22 +14,6 @@ type $$ComponentProps = {
|
|
|
18
14
|
ibz_data?: IrreducibleBZData | null;
|
|
19
15
|
ibz_color?: string;
|
|
20
16
|
ibz_opacity?: number;
|
|
21
|
-
rotation_damping?: number;
|
|
22
|
-
max_zoom?: number;
|
|
23
|
-
min_zoom?: number;
|
|
24
|
-
rotate_speed?: number;
|
|
25
|
-
zoom_speed?: number;
|
|
26
|
-
pan_speed?: number;
|
|
27
|
-
zoom_to_cursor?: boolean;
|
|
28
|
-
fov?: number;
|
|
29
|
-
initial_zoom?: number;
|
|
30
|
-
ambient_light?: number;
|
|
31
|
-
directional_light?: number;
|
|
32
|
-
gizmo?: boolean | ComponentProps<typeof extras.Gizmo>;
|
|
33
|
-
auto_rotate?: number;
|
|
34
|
-
camera_is_moving?: boolean;
|
|
35
|
-
scene?: Scene;
|
|
36
|
-
camera?: Camera;
|
|
37
17
|
k_path_points?: Vec3[];
|
|
38
18
|
k_path_labels?: {
|
|
39
19
|
position: Vec3;
|
|
@@ -44,6 +24,6 @@ type $$ComponentProps = {
|
|
|
44
24
|
hover_data?: BZHoverData | null;
|
|
45
25
|
on_kpath_hover?: (qpoint_index: number | null) => void;
|
|
46
26
|
};
|
|
47
|
-
declare const BrillouinZoneScene: import("svelte").Component<$$ComponentProps, {}, "
|
|
27
|
+
declare const BrillouinZoneScene: import("svelte").Component<$$ComponentProps, {}, "scene" | "camera" | "camera_projection" | "camera_position" | "vector_scale" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "bz_data" | "hover_data">;
|
|
48
28
|
type BrillouinZoneScene = ReturnType<typeof BrillouinZoneScene>;
|
|
49
29
|
export default BrillouinZoneScene;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Reciprocal lattice vector arrows (b₁, b₂, b₃) with HTML labels beyond the tips, shared by BrillouinZoneScene and FermiSurfaceScene
|
|
3
|
+
import type { Matrix3x3, Vec3 } from '../math'
|
|
4
|
+
import Arrow from '../structure/Arrow.svelte'
|
|
5
|
+
import * as extras from '@threlte/extras'
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
k_lattice,
|
|
9
|
+
vector_scale = 1.0,
|
|
10
|
+
size = 1,
|
|
11
|
+
}: {
|
|
12
|
+
k_lattice: Matrix3x3
|
|
13
|
+
vector_scale?: number
|
|
14
|
+
size?: number // characteristic scene size used to scale arrow proportions
|
|
15
|
+
} = $props()
|
|
16
|
+
|
|
17
|
+
const vector_colors = [`red`, `green`, `blue`]
|
|
18
|
+
const vector_labels = [`b₁`, `b₂`, `b₃`]
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
{#each k_lattice as vec, idx (idx)}
|
|
22
|
+
{@const scaled_vec = vec.map((coord) => coord * vector_scale) as Vec3}
|
|
23
|
+
{@const label_position = scaled_vec.map((coord) => coord * 1.15) as Vec3}
|
|
24
|
+
<Arrow
|
|
25
|
+
position={[0, 0, 0]}
|
|
26
|
+
vector={scaled_vec}
|
|
27
|
+
color={vector_colors[idx]}
|
|
28
|
+
scale={1}
|
|
29
|
+
shaft_radius={size * 0.008}
|
|
30
|
+
arrow_head_radius={size * 0.028}
|
|
31
|
+
arrow_head_length={-0.1}
|
|
32
|
+
/>
|
|
33
|
+
<!-- Vector label beyond tip -->
|
|
34
|
+
<extras.HTML center position={label_position}>
|
|
35
|
+
<span style:color={vector_colors[idx]} style:font-size="1.2em">
|
|
36
|
+
{vector_labels[idx]}
|
|
37
|
+
</span>
|
|
38
|
+
</extras.HTML>
|
|
39
|
+
{/each}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Matrix3x3 } from '../math';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
k_lattice: Matrix3x3;
|
|
4
|
+
vector_scale?: number;
|
|
5
|
+
size?: number;
|
|
6
|
+
};
|
|
7
|
+
declare const ReciprocalVectors: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type ReciprocalVectors = ReturnType<typeof ReciprocalVectors>;
|
|
9
|
+
export default ReciprocalVectors;
|
|
@@ -12,6 +12,8 @@ type ClippingPlane = {
|
|
|
12
12
|
normal: Vec3;
|
|
13
13
|
dist: number;
|
|
14
14
|
};
|
|
15
|
+
export declare const IBZ_REFERENCE_DIRECTIONS: Vec3[];
|
|
16
|
+
export declare function find_ibz_reference_direction(non_identity_ops: Matrix3x3[]): Vec3;
|
|
15
17
|
export declare function compute_ibz_clipping_planes(point_group_ops: Matrix3x3[]): ClippingPlane[];
|
|
16
18
|
export declare function compute_irreducible_bz(bz_data: BrillouinZoneData, point_group_ops: Matrix3x3[], edge_sharp_angle_deg?: number): IrreducibleBZData | null;
|
|
17
19
|
export {};
|