| author | blanchet | 
| Thu, 25 Jun 2015 12:41:43 +0200 | |
| changeset 60568 | a9b71c82647b | 
| parent 59462 | c7eff4356885 | 
| child 61176 | 9791f631c20d | 
| permissions | -rw-r--r-- | 
| 59441 | 1 | /* Title: Tools/Graphview/graph_file.scala | 
| 2 | Author: Makarius | |
| 3 | ||
| 4 | File system operations for graph output. | |
| 5 | */ | |
| 6 | ||
| 7 | package isabelle.graphview | |
| 8 | ||
| 9 | ||
| 10 | import isabelle._ | |
| 11 | ||
| 12 | import java.io.{File => JFile}
 | |
| 13 | import java.awt.{Color, Graphics2D}
 | |
| 14 | ||
| 15 | ||
| 16 | object Graph_File | |
| 17 | {
 | |
| 59459 | 18 | def write(file: JFile, graphview: Graphview) | 
| 59441 | 19 |   {
 | 
| 59459 | 20 | val box = graphview.bounding_box() | 
| 59441 | 21 | val w = box.width.ceil.toInt | 
| 22 | val h = box.height.ceil.toInt | |
| 23 | ||
| 24 | def paint(gfx: Graphics2D) | |
| 25 |     {
 | |
| 26 | gfx.setColor(Color.WHITE) | |
| 27 | gfx.fillRect(0, 0, w, h) | |
| 28 | gfx.translate(- box.x, - box.y) | |
| 59460 | 29 | graphview.paint(gfx) | 
| 59441 | 30 | } | 
| 31 | ||
| 32 | val name = file.getName | |
| 33 |     if (name.endsWith(".png")) Graphics_File.write_png(file, paint _, w, h)
 | |
| 34 |     else if (name.endsWith(".pdf")) Graphics_File.write_pdf(file, paint _, w, h)
 | |
| 35 |     else error("Bad type of file: " + quote(name) + " (.png or .pdf expected)")
 | |
| 36 | } | |
| 59443 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 37 | |
| 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 38 | def write(options: Options, file: JFile, graph: Graph_Display.Graph) | 
| 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 39 |   {
 | 
| 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 40 | val the_options = options | 
| 59462 | 41 | val graphview = | 
| 42 |       new Graphview(graph.transitive_reduction_acyclic) { def options = the_options }
 | |
| 59459 | 43 | graphview.update_layout() | 
| 59443 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 44 | |
| 59459 | 45 | write(file, graphview) | 
| 59443 
5b552b4f63a5
support for off-line graph output, without GUI thread;
 wenzelm parents: 
59441diff
changeset | 46 | } | 
| 59441 | 47 | } |