Prefuse: Beispiel mit beschrifteten Kanten gesucht?

Status
Nicht offen für weitere Antworten.

peterfarge

Bekanntes Mitglied
Hallo Forum,

da ich weiß das sich einige hier im Forum befinden die sich mit Prefuse auskennen stelle ich mal die Frage:
Wie kann man das Beispiel AggregateDemo aus dem Prefuse Demo Ordner so umstricken das ich die Kanten mit Zahlen beschriften kann?


Viele Grüße

Peter
 

peterfarge

Bekanntes Mitglied
Hallo AlAreal,

könntest Du mir etwas konkreter helfen?
Ich soll also DecoratorItems für die Kanten anlegen. Also ein Feld für jede Kante wo der anzuzeigende String gespeichert wird. Richtig? So wie ich den Thread gelesen habe muß ich mir da selber eine Datenstruktur ausdenken.

Dann brauche ich einen Renderer der mir die Kanten anzeigt. Ich müßte also eine Methode mit diesem Sourcecode überschreiben (ausdem Thread):
Code:
import java.awt.geom.AffineTransform;

AffineTransform oldTransform = g.getTransform();  
g.setTransform(m_arrowTrans);  
float x = float)(start.getX()-end.getX())/2+10; 
float y = (float) -((end.getY()-start.getY())/2)+10; 
g.rotate(HALF_PI - Math.atan2(end.getY()-start.getY(), end.getX()-start.getX())); 
g.drawString(item.getAttribute("label"), x, y);  
g.setTransform(oldTransform);
Welche Methode muß ich überschreiben?
Wenn g der Graph ist, dann gibt es bei mir keine Methode getTransform() wie in der ersten Zeile.



Viele Grüße

Peter

PS: Ich habe das letzte mal vor 3 Jahren in meiner Ausbildung Java programmiert. Grundsätzliches ist mir klar, aber selbständig implementiert habe ich noch nichts. Also die Antworten etwas einfacher gestalten;-)
 

AlArenal

Top Contributor
Ich kann dir mit einem Blick auf das Codeschnipsel sagen, dass g kein Graph ist, sondern ein Graphics2D Objekt und das müsste dann eigentlich aus der #render(Graphics2D, VisualItem) vom Renderer kommen, denn da du ja was an der Darstellung der Kanten modifizieren willst, musst du sinnigerweise den defaultmäßig benutzten EdgeRenderer erweitern - es sei denn das von dir adaptierte Beispiel benutzt nen anderen Renderer für die Kanten. Da bin ich gerade zu faul zum nachschauen ;)
 

AlArenal

Top Contributor
P.S.:

peterfarge hat gesagt.:
PS: Ich habe das letzte mal vor 3 Jahren in meiner Ausbildung Java programmiert. Grundsätzliches ist mir klar, aber selbständig implementiert habe ich noch nichts. Also die Antworten etwas einfacher gestalten;-)

Ach, das ist doch bestimmt so wie Radfahren.. ;)
 

peterfarge

