10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-07-22 18:57:38 +02:00
QUESTDB_website/static/js/Geometry.js
mveril 4baaaa0fc2
Allow to export geometries (#6)
* Fix broken link

* Fix bug in indexDB

* Fix sourceFile  for each geometry

* Add function to export geometry as xyz

* Fix bug when printing z

* Fix align with website structures

* Add Export geometries fonctionality

* Better class name for select buttons

* Fix after =

* Enable export button only when it makes sense

Co-authored-by: Mickaël Véril <mveril@irsamc.ups-tlse.fr>
2020-12-07 11:15:26 +01:00

53 lines
1.4 KiB
JavaScript

class Geometry {
constructor(molecule, comment) {
this.molecule = molecule
this.comment = comment
}
toXYZ() {
var lines =[]
lines.push(this.molecule.atoms.length)
lines.push(this.comment)
for (const a of this.molecule.atoms) {
var line = a.label.padEnd(4, ' ')
line += a.x.toFixed(8).padStart(11,' ')
line += a.y.toFixed(8).padStart(22,` `)
line += a.z.toFixed(8).padStart(22,` `)
lines.push(line)
}
return lines.join("\n")
}
static async loadXYZAsync(file) {
switch (trueTypeOf(file)) {
case String.name:
file = getFullDataPath("structures"+file)
var str = getTextFromFileUrl(file)
break;
case File.name:
var str = await getTextFromUploadedFileAsync(file)
break
}
var xyz = this.loadXYZString(str);
for (var geom of xyz){
geom.sourceFile = new websiteFile(file)
}
return xyz
}
static loadXYZString(text) {
var lines = text.split("\n")
var indexes = lines.findAllIndexes((line) => {
return line.match(/^\d+\s*$/)
})
indexes.push(lines.length)
var geoms = []
for (let i = 0; i < indexes.length - 1; i++) {
const mollines = lines.slice(indexes[i], indexes[i + 1])
const comment = mollines[1]
const molecule = ChemDoodle.readXYZ(mollines.join("\n"))
geoms.push(new Geometry(molecule, comment))
}
return geoms
}
}