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.
Files changed (326) hide show
  1. package/dist/brillouin/BrillouinZone.svelte +68 -145
  2. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -14
  3. package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
  4. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  5. package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
  6. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  7. package/dist/brillouin/BrillouinZoneScene.svelte +49 -203
  8. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
  9. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  10. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  11. package/dist/brillouin/compute.d.ts +2 -0
  12. package/dist/brillouin/compute.js +80 -77
  13. package/dist/brillouin/geometry.d.ts +8 -0
  14. package/dist/brillouin/geometry.js +57 -0
  15. package/dist/brillouin/index.d.ts +2 -0
  16. package/dist/brillouin/index.js +2 -0
  17. package/dist/brillouin/types.d.ts +2 -2
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +100 -191
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +176 -464
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  23. package/dist/chempot-diagram/color.d.ts +3 -6
  24. package/dist/chempot-diagram/color.js +5 -5
  25. package/dist/chempot-diagram/compute.d.ts +3 -3
  26. package/dist/chempot-diagram/compute.js +3 -1
  27. package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
  28. package/dist/chempot-diagram/controls-state.svelte.js +42 -0
  29. package/dist/chempot-diagram/export.d.ts +47 -0
  30. package/dist/chempot-diagram/export.js +133 -0
  31. package/dist/chempot-diagram/index.d.ts +1 -0
  32. package/dist/chempot-diagram/index.js +1 -0
  33. package/dist/chempot-diagram/pointer.d.ts +0 -10
  34. package/dist/chempot-diagram/pointer.js +4 -4
  35. package/dist/chempot-diagram/types.d.ts +3 -3
  36. package/dist/colors/index.js +2 -2
  37. package/dist/composition/FormulaFilter.svelte +6 -5
  38. package/dist/composition/PieChart.svelte +5 -5
  39. package/dist/composition/chem-sys.js +3 -2
  40. package/dist/composition/format.js +3 -2
  41. package/dist/composition/parse.d.ts +0 -1
  42. package/dist/composition/parse.js +17 -19
  43. package/dist/controls.d.ts +1 -0
  44. package/dist/controls.js +0 -1
  45. package/dist/convex-hull/ConvexHull.svelte +8 -10
  46. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  47. package/dist/convex-hull/ConvexHull2D.svelte +94 -175
  48. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  49. package/dist/convex-hull/ConvexHull3D.svelte +176 -680
  50. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  51. package/dist/convex-hull/ConvexHull4D.svelte +180 -680
  52. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  53. package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
  54. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  55. package/dist/convex-hull/ConvexHullControls.svelte +88 -7
  56. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  57. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  58. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  59. package/dist/convex-hull/ConvexHullStats.svelte +29 -168
  60. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  61. package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
  62. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  63. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  64. package/dist/convex-hull/barycentric-coords.js +6 -33
  65. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  66. package/dist/convex-hull/canvas-interactions.svelte.js +278 -0
  67. package/dist/convex-hull/helpers.d.ts +39 -7
  68. package/dist/convex-hull/helpers.js +154 -69
  69. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  70. package/dist/convex-hull/hull-state.svelte.js +124 -0
  71. package/dist/convex-hull/index.d.ts +9 -7
  72. package/dist/convex-hull/index.js +7 -2
  73. package/dist/convex-hull/thermodynamics.js +91 -920
  74. package/dist/convex-hull/types.d.ts +12 -4
  75. package/dist/convex-hull/types.js +12 -0
  76. package/dist/coordination/CoordinationBarPlot.svelte +4 -11
  77. package/dist/element/BohrAtom.svelte +2 -1
  78. package/dist/element/ElementTile.svelte.d.ts +1 -1
  79. package/dist/element/index.d.ts +4 -0
  80. package/dist/element/index.js +18 -0
  81. package/dist/feedback/DragOverlay.svelte +3 -1
  82. package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
  83. package/dist/feedback/StatusMessage.svelte +13 -3
  84. package/dist/fermi-surface/FermiSurface.svelte +67 -146
  85. package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
  86. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  87. package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -224
  88. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  89. package/dist/fermi-surface/compute.js +11 -10
  90. package/dist/fermi-surface/export.js +4 -15
  91. package/dist/fermi-surface/index.d.ts +0 -1
  92. package/dist/fermi-surface/index.js +0 -1
  93. package/dist/fermi-surface/parse.d.ts +1 -1
  94. package/dist/fermi-surface/parse.js +64 -75
  95. package/dist/fermi-surface/types.d.ts +2 -2
  96. package/dist/heatmap-matrix/HeatmapMatrix.svelte +55 -40
  97. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
  98. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
  99. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  100. package/dist/heatmap-matrix/index.d.ts +3 -2
  101. package/dist/index.d.ts +1 -0
  102. package/dist/index.js +1 -0
  103. package/dist/io/ExportPane.svelte +166 -0
  104. package/dist/io/ExportPane.svelte.d.ts +17 -0
  105. package/dist/io/decompress.js +1 -2
  106. package/dist/io/export.d.ts +5 -1
  107. package/dist/io/export.js +32 -28
  108. package/dist/io/fetch.d.ts +2 -1
  109. package/dist/io/file-drop.d.ts +7 -0
  110. package/dist/io/file-drop.js +13 -0
  111. package/dist/io/index.d.ts +2 -0
  112. package/dist/io/index.js +10 -0
  113. package/dist/io/types.d.ts +13 -0
  114. package/dist/isosurface/parse.js +46 -44
  115. package/dist/labels.js +1 -1
  116. package/dist/layout/FullscreenButton.svelte +33 -0
  117. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  118. package/dist/layout/FullscreenToggle.svelte +8 -14
  119. package/dist/layout/ViewerChrome.svelte +116 -0
  120. package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
  121. package/dist/layout/fullscreen.d.ts +4 -0
  122. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  123. package/dist/layout/fullscreen.svelte.js +37 -0
  124. package/dist/layout/index.d.ts +3 -0
  125. package/dist/layout/index.js +3 -0
  126. package/dist/math.d.ts +7 -3
  127. package/dist/math.js +18 -21
  128. package/dist/overlays/index.d.ts +4 -0
  129. package/dist/periodic-table/PeriodicTable.svelte +9 -8
  130. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
  131. package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
  132. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  133. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  134. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  135. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
  136. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  137. package/dist/phase-diagram/colors.js +1 -1
  138. package/dist/phase-diagram/parse.d.ts +2 -1
  139. package/dist/plot/bar/BarPlot.svelte +79 -316
  140. package/dist/plot/bar/BarPlot.svelte.d.ts +7 -15
  141. package/dist/plot/bar/BarPlotControls.svelte.d.ts +1 -1
  142. package/dist/plot/bar/SpacegroupBarPlot.svelte +2 -1
  143. package/dist/plot/box/BoxPlot.svelte +76 -246
  144. package/dist/plot/box/BoxPlot.svelte.d.ts +4 -3
  145. package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
  146. package/dist/plot/box/Violin.svelte.d.ts +1 -1
  147. package/dist/plot/box/box-plot.d.ts +3 -2
  148. package/dist/plot/box/box-plot.js +5 -2
  149. package/dist/plot/box/kde.d.ts +2 -1
  150. package/dist/plot/box/kde.js +4 -4
  151. package/dist/plot/core/auto-place.d.ts +1 -1
  152. package/dist/plot/core/auto-place.js +4 -1
  153. package/dist/plot/core/components/ColorBar.svelte +5 -5
  154. package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
  155. package/dist/plot/core/components/Line.svelte +3 -2
  156. package/dist/plot/core/components/Line.svelte.d.ts +3 -2
  157. package/dist/plot/core/components/PlotAxis.svelte +2 -1
  158. package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
  159. package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
  160. package/dist/plot/core/components/ReferenceLine3D.svelte +2 -2
  161. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
  162. package/dist/plot/core/components/ReferencePlane.svelte +2 -2
  163. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
  164. package/dist/plot/core/data-cleaning.js +18 -18
  165. package/dist/plot/core/fill-utils.d.ts +4 -3
  166. package/dist/plot/core/fill-utils.js +6 -3
  167. package/dist/plot/core/interactions.d.ts +5 -1
  168. package/dist/plot/core/interactions.js +14 -0
  169. package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
  170. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  171. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  172. package/dist/plot/core/placed-tween.svelte.js +68 -0
  173. package/dist/plot/core/reference-line.d.ts +10 -10
  174. package/dist/plot/core/reference-line.js +6 -6
  175. package/dist/plot/core/scales.d.ts +17 -25
  176. package/dist/plot/core/scales.js +10 -8
  177. package/dist/plot/core/svg.d.ts +2 -1
  178. package/dist/plot/core/types.d.ts +18 -7
  179. package/dist/plot/core/utils/label-placement.d.ts +1 -1
  180. package/dist/plot/core/utils/label-placement.js +3 -3
  181. package/dist/plot/core/utils.d.ts +2 -1
  182. package/dist/plot/histogram/Histogram.svelte +77 -314
  183. package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
  184. package/dist/plot/sankey/Sankey.svelte +2 -5
  185. package/dist/plot/sankey/Sankey.svelte.d.ts +1 -1
  186. package/dist/plot/sankey/sankey.js +3 -1
  187. package/dist/plot/scatter/BinnedScatterPlot.svelte +3 -5
  188. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +4 -4
  189. package/dist/plot/scatter/ScatterPlot.svelte +160 -450
  190. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +7 -15
  191. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  192. package/dist/plot/scatter/binned-scatter-types.d.ts +4 -11
  193. package/dist/plot/scatter/index.d.ts +1 -1
  194. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +15 -26
  195. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
  196. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +9 -10
  197. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
  198. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +122 -121
  199. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
  200. package/dist/plot/scatter-3d/Surface3D.svelte +6 -5
  201. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
  202. package/dist/plot/sunburst/Sunburst.svelte +16 -20
  203. package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
  204. package/dist/plot/sunburst/SunburstControls.svelte.d.ts +1 -1
  205. package/dist/plot/sunburst/sunburst.js +4 -1
  206. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  207. package/dist/sanitize.js +13 -2
  208. package/dist/scene/SceneCamera.svelte +62 -0
  209. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  210. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  211. package/dist/scene/bind-renderer.svelte.js +14 -0
  212. package/dist/scene/index.d.ts +4 -0
  213. package/dist/scene/index.js +5 -0
  214. package/dist/scene/props.js +52 -0
  215. package/dist/scene/types.d.ts +26 -0
  216. package/dist/scene/types.js +1 -0
  217. package/dist/settings.d.ts +14 -2
  218. package/dist/settings.js +59 -1
  219. package/dist/spectral/Bands.svelte +8 -7
  220. package/dist/spectral/Bands.svelte.d.ts +3 -2
  221. package/dist/spectral/BandsAndDos.svelte +22 -24
  222. package/dist/spectral/BrillouinBandsDos.svelte +3 -3
  223. package/dist/spectral/Dos.svelte +5 -4
  224. package/dist/spectral/Dos.svelte.d.ts +2 -1
  225. package/dist/spectral/helpers.d.ts +6 -6
  226. package/dist/spectral/helpers.js +43 -37
  227. package/dist/state.svelte.d.ts +0 -7
  228. package/dist/state.svelte.js +0 -6
  229. package/dist/structure/Arrow.svelte +2 -4
  230. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  231. package/dist/structure/CanvasTooltip.svelte +1 -0
  232. package/dist/structure/CellSelect.svelte +11 -3
  233. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  234. package/dist/structure/Lattice.svelte +2 -2
  235. package/dist/structure/Structure.svelte +291 -355
  236. package/dist/structure/Structure.svelte.d.ts +5 -15
  237. package/dist/structure/StructureControls.svelte +217 -2
  238. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  239. package/dist/structure/StructureExportPane.svelte +54 -156
  240. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  241. package/dist/structure/StructureInfoPane.svelte +5 -3
  242. package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
  243. package/dist/structure/StructureScene.svelte +365 -198
  244. package/dist/structure/StructureScene.svelte.d.ts +22 -20
  245. package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
  246. package/dist/structure/{label-placement.js → atom-label-placement.js} +12 -2
  247. package/dist/structure/atom-properties.d.ts +1 -1
  248. package/dist/structure/atom-properties.js +11 -16
  249. package/dist/structure/bond-order-perception.js +2 -4
  250. package/dist/structure/bonding.d.ts +3 -0
  251. package/dist/structure/bonding.js +91 -48
  252. package/dist/structure/export.d.ts +24 -4
  253. package/dist/structure/export.js +64 -122
  254. package/dist/structure/index.d.ts +2 -0
  255. package/dist/structure/index.js +2 -0
  256. package/dist/structure/parse.d.ts +3 -2
  257. package/dist/structure/parse.js +333 -370
  258. package/dist/structure/partial-occupancy.d.ts +0 -1
  259. package/dist/structure/partial-occupancy.js +1 -1
  260. package/dist/structure/pbc.d.ts +1 -1
  261. package/dist/structure/pbc.js +186 -13
  262. package/dist/structure/polyhedra.d.ts +41 -0
  263. package/dist/structure/polyhedra.js +602 -0
  264. package/dist/structure/site.d.ts +4 -0
  265. package/dist/structure/site.js +1 -0
  266. package/dist/structure/supercell.js +3 -2
  267. package/dist/structure/validation.js +5 -6
  268. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  269. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  270. package/dist/symmetry/SymmetryElements.svelte +354 -0
  271. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  272. package/dist/symmetry/SymmetryStats.svelte +111 -6
  273. package/dist/symmetry/WyckoffTable.svelte +68 -7
  274. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  275. package/dist/symmetry/cell-transform.js +7 -14
  276. package/dist/symmetry/index.d.ts +14 -4
  277. package/dist/symmetry/index.js +301 -80
  278. package/dist/symmetry/spacegroups.d.ts +5 -1
  279. package/dist/symmetry/spacegroups.js +15 -1
  280. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  281. package/dist/symmetry/symmetry-elements.js +521 -0
  282. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  283. package/dist/symmetry/wyckoff-db.js +87 -0
  284. package/dist/table/HeatmapTable.svelte +4 -15
  285. package/dist/table/HeatmapTable.svelte.d.ts +1 -1
  286. package/dist/trajectory/Trajectory.svelte +58 -61
  287. package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
  288. package/dist/trajectory/TrajectoryExportPane.svelte +15 -24
  289. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  290. package/dist/trajectory/TrajectoryInfoPane.svelte +3 -2
  291. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  292. package/dist/trajectory/constants.js +6 -2
  293. package/dist/trajectory/extract.js +17 -37
  294. package/dist/trajectory/format-detect.d.ts +0 -1
  295. package/dist/trajectory/format-detect.js +3 -9
  296. package/dist/trajectory/frame-reader.d.ts +0 -1
  297. package/dist/trajectory/frame-reader.js +62 -128
  298. package/dist/trajectory/helpers.d.ts +10 -2
  299. package/dist/trajectory/helpers.js +56 -36
  300. package/dist/trajectory/parse/ase.d.ts +9 -1
  301. package/dist/trajectory/parse/ase.js +47 -32
  302. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  303. package/dist/trajectory/parse/diagnostics.js +14 -0
  304. package/dist/trajectory/parse/index.d.ts +1 -1
  305. package/dist/trajectory/parse/index.js +54 -102
  306. package/dist/trajectory/parse/lammps.d.ts +0 -2
  307. package/dist/trajectory/parse/lammps.js +8 -6
  308. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  309. package/dist/trajectory/parse/pymatgen.js +74 -0
  310. package/dist/trajectory/parse/vasp.js +4 -3
  311. package/dist/trajectory/parse/xyz.d.ts +9 -21
  312. package/dist/trajectory/parse/xyz.js +28 -33
  313. package/dist/trajectory/plotting.d.ts +0 -1
  314. package/dist/trajectory/plotting.js +3 -100
  315. package/dist/utils.d.ts +1 -0
  316. package/dist/utils.js +1 -1
  317. package/dist/xrd/XrdPlot.svelte +14 -29
  318. package/dist/xrd/broadening.d.ts +2 -1
  319. package/dist/xrd/calc-xrd.js +6 -11
  320. package/dist/xrd/index.d.ts +2 -2
  321. package/package.json +29 -16
  322. package/dist/element/data.json +0 -11864
  323. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  324. package/dist/fermi-surface/marching-cubes.js +0 -2
  325. package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
  326. 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 { type CameraProjection, DEFAULTS } from '../settings'
