2015-09-14 4 views
0

Вот My fiddled3.geom.voronoi() не возвращает enaugh многоугольников

У меня есть исходный массив точек (объекты), которые я рисую на моей карте, а затем я хочу, чтобы создать Вороную накладку для событий мыши ,

Форма моих точечных объектов: (Fiddle линия: 4-12)

point { 
    id: 'id', 
    x: xCoordinate, 
    y: yCoordinate 
} 

И мой Вороной код: (Fiddle линия: 95-112)

var voronoi = d3.geom.voronoi() 
    .x(function(d) {return x(d.x); }) 
    .y(function(d) {return y(d.y); }) 
    .clipExtent([[0,0],[w,h]]); 

//Create the Voronoi grid 
graph.selectAll("path") 
    .data(voronoi(points)) 
    .enter().append("path") 
    .attr("d",function(d){return "M" + d.join("L") + "Z";}) 
    .datum(function(d, i) { return d.point; }) 
    .attr("class", function(d,i) { return "voronoi " + d.id; }) 
    .style("stroke", "#000") 
    .style("fill", "#2074A0") 
    .style("opacity", ".3") 
    .style("pointer-events", "all") 
    .on("mouseover", function(d){document.getElementById('legend').innerHTML = d.id}) 
    .on("mouseout", function(d){document.getElementById('legend').innerHTML = ''}); 

Проблема заключается в том, что var voronoi = d3.geom.voronoi()... возвращается numberOfPoints-4 полигонов. Первые четыре многоугольника отсутствуют независимо от количества точек. Если количество точек равно 4 или меньше, полигоны не возвращаются.

Это ошибка или есть ошибка в коде?

ответ

0

Обнаружена проблема. Захват заключался в выборе всех путей с помощью graph.selectAll("path") вместо простых путей, добавленных после data(voronoi(points))

Я добавил атрибут класса к добавленным путям и затем выделил все пути только этого класса.

Here is the corrected fiddle.

Смежные вопросы