X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=1758b5bb105dbdd29aa2b2f3384a6bf82682529b;hb=bf478b2e1087fb03bf6b9fb07f14a9e4f096892c;hp=6f483d9f03862bf2c13c4827e6acf9cf52d50198;hpb=a1984b1c8c273ed33c7ce9283039f4027dcae2de;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 6f483d9..1758b5b 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -20,15 +20,16 @@ */ package jalview.gui; -import java.util.Locale; - import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.io.File; import java.util.List; +import java.util.Locale; import java.util.Map; import javax.swing.JPanel; @@ -38,20 +39,22 @@ import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; import jalview.api.AlignmentViewPanel; -import jalview.bin.Cache; +import jalview.bin.Console; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.datamodel.StructureViewerModel; import jalview.datamodel.StructureViewerModel.StructureData; -import jalview.fts.service.alphafold.AlphafoldRestClient; import jalview.gui.ImageExporter.ImageWriterI; import jalview.gui.StructureViewer.ViewerType; +import jalview.io.exceptions.ImageOutputException; import jalview.structure.StructureCommand; import jalview.structures.models.AAStructureBindingModel; import jalview.util.BrowserLauncher; import jalview.util.ImageMaker; +import jalview.util.ImageMaker.TYPE; import jalview.util.MessageManager; import jalview.util.Platform; +import jalview.util.imagemaker.BitmapImageSizing; public class AppJmol extends StructureViewerBase { @@ -184,8 +187,7 @@ public class AppJmol extends StructureViewerBase } private void openNewJmol(AlignmentPanel ap, boolean alignAdded, - PDBEntry[] pdbentrys, - SequenceI[][] seqs) + PDBEntry[] pdbentrys, SequenceI[][] seqs) { setProgressIndicator(ap.alignFrame); jmb = new AppJmolBinding(this, ap.getStructureSelectionManager(), @@ -234,7 +236,6 @@ public class AppJmol extends StructureViewerBase openNewJmol(ap, alignAdded, pe, seqs); } - void initJmol(String command) { jmb.setFinishedInit(false); @@ -309,10 +310,10 @@ public class AppJmol extends StructureViewerBase } catch (OutOfMemoryError oomerror) { new OOMWarning("When trying to open the Jmol viewer!", oomerror); - Cache.debug("File locations are " + filesString); + Console.debug("File locations are " + filesString); } catch (Exception ex) { - Cache.error("Couldn't open Jmol viewer!", ex); + Console.error("Couldn't open Jmol viewer!", ex); ex.printStackTrace(); return; } @@ -333,11 +334,11 @@ public class AppJmol extends StructureViewerBase { new OOMWarning("When trying to add structures to the Jmol viewer!", oomerror); - Cache.debug("File locations are " + filesString); + Console.debug("File locations are " + filesString); return; } catch (Exception ex) { - Cache.error("Couldn't add files to Jmol viewer!", ex); + Console.error("Couldn't add files to Jmol viewer!", ex); ex.printStackTrace(); return; } @@ -353,7 +354,7 @@ public class AppJmol extends StructureViewerBase { try { - Cache.debug("Waiting around for jmb notify."); + Console.debug("Waiting around for jmb notify."); waitTotal += waitFor; // Thread.sleep() throws an exception in JS @@ -426,20 +427,56 @@ public class AppJmol extends StructureViewerBase @Override public void makePDBImage(ImageMaker.TYPE type) { + try { + makePDBImage(null, type, null, + BitmapImageSizing.nullBitmapImageSizing()); + } catch (ImageOutputException ioex) { + Console.error("Unexpected error whilst writing "+type.toString(),ioex); + } + } + + public void makePDBImage(File file, ImageMaker.TYPE type, String renderer, + BitmapImageSizing userBis) throws ImageOutputException + { int width = getWidth(); int height = getHeight(); + + BitmapImageSizing bis = ImageMaker.getScaleWidthHeight(width, height, + userBis); + float usescale = bis.scale; + int usewidth = bis.width; + int useheight = bis.height; + ImageWriterI writer = new ImageWriterI() { @Override public void exportImage(Graphics g) throws Exception { - jmb.jmolViewer.renderScreenImage(g, width, height); + Graphics2D ig2 = (Graphics2D) g; + ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + if (type == TYPE.PNG && usescale > 0.0f) + { + // for a scaled image, this scales down a bigger image to give the + // right resolution + if (usescale > 0.0f) + { + ig2.scale(1 / usescale, 1 / usescale); + } + } + + jmb.jmolViewer.antialiased = true; + jmb.jmolViewer.requestRepaintAndWait("image export"); + jmb.jmolViewer.renderScreenImage(ig2, usewidth, useheight); } }; - String view = MessageManager.getString("action.view").toLowerCase(Locale.ROOT); + String view = MessageManager.getString("action.view") + .toLowerCase(Locale.ROOT); ImageExporter exporter = new ImageExporter(writer, getProgressIndicator(), type, getTitle()); - exporter.doExport(null, this, width, height, view); + + exporter.doExport(file, this, width, height, view, renderer, userBis); + } @Override @@ -448,7 +485,7 @@ public class AppJmol extends StructureViewerBase try { BrowserLauncher // BH 2018 - .openURL("http://wiki.jmol.org");//http://jmol.sourceforge.net/docs/JmolUserGuide/"); + .openURL("http://wiki.jmol.org");// http://jmol.sourceforge.net/docs/JmolUserGuide/"); } catch (Exception ex) { System.err.println("Show Jmol help failed with: " + ex.getMessage()); @@ -523,7 +560,8 @@ public class AppJmol extends StructureViewerBase } } } - else if (jmb == null || jmb.jmolViewer == null || !jmb.isFinishedInit()) + else if (jmb == null || jmb.jmolViewer == null + || !jmb.isFinishedInit()) { g.setColor(Color.black); g.fillRect(0, 0, currentSize.width, currentSize.height);