import * as d3 from "d3"; export const calculateNodePositions = (data, nodePositions) => { if (!data || !data.items) return { root: null, nodes: [], links: [] }; const root = d3.hierarchy(data, (d) => d.items); const treeLayout = d3.tree().size([4000 * Math.PI, 300]); // Угловое распределение (радиан, радиус) treeLayout(root); // Заполняем координаты const nodes = root.descendants(); const links = nodes .filter((d) => d.parent) .map((d) => ({ source: d.parent, target: d, })); // Преобразуем полярные координаты в декартовые nodes.forEach((node) => { const angle = node.x; // x теперь угол (радианы) const radius = node.y; // y теперь радиус nodePositions.set(node.data.id, { x: radius * Math.cos(angle), y: radius * Math.sin(angle), }); }); return { root, nodes, links }; };