У меня проблема с тем, что D3 выполняет правильную чистку при выполнении масштабирования.Масштабирование и чистка в градиенте силы d3
У меня есть jsFiddle, созданный здесь http://jsfiddle.net/Gwp25/2/, показывающий сеть с некоторыми фиктивными данными, которые я нашел в другом месте. Следующее действие - это. Увеличьте (используя колесико мыши), затем включите чистку. После этого очистите узлы. Выбранные узлы отключены - некоторые из области кисти. Вот соответствующая часть кода, касающаяся выбора узлов в пределах кисти.
.on("brush", function() {
var extent = d3.event.target.extent();
console.log(extent);
d3.selectAll(".node").select("circle").classed("selected", function(d) {
return d.selected = (extent[0][0] <= x_scale(d.x) && x_scale(d.x) < extent[1][0]
&& extent[0][1] <= d3.tran(d.y) && y_scale(d.y) < extent[1][1]);
});
})
У кого-нибудь есть идея исправить это. Я знаю, что это связано с узлами и их исходной позицией и x, но я не совсем уверен, как получить узлы x и y относительно их увеличенного местоположения.
Любые идеи?
Несмотря на то что вы учитываете масштаб, когда вы рисуете свою кисть, ваша верхняя левая координата вашего выбора мыши (для кисти) больше не совпадает с верхней левой координатой вашего холста, которая была увеличено изображение. Вы также не учитываете масштаб в переводе, поэтому, когда вы увеличиваете его масштаб, это происходит медленно. – Elijah
Вы имеете в виду для узла? Я просто изменил это на node.attr («transform», function (d) { return "translate (" + d.x + "," + d.y + ") шкала (" + scale_val + ")"; }); но это вообще не помогает. Я решил решить эту проблему с помощью панорамирования, это немного раздражает так медленно, и я думал, что проблема связана с масштабом, поскольку она сбрасывается, когда я использую слайдер, который я реализовал, чтобы помочь в масштабировании. Любая идея о том, как получить скорректированное значение для верхнего левого в D3? – Eamonn
http://jsfiddle.net/Gwp25/4/ - это с добавленной шкалой. – Eamonn