Bekanntes Mitglied
Dies ist der von mir abgeänderte Konstruktor von AggregateDemo.java. Welches ist der EdgeRenderer?
Code:
    public ShowCluster() {
        // initialize display and data
        super(new Visualization());
        initDataGroups();
        
        Renderer nodeR = new LabelRenderer("name");
        // This isn't enough, because the default color is fully transparent,
        // so the Labels would be drawn but still don't visible. Next, 
        // add a ColorAction which assigns a color to the Labels: 
        ColorAction nText = new ColorAction(NODES, VisualItem.TEXTCOLOR); 
        nText.setDefaultColor(ColorLib.gray(0)); 
        nText.add("_hover", ColorLib.gray(255)); 
        
        // set up the renderers
        // draw the nodes as basic shapes
        // Renderer nodeR = new ShapeRenderer(20);
        // draw aggregates as polygons with curved edges
        Renderer polyR = new PolygonRenderer(Constants.POLY_TYPE_CURVE);
        ((PolygonRenderer)polyR).setCurveSlack(0.15f);
        
        DefaultRendererFactory drf = new DefaultRendererFactory();
        drf.setDefaultRenderer(nodeR);
        drf.add("ingroup('aggregates')", polyR);
        m_vis.setRendererFactory(drf);
        
        // set up the visual operators
        // first set up all the color actions
        ColorAction nStroke = new ColorAction(NODES, VisualItem.STROKECOLOR);
        nStroke.setDefaultColor(ColorLib.gray(100));
        nStroke.add("_hover", ColorLib.gray(50));
        
        ColorAction nFill = new ColorAction(NODES, VisualItem.FILLCOLOR);
        nFill.setDefaultColor(ColorLib.gray(255));
        nFill.add("_hover", ColorLib.gray(200));
        
        ColorAction nEdges = new ColorAction(EDGES, VisualItem.STROKECOLOR);
        nEdges.setDefaultColor(ColorLib.gray(100));
        
        ColorAction aStroke = new ColorAction(AGGR, VisualItem.STROKECOLOR);
        aStroke.setDefaultColor(ColorLib.gray(200));
        aStroke.add("_hover", ColorLib.rgb(255,100,100));
        
        int[] palette = new int[] {
            ColorLib.rgba(255,200,200,150),
            ColorLib.rgba(200,255,200,150),
            ColorLib.rgba(200,200,255,150),
            ColorLib.rgba(200,200,200,150),
            ColorLib.rgba(255,100,100,150),
            ColorLib.rgba(100,255,100,150),
            ColorLib.rgba(100,100,255,150),
            ColorLib.rgba(100,100,100,150)
        };
        ColorAction aFill = new DataColorAction(AGGR, "id", Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
        
        // bundle the color actions
        ActionList colors = new ActionList();
        colors.add(nStroke);
        colors.add(nFill);
        colors.add(nEdges);
        colors.add(aStroke);
        colors.add(aFill);
        colors.add(nText);
        
        // now create the main layout routine
        ActionList layout = new ActionList(Activity.INFINITY);
        layout.add(colors);
        layout.add(new ForceDirectedLayout(GRAPH, true));
        layout.add(new AggregateLayout(AGGR));
        layout.add(new RepaintAction());
        m_vis.putAction("layout", layout);
        
        // set up the display
        setSize(500,500);
        pan(250, 250);
        setHighQuality(true);
        addControlListener(new AggregateDragControl());
        addControlListener(new ZoomControl());
        addControlListener(new PanControl());
        
        // set things running
        m_vis.run("layout");
    }


Was meint die Notation "#render(Graphics2D, VisualItem)"? Eine Funktionssignatur?
 

AlArenal

Top Contributor
Ich habe gerade auch nochmal nachgeschaut, aber es will nicht so recht. Teils ist der Code der Leute im Forum auch nicht komplett. Frag die doch einfach mal, dafür ist das Help-Forum ja da.
 

peterfarge

Bekanntes Mitglied
Hallo AlArenal,

habe ich bereits getan: "Well, plz do the coding yourself"
Könntest Du mir Deinen Code geben das ich ihn mir ansehen kann?


Viele Grüße

Peter
 

AlArenal

Top Contributor
peterfarge hat gesagt.:
Könntest Du mir Deinen Code geben das ich ihn mir ansehen kann?

Der funktionierte ja nicht. Mein Verständnisproblem war, dass ich nicht nachvollziehen konnte, von wo (Koordinate) nach wo ein Edge verläuft, so dass ich den Text passend positionieren kann. Ich habs dann auch irgendwann aufgegeben, weil bei mir projekttechnisch gerade der Baum brennt und mir ein wenig die Zeit fehlt.

Die Codeschnipsel ausm Forum sahen zwar ok aus, aber gerade der, der wohl am vielversprechendsten war benutzte zwei Point-Instanzen, von denen ich keinen Plan habe, wo die herkommen sollen.
 
P

peterfarge_X

Gast
Vielen Dank für die Mühe. :)
Vielleicht kriege ich es auch alleine hin. Das Ergebnis werde ich hier dann posten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B prefuse AWT, Swing, JavaFX & SWT 8
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
J Swing MVC-Beispiel unklar(ListSelectionListener und ListDataListener) AWT, Swing, JavaFX & SWT 2
S Beispiel für Kollisionserkennung gesucht AWT, Swing, JavaFX & SWT 24
S Bitte um ein Beispiel von JXTreeTable AWT, Swing, JavaFX & SWT 12
J AWT Einmal FileDialog-Beispiel für Dumme bitte AWT, Swing, JavaFX & SWT 6
H Tutorial bzw. Beispiel eines "GUI Ablaufs" AWT, Swing, JavaFX & SWT 8
Spin Window Event Beispiel AWT, Swing, JavaFX & SWT 6
C Mehrer Fragen zu großem kompletten Swing Beispiel AWT, Swing, JavaFX & SWT 5
A Ein Beispiel für Microba AWT, Swing, JavaFX & SWT 3
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
P GridBagLayout einfaches Beispiel geht nicht? AWT, Swing, JavaFX & SWT 5
G Text rotieren: Frage zu einem Beispiel AWT, Swing, JavaFX & SWT 5
V Frage zu JScrollPane mit Custom Headern, mit Beispiel AWT, Swing, JavaFX & SWT 2
M treetable einfaches beispiel gesucht AWT, Swing, JavaFX & SWT 6
M [SOLVED]MVC Beispiel von dbac AWT, Swing, JavaFX & SWT 2
S Fragen zu einem Beispiel(Swings und AWT) AWT, Swing, JavaFX & SWT 33
R Falsches Beispiel im Buch? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben