Skip to content

Commit c52e782

Browse files
Merge pull request #185 from Exabyte-io/fix/SOF-7636
update: fix creation of cell
2 parents ffc7d9c + f20534d commit c52e782

File tree

12 files changed

+26
-513
lines changed

12 files changed

+26
-513
lines changed

dist/components/ThreeDEditor.d.ts

Lines changed: 1 addition & 244 deletions
Large diffs are not rendered by default.

dist/components/ThreeDEditor.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,6 @@ export class ThreeDEditor extends React.Component {
350350
window.addEventListener("message", this.handleMessage);
351351
}
352352
componentWillUnmount() {
353-
this.handleResetMeasurements();
354353
this.removeHotKeyListener();
355354
window.removeEventListener("message", this.handleMessage);
356355
}
@@ -370,7 +369,6 @@ export class ThreeDEditor extends React.Component {
370369
}
371370
}
372371
_resetStateWaveComponent() {
373-
// a workaround to re-render the component and update the buttons on clicks
374372
// eslint-disable-next-line react/no-unused-state
375373
this.setState({ wave: this.WaveComponent.wave });
376374
}
@@ -514,8 +512,9 @@ export class ThreeDEditor extends React.Component {
514512
originalMaterial: material,
515513
material: newMaterial,
516514
}, () => {
515+
var _a;
517516
// Force Wave component to update after state change
518-
if (this.WaveComponent) {
517+
if ((_a = this.WaveComponent) === null || _a === void 0 ? void 0 : _a.wave) {
519518
this.WaveComponent.wave.rebuildScene();
520519
}
521520
});

