molstar
Version:
A comprehensive macromolecular library.
109 lines (108 loc) • 4.43 kB
TypeScript
/**
* Copyright (c) 2021-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Sukolsak Sakshuwong <sukolsak@stanford.edu>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { GraphicsRenderObject } from '../../mol-gl/render-object.js';
import { BaseValues } from '../../mol-gl/renderable/schema.js';
import { TextureImage } from '../../mol-gl/renderable/util.js';
import { WebGLContext } from '../../mol-gl/webgl/context.js';
import { Mesh } from '../../mol-geo/geometry/mesh/mesh.js';
import { RuntimeContext } from '../../mol-task/index.js';
import { Color } from '../../mol-util/color/color.js';
import { RenderObjectExporter, RenderObjectExportData } from './render-object-exporter.js';
import { ValueCell } from '../../mol-util/value-cell.js';
type MeshMode = 'points' | 'lines' | 'triangles';
export interface AddMeshInput {
mesh: {
vertices: Float32Array;
normals: Float32Array | undefined;
indices: Uint32Array | undefined;
groups: Float32Array | Uint8Array;
vertexCount: number;
drawCount: number;
vertexMapping?: number[];
} | undefined;
meshes: Mesh[] | undefined;
values: BaseValues & {
readonly uDoubleSided?: ValueCell<boolean>;
readonly aGroup?: ValueCell<Float32Array>;
readonly tPositionGroup?: ValueCell<TextureImage<Float32Array>>;
};
isGeoTexture: boolean;
mode: MeshMode;
webgl: WebGLContext | undefined;
ctx: RuntimeContext;
vertexMapping?: number[];
}
export type MeshGeoData = {
values: BaseValues & {
readonly aGroup?: ValueCell<Float32Array>;
readonly tPositionGroup?: ValueCell<TextureImage<Float32Array>>;
};
groups?: Float32Array | Uint8Array;
vertexCount: number;
instanceIndex: number;
isGeoTexture: boolean;
mode: MeshMode;
vertexMapping?: number[];
};
export declare abstract class MeshExporter<D extends RenderObjectExportData> implements RenderObjectExporter<D> {
abstract readonly fileExtension: string;
private static getSizeFromTexture;
private static getSize;
protected static getGroup(groups: Float32Array | Uint8Array, i: number): number;
protected static getInterpolatedColors(webgl: WebGLContext, input: {
vertices: Float32Array;
vertexCount: number;
values: BaseValues;
stride: 3 | 4;
colorType: 'volume' | 'volumeInstance';
}): Uint8Array<ArrayBufferLike>;
protected static getInterpolatedOverpaint(webgl: WebGLContext, input: {
vertices: Float32Array;
vertexCount: number;
values: BaseValues;
stride: 3 | 4;
colorType: 'volumeInstance';
}): Uint8Array<ArrayBufferLike>;
protected static getInterpolatedTransparency(webgl: WebGLContext, input: {
vertices: Float32Array;
vertexCount: number;
values: BaseValues;
stride: 3 | 4;
colorType: 'volumeInstance';
}): Uint8Array<ArrayBufferLike>;
protected static quantizeColors(colorArray: Uint8Array, vertexCount: number): void;
protected static getInstance(input: AddMeshInput, instanceIndex: number): {
vertices: Float32Array;
normals: Float32Array | undefined;
indices: Uint32Array | undefined;
groups: Float32Array | Uint8Array;
vertexCount: number;
drawCount: number;
vertexMapping?: number[];
};
protected static getColor(vertexIndex: number, geoData: MeshGeoData, interpolatedColors?: Uint8Array, interpolatedOverpaint?: Uint8Array): Color;
protected static getTransparency(vertexIndex: number, geoData: MeshGeoData, interpolatedTransparency?: Uint8Array): number;
protected abstract addMeshWithColors(input: AddMeshInput): Promise<void>;
private addMesh;
private addLineStrips;
private addLineSegments;
private addLines;
private addPoints;
private addSpheres;
private addCylinders;
private addTextureMesh;
add(renderObject: GraphicsRenderObject, webgl: WebGLContext, ctx: RuntimeContext): Promise<void> | undefined;
protected options: {
includeHidden: boolean;
linesAsTriangles: boolean;
pointsAsTriangles: boolean;
primitivesQuality: "auto" | "high" | "medium" | "low";
};
abstract getData(ctx: RuntimeContext): Promise<D>;
abstract getBlob(ctx: RuntimeContext): Promise<Blob>;
}
export {};