私は円の周りに等間隔で配置しているドットの束を持っています。私は、cx
とcy
の属性を初期位置に設定してから、各ドットを繰り返して、transform(rotate)
を与えて、その位置に移動します。d3 v4:回転した要素の位置を見つける方法は?
var dot = dotPlaces.append("circle")
.attr("cx", dotOriginX)
.attr("cy", dotOriginY)
.attr("r", 20/2)
.attr("opacity", 1)
.attr("id", function(d) { return d.name; })
.attr('fill', function(d) {
return color(d.type);
})
.attr("transform", function(d,i) {
return "rotate("+ (i * (360/actualData.length)) +"," + originX + "," + originY + ")";
})
.attr("stroke", "white");
コードの後半でこれらの点に線を描きたいときに問題が発生します。 cx
/cy
アトリビュートかそのバウンディングボックスを取得したかどうかは、常に元の変換前の位置を参照します。私は彼らのポストトランスポジション位置が必要です。どうやらd3 v3にはtransform
コールがありましたが、v4ではこれがなくなりました。私はローテーションを使用しているので、簡単な変換ではありません。これはxとyのオフセットをいくつか追加するだけのことではありません。
これは私が参考のために、今使っているものです:
var x = svg2.select("#"+key).node().getAttribute("cx");
var y = svg2.select("#"+key).node().getAttribute("cy");
//alternatively node().getBBox(); which also fails to give post-transform position.
あなたは回転に起因xとyのシフトを計算するために三角関数を使用することはできますか? – anbnyc
@anbnycええ、おそらく、私は代わりにそれを行う組み込みの方法を期待していた。 – IronWaffleMan
変換マトリックスにアクセスすることができます。 d3.transformの1つの推奨代替方法:https://stackoverflow.com/questions/38224875/replacing-d3-transform-in-d3-v4 – anbnyc