import { Syringe } from 'mana-syringe'; import type { Transform } from '../components'; import type { vec2 } from 'gl-matrix'; import { mat4, quat, vec3 } from 'gl-matrix'; import { AABB, Rectangle } from '../shapes'; import type { IElement, INode, IParentNode } from '../dom/interfaces'; export declare function sortByZIndex(o1: IElement, o2: IElement): number; export declare function dirtifyToRoot(element: INode, affectChildren?: boolean): void; export declare const SceneGraphService: Syringe.DefinedToken; export interface SceneGraphService { matches: (query: string, root: T) => boolean; querySelector: (query: string, root: R) => T | null; querySelectorAll: (query: string, root: R) => T[]; attach: (child: C, parent: P, index?: number) => void; detach: (child: C) => void; getOrigin: (element: INode) => vec3; setOrigin: (element: INode, origin: vec3 | number, y?: number, z?: number) => void; setPosition: (element: INode, position: vec3 | vec2) => void; setLocalPosition: (element: INode, position: vec3 | vec2) => void; scaleLocal: (element: INode, scaling: vec3 | vec2) => void; setLocalScale: (element: INode, scaling: vec3 | vec2) => void; getLocalScale: (element: INode) => vec3; getScale: (element: INode) => vec3; translate: (element: INode, translation: vec3 | number, y?: number, z?: number) => void; translateLocal: (element: INode, translation: vec3 | number, y?: number, z?: number) => void; getPosition: (element: INode) => vec3; getLocalPosition: (element: INode) => vec3; setEulerAngles: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; setLocalEulerAngles: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; rotateLocal: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; rotate: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; getRotation: (element: INode) => quat; setRotation: (element: INode, rotation: quat | number, y?: number, z?: number, w?: number) => void; setLocalRotation: (element: INode, rotation: quat | number, y?: number, z?: number, w?: number) => void; getLocalRotation: (element: INode) => quat; getWorldTransform: (element: INode, transform?: Transform) => mat4; getLocalTransform: (element: INode, transform?: Transform) => mat4; setLocalTransform: (element: INode, transform: mat4) => void; resetLocalTransform: (element: INode) => void; getBounds: (element: INode, render?: boolean) => AABB; getLocalBounds: (element: INode, render?: boolean) => AABB; getGeometryBounds: (element: INode, render?: boolean) => AABB; getBoundingClientRect: (element: INode) => Rectangle; syncHierarchy: (element: INode) => void; } /** * update transform in scene graph * * @see https://community.khronos.org/t/scene-graphs/50542/7 */ export declare class DefaultSceneGraphService implements SceneGraphService { private sceneGraphSelectorFactory; matches(query: string, root: T): boolean; querySelector(query: string, root: R): T | null; querySelectorAll(query: string, root: R): T[]; attach(child: C, parent: P, index?: number): void; detach(child: C): void; getOrigin(element: INode): vec3; /** * same as pivot in Pixi.js * * @see https://stackoverflow.com/questions/40748452/how-to-change-css-transform-origin-but-preserve-transformation */ setOrigin(element: INode, origin: vec3 | number, y?: number, z?: number): void; /** * rotate in world space */ rotate: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; /** * rotate in local space * @see @see https://docs.microsoft.com/en-us/windows/win32/api/directxmath/nf-directxmath-xmquaternionrotationrollpitchyaw */ rotateLocal: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; /** * set euler angles(degrees) in world space */ setEulerAngles: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void; /** * set euler angles(degrees) in local space */ setLocalEulerAngles(element: INode, degrees: vec3 | number, y?: number, z?: number): void; /** * translate in local space * * @example * ``` * translateLocal(x, y, z) * translateLocal(vec3(x, y, z)) * ``` */ translateLocal: (element: INode, translation: vec3 | number, y?: number, z?: number) => void; /** * move to position in world space * * 对应 g 原版的 move/moveTo * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L684-L689 */ setPosition: (element: INode, position: vec3 | vec2) => void; /** * move to position in local space */ setLocalPosition(element: INode, position: vec3 | vec2): void; /** * scale in local space */ scaleLocal(element: INode, scaling: vec3 | vec2): void; setLocalScale(element: INode, scaling: vec3 | vec2): void; /** * translate in world space * * @example * ``` * translate(x, y, z) * translate(vec3(x, y, z)) * ``` * * 对应 g 原版的 translate 2D * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L665-L676 */ translate: (element: INode, translation: vec3 | number, y?: number, z?: number) => void; setRotation: () => (element: INode, rotation: quat | number, y?: number, z?: number, w?: number) => void; setLocalRotation(element: INode, rotation: quat | number, y?: number, z?: number, w?: number): void; dirtifyLocal(element: INode, transform: Transform): void; dirtifyWorld(element: INode, transform: Transform): void; getPosition(element: INode): vec3; getRotation(element: INode): quat; getScale(element: INode): vec3; getWorldTransform(element: INode, transform?: Transform): mat4; getLocalPosition(element: INode): vec3; getLocalRotation(element: INode): import("gl-matrix").vec4; getLocalScale(element: INode): vec3; getLocalTransform(element: INode): mat4; setLocalTransform(element: INode, transform: mat4): void; resetLocalTransform(element: INode): void; private getTransformedGeometryBounds; /** * won't account for children */ getGeometryBounds(element: INode, render?: boolean): AABB; /** * account for children in world space */ getBounds(element: INode, render?: boolean): AABB; /** * account for children in local space */ getLocalBounds(element: INode): AABB; getBoundingClientRect(element: INode): Rectangle; private dirtifyWorldInternal; syncHierarchy(element: INode): void; private sync; private unfreezeParentToRoot; }