Come filtrare i link in modo dinamico in una rete nodo-link in Protovis?
Domanda
Il mio codice è basato sul codice di esempio per Protovis Forza-Directed layout . Vorrei aggiungere la possibilità di dinamicamente i collegamenti di filtro con un cursore in base al loro valore. Ho già un lavoro di base di scorrimento. Quello che non so è come aggiornare l'oggetto di rete in modo che rende solo solo i collegamenti che hanno un maggior valore rispetto al valore sul cursore. Qualcuno sa come fare questo?
Il codice per creare il grafico è
var minLinkValue = 2;
var vis = new pv.Panel()
.width(w)
.height(h)
.fillStyle("white")
.event("mousedown", pv.Behavior.pan())
.event("mousewheel", pv.Behavior.zoom());
var force = vis.add(pv.Layout.Force);
force.nodes(grafica.nodes);
force.links(grafica.links.filter(function(d) { return d.value > minLinkValue} ));
force.link.add(pv.Line);
force.node.add(pv.Dot)
.fillStyle(function(d) { return color(d) })
.strokeStyle(function() { return this.fillStyle().darker() })
.lineWidth(1)
.title(function(d) { return d.nodeName })
.visible(function(d) { return d.linkDegree > 0 })
.event("mousedown", pv.Behavior.drag());
vis.render();
I creare il cursore con HTML5
<input type="range" min="0" max="20" value="2" step="1" onchange="setAndShowNewValue(this.value)" />
<span id="range">2</span>
E impostare il nuovo valore minimo con
function setAndShowNewValue(newValue)
{
document.getElementById("range").innerHTML=newValue;
minLinkValue = newValue;
}
Grazie, Raul
Soluzione
Ok, la risposta è stata in un thread a Protovis google gruppo
Quindi, quello che ho fatto è quello di creare la seguente funzione e chiamarlo dopo l'aggiornamento del valore minimo consentito per un collegamento:
function filterLinks() {
force.links(grafica.links.filter(function(d) { return d.value >
minLinkValue} ));
force.reset();
}
Poi fissato il codice nel Protovis come suggerito nel thread menzionata ??p>