File size: 1,095 Bytes
b704fe2 c911b05 b704fe2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import * as d3 from 'd3';
import { linkSegmentThroughNodeRects } from './genAttributeDagLinkSegment';
type TextFlowNodeLike = {
x: number;
y: number;
nodeW: number;
nodeH: number;
};
/** text-flow 模式:节点使用测量层坐标,边按节点矩形几何连接。 */
export function paintTextFlowLayout<LinkDatum, NodeDatum extends TextFlowNodeLike>(params: {
linkSel: d3.Selection<SVGGElement, LinkDatum, SVGGElement, unknown>;
nodeSel: d3.Selection<SVGGElement, NodeDatum, SVGGElement, unknown>;
linkEndInsetPx: number;
getLinkNodes: (link: LinkDatum) => { src: NodeDatum; tgt: NodeDatum };
}): void {
const { linkSel, nodeSel, linkEndInsetPx, getLinkNodes } = params;
linkSel.each(function(d) {
const { src, tgt } = getLinkNodes(d);
const seg = linkSegmentThroughNodeRects(src, tgt, linkEndInsetPx);
d3.select(this)
.selectAll('path.gen-attr-dag-link-visible')
.attr('d', `M ${seg.x1} ${seg.y1} L ${seg.x2} ${seg.y2}`);
});
nodeSel.attr('transform', (d) => `translate(${d.x},${d.y})`);
}
|