Я изменяю библиотеку с открытым исходным кодом, angular-d3-tree
Мне трудно получить ссылки на мои узлы в моем дереве D3. Вот как выглядит мое дерево:

Я хочу, чтобы мои ссылки начинались в центре задней части прямоугольников, а не в верхнем левом углу прямоугольника. Я думаю, что это управляется из этого метода, определенного в angular-d3-tree:
// Creates a curved (diagonal) path from parent to the child nodes
diagonalCurvedPath(s, d) {
console.log('diagonalCurvedPath() called s and d are:');
console.log(s);
console.log(d);
const path = `M ${s.y} ${s.x}
C ${(s.y + d.y) / 2} ${s.x},
${(s.y + d.y) / 2} ${d.x},
${d.y} ${d.x}`
return path
}
diagonalCurvedPath
используется в этой процедуре:
setLinks( source: any, treeData: any){
let links = treeData.descendants().slice(1);
var link = this.svg.selectAll('path.link')
.data(links, function(d) { return d.id; });
// Enter any new links at the parent's previous position.
var linkEnter = link.enter().insert('path', "g")
.attr("class", "link")
.attr('d', (d)=>{
var o = {x: source.x0, y: source.y0}
return this.diagonalCurvedPath(o, o)
});
var linkUpdate = linkEnter.merge(link);
linkUpdate.transition()
.duration(this.duration)
.attr('d', (d)=>{return this.diagonalCurvedPath(d, d.parent)});
var linkExit = link.exit().transition()
.duration(this.duration)
.attr('d', (d) => {
var o = {x: source.x, y: source.y}
return this.diagonalCurvedPath(o, o)
})
.remove();
}
Я пытался внести изменения в diagonalCurvedPath
с катастрофическими результатами. Я не понимаю, что ...
const path = `M ${s.y} ${s.x}
C ${(s.y + d.y) / 2} ${s.x},
${(s.y + d.y) / 2} ${d.x},
${d.y} ${d.x}`
... значит. Что такое M
и что за хрень C
? Пожалуйста, помогите, так как я просто хватаюсь за соломинку и никуда не денусь :(