我正在尝试在SVG中绘制一条连接两个圆的线。这些圆 - 连同底层矩形一起封装在SVG组元素()中。这些组使用transform="translate(x,y)"属性定位。
我的问题是,组内元素的坐标相对于它们所在组的原点(0,0坐标)定位。为了放置重叠的线条,我需要知道绝对坐标。
以下是使用D3 JavaScript库的代码:
我知道为什么线条没有出现。我也知道每个SVG元素都与一个变换矩阵相关联。我不确定如何访问圆形元素的矩阵,以及如何获得它们的绝对坐标(cx/cy属性)。另一种可能性是获取圆的绝对距离。
这里有一个包含上述代码的jsfiddle。
我的问题是,组内元素的坐标相对于它们所在组的原点(0,0坐标)定位。为了放置重叠的线条,我需要知道绝对坐标。
以下是使用D3 JavaScript库的代码:
var body = d3.select("body");
var svg = body.append("svg");
var group1 = svg.append("g")
.attr("transform", "translate(50,50)");
var rect1 = group1.append("svg:rect")
.attr("x", 0)
.attr("y", 0)
.attr("width", 100)
.attr("height", 100)
.style("fill", 'lightblue');
var circ1 = group1.append("svg:circle")
.attr("cx", 50)
.attr("cy", 50)
.attr("r", 10)
.style("fill", 'red')
var group2 = svg.append("g")
.attr("transform", "translate(350,50)");
var rect2 = group2.append("svg:rect")
.attr("x", 0)
.attr("y", 0)
.attr("width", 100)
.attr("height", 100)
.style("fill", 'lightgreen');
var circ2 = group2.append("svg:circle")
.attr("cx", 50)
.attr("cy", 50)
.attr("r", 10)
.style("fill", 'red');
var line = svg.append("svg:line")
.attr("x1", parseInt(circ1.attr("cx")))
.attr("y1", parseInt(circ1.attr("cy")))
.attr("x2", parseInt(circ2.attr("cx")))
.attr("y2", parseInt(circ2.attr("cy")))
.attr("stroke", "black");
我知道为什么线条没有出现。我也知道每个SVG元素都与一个变换矩阵相关联。我不确定如何访问圆形元素的矩阵,以及如何获得它们的绝对坐标(cx/cy属性)。另一种可能性是获取圆的绝对距离。
这里有一个包含上述代码的jsfiddle。