threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
114 lines • 4.7 kB
TypeScript
import { EventDispatcher, Intersection, Object3D, Raycaster, Vector2 } from 'three';
import { JSUndoManager } from 'ts-browser-helpers';
import { ICamera, IMaterial, IObject3D, ITexture, IGeometry, IWidget } from '../../core';
export type SelectionObject = IObject3D | IMaterial | ITexture | IGeometry | null;
export type SelectionObjectArr = IObject3D[] | IMaterial[] | ITexture[] | IGeometry[];
export type SelectionModeType = 'object' | 'material' | 'texture' | 'geometry';
export type PickingModeType = 'auto' | SelectionModeType;
export interface HitIntersects {
selectedObject: IObject3D | null;
intersect: Intersection<IObject3D> | null;
intersects: Intersection<IObject3D>[];
mouse: Vector2;
selectedWidget?: (IWidget & IObject3D) | null;
selectedHandle?: Object3D | null;
}
export interface ObjectPickerEventMap {
hoverObjectChanged: {
object: IObject3D | null;
material: IMaterial | null;
value: SelectionObject;
intersects?: HitIntersects;
};
selectedObjectChanged: {
object: IObject3D | null;
material: IMaterial | null;
value: SelectionObject;
lastValue: SelectionObject;
intersects?: HitIntersects;
};
hitObject: {
time: number;
intersects: HitIntersects;
};
selectionModeChanged: {
detail: {
key: 'selectionMode';
value: SelectionModeType;
oldValue: SelectionModeType;
};
};
pickingModeChanged: {
detail: {
key: 'pickingMode';
value: PickingModeType;
oldValue: PickingModeType;
};
};
}
export declare class ObjectPicker extends EventDispatcher<ObjectPickerEventMap> {
private _firstHit;
hoverEnabled: boolean;
selectionMode: SelectionModeType;
pickingMode: PickingModeType;
/**
* Time threshold for a pointer click event
*/
static PointerClickMaxTime: number;
/**
* Distance threshold for a pointer click event
*/
static PointerClickMaxDistance: number;
undoManager?: JSUndoManager;
private _root;
extraObjects: IObject3D[];
private _camera;
private _mouseDownTime;
private _mouseDownPos;
private _mouseUpTime;
private _time;
selectionCondition: (o: IObject3D) => boolean;
raycaster: Raycaster;
mouse: Vector2;
private _selected;
private _selectedIntersects;
private _hovering;
private _hoveringIntersects;
cursorStyles: {
default: string;
down: string;
};
domElement: HTMLElement;
constructor(root: IObject3D, domElement: HTMLElement, camera: ICamera, selectionCondition?: (o: IObject3D) => boolean);
dispose(): void;
get camera(): ICamera<import('../../core').ICameraEventMap>;
set camera(value: ICamera<import('../../core').ICameraEventMap>);
get selectedObject(): SelectionObject;
protected _onSelectedRemoved: (e: {
target: IObject3D | IMaterial;
}) => void;
setSelected(object: SelectionObject, record?: boolean, intersects?: HitIntersects): void;
get hoverObject(): SelectionObject;
setHoverObject(object: SelectionObject, _record?: boolean, intersects?: HitIntersects): void;
get time(): number;
get isMouseDown(): boolean;
get mouseDownDeltaTime(): number;
private _onPointerMove;
private _onPointerLeave;
private _onPointerEnter;
private _onPointerCancel;
updateMouseFromEvent(event: PointerEvent): void;
private _onPointerDown;
private _onPointerUp;
private _onPointerClick;
private _hitObject;
checkIntersection(): {
selectedObject: IObject3D<import('../../core').IObject3DEventMap, IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap> | undefined, IMaterial<import('../../core').IMaterialEventMap> | IMaterial<import('../../core').IMaterialEventMap>[] | undefined>;
intersect: Intersection<IObject3D<import('../../core').IObject3DEventMap, IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap> | undefined, IMaterial<import('../../core').IMaterialEventMap> | IMaterial<import('../../core').IMaterialEventMap>[] | undefined>>;
intersects: Intersection<IObject3D<import('../../core').IObject3DEventMap, IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap> | undefined, IMaterial<import('../../core').IMaterialEventMap> | IMaterial<import('../../core').IMaterialEventMap>[] | undefined>>[];
mouse: Vector2;
} | null;
isHovering(): boolean;
isSelected(): boolean;
}
//# sourceMappingURL=../../src/three/utils/ObjectPicker.d.ts.map