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