Comment filtrer dynamiquement les liens dans un réseau de noeuds de liaison dans protovis?

StackOverflow https://stackoverflow.com/questions/5342276

  •  27-10-2019
  •  | 
  •  

Question

Mon code est basé sur protovis exemple de code Layouts force dirigée . Je voudrais ajouter la possibilité de liens dynamiquement filtre avec un curseur en fonction de leur valeur. J'ai déjà un travail de curseur de base. Ce que je ne sais pas comment mettre à jour l'objet réseau afin que ne fait que rendre les seuls liens qui ont une plus grande valeur que la valeur du curseur. Est-ce que quelqu'un sait comment faire ça?

Le code pour créer le graphique est

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();

Je crée le curseur avec html5

<input type="range" min="0" max="20" value="2" step="1" onchange="setAndShowNewValue(this.value)" />
<span id="range">2</span>

Et définir la nouvelle valeur minimale avec

    function setAndShowNewValue(newValue)
    {
        document.getElementById("range").innerHTML=newValue;
        minLinkValue = newValue;
    }

Merci, Raul

Était-ce utile?

La solution

Ok, la réponse était dans un fil à Protovis google groupe

Alors, ce que je faisais est de créer la fonction suivante et l'appeler après la mise à jour de la valeur minimale autorisée pour un lien:

function filterLinks() { 
        force.links(grafica.links.filter(function(d) { return d.value > 
minLinkValue} )); 
        force.reset(); 
} 

Je fixe le code dans protovis comme suggéré dans le fil mentionné

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top