UNPKG

hexa-viewer-communicator

Version:

A simple API for <hexa-viewer>

641 lines (640 loc) 16.4 kB
import { IConfigurator } from './configurator.interface'; import { IEventObservable } from './event-observable.interface'; export interface IViewerCommunicator { configurator: IConfigurator; hexaViewer: HTMLElement; readonly isModelLoaded: boolean; readonly eventObservable: IEventObservable; onModelLoaded(): Promise<unknown>; getMeshesData(): Promise<{ [id: string]: MeshData; }>; getMeshAnimations(): Promise<{ [id: string]: IAnimationOptions; }>; updateMeshAnimations(meshAnimations: { [id: string]: IAnimationOptions; }): void; updateMeshMorph(meshAnimations: { [id: string]: Array<IMeshMorphDictionary>; }): void; materializeMesh(meshName: string, config: MaterializeMeshConfig): void; sendToViewer(msg: IPostMessage): void; isWebXrSupported(): Promise<boolean>; createInstanceFromUrl(viewerURL: string, params?: any, options?: ICreateInstanceFromUrlOptions): Promise<HTMLElement>; togglePicInPic(state: boolean): void; toggleWebXR(state: boolean, invokeWhenReady?: boolean): void; waitForCollisions(): Promise<Array<Collision>>; toggleCollision(collisionMode: boolean, color?: string): void; deleteCollision(position: number, count: number): void; removeAllCollisions(): void; adjustScene(): Promise<unknown>; applyPreset(json: IAdjustmentsPresetJson): Promise<unknown>; onCreateImagesByTour(): Promise<IImagesByTourResponse>; setLightsByJson(lights: { [id: string]: Array<ILight>; }): Promise<unknown>; broadcastSceneSummary(params?: IBroadcastSceneSummaryOption): Promise<ISceneSummary>; applyShadowPlane(shadowPlane: IShadowPlaneOptions): void; applyHDRI(hdri: IHdriOptions): void; controlsTutorial(types?: Array<TutorialType>): void; toggleAutoRotate(state: boolean): void; onModelInteraction(cb?: Function): Promise<string>; goToInitialCamPos(): void; getCurrentScreenshot(): Promise<string>; toggleMatcapMode(state: boolean, options?: IMatcapOptions): void; toggleHideBottom(state: boolean): void; toggleNoDistanceLimit(state: boolean): void; toggleCloseup(state: boolean): void; setCameraPosition(pos: ICameraControlsStateAnimation): void; destroy(): void; } export interface IViewerCommunicatorOptions { hexaViewer?: HTMLElement; } export interface IPostMessage extends Object { action: string; data?: any; obj?: any; options?: any; value?: any; from?: IPostMessageOrigin; to: IPostMessageOrigin; id?: string; proxy?: boolean; } export declare enum IPostMessageOrigin { TOP = 1, MAIN = 2, WORKER = 3, IGNORE = 4 } export interface MaterializeMeshEnvironmentConfig { intensity: number; type?: number; blur?: boolean; url?: string; } export interface MaterializeMeshBloomConfig { luminanceThreshold: number; luminanceSmoothing: number; resolutionScale: number; width: number; height: number; intensity: number; } export interface MaterializeMeshConfig { RGB: Array<number>; roughness: number; metalness: number; exposure: number; transparent: boolean; opacity?: number; environment?: MaterializeMeshEnvironmentConfig; bloom?: MaterializeMeshBloomConfig; normalMapUrl?: string; diffuseMapUrl?: string; } export interface MeshData { position: ThreeVector3; rotation: ThreeVector3; rotationDegree: ThreeVector3int; scale: ThreeVector3; center?: ThreeVector3; name: string; color: string; materialName?: string; ignoreBB: boolean; castShadow?: boolean; receiveShadow?: boolean; bloom?: MeshBloomOptions; } export interface ThreeVector2int { x: number; y: number; } export interface ThreeVector3int { x: number; y: number; z: number; } export interface ThreeVector3 { x: number | string; y: number | string; z: number | string; } export declare class MeshBloomOptions { luminanceThreshold: number; luminanceSmoothing: number; resolutionScale: number; width: number; height: number; intensity: number; constructor(); } export interface MeshData { position: ThreeVector3; rotation: ThreeVector3; rotationDegree: ThreeVector3int; scale: ThreeVector3; center?: ThreeVector3; name: string; color: string; materialName?: string; ignoreBB: boolean; castShadow?: boolean; receiveShadow?: boolean; bloom?: MeshBloomOptions; } export interface ICreateInstanceFromUrlOptions { enableWebXR?: boolean; themeColor?: string; } export interface Collision extends ThreeVector3 { color: string; object3D?: any; scale: number; } export interface IBroadcastSceneSummaryOption { addResourceJson?: boolean; autoAdjustScene?: boolean; } export interface ISceneSummary { exposure: number; hdr: IHdriOptions; lights: { [id: string]: Array<ILight>; }; plane: IPlaneSummary; renderer: IRendererSummary; camera: ICameraSummary; wireframe: boolean; shadedWireframe: boolean; shadedWireframeOptions: IShadedWireframeOptions; meshId: boolean; xray: boolean; grid: boolean; transparentRenderOrder: TransparentSort; dimensions: boolean; dimensionsOptions: IDimensionsOptions; autoAdjustScene?: boolean; svgPostprocessingOptions: ISVGPostprocessingOptions; resourceJson?: IAdjustmentsPresetJson; } export interface IDimensionsOptions { x?: string; y?: string; z?: string; color?: string; scene?: any; dimensionsUnits?: DimensionsUnits; } export declare enum DimensionsUnits { INCH = 1, CM = 2 } export declare enum TransparentSort { Z_INDEX = 1, REVERSE_PAINTRE_SORT_STABLE = 2, PAINTER_SORT_STABLE = 3 } export interface IShadedWireframeOptions { color?: any; linewidth?: number; } export interface ICameraSummary { fov: number; } export interface IRendererSummary { physicallyCorrectLights: boolean; toneMapping: number; } export interface IImagesByTourResponse { images: Array<string>; modelUrl: string; } export interface IAdjustmentsPreset { artist_user_id: number; preset_json?: IAdjustmentsPresetJson; preset_name: string; created_at?: Date; updated_at?: Date; sub_category_id?: number; retailer_sub_category_id?: number; retailer_id?: number; sort_index?: number; hdriUrl?: string; } export interface IAdjustmentsPresetJson { materialManipulations: { [id: string]: IMaterialManipulation; }; meshManipulations: { [id: string]: MeshData; }; lights: { [id: string]: Array<ILight>; }; texturesAnimations: { [id: string]: { [id: string]: ITextureAnimatorOptions; }; }; meshAnimations: { [id: string]: IAnimationOptions; }; shadowPlane: IShadowPlaneOptions; meshBloomOptions: MeshBloomOptions; hdri: IHdriOptions; params: ISceneParamsOptions; svgPostprocessingOptions: ISVGPostprocessingOptions; annotations: Array<IAnnotation>; preset_json?: any; } export interface ITextureAnimatorOptions { tilesHorizontal: number; tilesVertical: number; numberOfTiles: number; tileDisplayDuration: number; currentDisplayTime: number; name: string; image: string; } export interface IMaterialManipulation { reflectivity: number; color: string; type: string; alphaTest: number; transparent: boolean; velvetIntensity: number; clearCoat: number; clearCoatRoughness: number; opacity: number; video?: IThreeMaterialVideo; refractionRatio: number; envMap?: ITexture; } export interface ITexture { name: string; uuid: string; alphaMap: ITexture; aoMap: ITexture; aoMapIntensity: number; bumpMap: ITexture; bumpScale: number; displacementMap: ITexture; displacementScale: number; displacementBias: number; emissiveMap: ITexture; emissive: IColor; emissiveIntensity: number; envMap: ITexture; envMapIntensity: number; lightMap: ITexture; lightMapIntensity: number; map: ITexture; color: IColor; metalness: number; metalnessMap: ITexture; morphNormals: boolean; morphTargets: boolean; defines: any; normalMap: ITexture; normalScale: IVector2; refractionRatio: number; roughness: number; roughnessMap: ITexture; offset: IVector2; repeat: IVector2; center: IVector2; rotation: number; wrapS: IThreeTextureWrap; wrapT: IThreeTextureWrap; imageSrc: string; videoSrc: string; mimeType: string; imageWidth: number; imageHeight: number; } export interface IColor { r: number; g: number; b: number; } export interface IVector2 { x: number; y: number; } export declare enum IThreeTextureWrap { RepeatWrapping = 1000, ClampToEdgeWrapping = 1001, MirroredRepeatWrapping = 1002 } export interface ITexture { name: string; uuid: string; alphaMap: ITexture; aoMap: ITexture; aoMapIntensity: number; bumpMap: ITexture; bumpScale: number; displacementMap: ITexture; displacementScale: number; displacementBias: number; emissiveMap: ITexture; emissive: IColor; emissiveIntensity: number; envMap: ITexture; envMapIntensity: number; lightMap: ITexture; lightMapIntensity: number; map: ITexture; color: IColor; metalness: number; metalnessMap: ITexture; morphNormals: boolean; morphTargets: boolean; defines: any; normalMap: ITexture; normalScale: IVector2; refractionRatio: number; roughness: number; roughnessMap: ITexture; offset: IVector2; repeat: IVector2; center: IVector2; rotation: number; wrapS: IThreeTextureWrap; wrapT: IThreeTextureWrap; imageSrc: string; videoSrc: string; mimeType: string; imageWidth: number; imageHeight: number; } export interface IThreeMaterialVideo { mapType: string; src: string; } export interface ISVGPostprocessingOptions { contrast: number; brightness: number; saturate: number; sepia: number; sharpen: number; gamma: number; } export interface IAnnotation { annotationId: number; annotationType: AnnotationType; meshAnimations: { [id: string]: IAnnotationMeshAnimation; }; position: ThreeVector3; cameraPositions: Array<ICameraControlsState>; textDuration?: number; editMode: boolean; title?: string; color?: string; img?: string; textAlwaysAppears: boolean; imageScale: number; imageProportion: number; } export interface ICameraControlsState { phi: number; theta: number; radius: number; fov: number; focalLength: number; posx: number; posy: number; posz: number; camposx: number; camposy: number; camposz: number; targetX: number; targetY: number; targetZ: number; } export interface IAnimationOptions { active: boolean; loop?: boolean; } export interface IMeshMorphDictionary { meshName: string; morphName: string; value: number; animationDuration?: number; } export interface IAnnotationMeshAnimation extends IAnimationOptions { once: boolean; } export declare enum AnnotationType { HOT_SPOT = 1 } export interface ILight { color?: any; helperColor?: number; intensity?: number; hsl?: any; target?: any; shadow?: any; angle?: number; decay?: number; penumbra?: number; distance?: number; update?: Function; position?: any; castShadow?: boolean; type?: string; name?: string; alias?: string; followCamera?: boolean; shadowMapDim?: number; index?: number; width?: number; height?: number; indentation?: ThreeVector3; normalBias?: number; bias?: number; nickname?: string; embedded?: boolean; } export interface IPlaneSummary { state: boolean; options: IShadowPlaneOptions; } export interface IShadowPlaneOptions { active: boolean | undefined; color: string | undefined; opacity: number | undefined; reflector: boolean | undefined; side: boolean | undefined; physical: boolean | undefined; physicalOptions?: IPhysicalPlaneOptions; } export interface IPhysicalPlaneOptions { blur: number; darkness: number; opacity: number; dim: number; height: number; } export interface IHdriOptions { type: number; intensity: number; background: boolean; blur: boolean; lightProbe: number; format: undefined | 'jpg' | 'hdr' | 'ultra-hdr'; skybox: boolean; src?: string; probeIntensity?: number; } export interface ISceneParamsOptions { exposure: number; fov: number; physicallyCorrectLights: boolean; toneMapping: number; wireframe: boolean | undefined; wireframeColor: string | undefined; shadedWireframe: boolean | undefined; shadedWireframeColor: string | undefined; meshId: boolean; xray: boolean; grid: boolean; transparentRenderOrder: number; dimensions: boolean | undefined; dimensionsValues: ThreeVector3; dimensionsColor: string | undefined; closeup: boolean; } export interface IMeshProps { mesh: MeshData; key: string; value: any; } export interface JsonToHtmlObject { type: string; attrs?: any; text?: string; children?: Array<JsonToHtmlObject>; } export interface EventSelector { selector?: string; index?: number; listen: string; action: string; actionType: EventSelectorActionType; parameters?: Array<any>; } export declare enum EventSelectorActionType { SCOPE = 1, EVAL = 2 } export declare enum TutorialType { LEGACY_ZOOM = 1, LEGACY_ROTATE = 2, INTERACTIVE_ROTATE = 3 } export interface IExpotedModel { type: string; file: string; buffer: ArrayBuffer; } export interface IExportOptions { type: ExportFileType; compressPNG: boolean; downloadFile: boolean; } export declare enum ExportFileType { glTF = 1, GLB = 2, OBJ = 3, USDZ = 4 } export interface IGifGenOptions { numOfFrames: number; format: MediaFormat; codec?: 'h264' | 'vp8' | 'vp9'; } export declare enum MediaFormat { IMAGE = 1, VIDEO = 2 } export interface IMatcapOptions { color?: string | number; } export declare enum TextureMimeType { IMAGE = 1, VIDEO = 2 } export interface IApplyTextureOptions { src: string; materialName: string; mapType: 'map' | 'alphaMap' | 'aoMap' | 'bumpMap' | 'displacementMap' | 'emissiveMap' | 'envMap' | 'lightMap' | 'metalnessMap' | 'normalMap' | 'roughnessMap'; intensity?: number; mimeType: TextureMimeType; color?: string | number; animationDuration?: number; } export interface IMaterialPropsOptions { materialName: string; props: any; } export interface ISwapMaterialType { materialName: string; type: string; } export interface IBoundingBox { size: number; x: number; y: number; z: number; } export interface ICameraControlsStateAnimation extends ICameraControlsState { animationDuration: number; x: number; y: number; z: number; } export interface IDiamondOptions { envMap: string; bounces: number; ior: number; aberrationStrength: number; fresnel: number; color: string; envMapIntensity: number; pseudoTriangles: number; quality: number; tintStrength: number; diamondClarity: number; normalMap: string; normalScale: ThreeVector2int; dirLightDirection: ThreeVector3int; dirLightColor: string; dirLightIntensity: number; sparkleDensity: number; sparkleBoost: number; highlightExp: number; } export interface IBaseAvatarAnimatorOptions { effort?: number; } export interface IAvatarAnimatorOptions extends IBaseAvatarAnimatorOptions { duration?: number; numberOfIterations?: number; yoyo?: boolean; onFinish?: IAvatarAnimatorFinishOptions; naturalStandOptions?: IAvatarAnimatorOptions; } export interface IAvatarAnimatorTalkOptions extends IAvatarAnimatorOptions { text?: string; speed?: number; } export interface IAvatarAnimatorFinishOptions extends IAvatarAnimatorOptions { method?: string; delay?: number; }