import { mat4, quat, vec2, vec3 } from 'gl-matrix'; import { Transform } from '../components'; import type { DisplayObject } from '../display-objects'; import type { IElement, INode, IParentNode } from '../dom/interfaces'; import { AABB, Rectangle } from '../shapes'; import type { SceneGraphService } from './interfaces'; import { GlobalRuntime } from '../global-runtime'; /** * update transform in scene graph * * @see https://community.khronos.org/t/scene-graphs/50542/7 */ export declare class DefaultSceneGraphService implements SceneGraphService { private runtime; private pendingEvents; private boundsChangedEvent; constructor(runtime: GlobalRuntime); 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; setLocalSkew(element: INode, skew: vec2 | number, y?: number): void; dirtifyLocal(element: INode, transform: Transform): void; dirtifyWorld(element: INode, transform: Transform): void; triggerPendingEvents(): void; clearPendingEvents(): void; dirtifyToRoot(element: INode, affectChildren?: boolean): void; private displayObjectDependencyMap; updateDisplayObjectDependency(name: string, oldPath: DisplayObject, newPath: DisplayObject, object: DisplayObject): void; informDependentDisplayObjects(object: DisplayObject): 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): quat; getLocalScale(element: INode): vec3; getLocalSkew(element: INode): vec2; private calcLocalTransform; 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; } //# sourceMappingURL=SceneGraphService.d.ts.map