6
- import Arrow from '../structure/Arrow.svelte'
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, useThrelte } from '@threlte/core'
8
+ import { T } from '@threlte/core'
9
9
  import * as extras from '@threlte/extras'
10
- import type { ComponentProps } from 'svelte'
11
- import type { Camera, Scene } from 'three'
12
- import { BufferAttribute, BufferGeometry, Vector3 } from 'three'
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
- const threlte = useThrelte()
95
- $effect(() => {
96
- scene = threlte.scene
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
- // Compute centroid of BZ vertices for proper rotation center
106
- const rotation_target = $derived.by((): Vec3 => {
107
- if (!bz_data?.vertices || bz_data.vertices.length === 0) return [0, 0, 0]
108
- const sum = bz_data.vertices.reduce(
109
- (acc, v) => math.add(acc, v),
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 gizmo_props = $derived({
127
- background: { enabled: false },
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
- enableRotate: rotate_speed > 0,
153
- rotateSpeed: rotate_speed,
154
- enableZoom: zoom_speed > 0,
155
- zoomSpeed: is_ortho ? zoom_speed * 2 : zoom_speed,
156
- zoomToCursor: zoom_to_cursor,
157
- enablePan: pan_speed > 0,
158
- panSpeed: pan_speed,
159
- maxZoom: max_zoom,
160
- minZoom: min_zoom,
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 ? create_mesh_geometry(bz_data.vertices, bz_data.faces) : null,
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
- ? create_mesh_geometry(ibz_data.vertices, ibz_data.faces)
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
- // Compute inverse of k_lattice for Cartesian->fractional conversion
246
- const k_lattice_inv = $derived.by(() => {
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
- {#if camera_projection === `perspective`}
346
- <T.PerspectiveCamera makeDefault position={computed_camera_position} {fov}>
347
- <extras.OrbitControls {...orbit_controls_props}>
348
- {#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
349
- </extras.OrbitControls>
350
- </T.PerspectiveCamera>
351
- {:else}
352
- <T.OrthographicCamera
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={(e: ThreltePointerEvent) => handle_hover(e, false)}
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={(e: ThreltePointerEvent) => handle_hover(e, true)}
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
- {#each bz_data.k_lattice as vec, idx (idx)}
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 { type CameraProjection } from '../settings';
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, {}, "camera_position" | "camera_projection" | "vector_scale" | "camera" | "scene" | "camera_is_moving" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "bz_data" | "hover_data">;
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 {};