2011-01-04 14 views
6

Ho fatto i compiti e ho cercato sia su google per un campione che su un argomento a cui è stata data una risposta prima su stackoverflow. Ma nulla è stato trovato.hanno bisogno di prefondere i bordi del grafico come le frecce

Il mio problema sono i bordi ordinari che non hanno una vista come le frecce.

Ecco quello che faccio alla speranza c'è in avanti frecce da bersaglio a destinazione:

 
LabelRenderer nameLabel = new LabelRenderer("name"); 
     nameLabel.setRoundedCorner(8, 8); 
     DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel); 
     EdgeRenderer edgeRenderer; 
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD); 
     rendererFactory.setDefaultEdgeRenderer(edgeRenderer); 
     vis.setRendererFactory(rendererFactory); 


Qui è quello che vedo sul colore dei bordi, sperando queste non devono essere trasparenti:

 
int[] palette = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)}; 

     DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette); 

     ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0)); 


     ColorAction edges = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200)); 
     ColorAction arrow = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 

     ActionList colour = new ActionList(); 
     colour.add(fill); 
     colour.add(text); 
     colour.add(edges); 
     colour.add(arrow); 
     vis.putAction("colour", colour); 

Quindi, mi chiedo dove sbaglio? Perché i miei bordi non sembrano frecce?

Grazie per qualsiasi idea.

Per ulteriori dettagli, voglio incollare tutto il codice:

 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package prefusedeneme; 

import javax.swing.JFrame; 

import prefuse.data.*; 
import prefuse.data.io.*; 
import prefuse.Display; 
import prefuse.Visualization; 
import prefuse.render.*; 
import prefuse.util.*; 
import prefuse.action.assignment.*; 
import prefuse.Constants; 
import prefuse.visual.*; 
import prefuse.action.*; 
import prefuse.activity.*; 
import prefuse.action.layout.graph.*; 
import prefuse.controls.*; 
import prefuse.data.expression.Predicate; 
import prefuse.data.expression.parser.ExpressionParser; 

public class SocialNetworkVis { 

    public static void main(String argv[]) { 

     // 1. Load the data 

     Graph graph = null; 
     /* graph will contain the core data */ 
     try { 
      graph = new GraphMLReader().readGraph("socialnet.xml"); 

     /* load the data from an XML file */ 
     } catch (DataIOException e) { 
      e.printStackTrace(); 
      System.err.println("Error loading graph. Exiting..."); 
      System.exit(1); 
     } 

     // 2. prepare the visualization 

     Visualization vis = new Visualization(); 
     /* vis is the main object that will run the visualization */ 
     vis.add("socialnet", graph); 
     /* add our data to the visualization */ 

     // 3. setup the renderers and the render factory 

     // labels for name 
     LabelRenderer nameLabel = new LabelRenderer("name"); 
     nameLabel.setRoundedCorner(8, 8); 
     /* nameLabel decribes how to draw the data elements labeled as "name" */ 

     // create the render factory 
     DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel); 
     EdgeRenderer edgeRenderer; 
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD); 
     rendererFactory.setDefaultEdgeRenderer(edgeRenderer); 
     vis.setRendererFactory(rendererFactory); 


     // 4. process the actions 

     // colour palette for nominal data type 
     int[] palette = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)}; 
     /* ColorLib.rgb converts the colour values to integers */ 


     // map data to colours in the palette 
     DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette); 
     /* fill describes what colour to draw the graph based on a portion of the data */ 

     // node text 
     ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0)); 
     /* text describes what colour to draw the text */ 

     // edge 
     ColorAction edges = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200)); 
     ColorAction arrow = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 
     /* edge describes what colour to draw the edges */ 

     // combine the colour assignments into an action list 
     ActionList colour = new ActionList(); 
     colour.add(fill); 
     colour.add(text); 
     colour.add(edges); 
     colour.add(arrow); 
     vis.putAction("colour", colour); 
     /* add the colour actions to the visualization */ 

     // create a separate action list for the layout 
     ActionList layout = new ActionList(Activity.INFINITY); 
     layout.add(new ForceDirectedLayout("socialnet")); 
     /* use a force-directed graph layout with default parameters */ 

     layout.add(new RepaintAction()); 
     /* repaint after each movement of the graph nodes */ 

     vis.putAction("layout", layout); 
     /* add the laout actions to the visualization */ 

     // 5. add interactive controls for visualization 

     Display display = new Display(vis); 
     display.setSize(700, 700); 
     display.pan(350, 350); // pan to the middle 
     display.addControlListener(new DragControl()); 
     /* allow items to be dragged around */ 

     display.addControlListener(new PanControl()); 
     /* allow the display to be panned (moved left/right, up/down) (left-drag)*/ 

     display.addControlListener(new ZoomControl()); 
     /* allow the display to be zoomed (right-drag) */ 

     // 6. launch the visualizer in a JFrame 

     JFrame frame = new JFrame("prefuse tutorial: socialnet"); 
     /* frame is the main window */ 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.add(display); 
     /* add the display (which holds the visualization) to the window */ 

     frame.pack(); 
     frame.setVisible(true); 

     /* start the visualization working */ 
     vis.run("colour"); 
     vis.run("layout"); 

    } 
} 


+0

hi, la mia domanda di soluzione qui: https://sourceforge.net/projects/prefuse/forums/forum/343013/topic/4035245/index/page/1 anche io ho trovato un running esempio nella pagina seguente, ma è un po 'complicato complicato per un ricercatore grafico di base: http://goosebumps4all.net/34all/bb/showthread.php?tid=17 se devo dare qualche riga di codice, le linee principali sono qui:

... graph = new GraphMLReader().readGraph("socialnet.xml"); ... Table n = graph.getNodeTable(); Table e = graph.getEdgeTable(); Graph g_new = new Graph(n, e, true); 
Grazie in anticipo per l'attenzione. – merve

risposta

2

Non sono sicuro dai vostri commenti se siete soddisfatti della risposta data nei forum Prefuse. Pertanto, ho giocato con il codice e con le seguenti modifiche è stato in grado di ottenere il comportamento desiderato.

Ho modificato l'input xml in modo che l'edgedefault dell'elemento grafico sia diretto.

... <graph edgedefault="directed"> ... 

Poi nel codice che ho giocato con diversi edgetypes EdgeRenderer e arrowtypes solo per assicurarsi che ho potuto accendere e spegnere le frecce, o farli visualizzare in avanti o indietro. Ho anche provato linee curve. Ad esempio:

edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_CURVE, prefuse.Constants.EDGE_ARROW_FORWARD); 

Anche in questo caso è possibile che abbiate già ottenuto una risposta negli altri forum.

0

Mi sono imbattuto nella stessa domanda. Per il futuro utente della biblioteca Prefuse che stanno per iniziare: Se si desidera aggiungere le frecce per l'esempio RadialGraphView, è necessario apportare le modifiche di cui parla ditkin e aggiungere la riga:

ColorAction arrowColor = new ColorAction("tree.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 

e più sotto:

// create the filtering and layout: 
[...] 
filter.add(arrowColor); // add this one 

Fondamentalmente, la risposta è nel thread sourceforge, ma volevo fornire una soluzione qui. Il codice di Merve contiene queste istruzioni.

Problemi correlati