SceneGraphService.d.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { mat4, quat, vec2, vec3 } from 'gl-matrix';
  2. import { Transform } from '../components';
  3. import type { DisplayObject } from '../display-objects';
  4. import type { IElement, INode, IParentNode } from '../dom/interfaces';
  5. import { AABB, Rectangle } from '../shapes';
  6. import type { SceneGraphService } from './interfaces';
  7. import { GlobalRuntime } from '../global-runtime';
  8. /**
  9. * update transform in scene graph
  10. *
  11. * @see https://community.khronos.org/t/scene-graphs/50542/7
  12. */
  13. export declare class DefaultSceneGraphService implements SceneGraphService {
  14. private runtime;
  15. private pendingEvents;
  16. private boundsChangedEvent;
  17. constructor(runtime: GlobalRuntime);
  18. matches<T extends IElement>(query: string, root: T): boolean;
  19. querySelector<R extends IElement, T extends IElement>(query: string, root: R): T | null;
  20. querySelectorAll<R extends IElement, T extends IElement>(query: string, root: R): T[];
  21. attach<C extends INode, P extends INode & IParentNode>(child: C, parent: P, index?: number): void;
  22. detach<C extends INode>(child: C): void;
  23. getOrigin(element: INode): vec3;
  24. /**
  25. * same as pivot in Pixi.js
  26. *
  27. * @see https://stackoverflow.com/questions/40748452/how-to-change-css-transform-origin-but-preserve-transformation
  28. */
  29. setOrigin(element: INode, origin: vec3 | number, y?: number, z?: number): void;
  30. /**
  31. * rotate in world space
  32. */
  33. rotate: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void;
  34. /**
  35. * rotate in local space
  36. * @see @see https://docs.microsoft.com/en-us/windows/win32/api/directxmath/nf-directxmath-xmquaternionrotationrollpitchyaw
  37. */
  38. rotateLocal: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void;
  39. /**
  40. * set euler angles(degrees) in world space
  41. */
  42. setEulerAngles: (element: INode, degrees: vec3 | number, y?: number, z?: number) => void;
  43. /**
  44. * set euler angles(degrees) in local space
  45. */
  46. setLocalEulerAngles(element: INode, degrees: vec3 | number, y?: number, z?: number): void;
  47. /**
  48. * translate in local space
  49. *
  50. * @example
  51. * ```
  52. * translateLocal(x, y, z)
  53. * translateLocal(vec3(x, y, z))
  54. * ```
  55. */
  56. translateLocal: (element: INode, translation: vec3 | number, y?: number, z?: number) => void;
  57. /**
  58. * move to position in world space
  59. *
  60. * 对应 g 原版的 move/moveTo
  61. * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L684-L689
  62. */
  63. setPosition: (element: INode, position: vec3 | vec2) => void;
  64. /**
  65. * move to position in local space
  66. */
  67. setLocalPosition: (element: INode, position: vec3 | vec2) => void;
  68. /**
  69. * scale in local space
  70. */
  71. scaleLocal(element: INode, scaling: vec3 | vec2): void;
  72. setLocalScale(element: INode, scaling: vec3 | vec2): void;
  73. /**
  74. * translate in world space
  75. *
  76. * @example
  77. * ```
  78. * translate(x, y, z)
  79. * translate(vec3(x, y, z))
  80. * ```
  81. *
  82. * 对应 g 原版的 translate 2D
  83. * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L665-L676
  84. */
  85. translate: (element: INode, translation: vec3 | number, y?: number, z?: number) => void;
  86. setRotation: () => (element: INode, rotation: quat | number, y?: number, z?: number, w?: number) => void;
  87. setLocalRotation(element: INode, rotation: quat | number, y?: number, z?: number, w?: number): void;
  88. setLocalSkew(element: INode, skew: vec2 | number, y?: number): void;
  89. dirtifyLocal(element: INode, transform: Transform): void;
  90. dirtifyWorld(element: INode, transform: Transform): void;
  91. triggerPendingEvents(): void;
  92. clearPendingEvents(): void;
  93. dirtifyToRoot(element: INode, affectChildren?: boolean): void;
  94. private displayObjectDependencyMap;
  95. updateDisplayObjectDependency(name: string, oldPath: DisplayObject, newPath: DisplayObject, object: DisplayObject): void;
  96. informDependentDisplayObjects(object: DisplayObject): void;
  97. getPosition(element: INode): vec3;
  98. getRotation(element: INode): quat;
  99. getScale(element: INode): vec3;
  100. getWorldTransform(element: INode, transform?: Transform): mat4;
  101. getLocalPosition(element: INode): vec3;
  102. getLocalRotation(element: INode): quat;
  103. getLocalScale(element: INode): vec3;
  104. getLocalSkew(element: INode): vec2;
  105. private calcLocalTransform;
  106. getLocalTransform(element: INode): mat4;
  107. setLocalTransform(element: INode, transform: mat4): void;
  108. resetLocalTransform(element: INode): void;
  109. private getTransformedGeometryBounds;
  110. /**
  111. * won't account for children
  112. */
  113. getGeometryBounds(element: INode, render?: boolean): AABB;
  114. /**
  115. * account for children in world space
  116. */
  117. getBounds(element: INode, render?: boolean): AABB;
  118. /**
  119. * account for children in local space
  120. */
  121. getLocalBounds(element: INode): AABB;
  122. getBoundingClientRect(element: INode): Rectangle;
  123. private dirtifyWorldInternal;
  124. syncHierarchy(element: INode): void;
  125. private sync;
  126. private unfreezeParentToRoot;
  127. }
  128. //# sourceMappingURL=SceneGraphService.d.ts.map