-
Alexander Rose authored
# Conflicts: # package-lock.json # package.json # src/apps/render-test/state.ts # src/apps/render-test/utils/index.ts # src/apps/render-test/utils/mcubes.ts # src/mol-model/structure/model/format.ts # src/mol-model/structure/model/formats/gro.ts
Alexander Rose authored# Conflicts: # package-lock.json # package.json # src/apps/render-test/state.ts # src/apps/render-test/utils/index.ts # src/apps/render-test/utils/mcubes.ts # src/mol-model/structure/model/format.ts # src/mol-model/structure/model/formats/gro.ts
util.ts 1.66 KiB
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import CIF from 'mol-io/reader/cif'
import { Progress } from 'mol-task'
import { VolumeData, parseDensityServerData } from 'mol-model/volume'
import { DensityServer_Data_Database } from 'mol-io/reader/cif/schema/density-server';
export async function downloadCif(url: string, isBinary: boolean) {
const data = await fetch(url);
return parseCif(isBinary ? new Uint8Array(await data.arrayBuffer()) : await data.text());
}
export async function parseCif(data: string|Uint8Array) {
const comp = CIF.parse(data)
const parsed = await comp.run(Progress.format);
if (parsed.isError) throw parsed;
return parsed.result
}
export type Volume = { source: DensityServer_Data_Database, volume: VolumeData }
export async function getVolumeFromEmdId(emdid: string): Promise<Volume> {
const cif = await downloadCif(`https://webchem.ncbr.muni.cz/DensityServer/em/emd-${emdid}/cell?detail=4`, true)
const data = CIF.schema.densityServer(cif.blocks[1])
return { source: data, volume: await parseDensityServerData(data).run() }
}
export function resizeCanvas (canvas: HTMLCanvasElement, container: Element) {
let w = window.innerWidth
let h = window.innerHeight
if (container !== document.body) {
let bounds = container.getBoundingClientRect()
w = bounds.right - bounds.left
h = bounds.bottom - bounds.top
}
canvas.width = window.devicePixelRatio * w
canvas.height = window.devicePixelRatio * h
Object.assign(canvas.style, { width: `${w}px`, height: `${h}px` })
}