Bạn đã yêu cầu "cách tốt nhất để điều chỉnh bản vẽ mũi tên đúng cách". Tôi không thể khẳng định cách tiếp cận sau đây là cách "tốt nhất" và tôi mong chờ các câu trả lời khác, nhưng đây là một phương pháp để giải quyết vấn đề này.
http://jsfiddle.net/Y9Qq3/2/
Các cập nhật liên quan được ghi chú bên dưới.
...
var w = 960,
h = 500
markerWidth = 6,
markerHeight = 6,
cRadius = 30, // play with the cRadius value
refX = cRadius + (markerWidth * 2),
refY = -Math.sqrt(cRadius),
drSub = cRadius + refY;
...
svg.append("svg:defs").selectAll("marker")
.data(["suit", "licensing", "resolved"])
.enter().append("svg:marker")
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", refX)
.attr("refY", refY)
.attr("markerWidth", markerWidth)
.attr("markerHeight", markerHeight)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5");
...
function tick() {
path.attr("d", function (d) {
var dx = d.target.x - d.source.x,
dy = (d.target.y - d.source.y),
dr = Math.sqrt(dx * dx + dy * dy);
return "M" + d.source.x + "," + d.source.y + "A" + (dr - drSub) + "," + (dr - drSub) + " 0 0,1 " + d.target.x + "," + d.target.y;
});
...
Giải pháp hoạt động tốt với các nút bán kính giống nhau. Điều gì về bán kính năng động đến từ json? Làm thế nào để nối thêm bán kính để tính toán bù điểm đánh dấu? – Saad
là '(" svg: marker ")' có gì đó trong D3? Tôi muốn sử dụng mũi tên trên một trong các kịch bản của tôi –