import type { DisplayObject } from '@antv/g'; /** * 获取图形的所有子元素 * * Get all the child elements of the shape * @param shape - 图形元素 | shape * @returns 子元素数组 | child elements array */ export function getDescendantShapes(shape: T) { const succeeds: DisplayObject[] = []; // 遍历所有子元素,并将子元素的子元素加入到数组中 const traverse = (shape: DisplayObject) => { if (shape?.children.length) { (shape.children as DisplayObject[]).forEach((child) => { succeeds.push(child); traverse(child); }); } }; traverse(shape); return succeeds; } /** * 获取图形的所有祖先元素 * * Get all the ancestor elements of the shape * @param shape - 图形元素 | shape * @returns 祖先元素数组 | ancestor elements array */ export function getAncestorShapes(shape: T) { const ancestors: DisplayObject[] = []; let currentNode = shape.parentNode as DisplayObject; while (currentNode) { ancestors.push(currentNode); currentNode = currentNode.parentNode as DisplayObject; } return ancestors; }