123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- import type { Observer } from "../Misc/observable";
- import { Observable } from "../Misc/observable";
- import type { Nullable } from "../types";
- import type { Quaternion } from "../Maths/math.vector";
- import type { AbstractMesh } from "../Meshes/abstractMesh";
- import type { GizmoAnchorPoint, GizmoAxisCache, IGizmo } from "./gizmo";
- import { GizmoCoordinatesMode, Gizmo } from "./gizmo";
- import type { IAxisScaleGizmo } from "./axisScaleGizmo";
- import { AxisScaleGizmo } from "./axisScaleGizmo";
- import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
- import type { Mesh } from "../Meshes/mesh";
- import type { Node } from "../node";
- import type { PointerInfo } from "../Events/pointerEvents";
- import { StandardMaterial } from "../Materials/standardMaterial";
- import type { GizmoManager } from "./gizmoManager";
- import type { TransformNode } from "../Meshes/transformNode";
- /**
- * Interface for scale gizmo
- */
- export interface IScaleGizmo extends IGizmo {
- /** True when the mouse pointer is dragging a gizmo mesh */
- readonly isDragging: boolean;
- /** Internal gizmo used for interactions on the x axis */
- xGizmo: IAxisScaleGizmo;
- /** Internal gizmo used for interactions on the y axis */
- yGizmo: IAxisScaleGizmo;
- /** Internal gizmo used for interactions on the z axis */
- zGizmo: IAxisScaleGizmo;
- /** Internal gizmo used to scale all axis equally*/
- uniformScaleGizmo: IAxisScaleGizmo;
- /** Fires an event when any of it's sub gizmos are dragged */
- onDragStartObservable: Observable<unknown>;
- /** Fires an event when any of it's sub gizmos are being dragged */
- onDragObservable: Observable<unknown>;
- /** Fires an event when any of it's sub gizmos are released from dragging */
- onDragEndObservable: Observable<unknown>;
- /** Drag distance in babylon units that the gizmo will snap to when dragged */
- snapDistance: number;
- /** Incremental snap scaling. When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,... */
- incrementalSnap: boolean;
- /** Sensitivity factor for dragging */
- sensitivity: number;
- /**
- * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation
- * @param mesh Axis gizmo mesh
- * @param cache Gizmo axis definition used for reactive gizmo UI
- */
- addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;
- /**
- * Force release the drag action by code
- */
- releaseDrag(): void;
- /** Default material used to render when gizmo is not disabled or hovered */
- coloredMaterial: StandardMaterial;
- /** Material used to render when gizmo is hovered with mouse*/
- hoverMaterial: StandardMaterial;
- /** Material used to render when gizmo is disabled. typically grey.*/
- disableMaterial: StandardMaterial;
- }
- /**
- * Additional options for the scale gizmo
- */
- export interface ScaleGizmoOptions {
- /**
- * Additional transform applied to the gizmo.
- * @See Gizmo.additionalTransformNode for more detail
- */
- additionalTransformNode?: TransformNode;
- }
- /**
- * Gizmo that enables scaling a mesh along 3 axis
- */
- export declare class ScaleGizmo extends Gizmo implements IScaleGizmo {
- /**
- * Internal gizmo used for interactions on the x axis
- */
- xGizmo: IAxisScaleGizmo;
- /**
- * Internal gizmo used for interactions on the y axis
- */
- yGizmo: IAxisScaleGizmo;
- /**
- * Internal gizmo used for interactions on the z axis
- */
- zGizmo: IAxisScaleGizmo;
- /**
- * Internal gizmo used to scale all axis equally
- */
- uniformScaleGizmo: IAxisScaleGizmo;
- protected _meshAttached: Nullable<AbstractMesh>;
- protected _nodeAttached: Nullable<Node>;
- protected _snapDistance: number;
- protected _incrementalSnap: boolean;
- protected _uniformScalingMesh: Mesh;
- protected _octahedron: Mesh;
- protected _sensitivity: number;
- protected _coloredMaterial: StandardMaterial;
- protected _hoverMaterial: StandardMaterial;
- protected _disableMaterial: StandardMaterial;
- protected _observables: Observer<PointerInfo>[];
- /** Node Caching for quick lookup */
- protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache>;
- /** Default material used to render when gizmo is not disabled or hovered */
- get coloredMaterial(): StandardMaterial;
- /** Material used to render when gizmo is hovered with mouse*/
- get hoverMaterial(): StandardMaterial;
- /** Material used to render when gizmo is disabled. typically grey.*/
- get disableMaterial(): StandardMaterial;
- /** Fires an event when any of it's sub gizmos are dragged */
- onDragStartObservable: Observable<unknown>;
- /** Fires an event when any of it's sub gizmos are being dragged */
- onDragObservable: Observable<unknown>;
- /** Fires an event when any of it's sub gizmos are released from dragging */
- onDragEndObservable: Observable<unknown>;
- get attachedMesh(): Nullable<AbstractMesh>;
- set attachedMesh(mesh: Nullable<AbstractMesh>);
- get attachedNode(): Nullable<Node>;
- set attachedNode(node: Nullable<Node>);
- set updateScale(value: boolean);
- get updateScale(): boolean;
- /**
- * True when the mouse pointer is hovering a gizmo mesh
- */
- get isHovered(): boolean;
- /**
- * True when the mouse pointer is dragging a gizmo mesh
- */
- get isDragging(): boolean;
- get additionalTransformNode(): TransformNode | undefined;
- set additionalTransformNode(transformNode: TransformNode | undefined);
- /**
- * Creates a ScaleGizmo
- * @param gizmoLayer The utility layer the gizmo will be added to
- * @param thickness display gizmo axis thickness
- * @param gizmoManager
- * @param options More options
- */
- constructor(gizmoLayer?: UtilityLayerRenderer, thickness?: number, gizmoManager?: GizmoManager, options?: ScaleGizmoOptions);
- /**
- * @internal
- * Create Geometry for Gizmo
- */
- protected _createUniformScaleMesh(): AxisScaleGizmo;
- set updateGizmoRotationToMatchAttachedMesh(value: boolean);
- get updateGizmoRotationToMatchAttachedMesh(): boolean;
- set anchorPoint(value: GizmoAnchorPoint);
- get anchorPoint(): GizmoAnchorPoint;
- /**
- * posture that the gizmo will be display
- * When set null, default value will be used (Quaternion(0, 0, 0, 1))
- */
- get customRotationQuaternion(): Nullable<Quaternion>;
- set customRotationQuaternion(customRotationQuaternion: Nullable<Quaternion>);
- /**
- * Set the coordinate system to use. By default it's local.
- * But it's possible for a user to tweak so its local for translation and world for rotation.
- * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`
- */
- set coordinatesMode(coordinatesMode: GizmoCoordinatesMode);
- /**
- * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)
- */
- set snapDistance(value: number);
- get snapDistance(): number;
- /**
- * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...
- */
- set incrementalSnap(value: boolean);
- get incrementalSnap(): boolean;
- /**
- * Ratio for the scale of the gizmo (Default: 1)
- */
- set scaleRatio(value: number);
- get scaleRatio(): number;
- /**
- * Sensitivity factor for dragging (Default: 1)
- */
- set sensitivity(value: number);
- get sensitivity(): number;
- /**
- * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation
- * @param mesh Axis gizmo mesh
- * @param cache Gizmo axis definition used for reactive gizmo UI
- */
- addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;
- /**
- * Get the cache set with addToAxisCache for a specific mesh
- * @param mesh Axis gizmo mesh
- * @returns Gizmo axis definition used for reactive gizmo UI
- */
- getAxisCache(mesh: Mesh): GizmoAxisCache | undefined;
- /**
- * Force release the drag action by code
- */
- releaseDrag(): void;
- /**
- * Disposes of the gizmo
- */
- dispose(): void;
- }
|