2011-01-04 5 views
6

Ich habe meine Hausaufgaben und suchte sowohl google für eine Probe und ein Thema, das zuvor auf stackoverflow beantwortet wird. Aber es wurde nichts gefunden.müssen vorfugen Graph Kanten wie Pfeile

Mein Problem ist gewöhnliche Kanten, die keine Ansicht wie Pfeile haben. Hier

ist, was ich tue es zu hoffen ist vorwärts Pfeile von Ziel zu Ziel:

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


Hier ist, was ich über die Farbe von Kanten zu sehen, in der Hoffnung diese nicht transparent sein muß:

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

Also frage ich mich, wo ich falsch liege? Warum meine Kanten nicht wie Pfeile aussehen?

Danke für jede Idee.

Weitere Einzelheiten möchte ich den gesamten Code einzufügen:

 
/* 
* 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

hallo, ist meine Frage hier beantwortet: https://sourceforge.net/projects/prefuse/forums/forum/343013/topic/4035245/index/page/1 Ich habe auch einen Lauf gefunden Beispiel in der folgenden Seite, aber es ist ein bisschen kompliziert kompliziert für einen grundlegenden Graph Sucher: http://goosebumps4all.net/34all/bb/showthread.php?tid=17 wenn ich eine Zeile Code geben muss, Die Schlüsselzeilen sind hier:

... graph = new GraphMLReader().readGraph("socialnet.xml"); ... Table n = graph.getNodeTable(); Table e = graph.getEdgeTable(); Graph g_new = new Graph(n, e, true); 
Vielen Dank im Voraus für die Aufmerksamkeit. – merve

Antwort

2

ich durch Ihre Kommentare nicht sicher bin, wenn du mit dem in den prefuse Foren gegebenen Antwort zufrieden sind. Daher habe ich mit dem Code gespielt und konnte mit den folgenden Änderungen das gewünschte Verhalten erzielen.

Ich habe die Eingabe-XML geändert, so dass der Edgedefault des Diagrammelements gerichtet ist.

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

Dann im Code spielte ich mit verschiedenen EdgeRenderer edgetypes und arrowtypes nur um sicher zu machen, dass ich ein und aus Pfeile drehen könnte, oder erhalten sie vorwärts oder rückwärts angezeigt werden soll. Ich habe auch gekrümmte Linien versucht. Zum Beispiel:

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

Wieder haben Sie möglicherweise bereits eine Antwort in den anderen Foren erhalten.

0

Ich stolperte über die gleiche Frage. Für zukünftige Benutzer der prefuse Bibliothek, die begonnen werden immer: Wenn Sie Sie die Pfeile auf dem RadialGraphView Beispiel hinzufügen wollen, müssen Sie die Änderungen durch ditkin und fügen Sie die Zeile erwähnt machen:

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

und weiter unten:

Grundsätzlich ist die Antwort im Sourceforge-Thread, aber ich wollte hier eine Lösung bieten. Der Code von merve enthält diese Anweisungen.