Basically I have to plot a 3D undirected graph from the list of vertices.At present I can plot a undirected graph in 2D and I have used the following code for this.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JApplet;
import javax.swing.JFrame;
import org.jgraph.JGraph;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.GraphConstants;
import org.jgrapht.ListenableGraph;
import org.jgrapht.ext.JGraphModelAdapter;
import org.jgrapht.graph.ListenableDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
public class JGraphAdapterDemo extends JApplet {
private static final Color DEFAULT_BG_COLOR = Color.decode( "#FAFBFF" );
private static final Dimension DEFAULT_SIZE = new Dimension( 530, 320 );
//
private JGraphModelAdapter m_jgAdapter;
/**
* @see java.applet.Applet#init().
*/
public void init( ) {
// create a JGraphT graph
ListenableGraph g = new ListenableDirectedGraph( DefaultEdge.class );
// create a visualization using JGraph, via an adapter
m_jgAdapter = new JGraphModelAdapter( g );
JGraph jgraph = new JGraph( m_jgAdapter );
adjustDisplaySettings( jgraph );
getContentPane( ).add( jgraph );
resize( DEFAULT_SIZE );
// add some sample data (graph manipulated via JGraphT)
g.addVertex( "v1" );
g.addVertex( "v2" );
g.addVertex( "v3" );
g.addVertex( "v4" );
g.addEdge( "v1", "v2" );
g.addEdge( "v2", "v3" );
g.addEdge( "v3", "v1" );
g.addEdge( "v4", "v3" );
// position vertices nicely within JGraph component
positionVertexAt( "v1", 50, 50 );
positionVertexAt( "v2", 120, 120 );
positionVertexAt( "v3", 200,200 );
positionVertexAt( "v4", 20, 20 );
// that's all there is to it!...
}
private void adjustDisplaySettings( JGraph jg ) {
jg.setPreferredSize( DEFAULT_SIZE );
Color c = DEFAULT_BG_COLOR;
String colorStr = null;
try {
colorStr = getParameter( "bgcolor" );
}
catch( Exception e ) {}
if( colorStr != null ) {
c = Color.decode( colorStr );
}
jg.setBackground( c );
}
private void positionVertexAt( Object vertex, int x, int y ) {
DefaultGraphCell cell = m_jgAdapter.getVertexCell( vertex );
Map attr = cell.getAttributes( );
Rectangle2D b = GraphConstants.getBounds(attr);
GraphConstants.setBounds( attr, new Rectangle( x, y, b.OUT_BOTTOM, b.OUT_TOP ) );
Map cellAttr = new HashMap( );
cellAttr.put( cell, attr );
m_jgAdapter.edit( cellAttr, null, null, null);
}
}
Now what I want to know is that Can we extend this code and plot the undirected graph in 3D using JGraphT library.Is there anything else that will be more useful to me in fulfulling my task other than this.