+ SubVals structureImageSubVals = null;
+ structureImageSubVals = structureImageArgValue.getSubVals();
+ File structureImageFile = new File(structureImageFilename);
+ String width = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.WIDTH,
+ structureImageSubVals);
+ String height = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.HEIGHT,
+ structureImageSubVals);
+ String scale = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.SCALE,
+ structureImageSubVals);
+ String renderer = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.TEXTRENDERER,
+ structureImageSubVals);
+ String typeS = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.TYPE,
+ structureImageSubVals);
+ if (typeS == null || typeS.length() == 0)
+ {
+ typeS = FileUtils.getExtension(structureImageFile);
+ }
+ TYPE imageType;
+ try
+ {
+ imageType = Enum.valueOf(TYPE.class,
+ typeS.toUpperCase(Locale.ROOT));
+ } catch (IllegalArgumentException e)
+ {
+ addWarn("Do not know image format '" + typeS
+ + "', using PNG");
+ imageType = TYPE.PNG;
+ }
+ BitmapImageSizing userBis = ImageMaker
+ .parseScaleWidthHeightStrings(scale, width, height);
+
+ String imageColour = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.IMAGECOLOUR,
+ structureImageSubVals);
+ ColourSchemeI originalColourScheme = this
+ .getColourScheme(af);
+ this.colourAlignFrame(af, imageColour);
+
+ List<StructureCommandI> extraCommands = new ArrayList<>();
+ StructureCommandsI sc;
+ switch (viewerType)
+ {
+ case JMOL:
+ sc = new JmolCommands();
+ break;
+ default:
+ addWarn("Cannot export image for structure viewer "
+ + viewerType.name() + " yet");
+ continue;
+ }
+
+ String bgcolourstring = avm.getValueFromSubValOrArg(
+ structureImageArgValue, Arg.BGCOLOUR,
+ structureImageSubVals);
+ Color bgcolour = null;
+ if (bgcolourstring != null && bgcolourstring.length() > 0)
+ {
+ try
+ {
+ if (bgcolourstring.charAt(0) == '#')
+ {
+ bgcolour = Color.decode(bgcolourstring);
+ }
+ else
+ {
+ Field field = Color.class.getField(bgcolourstring);
+ bgcolour = (Color) field.get(null);
+ }
+ } catch (IllegalArgumentException | NoSuchFieldException
+ | SecurityException | IllegalAccessException nfe)
+ {
+ Console.warn(
+ "Background colour string '" + bgcolourstring
+ + "' not recognised -- using black.");
+ bgcolour = Color.black;
+ }
+ extraCommands.add(sc.setBackgroundColour(bgcolour));
+ }
+
+ // TODO MAKE THIS VIEWER INDEPENDENT!!
+ switch (viewerType)
+ {
+ case JMOL:
+ JalviewStructureDisplayI sview = structureViewer
+ .getJalviewStructureDisplay();
+ JmolCommands jc = (JmolCommands) sc;
+ if (sview instanceof AppJmol)
+ {
+ AppJmol jmol = (AppJmol) sview;
+ JalviewJmolBinding jmb = (JalviewJmolBinding) jmol
+ .getBinding();
+ String state = new StringBuilder()
+ .append("JalviewCommandsStructureState_")
+ .append(viewerType.name()).toString();
+ jmb.executeCommand(jc.saveState(state), false);
+ for (StructureCommandI scmd : extraCommands)
+ {
+ jmb.executeCommand(scmd, false);
+ }
+ try
+ {
+ boolean success = this.checksBeforeWritingToFile(avm,
+ subVals, false, structureImageFilename,
+ "structure image", isError);
+ if (!success)
+ {
+ continue;
+ }
+
+ Console.debug(
+ "Rendering image to " + structureImageFile);
+ jmol.makePDBImage(structureImageFile, imageType,
+ renderer, userBis);
+ Console.debug("Finished Rendering image to "
+ + structureImageFile);
+
+ } catch (ImageOutputException ioexc)
+ {
+ addError("Unexpected error whilst exporting image to "
+ + structureImageFile, ioexc);
+ isError = true;
+ continue;
+ } finally
+ {
+ jmb.executeCommand(jc.restoreState(state), false);
+ }
+
+ }
+ break;
+ default:
+ // this shouldn't happen!
+ addWarn("Cannot export image for structure viewer "
+ + viewerType.name() + " yet");
+ continue;
+ }
+ this.colourAlignFrame(af, originalColourScheme);