From 479349393a548400dfaf10f163f3cffb39899069 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 29 Nov 2025 21:43:11 +0000 Subject: [PATCH 1/2] feat: Display distance unit based on LAMMPS input Co-authored-by: anders.hafreager --- src/components/SelectedAtomsInfo.tsx | 30 +++++++++++++--- src/utils/parsers.ts | 52 ++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/src/components/SelectedAtomsInfo.tsx b/src/components/SelectedAtomsInfo.tsx index 4799f023..657cbccf 100644 --- a/src/components/SelectedAtomsInfo.tsx +++ b/src/components/SelectedAtomsInfo.tsx @@ -1,6 +1,8 @@ import { Button } from "antd"; import { Particles } from "omovi"; import { useMemo } from "react"; +import { useStoreState } from "../hooks"; +import { parseLammpsUnits, getDistanceUnitSymbol } from "../utils/parsers"; interface SelectedAtomsInfoProps { selectedAtoms: Set; @@ -48,6 +50,26 @@ const SelectedAtomsInfo = ({ particles, onClearSelection, }: SelectedAtomsInfoProps) => { + const simulation = useStoreState((state) => state.simulation.simulation); + + // Get the distance unit symbol based on LAMMPS unit system + const distanceUnit = useMemo(() => { + if (!simulation) { + return "Å"; // Default to Angstroms + } + + const inputScriptFile = simulation.files.find( + (file) => file.fileName === simulation.inputScript + ); + + if (!inputScriptFile?.content) { + return "Å"; // Default to Angstroms + } + + const unitStyle = parseLammpsUnits(inputScriptFile.content); + return getDistanceUnitSymbol(unitStyle); + }, [simulation]); + if (selectedAtoms.size === 0) { return null; } @@ -117,7 +139,7 @@ const SelectedAtomsInfo = ({ Geometry
- Distance: {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} Å + Distance: {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} {distanceUnit}
)} @@ -130,15 +152,15 @@ const SelectedAtomsInfo = ({
d({atomData[0].atomId}-{atomData[1].atomId}):{" "} - {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} Å + {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} {distanceUnit}
d({atomData[1].atomId}-{atomData[2].atomId}):{" "} - {calculateDistance(atomData[1].position, atomData[2].position).toFixed(3)} Å + {calculateDistance(atomData[1].position, atomData[2].position).toFixed(3)} {distanceUnit}
d({atomData[0].atomId}-{atomData[2].atomId}):{" "} - {calculateDistance(atomData[0].position, atomData[2].position).toFixed(3)} Å + {calculateDistance(atomData[0].position, atomData[2].position).toFixed(3)} {distanceUnit}
diff --git a/src/utils/parsers.ts b/src/utils/parsers.ts index 41505640..f1270c1a 100644 --- a/src/utils/parsers.ts +++ b/src/utils/parsers.ts @@ -88,3 +88,55 @@ export const parseAtomSizeAndColor = (line: string) => { } }; +/** + * Parses LAMMPS units command from input script + * @param inputScript The LAMMPS input script content + * @returns The unit style string (e.g., "real", "metal", "lj", "si", etc.) or undefined if not found + */ +export const parseLammpsUnits = (inputScript: string): string | undefined => { + const lines = inputScript.split("\n"); + for (const line of lines) { + // Remove comments (everything after #) + const withoutComments = line.split("#")[0]; + const trimmed = withoutComments.trim(); + // Match "units