dist/mixins/atoms.d.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import { Basis } from "@mat3ra/made/dist/js/basis/basis";
2-
import { Material } from "@mat3ra/made/dist/js/material";
1+
import { Basis, MaterialInMemoryEntity } from "@mat3ra/made";
32
import * as THREE from "three";
43
import { Object3D } from "three";
54
export declare const AtomsMixin: (superclass: any) => {
65
new (config: any): {
76
[x: string]: any;
87
readonly structure: any;
9-
setStructure(material: Material): void;
8+
setStructure(material: MaterialInMemoryEntity): void;
109
readonly basis: any;
1110
initSphereParameters(): void;
1211
/**

dist/mixins/cell.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { UnitCell } from "@mat3ra/made/dist/js/lattice/unit_cell";
1+
import { UnitCell } from "@mat3ra/made";
22
import * as THREE from "three";
33
/**
44
* Return type for getCellViewParams method

dist/utils.d.ts

Lines changed: 1 addition & 244 deletions
Original file line numberDiff line numberDiff line change
@@ -3,250 +3,7 @@
33
* Lattice is constructed from the LineSegments object.
44
* Basis is constructed based on all SphereMesh objects.
55
*/
6-
export function ThreeDSceneDataToMaterial(scene: any): {
7-
_json: import("@mat3ra/made/dist/js/material").MaterialSchemaJSON;
8-
toJSON(): import("@mat3ra/made/dist/js/types").MaterialJSON;
9-
src: import("@mat3ra/esse/dist/js/types").FileSourceSchema | undefined;
10-
updateFormula(): void;
11-
isNonPeriodic: boolean;
12-
getDerivedPropertyByName(name: string): {
13-
name?: "volume" | undefined;
14-
units?: "angstrom^3" | undefined;
15-
value: number;
16-
} | {
17-
name?: "density" | undefined;
18-
units?: "g/cm^3" | undefined;
19-
value: number;
20-
} | {
21-
pointGroupSymbol?: string | undefined;
22-
spaceGroupSymbol?: string | undefined;
23-
tolerance?: {
24-
units?: "angstrom" | undefined;
25-
value: number;
26-
} | undefined;
27-
name?: "symmetry" | undefined;
28-
} | {
29-
name?: "elemental_ratio" | undefined;
30-
value: number;
31-
element?: string | undefined;
32-
} | {
33-
name?: "p-norm" | undefined;
34-
degree?: number | undefined;
35-
value: number;
36-
} | {
37-
name?: "inchi" | undefined;
38-
value: string;
39-
} | {
40-
name?: "inchi_key" | undefined;
41-
value: string;
42-
} | undefined;
43-
getDerivedProperties(): import("@mat3ra/esse/dist/js/types").DerivedPropertiesSchema;
44-
readonly formula: string;
45-
readonly unitCellFormula: string;
46-
unsetFileProps(): void;
47-
setBasis(textOrObject: string | import("@mat3ra/made/dist/js/basis/basis").BasisConfig, format?: string | undefined, unitz?: string | undefined): void;
48-
setBasisConstraints(constraints: import("@mat3ra/made/dist/js/constraints/constraints").Constraint[]): void;
49-
setBasisConstraintsFromArrayOfObjects(constraints: import("@mat3ra/esse/dist/js/types").AtomicConstraintsSchema): void;
50-
readonly basis: import("@mat3ra/made/dist/js/material").OptionallyConstrainedBasisConfig;
51-
readonly Basis: import("@mat3ra/made/dist/js/basis/constrained_basis").ConstrainedBasis;
52-
readonly uniqueElements: string[];
53-
lattice: import("@mat3ra/esse/dist/js/types").LatticeSchema;
54-
readonly Lattice: import("@mat3ra/made/dist/js/lattice/lattice").Lattice;
55-
getInchiStringForHash(): string;
56-
calculateHash(salt?: string, isScaled?: boolean, bypassNonPeriodicCheck?: boolean): string;
57-
hash: string;
58-
readonly scaledHash: string;
59-
toCrystal(): void;
60-
toCartesian(): void;
61-
getBasisAsXyz(fractional?: boolean): string;
62-
getAsQEFormat(): string;
63-
getAsPOSCAR(ignoreOriginal?: boolean, omitConstraints?: boolean): string;
64-
getACopyWithConventionalCell(): any;
65-
getConsistencyChecks(): import("@mat3ra/esse/dist/js/types").ConsistencyCheck[];
66-
getBasisConsistencyChecks(): import("@mat3ra/esse/dist/js/types").ConsistencyCheck[];
67-
consistencyChecks: import("@mat3ra/esse/dist/js/types").ConsistencyCheck[];
68-
addConsistencyChecks(array: import("@mat3ra/esse/dist/js/types").ConsistencyCheck[]): void;
69-
prop: {
70-
<T = undefined>(name: string, defaultValue: T): T;
71-
<T_1 = undefined>(name: string): T_1 | undefined;
72-
} & {
73-
<T_2 = undefined>(name: string, defaultValue: T_2): T_2;
74-
<T_3 = undefined>(name: string): T_3 | undefined;
75-
} & {
76-
<T_4 = undefined>(name: string, defaultValue: T_4): T_4;
77-
<T_5 = undefined>(name: string): T_5 | undefined;
78-
} & {
79-
<T_6 = undefined>(name: string, defaultValue: T_6): T_6;
80-
<T_7 = undefined>(name: string): T_7 | undefined;
81-
} & {
82-
<T_8 = undefined>(name: string, defaultValue: T_8): T_8;
83-
<T_9 = undefined>(name: string): T_9 | undefined;
84-
};
85-
setProp: ((name: string, value: unknown) => void) & ((name: string, value: unknown) => void) & ((name: string, value: unknown) => void) & ((name: string, value: unknown) => void) & ((name: string, value: unknown) => void);
86-
unsetProp: ((name: string) => void) & ((name: string) => void) & ((name: string) => void) & ((name: string) => void) & ((name: string) => void);
87-
setProps: ((json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined) => any) & ((json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined) => any) & ((json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined) => any) & ((json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined) => any) & ((json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined) => any);
88-
toJSONSafe: ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject);
89-
toJSONQuick: ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((exclude?: string[] | undefined) => import("@mat3ra/esse/dist/js/esse/types").AnyObject);
90-
clone: ((extraContext?: object | undefined) => any) & ((extraContext?: object | undefined) => any) & ((extraContext?: object | undefined) => any) & ((extraContext?: object | undefined) => any) & ((extraContext?: object | undefined) => any);
91-
validate: (() => void) & (() => void) & (() => void) & (() => void) & (() => void);
92-
clean: ((config: import("@mat3ra/esse/dist/js/esse/types").AnyObject) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((config: import("@mat3ra/esse/dist/js/esse/types").AnyObject) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((config: import("@mat3ra/esse/dist/js/esse/types").AnyObject) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((config: import("@mat3ra/esse/dist/js/esse/types").AnyObject) => import("@mat3ra/esse/dist/js/esse/types").AnyObject) & ((config: import("@mat3ra/esse/dist/js/esse/types").AnyObject) => import("@mat3ra/esse/dist/js/esse/types").AnyObject);
93-
isValid: (() => boolean) & (() => boolean) & (() => boolean) & (() => boolean) & (() => boolean);
94-
readonly cls: string;
95-
getClsName: (() => string) & (() => string) & (() => string) & (() => string) & (() => string);
96-
getAsEntityReference: {
97-
(byIdOnly: true): {
98-
_id: string;
99-
};
100-
(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
101-
} & {
102-
(byIdOnly: true): {
103-
_id: string;
104-
};
105-
(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
106-
} & {
107-
(byIdOnly: true): {
108-
_id: string;
109-
};
110-
(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
111-
} & {
112-
(byIdOnly: true): {
113-
_id: string;
114-
};
115-
(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
116-
} & {
117-
(byIdOnly: true): {
118-
_id: string;
119-
};
120-
(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
121-
};
122-
getEntityByName: ((entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string) => import("@mat3ra/code/dist/js/entity").InMemoryEntity) & ((entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string) => import("@mat3ra/code/dist/js/entity").InMemoryEntity) & ((entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string) => import("@mat3ra/code/dist/js/entity").InMemoryEntity) & ((entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string) => import("@mat3ra/code/dist/js/entity").InMemoryEntity) & ((entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string) => import("@mat3ra/code/dist/js/entity").InMemoryEntity);
123-
id: string;
124-
_id: string;
125-
schemaVersion: string;
126-
systemName: string;
127-
readonly slug: string;
128-
readonly isSystemEntity: boolean;
129-
metadata: object;
130-
updateMetadata(object: object): void;
131-
name: string;
132-
setName(name: string): void;
133-
readonly isDefault: boolean;
134-
} & {
135-
consistencyChecks: import("@mat3ra/esse/dist/js/types").ConsistencyCheck[];
136-
addConsistencyChecks(array: import("@mat3ra/esse/dist/js/types").ConsistencyCheck[]): void;
137-
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
138-
prop<T = undefined>(name: string, defaultValue: T): T;
139-
prop<T_1 = undefined>(name: string): T_1 | undefined;
140-
setProp(name: string, value: unknown): void;
141-
unsetProp(name: string): void;
142-
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined): any;
143-
toJSON(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
144-
toJSONSafe(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
145-
toJSONQuick(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
146-
clone(extraContext?: object | undefined): any;
147-
validate(): void;
148-
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
149-
isValid(): boolean;
150-
readonly cls: string;
151-
getClsName(): string;
152-
getAsEntityReference(byIdOnly: true): {
153-
_id: string;
154-
};
155-
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
156-
getEntityByName(entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string): import("@mat3ra/code/dist/js/entity").InMemoryEntity;
157-
id: string;
158-
_id: string;
159-
schemaVersion: string;
160-
systemName: string;
161-
readonly slug: string;
162-
readonly isSystemEntity: boolean;
163-
} & {
164-
metadata: object;
165-
updateMetadata(object: object): void;
166-
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
167-
prop<T_2 = undefined>(name: string, defaultValue: T_2): T_2;
168-
prop<T_3 = undefined>(name: string): T_3 | undefined;
169-
setProp(name: string, value: unknown): void;
170-
unsetProp(name: string): void;
171-
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined): any;
172-
toJSON(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
173-
toJSONSafe(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
174-
toJSONQuick(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
175-
clone(extraContext?: object | undefined): any;
176-
validate(): void;
177-
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
178-
isValid(): boolean;
179-
readonly cls: string;
180-
getClsName(): string;
181-
getAsEntityReference(byIdOnly: true): {
182-
_id: string;
183-
};
184-
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
185-
getEntityByName(entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string): import("@mat3ra/code/dist/js/entity").InMemoryEntity;
186-
id: string;
187-
_id: string;
188-
schemaVersion: string;
189-
systemName: string;
190-
readonly slug: string;
191-
readonly isSystemEntity: boolean;
192-
} & {
193-
name: string;
194-
setName(name: string): void;
195-
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
196-
prop<T_4 = undefined>(name: string, defaultValue: T_4): T_4;
197-
prop<T_5 = undefined>(name: string): T_5 | undefined;
198-
setProp(name: string, value: unknown): void;
199-
unsetProp(name: string): void;
200-
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined): any;
201-
toJSON(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
202-
toJSONSafe(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
203-
toJSONQuick(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
204-
clone(extraContext?: object | undefined): any;
205-
validate(): void;
206-
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
207-
isValid(): boolean;
208-
readonly cls: string;
209-
getClsName(): string;
210-
getAsEntityReference(byIdOnly: true): {
211-
_id: string;
212-
};
213-
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
214-
getEntityByName(entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string): import("@mat3ra/code/dist/js/entity").InMemoryEntity;
215-
id: string;
216-
_id: string;
217-
schemaVersion: string;
218-
systemName: string;
219-
readonly slug: string;
220-
readonly isSystemEntity: boolean;
221-
} & {
222-
readonly isDefault: boolean;
223-
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
224-
prop<T_6 = undefined>(name: string, defaultValue: T_6): T_6;
225-
prop<T_7 = undefined>(name: string): T_7 | undefined;
226-
setProp(name: string, value: unknown): void;
227-
unsetProp(name: string): void;
228-
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject | undefined): any;
229-
toJSON(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
230-
toJSONSafe(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
231-
toJSONQuick(exclude?: string[] | undefined): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
232-
clone(extraContext?: object | undefined): any;
233-
validate(): void;
234-
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
235-
isValid(): boolean;
236-
readonly cls: string;
237-
getClsName(): string;
238-
getAsEntityReference(byIdOnly: true): {
239-
_id: string;
240-
};
241-
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
242-
getEntityByName(entities: import("@mat3ra/code/dist/js/entity").InMemoryEntity[], entity: string, name: string): import("@mat3ra/code/dist/js/entity").InMemoryEntity;
243-
id: string;
244-
_id: string;
245-
schemaVersion: string;
246-
systemName: string;
247-
readonly slug: string;
248-
readonly isSystemEntity: boolean;
249-
} & import("@mat3ra/code/dist/js/entity").InMemoryEntity;
6+
export function ThreeDSceneDataToMaterial(scene: any): import("@mat3ra/made").Material;
2507
/**
2518
* Converts given materials to scene data.
2529
* The first material is used as parent and it's unit cell is used in case multiple materials are passed.

dist/utils.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function extractLatticeFromScene(scene) {
3232
* Extracts basis from all SphereMesh objects.
3333
* The name of the element is extracted from the name of the corresponding 3D object.
3434
*/
35-
function extractBasisFromScene(scene, cell) {
35+
function extractBasisFromScene(scene, cellVectorsArray) {
3636
const elements = [];
3737
const coordinates = [];
3838
scene.traverse((object) => {
@@ -42,11 +42,12 @@ function extractBasisFromScene(scene, cell) {
4242
coordinates.push(object.getWorldPosition(vector).toArray());
4343
}
4444
});
45-
return new Made.Basis({
46-
cell,
45+
const newCell = Made.Cell.fromVectorsArray(cellVectorsArray);
46+
return Made.Basis.fromElementsAndCoordinates({
4747
elements,
4848
coordinates,
4949
units: "cartesian",
50+
cell: newCell,
5051
});
5152
}
5253
/**

package-lock.json

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"@exabyte-io/eslint-config": "^2025.1.15-0",
6565
"@mat3ra/code": "2025.4.27-0",
6666
"@mat3ra/esse": "2025.4.22-0",
67-
"@mat3ra/made": "2025.4.30-0",
67+
"@mat3ra/made": "2025.6.25-1",
6868
"@mat3ra/tsconfig": "^2024.6.3-0",
6969
"@types/react": "^18.2.8",
7070
"@types/react-dom": "^18.2.4",

0 commit comments

Comments
 (0)