How to customize the renders in prefuse. Problem in customize images in prefuse layout

Posted by user324926 on Stack Overflow See other posts from Stack Overflow or by user324926
Published on 2010-04-24T13:51:37Z Indexed on 2010/04/24 13:53 UTC
Read the original article Hit count: 446

Filed under:
|
|

HI all,

I have written a java application to show the images in different layouts. I am able to show it different layout correctly but some times the images are overlapped. Can you please help me, how to solve this problem.

My code is given below `import javax.swing.JFrame; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.util.; import java.io.; import java.awt.Font;

import prefuse.Constants; import prefuse.Display; import prefuse.Visualization; import prefuse.action.ActionList; import prefuse.action.RepaintAction; import prefuse.action.assignment.ColorAction; import prefuse.action.assignment.FontAction; import prefuse.action.assignment.DataColorAction; import prefuse.action.layout.graph.ForceDirectedLayout; import prefuse.action.layout.graph.; import prefuse.action.layout.; import prefuse.activity.Activity; import prefuse.controls.DragControl; import prefuse.controls.PanControl; import prefuse.controls.ZoomControl; import prefuse.data.Graph; import prefuse.data.io.DataIOException; import prefuse.data.io.GraphMLReader; import prefuse.render.DefaultRendererFactory; import prefuse.render.LabelRenderer; import prefuse.util.ColorLib; import prefuse.visual.VisualItem; import prefuse.visual.*; import prefuse.util.FontLib; import prefuse.action.assignment.DataSizeAction;

import prefuse.data.*; import prefuse.render.ImageFactory;

public class LayoutExample {

public static void main(String[] argv) throws Exception {

    Graph graph = null;
    try {

        graph = new GraphMLReader().readGraph("/graphs.xml");
    } catch ( DataIOException e ) {
        e.printStackTrace();
        System.err.println("Error loading graph. Exiting...");
        System.exit(1);
    }

ImageFactory imageFactory = new ImageFactory(100,100);

try
{
    //load images and construct imageFactory.
    String images[] = new String[3];
    images[0] = "data/images/switch.png";
    images[1] = "data/images/ip_network.png";
    images[2] = "data/images/router.png";

    String[] names = new String[] {"Switch","Network","Router"};
    BufferedImage img = null;

    for(int i=0; i < images.length ; i++)
    {
        try {
            img = ImageIO.read(new File(images[i]));
            imageFactory.addImage(names[i],img);
        }
        catch (IOException e){
        }
    }


}
catch(Exception exp)
{

}


    Visualization vis = new Visualization();
    vis.add("graph", graph);

LabelRenderer nodeRenderer = new LabelRenderer("name", "type");
    nodeRenderer.setVerticalAlignment(Constants.BOTTOM);
    nodeRenderer.setHorizontalPadding(0);
    nodeRenderer.setVerticalPadding(0);
    nodeRenderer.setImagePosition(Constants.TOP);
    nodeRenderer.setMaxImageDimensions(100,100); 

    DefaultRendererFactory drf = new DefaultRendererFactory();
    drf.setDefaultRenderer(nodeRenderer);
    vis.setRendererFactory(drf); 

    ColorAction nText = new ColorAction("graph.nodes", VisualItem.TEXTCOLOR);
    nText.setDefaultColor(ColorLib.gray(100));


    ColorAction nEdges = new ColorAction("graph.edges", VisualItem.STROKECOLOR);
    nEdges.setDefaultColor(ColorLib.gray(100));

    // bundle the color actions
    ActionList draw = new ActionList();

     //MAD - changing the size of the nodes dependent on the weight of the people
    final DataSizeAction dsa = new DataSizeAction("graph.nodes","size");        
    draw.add(dsa);

    draw.add(nText);
    draw.add(new FontAction("graph.nodes", FontLib.getFont("Tahoma",Font.BOLD, 12)));
    draw.add(nEdges);

    vis.putAction("draw", draw);



  ActionList layout = new ActionList(Activity.DEFAULT_STEP_TIME);


  BalloonTreeLayout balloonlayout = new BalloonTreeLayout("graph",50);
  layout.add(balloonlayout); 


    Display d = new Display(vis);

    vis.putAction("layout", layout);


// start up the animated layout
    vis.run("draw");
vis.run("layout");


    d.addControlListener(new DragControl());
    // pan with left-click drag on background
    d.addControlListener(new PanControl()); 
    // zoom with right-click drag
    d.addControlListener(new ZoomControl()); 

    // -- 6. launch the visualization -------------------------------------






    // create a new window to hold the visualization
    JFrame frame = new JFrame("prefuse example");
    // ensure application exits when window is closed
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(d);
    frame.pack();           // layout components in window
    frame.setVisible(true); // show the window

}

}

`

Can anyone please let me know how to customize the image sizes / renders insuch way that images won't overlapped.

Thanks R.Ravikumar

© Stack Overflow or respective owner

Related posts about prefuse

Related posts about java