biojs-vis-pdbviewer
Version:
A BioJS 2.0 component to view protein structures
220 lines (218 loc) • 9.76 kB
JavaScript
Clazz.declarePackage ("JSV.export");
Clazz.load (["JSV.export.FormExporter"], "JSV.export.SVGExporter", ["java.lang.Boolean", "$.Double", "java.util.Hashtable", "JU.CU", "$.DF", "$.Lst", "JSV.common.ColorParameters", "$.ExportType", "$.ScaleData", "$.ScriptToken", "JU.Logger"], function () {
c$ = Clazz.declareType (JSV["export"], "SVGExporter", JSV["export"].FormExporter);
Clazz.makeConstructor (c$,
function () {
Clazz.superConstructor (this, JSV["export"].SVGExporter, []);
});
Clazz.overrideMethod (c$, "exportTheSpectrum",
function (viewer, mode, out, spec, startIndex, endIndex, pd, asBase64) {
this.initForm (viewer, out);
var plotAreaColor;
var backgroundColor;
var plotColor;
var gridColor;
var titleColor;
var scaleColor;
var unitsColor;
if (pd == null) {
plotAreaColor = backgroundColor = plotColor = gridColor = titleColor = scaleColor = unitsColor = JSV.common.ColorParameters.BLACK;
} else {
plotAreaColor = pd.getColor (JSV.common.ScriptToken.PLOTAREACOLOR);
backgroundColor = pd.bgcolor;
plotColor = pd.getCurrentPlotColor (0);
gridColor = pd.getColor (JSV.common.ScriptToken.GRIDCOLOR);
titleColor = pd.getColor (JSV.common.ScriptToken.TITLECOLOR);
scaleColor = pd.getColor (JSV.common.ScriptToken.SCALECOLOR);
unitsColor = pd.getColor (JSV.common.ScriptToken.UNITSCOLOR);
}var xyCoords = spec.getXYCoords ();
var scaleData = new JSV.common.ScaleData (xyCoords, startIndex, endIndex, spec.isContinuous (), spec.isInverted ());
var maxXOnScale = scaleData.maxXOnScale;
var minXOnScale = scaleData.minXOnScale;
var maxYOnScale = scaleData.maxYOnScale;
var minYOnScale = scaleData.minYOnScale;
var xStep = scaleData.steps[0];
var yStep = scaleData.steps[1];
var plotAreaWidth = JSV["export"].SVGExporter.svgWidth - JSV["export"].SVGExporter.leftInset - JSV["export"].SVGExporter.rightInset;
var plotAreaHeight = JSV["export"].SVGExporter.svgHeight - JSV["export"].SVGExporter.topInset - JSV["export"].SVGExporter.bottomInset;
var xScaleFactor = (plotAreaWidth / (maxXOnScale - minXOnScale));
var yScaleFactor = (plotAreaHeight / (maxYOnScale - minYOnScale));
var leftPlotArea = JSV["export"].SVGExporter.leftInset;
var rightPlotArea = JSV["export"].SVGExporter.leftInset + plotAreaWidth;
var topPlotArea = JSV["export"].SVGExporter.topInset;
var bottomPlotArea = JSV["export"].SVGExporter.topInset + plotAreaHeight;
var titlePosition = bottomPlotArea + 60;
this.context.put ("titlePosition", new Integer (titlePosition));
var xPt;
var yPt;
var xStr;
var yStr;
var vertGridCoords = new JU.Lst ();
var horizGridCoords = new JU.Lst ();
for (var i = minXOnScale; i < maxXOnScale + xStep / 2; i += xStep) {
xPt = leftPlotArea + ((i - minXOnScale) * xScaleFactor);
yPt = topPlotArea;
xStr = JU.DF.formatDecimalTrimmed (xPt, 6);
yStr = JU.DF.formatDecimalTrimmed (yPt, 6);
var hash = new java.util.Hashtable ();
hash.put ("xVal", xStr);
hash.put ("yVal", yStr);
vertGridCoords.addLast (hash);
}
for (var i = minYOnScale; i < maxYOnScale + yStep / 2; i += yStep) {
xPt = leftPlotArea;
yPt = topPlotArea + ((i - minYOnScale) * yScaleFactor);
xStr = JU.DF.formatDecimalTrimmed (xPt, 6);
yStr = JU.DF.formatDecimalTrimmed (yPt, 6);
var hash = new java.util.Hashtable ();
hash.put ("xVal", xStr);
hash.put ("yVal", yStr);
horizGridCoords.addLast (hash);
}
var xScaleList = new JU.Lst ();
var xScaleListReversed = new JU.Lst ();
var yScaleList = new JU.Lst ();
var precisionX = scaleData.precision[0];
var precisionY = scaleData.precision[1];
for (var i = minXOnScale; i < (maxXOnScale + xStep / 2); i += xStep) {
xPt = leftPlotArea + ((i - minXOnScale) * xScaleFactor);
xPt -= 10;
yPt = bottomPlotArea + 15;
xStr = JU.DF.formatDecimalTrimmed (xPt, 6);
yStr = JU.DF.formatDecimalTrimmed (yPt, 6);
var iStr = JU.DF.formatDecimalDbl (i, precisionX);
var hash = new java.util.Hashtable ();
hash.put ("xVal", xStr);
hash.put ("yVal", yStr);
hash.put ("number", iStr);
xScaleList.addLast (hash);
}
for (var i = minXOnScale, j = maxXOnScale; i < (maxXOnScale + xStep / 2); i += xStep, j -= xStep) {
xPt = leftPlotArea + ((j - minXOnScale) * xScaleFactor);
xPt -= 10;
yPt = bottomPlotArea + 15;
xStr = JU.DF.formatDecimalTrimmed (xPt, 6);
yStr = JU.DF.formatDecimalTrimmed (yPt, 6);
var iStr = JU.DF.formatDecimalDbl (i, precisionX);
var hash = new java.util.Hashtable ();
hash.put ("xVal", xStr);
hash.put ("yVal", yStr);
hash.put ("number", iStr);
xScaleListReversed.addLast (hash);
}
for (var i = minYOnScale; (i < maxYOnScale + yStep / 2); i += yStep) {
xPt = leftPlotArea - 55;
yPt = bottomPlotArea - ((i - minYOnScale) * yScaleFactor);
yPt += 3;
xStr = JU.DF.formatDecimalTrimmed (xPt, 6);
yStr = JU.DF.formatDecimalTrimmed (yPt, 6);
var iStr = JU.DF.formatDecimalDbl (i, precisionY);
var hash = new java.util.Hashtable ();
hash.put ("xVal", xStr);
hash.put ("yVal", yStr);
hash.put ("number", iStr);
yScaleList.addLast (hash);
}
var firstTranslateX;
var firstTranslateY;
var secondTranslateX;
var secondTranslateY;
var scaleX;
var scaleY;
var increasing = spec.isXIncreasing ();
if (increasing) {
firstTranslateX = leftPlotArea;
firstTranslateY = bottomPlotArea;
scaleX = xScaleFactor;
scaleY = -yScaleFactor;
secondTranslateX = -1 * minXOnScale;
secondTranslateY = -1 * minYOnScale;
} else {
firstTranslateX = rightPlotArea;
firstTranslateY = bottomPlotArea;
scaleX = -xScaleFactor;
scaleY = -yScaleFactor;
secondTranslateX = -minXOnScale;
secondTranslateY = -minYOnScale;
}var yTickA = minYOnScale - (yStep / 2);
var yTickB = yStep / 5;
this.context.put ("plotAreaColor", JU.CU.toRGBHexString (plotAreaColor));
this.context.put ("backgroundColor", JU.CU.toRGBHexString (backgroundColor));
this.context.put ("plotColor", JU.CU.toRGBHexString (plotColor));
this.context.put ("gridColor", JU.CU.toRGBHexString (gridColor));
this.context.put ("titleColor", JU.CU.toRGBHexString (titleColor));
this.context.put ("scaleColor", JU.CU.toRGBHexString (scaleColor));
this.context.put ("unitsColor", JU.CU.toRGBHexString (unitsColor));
this.context.put ("svgHeight", new Integer (JSV["export"].SVGExporter.svgHeight));
this.context.put ("svgWidth", new Integer (JSV["export"].SVGExporter.svgWidth));
this.context.put ("leftPlotArea", new Integer (leftPlotArea));
this.context.put ("rightPlotArea", new Integer (rightPlotArea));
this.context.put ("topPlotArea", new Integer (topPlotArea));
this.context.put ("bottomPlotArea", new Integer (bottomPlotArea));
this.context.put ("plotAreaHeight", new Integer (plotAreaHeight));
this.context.put ("plotAreaWidth", new Integer (plotAreaWidth));
this.context.put ("minXOnScale", new Double (minXOnScale));
this.context.put ("maxXOnScale", new Double (maxXOnScale));
this.context.put ("minYOnScale", new Double (minYOnScale));
this.context.put ("maxYOnScale", new Double (maxYOnScale));
this.context.put ("yTickA", new Double (yTickA));
this.context.put ("yTickB", new Double (yTickB));
this.context.put ("xScaleFactor", new Double (xScaleFactor));
this.context.put ("yScaleFactor", new Double (yScaleFactor));
this.context.put ("increasing", new Boolean (increasing));
this.context.put ("verticalGridCoords", vertGridCoords);
this.context.put ("horizontalGridCoords", horizGridCoords);
var newXYCoords = new JU.Lst ();
for (var i = startIndex; i <= endIndex; i++) newXYCoords.addLast (xyCoords[i]);
var firstX;
var firstY;
var lastX;
firstX = xyCoords[startIndex].getXVal ();
firstY = xyCoords[startIndex].getYVal ();
lastX = xyCoords[endIndex].getXVal ();
this.context.put ("title", titleColor);
this.context.put ("xyCoords", newXYCoords);
this.context.put ("continuous", new Boolean (spec.isContinuous ()));
this.context.put ("firstTranslateX", new Double (firstTranslateX));
this.context.put ("firstTranslateY", new Double (firstTranslateY));
this.context.put ("scaleX", new Double (scaleX));
this.context.put ("scaleY", new Double (scaleY));
this.context.put ("secondTranslateX", new Double (secondTranslateX));
this.context.put ("secondTranslateY", new Double (secondTranslateY));
if (increasing) {
this.context.put ("xScaleList", xScaleList);
this.context.put ("xScaleListReversed", xScaleListReversed);
} else {
this.context.put ("xScaleList", xScaleListReversed);
this.context.put ("xScaleListReversed", xScaleList);
}this.context.put ("yScaleList", yScaleList);
this.context.put ("xUnits", spec.getXUnits ());
this.context.put ("yUnits", spec.getYUnits ());
this.context.put ("firstX", Double.$valueOf (firstX));
this.context.put ("firstY", Double.$valueOf (firstY));
this.context.put ("lastX", Double.$valueOf (lastX));
var xUnitLabelX = rightPlotArea - 50;
var xUnitLabelY = bottomPlotArea + 30;
var yUnitLabelX = leftPlotArea - 80;
var yUnitLabelY = Clazz.doubleToInt (bottomPlotArea / 2);
var tempX = yUnitLabelX;
yUnitLabelX = -yUnitLabelY;
yUnitLabelY = tempX;
this.context.put ("xUnitLabelX", "" + xUnitLabelX);
this.context.put ("xUnitLabelY", "" + xUnitLabelY);
this.context.put ("yUnitLabelX", "" + yUnitLabelX);
this.context.put ("yUnitLabelY", "" + yUnitLabelY);
this.context.put ("numDecimalPlacesX", new Integer (Math.abs (scaleData.exportPrecision[0])));
this.context.put ("numDecimalPlacesY", new Integer (Math.abs (scaleData.exportPrecision[1])));
var vm = (mode === JSV.common.ExportType.SVGI ? "plot_ink.vm" : "plot.vm");
JU.Logger.info ("SVGExporter using " + vm);
return this.writeForm (vm);
}, "JSV.common.JSViewer,JSV.common.ExportType,JU.OC,JSV.common.Spectrum,~N,~N,JSV.common.PanelData,~B");
Clazz.defineStatics (c$,
"svgWidth", 850,
"svgHeight", 400,
"leftInset", 100,
"rightInset", 200,
"bottomInset", 80,
"topInset", 20);
});