interfaces.d.ts 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. import { ShapeCfg, GroupCfg, ClipCfg, Renderer, Point, ChangeType, AnimateCfg, ElementAttrs, OnFrame, ShapeBase, BBox, ElementFilterFn, Cursor, LooseObject } from './types';
  2. import GraphEvent from './event/graph-event';
  3. export interface ICtor<T> {
  4. new (cfg: any): T;
  5. }
  6. /**
  7. * @interface IObservable
  8. * 可以绑定事件的接口
  9. */
  10. export interface IObservable {
  11. /**
  12. * 绑定事件
  13. * @param eventName 事件名
  14. * @param callback 回调函数
  15. */
  16. on(eventName: string, callback: Function): any;
  17. /**
  18. * 移除事件
  19. */
  20. off(): any;
  21. /**
  22. * 移除事件
  23. * @param eventName 事件名
  24. */
  25. off(eventName: string): any;
  26. /**
  27. * 移除事件
  28. * @param eventName 事件名
  29. * @param callback 回调函数
  30. */
  31. off(eventName: string, callback: Function): any;
  32. /**
  33. * 触发事件, trigger 的别名函数
  34. * @param eventName 事件名称
  35. * @param eventObject 参数
  36. */
  37. emit(eventName: string, eventObject: object): any;
  38. getEvents(): any;
  39. }
  40. /**
  41. * @interface IBase
  42. * 所有图形类公共的接口,提供 get,set 方法
  43. */
  44. export interface IBase extends IObservable {
  45. cfg: LooseObject;
  46. /**
  47. * 获取属性值
  48. * @param {string} name 属性名
  49. * @return {any} 属性值
  50. */
  51. get(name: string): any;
  52. /**
  53. * 设置属性值
  54. * @param {string} name 属性名称
  55. * @param {any} value 属性值
  56. */
  57. set(name: string, value: any): any;
  58. /**
  59. * 是否销毁
  60. * @type {boolean}
  61. */
  62. destroyed: boolean;
  63. /**
  64. * 销毁对象
  65. */
  66. destroy(): any;
  67. }
  68. /**
  69. * @interface
  70. * 图形元素的基类
  71. */
  72. export interface IElement extends IBase {
  73. /**
  74. * 获取父元素
  75. * @return {IContainer} 父元素一般是 Group 或者是 Canvas
  76. */
  77. getParent(): IContainer;
  78. /**
  79. * 获取所属的 Canvas
  80. * @return {ICanvas} Canvas 对象
  81. */
  82. getCanvas(): ICanvas;
  83. /**
  84. * 获取 Shape 的基类
  85. * @return {IShape} Shape 的基类,用作工厂方法来获取类实例
  86. */
  87. getShapeBase(): ShapeBase;
  88. /**
  89. * 获取 Group 的基类,用于添加默认的 Group
  90. * @return {IGroup} group 类型
  91. */
  92. getGroupBase(): ICtor<IGroup>;
  93. /**
  94. * 当引擎画布变化时,可以调用这个方法,告知 canvas 图形属性发生了改变
  95. * 这个方法一般不要直接调用,在实现 element 的继承类时可以复写
  96. * @param {ChangeType} changeType 改变的类型
  97. */
  98. onCanvasChange(changeType: ChangeType): any;
  99. /**
  100. * 是否是分组
  101. * @return {boolean} 是否是分组
  102. */
  103. isGroup(): boolean;
  104. /**
  105. * 从父元素中移除
  106. * @param {boolean} destroy 是否同时销毁
  107. */
  108. remove(destroy?: boolean): any;
  109. /**
  110. * 获取全量的图形属性
  111. */
  112. attr(): any;
  113. /**
  114. * 获取图形属性
  115. * @param {string} name 图形属性名
  116. * @returns 图形属性值
  117. */
  118. attr(name: string): any;
  119. /**
  120. * 设置图形属性
  121. * @param {string} name 图形属性名
  122. * @param {any} value 图形属性值
  123. */
  124. attr(name: string, value: any): any;
  125. /**
  126. * 设置图形属性
  127. * @param {object} attrs 图形属性配置项,键值对方式
  128. */
  129. attr(attrs: object): any;
  130. /**
  131. * 获取包围盒,这个包围盒是相对于图形元素自己,不会计算 matrix
  132. * @returns {BBox} 包围盒
  133. */
  134. getBBox(): any;
  135. /**
  136. * 获取图形元素相对画布的包围盒,会计算从顶层到当前的 matrix
  137. * @returns {BBox} 包围盒
  138. */
  139. getCanvasBBox(): BBox;
  140. /**
  141. * 复制对象
  142. */
  143. clone(): IElement;
  144. /**
  145. * 显示
  146. */
  147. show(): any;
  148. /**
  149. * 隐藏
  150. */
  151. hide(): any;
  152. /**
  153. * 设置 zIndex
  154. */
  155. setZIndex(zIndex: number): any;
  156. /**
  157. * 最前面
  158. */
  159. toFront(): any;
  160. /**
  161. * 最后面
  162. */
  163. toBack(): any;
  164. /**
  165. * 清除掉所有平移、旋转和缩放
  166. */
  167. resetMatrix(): any;
  168. /**
  169. * 获取 transform 后的矩阵
  170. * @return {number[]} 矩阵
  171. */
  172. getMatrix(): number[];
  173. /**
  174. * 设置 transform 的矩阵
  175. * @param {number[]} m 应用到图形元素的矩阵
  176. */
  177. setMatrix(m: number[]): any;
  178. /**
  179. * 将向量应用设置的矩阵
  180. * @param {number[]} v 向量
  181. */
  182. applyToMatrix(v: number[]): any;
  183. /**
  184. * 根据设置的矩阵,将向量转换相对于图形/分组的位置
  185. * @param {number[]} v 向量
  186. */
  187. invertFromMatrix(v: number[]): any;
  188. /**
  189. * 是否处于动画暂停状态
  190. * @return {boolean} 是否处于动画暂停状态
  191. */
  192. isAnimatePaused(): any;
  193. /**
  194. * 执行动画
  195. * @param {ElementAttrs} toAttrs 动画最终状态
  196. * @param {number} duration 动画执行时间
  197. * @param {string} easing 动画缓动效果
  198. * @param {function} callback 动画执行后的回调
  199. * @param {number} delay 动画延迟时间
  200. */
  201. animate(toAttrs: ElementAttrs, duration: number, easing?: string, callback?: Function, delay?: number): any;
  202. /**
  203. * 执行动画
  204. * @param {OnFrame} onFrame 自定义帧动画函数
  205. * @param {number} duration 动画执行时间
  206. * @param {string} easing 动画缓动效果
  207. * @param {function} callback 动画执行后的回调
  208. * @param {number} delay 动画延迟时间
  209. */
  210. animate(onFrame: OnFrame, duration: number, easing?: string, callback?: Function, delay?: number): any;
  211. /**
  212. * 执行动画
  213. * @param {ElementAttrs} toAttrs 动画最终状态
  214. * @param {AnimateCfg} cfg 动画配置
  215. */
  216. animate(toAttrs: any, cfg: AnimateCfg): any;
  217. /**
  218. * 执行动画
  219. * @param {OnFrame} onFrame 自定义帧动画函数
  220. * @param {AnimateCfg} cfg 动画配置
  221. */
  222. animate(onFrame: any, cfg: AnimateCfg): any;
  223. /**
  224. * 停止图形的动画
  225. * @param {boolean} toEnd 是否到动画的最终状态
  226. */
  227. stopAnimate(toEnd?: boolean): any;
  228. /**
  229. * 暂停图形的动画
  230. */
  231. pauseAnimate(): any;
  232. /**
  233. * 恢复暂停的动画
  234. */
  235. resumeAnimate(): any;
  236. /**
  237. * 设置 clip ,会在内部转换成对应的图形
  238. * @param {ClipCfg} clipCfg 配置项
  239. */
  240. setClip(clipCfg: ClipCfg): any;
  241. /**
  242. * 获取 clip ,clip 对象是一个 Shape
  243. * @returns {IShape} clip 的 Shape
  244. */
  245. getClip(): IShape;
  246. /**
  247. * 指定的点是否被裁剪掉
  248. * @param {number} refX 相对于图形的坐标 x
  249. * @param {number} refY 相对于图形的坐标 Y
  250. * @return {boolean} 是否被裁剪
  251. */
  252. isClipped(refX: number, refY: number): boolean;
  253. /**
  254. * 触发委托事件
  255. * @param {string} type 事件类型
  256. * @param {GraphEvent} eventObj 事件对象
  257. */
  258. emitDelegation(type: string, eventObj: GraphEvent): void;
  259. /**
  260. * 移动元素
  261. * @param {number} translateX x 轴方向的移动距离
  262. * @param {number} translateY y 轴方向的移动距离
  263. * @return {IElement} 元素
  264. */
  265. translate(translateX: number, translateY?: number): IElement;
  266. /**
  267. * 移动元素到目标位置
  268. * @param {number} targetX 目标位置的 x 轴坐标
  269. * @param {number} targetY 目标位置的 y 轴坐标
  270. * @return {IElement} 元素
  271. */
  272. move(targetX: number, targetY: number): IElement;
  273. /**
  274. * 移动元素到目标位置,等价于 move 方法。由于 moveTo 的语义性更强,因此在文档中推荐使用 moveTo 方法
  275. * @param {number} targetX 目标位置的 x 轴坐标
  276. * @param {number} targetY 目标位置的 y 轴坐标
  277. * @return {IElement} 元素
  278. */
  279. moveTo(targetX: number, targetY: number): IElement;
  280. /**
  281. * 缩放元素
  282. * @param {number} ratio 各个方向的缩放比例
  283. * @return {IElement} 元素
  284. */
  285. scale(ratio: number): IElement;
  286. /**
  287. * 缩放元素
  288. * @param {number} ratioX x 方向的缩放比例
  289. * @param {number} ratioY y 方向的缩放比例
  290. * @return {IElement} 元素
  291. */
  292. scale(ratioX: number, ratioY: number): IElement;
  293. /**
  294. * 以画布左上角 (0, 0) 为中心旋转元素
  295. * @param {number} radian 旋转角度(弧度值)
  296. * @return {IElement} 元素
  297. */
  298. rotate(radian: number): IElement;
  299. /**
  300. * 以起始点为中心旋转元素
  301. * @param {number} radian 旋转角度(弧度值)
  302. * @return {IElement} 元素
  303. */
  304. rotateAtStart(rotate: number): IElement;
  305. /**
  306. * 以任意点 (x, y) 为中心旋转元素
  307. * @param {number} radian 旋转角度(弧度值)
  308. * @return {IElement} 元素
  309. */
  310. rotateAtPoint(x: number, y: number, rotate: number): IElement;
  311. }
  312. export interface IContainer extends IElement {
  313. /**
  314. * 添加图形
  315. * @param {ShapeCfg} cfg 图形配置项
  316. * @returns 添加的图形对象
  317. */
  318. addShape(cfg: ShapeCfg): IShape;
  319. /**
  320. * 添加图形
  321. * @param {string} type 图形类型
  322. * @param {ShapeCfg} cfg 图形配置项
  323. * @returns 添加的图形对象
  324. */
  325. addShape(type: string, cfg: ShapeCfg): IShape;
  326. /**
  327. * 容器是否是 Canvas 画布
  328. */
  329. isCanvas(): any;
  330. /**
  331. * 添加图形分组,增加一个默认的 Group
  332. * @returns 添加的图形分组
  333. */
  334. addGroup(): IGroup;
  335. /**
  336. * 添加图形分组,并设置配置项
  337. * @param {GroupCfg} cfg 图形分组的配置项
  338. * @returns 添加的图形分组
  339. */
  340. addGroup(cfg: GroupCfg): IGroup;
  341. /**
  342. * 添加图形分组,指定类型
  343. * @param {IGroup} classConstructor 图形分组的构造函数
  344. * @param {GroupCfg} cfg 图形分组配置项
  345. * @returns 添加的图形分组
  346. */
  347. addGroup(classConstructor: IGroup, cfg: GroupCfg): IGroup;
  348. /**
  349. * 根据 x,y 获取对应的图形
  350. * @param {number} x x 坐标
  351. * @param {number} y y 坐标
  352. * @param {Event} 浏览器事件对象
  353. * @returns 添加的图形分组
  354. */
  355. getShape(x: number, y: number, ev: Event): IShape;
  356. /**
  357. * 添加图形元素,已经在外面构造好的类
  358. * @param {IElement} element 图形元素(图形或者分组)
  359. */
  360. add(element: IElement): any;
  361. /**
  362. * 获取父元素
  363. * @return {IContainer} 父元素一般是 Group 或者是 Canvas
  364. */
  365. getParent(): IContainer;
  366. /**
  367. * 获取所有的子元素
  368. * @return {IElement[]} 子元素的集合
  369. */
  370. getChildren(): IElement[];
  371. /**
  372. * 子元素按照 zIndex 进行排序
  373. */
  374. sort(): any;
  375. /**
  376. * 清理所有的子元素
  377. */
  378. clear(): any;
  379. /**
  380. * 获取第一个子元素
  381. * @return {IElement} 第一个元素
  382. */
  383. getFirst(): IElement;
  384. /**
  385. * 获取最后一个子元素
  386. * @return {IElement} 元素
  387. */
  388. getLast(): IElement;
  389. /**
  390. * 根据索引获取子元素
  391. * @return {IElement} 第一个元素
  392. */
  393. getChildByIndex(index: number): IElement;
  394. /**
  395. * 子元素的数量
  396. * @return {number} 子元素数量
  397. */
  398. getCount(): number;
  399. /**
  400. * 是否包含对应元素
  401. * @param {IElement} element 元素
  402. * @return {boolean}
  403. */
  404. contain(element: IElement): boolean;
  405. /**
  406. * 移除对应子元素
  407. * @param {IElement} element 子元素
  408. * @param {boolean} destroy 是否销毁子元素,默认为 true
  409. */
  410. removeChild(element: IElement, destroy?: boolean): any;
  411. /**
  412. * 查找所有匹配的元素
  413. * @param {ElementFilterFn} fn 匹配函数
  414. * @return {IElement[]} 元素数组
  415. */
  416. findAll(fn: ElementFilterFn): IElement[];
  417. /**
  418. * 查找元素,找到第一个返回
  419. * @param {ElementFilterFn} fn 匹配函数
  420. * @return {IElement|null} 元素,可以为空
  421. */
  422. find(fn: ElementFilterFn): IElement;
  423. /**
  424. * 根据 ID 查找元素
  425. * @param {string} id 元素 id
  426. * @return {IElement | null} 元素
  427. */
  428. findById(id: string): IElement;
  429. /**
  430. * 该方法即将废弃,不建议使用
  431. * 根据 className 查找元素
  432. * TODO: 该方法暂时只给 G6 3.3 以后的版本使用,待 G6 中的 findByClassName 方法移除后,G 也需要同步移除
  433. * @param {string} className 元素 className
  434. * @return {IElement | null} 元素
  435. */
  436. findByClassName(className: string): IElement;
  437. /**
  438. * 根据 name 查找元素列表
  439. * @param {string} name 元素名称
  440. * @return {IElement[]} 元素
  441. * 是否是实体分组,即对应实际的渲染元素
  442. * @return {boolean} 是否是实体分组
  443. */
  444. findAllByName(name: string): IElement[];
  445. }
  446. export interface IGroup extends IElement, IContainer {
  447. /**
  448. * 是否是实体分组,即对应实际的渲染元素
  449. * @return {boolean} 是否是实体分组
  450. */
  451. isEntityGroup(): boolean;
  452. }
  453. export interface IShape extends IElement {
  454. /**
  455. * 图形拾取
  456. * @param {number} x x 坐标
  457. * @param {number} y y 坐标
  458. * @returns 是否已被拾取
  459. */
  460. isHit(x: number, y: number): boolean;
  461. /**
  462. * 是否用于 clip, 默认为 false
  463. * @return {boolean} 图形是否用于 clip
  464. */
  465. isClipShape(): boolean;
  466. }
  467. /**
  468. * @interface ICanvas
  469. * 画布,图形的容器
  470. */
  471. export interface ICanvas extends IContainer {
  472. /**
  473. * 获取当前的渲染引擎
  474. * @return {Renderer} 返回当前的渲染引擎
  475. */
  476. getRenderer(): Renderer;
  477. /**
  478. * 为了兼容持续向上查找 parent
  479. * @return {IContainer} 返回元素的父容器,在 canvas 中始终是 null
  480. */
  481. getParent(): IContainer;
  482. /**
  483. * 获取画布的 cursor 样式
  484. * @return {Cursor}
  485. */
  486. getCursor(): Cursor;
  487. /**
  488. * 设置画布的 cursor 样式
  489. * @param {Cursor} cursor cursor 样式
  490. */
  491. setCursor(cursor: Cursor): any;
  492. /**
  493. * 改变画布大小
  494. * @param {number} width 宽度
  495. * @param {number} height 高度
  496. */
  497. changeSize(width: number, height: number): any;
  498. /**
  499. * 根据事件对象获取画布坐标
  500. * @param {Event} ev 事件对象
  501. * @return {object} 画布坐标
  502. */
  503. getPointByEvent(ev: Event): Point;
  504. /**
  505. * 根据事件对象获取窗口坐标
  506. * @param {Event} ev 事件对象
  507. * @return {object} 窗口坐标
  508. */
  509. getClientByEvent(ev: Event): Point;
  510. /**
  511. * 将窗口坐标转变成画布坐标
  512. * @param {number} clientX 窗口 x 坐标
  513. * @param {number} clientY 窗口 y 坐标
  514. * @return {object} 画布坐标
  515. */
  516. getPointByClient(clientX: number, clientY: number): Point;
  517. /**
  518. * 将 canvas 坐标转换成窗口坐标
  519. * @param {number} x canvas 上的 x 坐标
  520. * @param {number} y canvas 上的 y 坐标
  521. * @returns {object} 窗口坐标
  522. */
  523. getClientByPoint(x: number, y: number): Point;
  524. /**
  525. * 绘制
  526. */
  527. draw(): any;
  528. }