1
14 package demo.io;
15
16 import java.awt.Color;
17 import java.awt.Font;
18 import java.awt.Graphics2D;
19 import java.awt.Rectangle;
20 import java.awt.font.TextLayout;
21 import java.awt.geom.Point2D;
22 import java.awt.geom.Rectangle2D;
23 import java.io.File;
24 import java.io.IOException;
25
26 import y.base.Edge;
27 import y.base.Node;
28 import y.base.NodeList;
29 import y.io.JPGIOHandler;
30 import y.io.TiledImageOutputHandler;
31 import y.view.Drawable;
32 import y.view.Graph2D;
33 import y.view.Graph2DView;
34 import y.view.hierarchy.HierarchyManager;
35
36
45 public class TiledImageDemo
46 {
47
48 public TiledImageDemo(String imageFileBase)
49 {
50 Graph2D diagram = new Graph2D();
51
52 generateDiagram(diagram);
53
54
55 JPGIOHandler jpgIO = new JPGIOHandler();
57 Graph2DView view = jpgIO.createDefaultGraph2DView(diagram);
58
59 Point2D vp = view.getViewPoint2D();
61 view.setSize(view.getWidth(), (int)(view.getHeight()+50));
62 view.setViewPoint2D(vp.getX(), vp.getY()-50/view.getZoom());
63 Rectangle rect = view.getVisibleRect();
64 TitleDrawable td = new TitleDrawable(imageFileBase);
65 td.setFrame(rect.x,rect.y,rect.width,50/view.getZoom());
66 view.addDrawable(td);
67
68 diagram.setCurrentView(view);
69
70 TiledImageOutputHandler tiledIO = new TiledImageOutputHandler(jpgIO);
71 tiledIO.setMaximumTileSize(500,500);
72 tiledIO.setHTMLTableGenerationActive(true);
73
74 try
75 {
76 File file = new File(imageFileBase + ".html");
77 System.out.println("Writing HTML table for tiled images: " + file.getCanonicalPath());
78 tiledIO.write(diagram, imageFileBase + ".jpg");
79 }
80 catch(IOException ioex)
81 {
82 ioex.printStackTrace();
83 }
84
85 }
86
87
90 static class TitleDrawable extends Rectangle implements Drawable {
91 String title;
92 TitleDrawable(String title) {
93 this.title = title;
94 }
95 public void paint(Graphics2D g)
96 {
97 g.setColor(Color.lightGray);
98 g.fillRect(x,y,width,height);
99 g.setColor(Color.black);
100 Font f = new Font("Dialog", Font.PLAIN, (int)(0.8*height));
101 TextLayout tl = new TextLayout(title,f, g.getFontRenderContext());
102 Rectangle2D rect = tl.getBounds();
103 tl.draw(g, (float)(x+(width-rect.getWidth())/2.0), (float)(y-rect.getY()+(height-rect.getHeight())/2.0));
104 }
105 };
106
107
111 void generateDiagram(Graph2D graph)
112 {
113 HierarchyManager hm = new HierarchyManager(graph);
114
115 NodeList queue = new NodeList();
116 queue.add(graph.createNode(0,0, 100, 30, "Root"));
117 for(int i = 0; i < 100; i++)
118 {
119 Node root = queue.popNode();
120 Node c1 = graph.createNode(0,0, 80, 30, "c1_" + graph.N());
121 Edge e1 = graph.createEdge(root, c1);
122 Node c2 = graph.createNode(0,0, 60, 30, "c2_" + graph.N());
123 Edge e2 = graph.createEdge(root, c2);
124 queue.add(c2);
125 queue.add(c1);
126 }
127
128 y.layout.tree.TreeLayouter tLayouter = new y.layout.tree.TreeLayouter();
130 tLayouter.doLayout(graph);
131
132 }
133
134 public static void main(String[] args)
135 {
136 TiledImageDemo demo = new TiledImageDemo("TiledImageDemo");
137 }
138
139 }
140
141
142
143
144