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.
69 lines • 2.91 kB
TypeScript
import { BufferGeometry, BufferGeometryEventMap, NormalBufferAttributes, NormalOrGLBufferAttributes, Vector3 } from 'three';
import { IUiConfigContainer, UiObjectConfig } from 'uiconfig.js';
import { AnyOptions } from 'ts-browser-helpers';
import { IObject3D } from './IObject';
import { IImportResultUserData } from '../assetmanager';
export interface IGeometryUserData extends IImportResultUserData {
/**
* Automatically dispose geometry when not used by any object in the scene
* @default true
*/
disposeOnIdle?: boolean;
/**
* If this is a placeholder/dummy geometry.
* These geometries are not saved in asset/glTF files.
* @internal - todo implement not export same as placeholder materials
*/
isPlaceholder?: boolean;
[key: string]: any;
}
export interface IGeometry<Attributes extends NormalOrGLBufferAttributes = NormalBufferAttributes, TE extends IGeometryEventMap = IGeometryEventMap> extends BufferGeometry<Attributes, TE>, IUiConfigContainer {
assetType: 'geometry';
setDirty(options?: IGeometrySetDirtyOptions): void;
refreshUi(): void;
uiConfig?: UiObjectConfig;
isBufferGeometry: true;
/**
* Centers the geometry.
* @param offset - returns the offset applied to the geometry
* @param keepWorldPosition - Updates the attached meshes, so that the world position of the geometry remains the same.
* @param setDirty
*/
center(offset?: Vector3, keepWorldPosition?: boolean, setDirty?: boolean): BufferGeometry;
/**
* Same as center but returns a function to undo the centering
* @param offset
* @param keepWorldPosition
*/
center2(offset?: Vector3, keepWorldPosition?: boolean): () => void;
userData: IGeometryUserData;
/**
* Objects in the scene that are using this geometry.
* This is set in the {@link Object3DManager} when the objects are added/removed from the scene. Do not modify this set directly.
*/
appliedMeshes: Set<IObject3D>;
/**
* Disposes the geometry from the GPU.
* Set force to false if not sure the geometry is used by any object in the scene.
* // todo add check for visible in scene also? or is that overkill
* @param force - when true, same as three.js dispose. when false, only disposes if disposeOnIdle not false and not used by any object in the scene. default: true
*/
dispose(force?: boolean): void;
/**
* @internal
*/
['_uiConfig']?: UiObjectConfig;
}
export type IGeometrySetDirtyOptions = AnyOptions & {
bubbleToObject?: boolean;
};
export type IGeometryEventMap = BufferGeometryEventMap;
declare module 'three' {
interface BufferGeometryEventMap {
geometryUpdate: {
geometry: IGeometry;
bubbleToObject?: boolean;
} & IGeometrySetDirtyOptions;
}
}
//# sourceMappingURL=../src/core/IGeometry.d.ts.map