babylon.viewer.module.d.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. /// <reference path="./babylon.d.ts"/>
  2. declare module "babylonjs-viewer" {
  3. export = BabylonViewer;
  4. }
  5. declare module BabylonViewer {
  6. export let disableInit: boolean;
  7. export interface ITemplateConfiguration {
  8. location?: string;
  9. html?: string;
  10. id?: string;
  11. params?: {
  12. [key: string]: string | number | boolean | object;
  13. };
  14. events?: {
  15. pointerdown?: boolean | {
  16. [id: string]: boolean;
  17. };
  18. pointerup?: boolean | {
  19. [id: string]: boolean;
  20. };
  21. pointermove?: boolean | {
  22. [id: string]: boolean;
  23. };
  24. pointerover?: boolean | {
  25. [id: string]: boolean;
  26. };
  27. pointerout?: boolean | {
  28. [id: string]: boolean;
  29. };
  30. pointerenter?: boolean | {
  31. [id: string]: boolean;
  32. };
  33. pointerleave?: boolean | {
  34. [id: string]: boolean;
  35. };
  36. pointercancel?: boolean | {
  37. [id: string]: boolean;
  38. };
  39. click?: boolean | {
  40. [id: string]: boolean;
  41. };
  42. dragstart?: boolean | {
  43. [id: string]: boolean;
  44. };
  45. drop?: boolean | {
  46. [id: string]: boolean;
  47. };
  48. [key: string]: boolean | {
  49. [id: string]: boolean;
  50. } | undefined;
  51. };
  52. }
  53. export interface EventCallback {
  54. event: Event;
  55. template: Template;
  56. selector: string;
  57. payload?: any;
  58. }
  59. interface TemplateManager {
  60. containerElement: HTMLElement;
  61. onInit: BABYLON.Observable<Template>;
  62. onLoaded: BABYLON.Observable<Template>;
  63. onStateChange: BABYLON.Observable<Template>;
  64. onAllLoaded: BABYLON.Observable<TemplateManager>;
  65. onEventTriggered: BABYLON.Observable<EventCallback>;
  66. eventManager: EventManager;
  67. private templates;
  68. constructor(containerElement: HTMLElement);
  69. initTemplate(templates: {
  70. [key: string]: ITemplateConfiguration;
  71. }): void;
  72. private buildHTMLTree(templates);
  73. getCanvas(): HTMLCanvasElement | null;
  74. getTemplate(name: string): Template | undefined;
  75. private checkLoadedState();
  76. }
  77. interface Template {
  78. name: string;
  79. private _configuration;
  80. onInit: BABYLON.Observable<Template>;
  81. onLoaded: BABYLON.Observable<Template>;
  82. onAppended: BABYLON.Observable<Template>;
  83. onStateChange: BABYLON.Observable<Template>;
  84. onEventTriggered: BABYLON.Observable<EventCallback>;
  85. isLoaded: boolean;
  86. isShown: boolean;
  87. parent: HTMLElement;
  88. initPromise: Promise<Template>;
  89. private fragment;
  90. constructor(name: string, _configuration: ITemplateConfiguration);
  91. readonly configuration: ITemplateConfiguration;
  92. getChildElements(): Array<string>;
  93. appendTo(parent: HTMLElement): void;
  94. show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template>;
  95. hide(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template>;
  96. dispose(): void;
  97. private registerEvents();
  98. }
  99. interface ViewerManager {
  100. private viewers;
  101. onViewerAdded: (viewer: AbstractViewer) => void;
  102. onViewerAddedObservable: BABYLON.Observable<AbstractViewer>;
  103. constructor();
  104. addViewer(viewer: AbstractViewer): void;
  105. getViewerById(id: string): AbstractViewer;
  106. getViewerByHTMLElement(element: HTMLElement): AbstractViewer | undefined;
  107. getViewerPromiseById(id: string): Promise<AbstractViewer>;
  108. private _onViewerAdded(viewer);
  109. }
  110. export let viewerManager: ViewerManager;
  111. export const enum CameraBehavior {
  112. AUTOROTATION = 0,
  113. BOUNCING = 1,
  114. FRAMING = 2,
  115. }
  116. export function InitTags(selector?: string): void;
  117. interface EventManager {
  118. private templateManager;
  119. private callbacksContainer;
  120. constructor(templateManager: TemplateManager);
  121. registerCallback(templateName: string, callback: (eventData: EventCallback) => void, eventType?: string, selector?: string): void;
  122. unregisterCallback(templateName: string, callback?: (eventData: EventCallback) => void, eventType?: string, selector?: string): void;
  123. private eventTriggered(data);
  124. }
  125. interface PromiseObservable<T> extends BABYLON.Observable<T> {
  126. notifyWithPromise(eventData: T, mask?: number, target?: any, currentTarget?: any): Promise<any>;
  127. }
  128. export interface IMapper {
  129. map(rawSource: any): ViewerConfiguration;
  130. }
  131. interface MapperManager {
  132. private mappers;
  133. static DefaultMapper: string;
  134. constructor();
  135. getMapper(type: string): IMapper;
  136. registerMapper(type: string, mapper: IMapper): void;
  137. }
  138. export let mapperManager: MapperManager;
  139. interface ConfigurationLoader {
  140. private configurationCache;
  141. constructor();
  142. loadConfiguration(initConfig?: ViewerConfiguration): Promise<ViewerConfiguration>;
  143. getConfigurationType(type: string): void;
  144. private loadFile(url);
  145. }
  146. export let configurationLoader: ConfigurationLoader;
  147. /////> configuration
  148. export interface ViewerConfiguration {
  149. // configuration version
  150. version?: string;
  151. extends?: string; // is this configuration extending an existing configuration?
  152. pageUrl?: string; // will be used for sharing and other fun stuff. This is the page showing the model (not the model's url!)
  153. configuration?: string | {
  154. url?: string;
  155. payload?: any;
  156. mapper?: string; // json (default), html, yaml, xml, etc'. if not provided, file extension will be used.
  157. };
  158. // names of functions in the window context.
  159. observers?: IObserversConfiguration;
  160. canvasElement?: string; // if there is a need to override the standard implementation - ID of HTMLCanvasElement
  161. model?: IModelConfiguration | string;
  162. scene?: ISceneConfiguration;
  163. optimizer?: ISceneOptimizerConfiguration | boolean;
  164. // at the moment, support only a single camera.
  165. camera?: ICameraConfiguration,
  166. skybox?: boolean | ISkyboxConfiguration;
  167. ground?: boolean | IGroundConfiguration;
  168. lights?: { [name: string]: boolean | ILightConfiguration },
  169. // engine configuration. optional!
  170. engine?: {
  171. antialiasing?: boolean;
  172. disableResize?: boolean;
  173. engineOptions?: { [key: string]: any };
  174. adaptiveQuality?: boolean;
  175. },
  176. //templateStructure?: ITemplateStructure,
  177. templates?: {
  178. main: ITemplateConfiguration,
  179. [key: string]: ITemplateConfiguration
  180. };
  181. customShaders?: {
  182. shaders?: {
  183. [key: string]: string;
  184. };
  185. includes?: {
  186. [key: string]: string;
  187. }
  188. }
  189. // features that are being tested.
  190. // those features' syntax will change and move out!
  191. // Don't use in production (or be ready to make the changes :) )
  192. lab?: {
  193. flashlight?: boolean | {
  194. exponent?: number;
  195. angle?: number;
  196. intensity?: number;
  197. diffuse?: { r: number, g: number, b: number };
  198. specular?: { r: number, g: number, b: number };
  199. }
  200. hideLoadingDelay?: number;
  201. }
  202. }
  203. export interface IModelConfiguration {
  204. url?: string;
  205. loader?: string; // obj, gltf?
  206. position?: { x: number, y: number, z: number };
  207. rotation?: { x: number, y: number, z: number, w?: number };
  208. scaling?: { x: number, y: number, z: number };
  209. parentObjectIndex?: number; // the index of the parent object of the model in the loaded meshes array.
  210. castShadow?: boolean;
  211. normalize?: boolean | {
  212. center?: boolean;
  213. unitSize?: boolean;
  214. parentIndex?: number;
  215. }; // shoud the model be scaled to unit-size
  216. title?: string;
  217. subtitle?: string;
  218. thumbnail?: string; // URL or data-url
  219. // [propName: string]: any; // further configuration, like title and creator
  220. }
  221. export interface ISkyboxConfiguration {
  222. cubeTexture?: {
  223. noMipMap?: boolean;
  224. gammaSpace?: boolean;
  225. url?: string | Array<string>;
  226. };
  227. color?: { r: number, g: number, b: number };
  228. pbr?: boolean; // deprecated
  229. scale?: number;
  230. blur?: number; // deprecated
  231. material?: {
  232. imageProcessingConfiguration?: IImageProcessingConfiguration;
  233. [propName: string]: any;
  234. };
  235. infiniteDIstance?: boolean;
  236. }
  237. export interface IGroundConfiguration {
  238. size?: number;
  239. receiveShadows?: boolean;
  240. shadowLevel?: number;
  241. shadowOnly?: boolean; // deprecated
  242. mirror?: boolean | {
  243. sizeRatio?: number;
  244. blurKernel?: number;
  245. amount?: number;
  246. fresnelWeight?: number;
  247. fallOffDistance?: number;
  248. textureType?: number;
  249. };
  250. texture?: string;
  251. color?: { r: number, g: number, b: number };
  252. opacity?: number;
  253. material?: { // deprecated!
  254. [propName: string]: any;
  255. };
  256. }
  257. export interface ISceneConfiguration {
  258. debug?: boolean;
  259. autoRotate?: boolean; // deprecated
  260. rotationSpeed?: number; // deprecated
  261. defaultCamera?: boolean; // deprecated
  262. defaultLight?: boolean; // deprecated
  263. clearColor?: { r: number, g: number, b: number, a: number };
  264. imageProcessingConfiguration?: IImageProcessingConfiguration;
  265. environmentTexture?: string;
  266. }
  267. export interface ISceneOptimizerConfiguration {
  268. targetFrameRate?: number;
  269. trackerDuration?: number;
  270. autoGeneratePriorities?: boolean;
  271. improvementMode?: boolean;
  272. degradation?: string; // low, moderate, high
  273. types?: {
  274. texture?: ISceneOptimizerParameters;
  275. hardwareScaling?: ISceneOptimizerParameters;
  276. shadow?: ISceneOptimizerParameters;
  277. postProcess?: ISceneOptimizerParameters;
  278. lensFlare?: ISceneOptimizerParameters;
  279. particles?: ISceneOptimizerParameters;
  280. renderTarget?: ISceneOptimizerParameters;
  281. mergeMeshes?: ISceneOptimizerParameters;
  282. }
  283. }
  284. export interface IObserversConfiguration {
  285. onEngineInit?: string;
  286. onSceneInit?: string;
  287. onModelLoaded?: string;
  288. }
  289. export interface ICameraConfiguration {
  290. position?: { x: number, y: number, z: number };
  291. rotation?: { x: number, y: number, z: number, w: number };
  292. fov?: number;
  293. fovMode?: number;
  294. minZ?: number;
  295. maxZ?: number;
  296. inertia?: number;
  297. behaviors?: {
  298. [name: string]: number | {
  299. type: number;
  300. [propName: string]: any;
  301. };
  302. };
  303. [propName: string]: any;
  304. }
  305. export interface ILightConfiguration {
  306. type: number;
  307. name?: string;
  308. disabled?: boolean;
  309. position?: { x: number, y: number, z: number };
  310. target?: { x: number, y: number, z: number };
  311. direction?: { x: number, y: number, z: number };
  312. diffuse?: { r: number, g: number, b: number };
  313. specular?: { r: number, g: number, b: number };
  314. intensity?: number;
  315. intensityMode?: number;
  316. radius?: number;
  317. shadownEnabled?: boolean; // only on specific lights!
  318. shadowConfig?: {
  319. useBlurExponentialShadowMap?: boolean;
  320. useKernelBlur?: boolean;
  321. blurKernel?: number;
  322. blurScale?: number;
  323. minZ?: number;
  324. maxZ?: number;
  325. frustumSize?: number;
  326. angleScale?: number;
  327. [propName: string]: any;
  328. }
  329. [propName: string]: any;
  330. // no behaviors for light at the moment, but allowing configuration for future reference.
  331. behaviors?: {
  332. [name: string]: number | {
  333. type: number;
  334. [propName: string]: any;
  335. };
  336. };
  337. }
  338. export interface ISceneOptimizerParameters {
  339. priority?: number;
  340. maximumSize?: number;
  341. step?: number;
  342. }
  343. export interface IImageProcessingConfiguration {
  344. colorGradingEnabled?: boolean;
  345. colorCurvesEnabled?: boolean;
  346. colorCurves?: {
  347. globalHue?: number;
  348. globalDensity?: number;
  349. globalSaturation?: number;
  350. globalExposure?: number;
  351. highlightsHue?: number;
  352. highlightsDensity?: number;
  353. highlightsSaturation?: number;
  354. highlightsExposure?: number;
  355. midtonesHue?: number;
  356. midtonesDensity?: number;
  357. midtonesSaturation?: number;
  358. midtonesExposure?: number;
  359. shadowsHue?: number;
  360. shadowsDensity?: number;
  361. shadowsSaturation?: number;
  362. shadowsExposure?: number;
  363. };
  364. colorGradingWithGreenDepth?: boolean;
  365. colorGradingBGR?: boolean;
  366. exposure?: number;
  367. toneMappingEnabled?: boolean;
  368. contrast?: number;
  369. vignetteEnabled?: boolean;
  370. vignetteStretch?: number;
  371. vignetteCentreX?: number;
  372. vignetteCentreY?: number;
  373. vignetteWeight?: number;
  374. vignetteColor?: { r: number, g: number, b: number, a?: number };
  375. vignetteCameraFov?: number;
  376. vignetteBlendMode?: number;
  377. vignetteM?: boolean;
  378. applyByPostProcess?: boolean;
  379. }
  380. /////>configuration
  381. /////<viewer
  382. export abstract class AbstractViewer {
  383. containerElement: HTMLElement;
  384. templateManager: TemplateManager;
  385. camera: BABYLON.ArcRotateCamera;
  386. engine: BABYLON.Engine;
  387. scene: BABYLON.Scene;
  388. baseId: string;
  389. canvas: HTMLCanvasElement;
  390. protected configuration: ViewerConfiguration;
  391. environmentHelper: BABYLON.EnvironmentHelper;
  392. protected defaultHighpTextureType: number;
  393. protected shadowGeneratorBias: number;
  394. protected defaultPipelineTextureType: number;
  395. protected maxShadows: number;
  396. onSceneInitObservable: BABYLON.Observable<BABYLON.Scene>;
  397. onEngineInitObservable: BABYLON.Observable<BABYLON.Engine>;
  398. onModelLoadedObservable: BABYLON.Observable<BABYLON.AbstractMesh[]>;
  399. onModelLoadProgressObservable: BABYLON.Observable<BABYLON.SceneLoaderProgressEvent>;
  400. onModelLoadErrorObservable: BABYLON.Observable<{ message: string; exception: any }>;
  401. onLoaderInitObservable: BABYLON.Observable<BABYLON.ISceneLoaderPlugin | BABYLON.ISceneLoaderPluginAsync>;
  402. onInitDoneObservable: BABYLON.Observable<AbstractViewer>;
  403. constructor(containerElement: HTMLElement, initialConfiguration?: ViewerConfiguration);
  404. getBaseId(): string;
  405. protected abstract prepareContainerElement(): any;
  406. protected onTemplatesLoaded(): Promise<AbstractViewer>;
  407. protected initEngine(): Promise<BABYLON.Engine>;
  408. protected initScene(): Promise<BABYLON.Scene>;
  409. dispose(): void;
  410. loadModel(model?: any, clearScene?: boolean): Promise<BABYLON.Scene>;
  411. lastUsedLoader: BABYLON.ISceneLoaderPlugin | BABYLON.ISceneLoaderPluginAsync;
  412. sceneOptimizer: BABYLON.SceneOptimizer;
  413. protected registeredOnBeforerenderFunctions: Array<() => void>;
  414. isCanvasInDOM(): boolean;
  415. protected resize: () => void;
  416. protected render: () => void;
  417. updateConfiguration(newConfiguration: Partial<ViewerConfiguration>): void;
  418. protected configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean): void;
  419. protected configureScene(sceneConfig: ISceneConfiguration, optimizerConfig?: ISceneOptimizerConfiguration): void;
  420. protected configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean): void;
  421. protected configureObservers(observersConfiguration: IObserversConfiguration): void;
  422. protected configureCamera(cameraConfig: ICameraConfiguration, focusMeshes: Array<BABYLON.AbstractMesh>): void;
  423. protected configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean }, focusMeshes: Array<BABYLON.AbstractMesh>): void;
  424. protected configureModel(modelConfiguration: Partial<IModelConfiguration>, focusMeshes: Array<BABYLON.AbstractMesh>): void;
  425. dispose(): void;
  426. protected initEnvironment(focusMeshes: Array<BABYLON.AbstractMesh>): Promise<BABYLON.Scene>;
  427. protected injectCustomShaders(): void;
  428. protected extendClassWithConfig(object: any, config: any): void;
  429. protected handleHardwareLimitations(): void;
  430. }
  431. export class DefaultViewer extends AbstractViewer {
  432. containerElement: HTMLElement;
  433. camera: BABYLON.ArcRotateCamera;
  434. constructor(containerElement: HTMLElement, initialConfiguration?: ViewerConfiguration);
  435. initScene(): Promise<BABYLON.Scene>;
  436. protected onTemplatesLoaded(): Promise<AbstractViewer>;
  437. protected prepareContainerElement(): void;
  438. loadModel(model?: any): Promise<BABYLON.Scene>;
  439. initEnvironment(focusMeshes?: Array<BABYLON.AbstractMesh>): Promise<BABYLON.Scene>;
  440. showOverlayScreen(subScreen: string): Promise<Template>;
  441. hideOverlayScreen(): Promise<Template>;
  442. showLoadingScreen(): Promise<Template>;
  443. hideLoadingScreen(): Promise<Template>;
  444. }
  445. }