123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- /// <reference path="./babylon.d.ts"/>
- declare module "babylonjs-viewer" {
- export = BabylonViewer;
- }
- declare module BabylonViewer {
- export let disableInit: boolean;
- export interface ITemplateConfiguration {
- location?: string;
- html?: string;
- id?: string;
- params?: {
- [key: string]: string | number | boolean | object;
- };
- events?: {
- pointerdown?: boolean | {
- [id: string]: boolean;
- };
- pointerup?: boolean | {
- [id: string]: boolean;
- };
- pointermove?: boolean | {
- [id: string]: boolean;
- };
- pointerover?: boolean | {
- [id: string]: boolean;
- };
- pointerout?: boolean | {
- [id: string]: boolean;
- };
- pointerenter?: boolean | {
- [id: string]: boolean;
- };
- pointerleave?: boolean | {
- [id: string]: boolean;
- };
- pointercancel?: boolean | {
- [id: string]: boolean;
- };
- click?: boolean | {
- [id: string]: boolean;
- };
- dragstart?: boolean | {
- [id: string]: boolean;
- };
- drop?: boolean | {
- [id: string]: boolean;
- };
- [key: string]: boolean | {
- [id: string]: boolean;
- } | undefined;
- };
- }
- export interface EventCallback {
- event: Event;
- template: Template;
- selector: string;
- payload?: any;
- }
- interface TemplateManager {
- containerElement: HTMLElement;
- onInit: BABYLON.Observable<Template>;
- onLoaded: BABYLON.Observable<Template>;
- onStateChange: BABYLON.Observable<Template>;
- onAllLoaded: BABYLON.Observable<TemplateManager>;
- onEventTriggered: BABYLON.Observable<EventCallback>;
- eventManager: EventManager;
- private templates;
- constructor(containerElement: HTMLElement);
- initTemplate(templates: {
- [key: string]: ITemplateConfiguration;
- }): void;
- private buildHTMLTree(templates);
- getCanvas(): HTMLCanvasElement | null;
- getTemplate(name: string): Template | undefined;
- private checkLoadedState();
- }
- interface Template {
- name: string;
- private _configuration;
- onInit: BABYLON.Observable<Template>;
- onLoaded: BABYLON.Observable<Template>;
- onAppended: BABYLON.Observable<Template>;
- onStateChange: BABYLON.Observable<Template>;
- onEventTriggered: BABYLON.Observable<EventCallback>;
- isLoaded: boolean;
- isShown: boolean;
- parent: HTMLElement;
- initPromise: Promise<Template>;
- private fragment;
- constructor(name: string, _configuration: ITemplateConfiguration);
- readonly configuration: ITemplateConfiguration;
- getChildElements(): Array<string>;
- appendTo(parent: HTMLElement): void;
- show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template>;
- hide(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template>;
- dispose(): void;
- private registerEvents();
- }
- interface ViewerManager {
- private viewers;
- onViewerAdded: (viewer: AbstractViewer) => void;
- onViewerAddedObservable: BABYLON.Observable<AbstractViewer>;
- constructor();
- addViewer(viewer: AbstractViewer): void;
- getViewerById(id: string): AbstractViewer;
- getViewerByHTMLElement(element: HTMLElement): AbstractViewer | undefined;
- getViewerPromiseById(id: string): Promise<AbstractViewer>;
- private _onViewerAdded(viewer);
- }
- export let viewerManager: ViewerManager;
- export const enum CameraBehavior {
- AUTOROTATION = 0,
- BOUNCING = 1,
- FRAMING = 2,
- }
- export function InitTags(selector?: string): void;
- interface EventManager {
- private templateManager;
- private callbacksContainer;
- constructor(templateManager: TemplateManager);
- registerCallback(templateName: string, callback: (eventData: EventCallback) => void, eventType?: string, selector?: string): void;
- unregisterCallback(templateName: string, callback?: (eventData: EventCallback) => void, eventType?: string, selector?: string): void;
- private eventTriggered(data);
- }
- interface PromiseObservable<T> extends BABYLON.Observable<T> {
- notifyWithPromise(eventData: T, mask?: number, target?: any, currentTarget?: any): Promise<any>;
- }
- export interface IMapper {
- map(rawSource: any): ViewerConfiguration;
- }
- interface MapperManager {
- private mappers;
- static DefaultMapper: string;
- constructor();
- getMapper(type: string): IMapper;
- registerMapper(type: string, mapper: IMapper): void;
- }
- export let mapperManager: MapperManager;
- interface ConfigurationLoader {
- private configurationCache;
- constructor();
- loadConfiguration(initConfig?: ViewerConfiguration): Promise<ViewerConfiguration>;
- getConfigurationType(type: string): void;
- private loadFile(url);
- }
- export let configurationLoader: ConfigurationLoader;
- /////> configuration
- export interface ViewerConfiguration {
- // configuration version
- version?: string;
- extends?: string; // is this configuration extending an existing configuration?
- pageUrl?: string; // will be used for sharing and other fun stuff. This is the page showing the model (not the model's url!)
- configuration?: string | {
- url?: string;
- payload?: any;
- mapper?: string; // json (default), html, yaml, xml, etc'. if not provided, file extension will be used.
- };
- // names of functions in the window context.
- observers?: IObserversConfiguration;
- canvasElement?: string; // if there is a need to override the standard implementation - ID of HTMLCanvasElement
- model?: IModelConfiguration | string;
- scene?: ISceneConfiguration;
- optimizer?: ISceneOptimizerConfiguration | boolean;
- // at the moment, support only a single camera.
- camera?: ICameraConfiguration,
- skybox?: boolean | ISkyboxConfiguration;
- ground?: boolean | IGroundConfiguration;
- lights?: { [name: string]: boolean | ILightConfiguration },
- // engine configuration. optional!
- engine?: {
- antialiasing?: boolean;
- disableResize?: boolean;
- engineOptions?: { [key: string]: any };
- adaptiveQuality?: boolean;
- },
- //templateStructure?: ITemplateStructure,
- templates?: {
- main: ITemplateConfiguration,
- [key: string]: ITemplateConfiguration
- };
- customShaders?: {
- shaders?: {
- [key: string]: string;
- };
- includes?: {
- [key: string]: string;
- }
- }
- // features that are being tested.
- // those features' syntax will change and move out!
- // Don't use in production (or be ready to make the changes :) )
- lab?: {
- flashlight?: boolean | {
- exponent?: number;
- angle?: number;
- intensity?: number;
- diffuse?: { r: number, g: number, b: number };
- specular?: { r: number, g: number, b: number };
- }
- hideLoadingDelay?: number;
- }
- }
- export interface IModelConfiguration {
- url?: string;
- loader?: string; // obj, gltf?
- position?: { x: number, y: number, z: number };
- rotation?: { x: number, y: number, z: number, w?: number };
- scaling?: { x: number, y: number, z: number };
- parentObjectIndex?: number; // the index of the parent object of the model in the loaded meshes array.
- castShadow?: boolean;
- normalize?: boolean | {
- center?: boolean;
- unitSize?: boolean;
- parentIndex?: number;
- }; // shoud the model be scaled to unit-size
- title?: string;
- subtitle?: string;
- thumbnail?: string; // URL or data-url
- // [propName: string]: any; // further configuration, like title and creator
- }
- export interface ISkyboxConfiguration {
- cubeTexture?: {
- noMipMap?: boolean;
- gammaSpace?: boolean;
- url?: string | Array<string>;
- };
- color?: { r: number, g: number, b: number };
- pbr?: boolean; // deprecated
- scale?: number;
- blur?: number; // deprecated
- material?: {
- imageProcessingConfiguration?: IImageProcessingConfiguration;
- [propName: string]: any;
- };
- infiniteDIstance?: boolean;
- }
- export interface IGroundConfiguration {
- size?: number;
- receiveShadows?: boolean;
- shadowLevel?: number;
- shadowOnly?: boolean; // deprecated
- mirror?: boolean | {
- sizeRatio?: number;
- blurKernel?: number;
- amount?: number;
- fresnelWeight?: number;
- fallOffDistance?: number;
- textureType?: number;
- };
- texture?: string;
- color?: { r: number, g: number, b: number };
- opacity?: number;
- material?: { // deprecated!
- [propName: string]: any;
- };
- }
- export interface ISceneConfiguration {
- debug?: boolean;
- autoRotate?: boolean; // deprecated
- rotationSpeed?: number; // deprecated
- defaultCamera?: boolean; // deprecated
- defaultLight?: boolean; // deprecated
- clearColor?: { r: number, g: number, b: number, a: number };
- imageProcessingConfiguration?: IImageProcessingConfiguration;
- environmentTexture?: string;
- }
- export interface ISceneOptimizerConfiguration {
- targetFrameRate?: number;
- trackerDuration?: number;
- autoGeneratePriorities?: boolean;
- improvementMode?: boolean;
- degradation?: string; // low, moderate, high
- types?: {
- texture?: ISceneOptimizerParameters;
- hardwareScaling?: ISceneOptimizerParameters;
- shadow?: ISceneOptimizerParameters;
- postProcess?: ISceneOptimizerParameters;
- lensFlare?: ISceneOptimizerParameters;
- particles?: ISceneOptimizerParameters;
- renderTarget?: ISceneOptimizerParameters;
- mergeMeshes?: ISceneOptimizerParameters;
- }
- }
- export interface IObserversConfiguration {
- onEngineInit?: string;
- onSceneInit?: string;
- onModelLoaded?: string;
- }
- export interface ICameraConfiguration {
- position?: { x: number, y: number, z: number };
- rotation?: { x: number, y: number, z: number, w: number };
- fov?: number;
- fovMode?: number;
- minZ?: number;
- maxZ?: number;
- inertia?: number;
- behaviors?: {
- [name: string]: number | {
- type: number;
- [propName: string]: any;
- };
- };
- [propName: string]: any;
- }
- export interface ILightConfiguration {
- type: number;
- name?: string;
- disabled?: boolean;
- position?: { x: number, y: number, z: number };
- target?: { x: number, y: number, z: number };
- direction?: { x: number, y: number, z: number };
- diffuse?: { r: number, g: number, b: number };
- specular?: { r: number, g: number, b: number };
- intensity?: number;
- intensityMode?: number;
- radius?: number;
- shadownEnabled?: boolean; // only on specific lights!
- shadowConfig?: {
- useBlurExponentialShadowMap?: boolean;
- useKernelBlur?: boolean;
- blurKernel?: number;
- blurScale?: number;
- minZ?: number;
- maxZ?: number;
- frustumSize?: number;
- angleScale?: number;
- [propName: string]: any;
- }
- [propName: string]: any;
- // no behaviors for light at the moment, but allowing configuration for future reference.
- behaviors?: {
- [name: string]: number | {
- type: number;
- [propName: string]: any;
- };
- };
- }
- export interface ISceneOptimizerParameters {
- priority?: number;
- maximumSize?: number;
- step?: number;
- }
- export interface IImageProcessingConfiguration {
- colorGradingEnabled?: boolean;
- colorCurvesEnabled?: boolean;
- colorCurves?: {
- globalHue?: number;
- globalDensity?: number;
- globalSaturation?: number;
- globalExposure?: number;
- highlightsHue?: number;
- highlightsDensity?: number;
- highlightsSaturation?: number;
- highlightsExposure?: number;
- midtonesHue?: number;
- midtonesDensity?: number;
- midtonesSaturation?: number;
- midtonesExposure?: number;
- shadowsHue?: number;
- shadowsDensity?: number;
- shadowsSaturation?: number;
- shadowsExposure?: number;
- };
- colorGradingWithGreenDepth?: boolean;
- colorGradingBGR?: boolean;
- exposure?: number;
- toneMappingEnabled?: boolean;
- contrast?: number;
- vignetteEnabled?: boolean;
- vignetteStretch?: number;
- vignetteCentreX?: number;
- vignetteCentreY?: number;
- vignetteWeight?: number;
- vignetteColor?: { r: number, g: number, b: number, a?: number };
- vignetteCameraFov?: number;
- vignetteBlendMode?: number;
- vignetteM?: boolean;
- applyByPostProcess?: boolean;
- }
- /////>configuration
- /////<viewer
- export abstract class AbstractViewer {
- containerElement: HTMLElement;
- templateManager: TemplateManager;
- camera: BABYLON.ArcRotateCamera;
- engine: BABYLON.Engine;
- scene: BABYLON.Scene;
- baseId: string;
- canvas: HTMLCanvasElement;
- protected configuration: ViewerConfiguration;
- environmentHelper: BABYLON.EnvironmentHelper;
- protected defaultHighpTextureType: number;
- protected shadowGeneratorBias: number;
- protected defaultPipelineTextureType: number;
- protected maxShadows: number;
- onSceneInitObservable: BABYLON.Observable<BABYLON.Scene>;
- onEngineInitObservable: BABYLON.Observable<BABYLON.Engine>;
- onModelLoadedObservable: BABYLON.Observable<BABYLON.AbstractMesh[]>;
- onModelLoadProgressObservable: BABYLON.Observable<BABYLON.SceneLoaderProgressEvent>;
- onModelLoadErrorObservable: BABYLON.Observable<{ message: string; exception: any }>;
- onLoaderInitObservable: BABYLON.Observable<BABYLON.ISceneLoaderPlugin | BABYLON.ISceneLoaderPluginAsync>;
- onInitDoneObservable: BABYLON.Observable<AbstractViewer>;
- constructor(containerElement: HTMLElement, initialConfiguration?: ViewerConfiguration);
- getBaseId(): string;
- protected abstract prepareContainerElement(): any;
- protected onTemplatesLoaded(): Promise<AbstractViewer>;
- protected initEngine(): Promise<BABYLON.Engine>;
- protected initScene(): Promise<BABYLON.Scene>;
- dispose(): void;
- loadModel(model?: any, clearScene?: boolean): Promise<BABYLON.Scene>;
- lastUsedLoader: BABYLON.ISceneLoaderPlugin | BABYLON.ISceneLoaderPluginAsync;
- sceneOptimizer: BABYLON.SceneOptimizer;
- protected registeredOnBeforerenderFunctions: Array<() => void>;
- isCanvasInDOM(): boolean;
- protected resize: () => void;
- protected render: () => void;
- updateConfiguration(newConfiguration: Partial<ViewerConfiguration>): void;
- protected configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean): void;
- protected configureScene(sceneConfig: ISceneConfiguration, optimizerConfig?: ISceneOptimizerConfiguration): void;
- protected configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean): void;
- protected configureObservers(observersConfiguration: IObserversConfiguration): void;
- protected configureCamera(cameraConfig: ICameraConfiguration, focusMeshes: Array<BABYLON.AbstractMesh>): void;
- protected configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean }, focusMeshes: Array<BABYLON.AbstractMesh>): void;
- protected configureModel(modelConfiguration: Partial<IModelConfiguration>, focusMeshes: Array<BABYLON.AbstractMesh>): void;
- dispose(): void;
- protected initEnvironment(focusMeshes: Array<BABYLON.AbstractMesh>): Promise<BABYLON.Scene>;
- protected injectCustomShaders(): void;
- protected extendClassWithConfig(object: any, config: any): void;
- protected handleHardwareLimitations(): void;
- }
- export class DefaultViewer extends AbstractViewer {
- containerElement: HTMLElement;
- camera: BABYLON.ArcRotateCamera;
- constructor(containerElement: HTMLElement, initialConfiguration?: ViewerConfiguration);
- initScene(): Promise<BABYLON.Scene>;
- protected onTemplatesLoaded(): Promise<AbstractViewer>;
- protected prepareContainerElement(): void;
- loadModel(model?: any): Promise<BABYLON.Scene>;
- initEnvironment(focusMeshes?: Array<BABYLON.AbstractMesh>): Promise<BABYLON.Scene>;
- showOverlayScreen(subScreen: string): Promise<Template>;
- hideOverlayScreen(): Promise<Template>;
- showLoadingScreen(): Promise<Template>;
- hideLoadingScreen(): Promise<Template>;
- }
- }
|