UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

212 lines 7.43 kB
import { IDisposable } from 'ts-browser-helpers'; import { IMaterial } from './IMaterial'; import { Event, Object3D, Vector3 } from 'three'; import { ChangeEvent, IUiConfigContainer, UiObjectConfig } from 'uiconfig.js'; import { IGeometry, IGeometryEvent } from './IGeometry'; import { IImportResultUserData } from '../assetmanager'; import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js'; export type IObject3DEventTypes = 'dispose' | 'materialUpdate' | 'objectUpdate' | 'textureUpdate' | 'geometryChanged' | 'materialChanged' | 'geometryUpdate' | 'added' | 'removed' | 'select' | 'beforeDeserialize' | 'setView' | 'activateMain' | 'cameraUpdate'; export interface IObject3DEvent<T extends string = IObject3DEventTypes> extends Event { type: T; object?: IObject3D; bubbleToParent?: boolean; change?: string; material?: IMaterial | undefined | IMaterial[]; oldMaterial?: IMaterial | undefined | IMaterial[]; geometry?: IGeometry | undefined; oldGeometry?: IGeometry | undefined; source?: any; } export interface ISetDirtyCommonOptions { /** * Trigger UI Config Refresh along with setDirty. * Default `true`. Set to `false` to prevent UI Config refresh. */ refreshUi?: boolean; /** * Enable/disable frame fade using {@link FrameFadePlugin} * Default `true`. when the plugin is enabled and has corresponding flags enabled */ frameFade?: boolean; /** * Duration for `frameFade` in ms. Check {@link FrameFadePlugin} for more details. */ fadeDuration?: number; /** * Event from uiconfig.js when some value changes from the UI. */ uiChangeEvent?: ChangeEvent; } export interface IObjectSetDirtyOptions extends ISetDirtyCommonOptions { bubbleToParent?: boolean; change?: string; refreshScene?: boolean; geometryChanged?: boolean; /** * @deprecated use {@link refreshScene} instead */ sceneUpdate?: boolean; [key: string]: any; } export interface IObjectProcessor { processObject: (object: IObject3D) => void; } export interface IObject3DUserData extends IImportResultUserData { uuid?: string; /** * When true, this object will not be exported when exporting the scene with {@link AssetExporter.exportObject} */ excludeFromExport?: boolean; autoCentered?: boolean; isCentered?: boolean; autoScaleRadius?: number; autoScaled?: boolean; geometriesCentered?: boolean; /** * should this object be taken into account when calculating bounding box, default true */ bboxVisible?: boolean; /** * Is centered in a parent object. */ pseudoCentered?: boolean; license?: string; /** * When false, this object will not be selectable when clicking on it. */ userSelectable?: boolean; /** * For Physics plugins */ physicsMass?: number; /** * see {@link GLTFAnimationPlugin} */ gltfAnim_SyncMaxDuration?: boolean; /** * is it modelRoot in RootScene, used during serialization nad traversing ancestors */ rootSceneModelRoot?: boolean; __gltfAsset?: GLTF['asset']; __gltfExtras?: GLTF['userData']; __objectSetup?: boolean; __meshSetup?: boolean; /** * @deprecated */ dispose?: any; /** * @deprecated */ setMaterial?: any; /** * @deprecated */ setGeometry?: any; /** * @deprecated */ setDirty?: any; /** * Used in {@link GLTFObject3DExtrasExtension} and {@link iObjectCommons.upgradeObject3D} */ __keepShadowDef?: boolean; /** * Events that should be bubbled to parent root without the need to set bubbleToParent in the event. * todo: remove support for this */ __autoBubbleToParentEvents?: string[]; [key: string]: any; } export interface IObject3D<E extends Event = IObject3DEvent, ET = IObject3DEventTypes> extends Object3D<E, ET>, IUiConfigContainer, IDisposable { assetType: 'model' | 'light' | 'camera' | 'widget'; isLight?: boolean; isCamera?: boolean; isMesh?: boolean; isLine?: boolean; isLineSegments?: boolean; isScene?: boolean; isWidget?: boolean; readonly isObject3D: true; material?: IMaterial | IMaterial[]; /** * Same as material but always returns an array. */ readonly materials?: IMaterial[]; _currentMaterial?: IMaterial | IMaterial[] | null; geometry?: IGeometry; morphTargetDictionary?: Record<string, number>; morphTargetInfluences?: number[]; updateMorphTargets?(): void; _currentGeometry?: IGeometry | null; /** * Dispatches 'objectUpdate' event on object. * @param e */ setDirty(e?: IObjectSetDirtyOptions): void; /** * Parent/Ancestor of this object to bubble events to. This is set internally by setupObject3D. */ parentRoot?: IObject3D | null; uiConfig?: UiObjectConfig; refreshUi(): void; userData: IObject3DUserData; /** * Scales the object to fit the given radius. * * @param autoScaleRadius - optional (taken from userData.autoScaleRadius by default) * @param isCentered - optional (taken from userData.isCentered by default) * @param setDirty - true by default * @param undo - undo any previous autoScale operation */ autoScale?(autoScaleRadius?: number, isCentered?: boolean, setDirty?: boolean, undo?: boolean): this; /** * Moves the bounding box center of the object to the center of the world * * @param setDirty - calls {@link setDirty} @default true * @param undo - undo any previous autoCenter operation */ autoCenter?(setDirty?: boolean, undo?: boolean): this; /** * Moves the object pivot to the center of the bounding box. * * The object will rotate around the new pivot. * * @param setDirty - calls {@link setDirty} @default true * @returns undo function */ pivotToBoundsCenter?(setDirty?: boolean): () => void; /** * Moves the object pivot to the given point * * The object will rotate around the new pivot. * * @param point - point to move the pivot to * @param setDirty - calls {@link setDirty} @default true * @returns undo function */ pivotToPoint?(point: Vector3, setDirty?: boolean): this; /** * @deprecated use object directly */ modelObject: this; _onGeometryUpdate?: (e: IGeometryEvent<'geometryUpdate'>) => void; objectProcessor?: IObjectProcessor; /** * @param removeFromParent - remove from parent. Default true */ dispose(removeFromParent?: boolean): void; traverse(callback: (object: IObject3D) => void): void; traverseVisible(callback: (object: IObject3D) => void): void; traverseAncestors(callback: (object: IObject3D) => void): void; getObjectById<T extends IObject3D = IObject3D>(id: number): T | undefined; getObjectByName<T extends IObject3D = IObject3D>(name: string): T | undefined; getObjectByProperty<T extends IObject3D = IObject3D>(name: string, value: string): T | undefined; copy(source: this, recursive?: boolean, ...args: any[]): this; clone(recursive?: boolean): this; add(...object: Object3D[]): this; remove(...object: IObject3D[]): this; parent: IObject3D | null; children: IObject3D[]; } //# sourceMappingURL=IObject.d.ts.map