import type {
IKeyboardEvent,
IPointerEvent,
IWheelEvent,
ViewportAnimationEffectTiming,
ZoomCanvasOptions,
} from '@antv/g6';
import { ZoomCanvas } from '@antv/g6';
import { clamp } from '@antv/util';
/**
* 缩放画布配置项
*
* Zoom Canvas Options
*/
export interface ZoomCanvas3DOptions extends ZoomCanvasOptions {}
/**
* 缩放画布
*
* Zoom Canvas
*/
export class ZoomCanvas3D extends ZoomCanvas {
protected zoom = async (
value: number,
event: IWheelEvent | IKeyboardEvent | IPointerEvent,
animation: ViewportAnimationEffectTiming | undefined,
) => {
if (!this.validate(event)) return;
const { graph } = this.context;
const { sensitivity, onFinish } = this.options;
const ratio = 1 + (clamp(value, -50, 50) * sensitivity) / 100;
const zoom = graph.getZoom();
this.context.canvas.getCamera().setZoom(zoom * ratio);
onFinish?.();
};
}