From: elee <gk...@us...> - 2007-11-13 00:25:49
|
Update of /cvsroot/gmod/apollo/src/java/apollo/gui/genomemap In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv3166/src/java/apollo/gui/genomemap Modified Files: DiscreteGraphView.java Log Message: + Added graph support to configuration files + Improved speed of graph rendering over a very large area (still slow, though) Index: DiscreteGraphView.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/gui/genomemap/DiscreteGraphView.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** DiscreteGraphView.java 29 Oct 2007 08:11:04 -0000 1.2 --- DiscreteGraphView.java 13 Nov 2007 00:25:45 -0000 1.3 *************** *** 8,11 **** --- 8,14 ---- import apollo.gui.Transformer; + import java.util.Map; + import java.util.TreeMap; + /** This is a view for a discrete graph * *************** *** 15,120 **** public class DiscreteGraphView extends GraphView { ! //instance variables ! private Transformer scaler; ! ! /** Construct a new DiscreteGraphView object ! * ! * @param ap - ApolloPanel to display graph on ! * @param name - name of graph ! * @param plotColour - color for the graph (axis will be that color, peaks will be darker) ! * @param scaler - Transformer for the display's scale to be used for centering peaks at tick marks ! */ ! public DiscreteGraphView(JComponent ap, String name, Color plotColour, Transformer scaler) ! { ! super(ap, name); ! this.plotColour = plotColour; ! this.scaler = scaler; ! } ! ! /** Paints the graph ! * ! */ ! public void paintView() ! { ! graphics.setColor(getBackgroundColour()); ! // Clear the whole view ! if (!transparent) { ! graphics.fillRect(getBounds().x, getBounds().y, getBounds().width, getBounds().height); ! } ! else { ! graphics.drawRect(getBounds().x, getBounds().y, getBounds().width, getBounds().height); ! } ! // if paint happens mid load with no curation set or calculator ! if (calculator == null) { ! return; ! } ! //no data to display ! if (calculator.getXRange()[0] == 1 && calculator.getXRange()[1] == 1) { ! return; ! } ! // Modified from jalview drawScale ! graphics.setColor(getForegroundColour()); ! // Get the visible limits. ! int [] visRange = getVisibleRange(); ! int startCoord = (int)visRange[0]; ! int endCoord = (int)visRange[1]; ! int [] yrange = calculator.getYRange(); ! ! Point start; ! Point end; ! start = transformer.toPixel(new Point((int)visRange[0],(int)yrange[0])); ! end = transformer.toPixel(new Point((int)visRange[1],(int)yrange[0])); ! graphics.drawLine(start.x,start.y,end.x,end.y); ! start = transformer.toPixel(new Point((int)visRange[0],(int)yrange[1])); ! end = transformer.toPixel(new Point((int)visRange[1],(int)yrange[1])); ! graphics.drawLine(start.x,start.y,end.x,end.y); ! graphics.setColor(plotColour); ! Point splitterStart = transformer.toPixel(visRange[0], 0); ! Point splitterEnd = transformer.toPixel(visRange[1], 0); ! graphics.drawLine(splitterStart.x, splitterStart.y, splitterEnd.x, splitterEnd.y); ! graphics.setColor(plotColour.darker().darker()); ! ! //if (transformer.getXPixelsPerCoord() > 0.001) { ! if (startCoord < 1) { ! startCoord = 1; ! } ! if (endCoord < 1) { ! endCoord = 1; ! } ! if (endCoord > (int)calculator.getXRange()[1]) { ! endCoord = (int)calculator.getXRange()[1]; ! } ! if (startCoord > (int)calculator.getXRange()[1]) { ! startCoord = (int)calculator.getXRange()[1]; ! } ! int []positions = new int[endCoord - startCoord + 1]; ! for (int i = startCoord, j = 0; i <= endCoord; ++i, ++j) { ! positions[j] = i; ! } ! ! double []scores = calculator.getScoresForPositions(positions); ! for (int i = 0; i < positions.length; ++i) { ! if (scores[i] != 0) { ! Point posStart = transformer.toPixel(positions[i], 0); ! Point posEnd = transformer.toPixel(positions[i], (int)scores[i]); ! int scaleX = scaler.toPixel(positions[i], 0).x - (int)(scaler.getXPixelsPerCoord() * 0.5); ! posStart.x = scaleX; ! posEnd.x = scaleX; ! graphics.drawLine(posStart.x, posStart.y, posEnd.x, posEnd.y); ! } ! } - //} - } - } --- 18,132 ---- public class DiscreteGraphView extends GraphView { ! //instance variables ! private Transformer scaler; ! /** Construct a new DiscreteGraphView object ! * ! * @param ap - ApolloPanel to display graph on ! * @param name - name of graph ! * @param plotColour - color for the graph (axis will be that color, peaks will be darker) ! * @param scaler - Transformer for the display's scale to be used for centering peaks at tick marks ! */ ! public DiscreteGraphView(JComponent ap, String name, Color plotColour, ! Transformer scaler) { ! super(ap, name); ! this.plotColour = plotColour; ! this.scaler = scaler; ! } ! /** Paints the graph ! * ! */ ! public void paintView() { ! graphics.setColor(getBackgroundColour()); ! // Clear the whole view ! if (!transparent) { ! graphics.fillRect(getBounds().x, getBounds().y, getBounds().width, ! getBounds().height); ! } else { ! graphics.drawRect(getBounds().x, getBounds().y, getBounds().width, ! getBounds().height); ! } ! // if paint happens mid load with no curation set or calculator ! if (calculator == null) { ! return; ! } ! //no data to display ! if (calculator.getXRange()[0] == 1 && calculator.getXRange()[1] == 1) { ! return; ! } ! // Modified from jalview drawScale ! graphics.setColor(getForegroundColour()); ! // Get the visible limits. ! int[] visRange = getVisibleRange(); ! int startCoord = (int) visRange[0]; ! int endCoord = (int) visRange[1]; ! int[] yrange = calculator.getYRange(); ! Point start; ! Point end; ! start = transformer.toPixel(new Point((int) visRange[0], (int) yrange[0])); ! end = transformer.toPixel(new Point((int) visRange[1], (int) yrange[0])); ! graphics.drawLine(start.x, start.y, end.x, end.y); ! start = transformer.toPixel(new Point((int) visRange[0], (int) yrange[1])); ! end = transformer.toPixel(new Point((int) visRange[1], (int) yrange[1])); ! graphics.drawLine(start.x, start.y, end.x, end.y); ! ! graphics.setColor(plotColour); ! ! Point splitterStart = transformer.toPixel(visRange[0], 0); ! Point splitterEnd = transformer.toPixel(visRange[1], 0); ! graphics.drawLine(splitterStart.x, splitterStart.y, splitterEnd.x, ! splitterEnd.y); ! ! graphics.setColor(plotColour.darker().darker()); ! ! if (startCoord < 1) { ! startCoord = 1; ! } ! if (endCoord < 1) { ! endCoord = 1; ! } ! if (endCoord > (int) calculator.getXRange()[1]) { ! endCoord = (int) calculator.getXRange()[1]; ! } ! if (startCoord > (int) calculator.getXRange()[1]) { ! startCoord = (int) calculator.getXRange()[1]; ! } ! ! java.util.List<Integer> posList = new java.util.LinkedList<Integer>(); ! int prev = Integer.MIN_VALUE; ! for (int i = startCoord; i <= endCoord; ++i) { ! int x = transformer.toPixelX(i); ! if (x != prev && calculator.getScoreForPosition(i) != 0) { ! prev = x; ! posList.add(i); ! } ! } ! int[] positions = new int[posList.size()]; ! for (int i = 0; i < posList.size(); ++i) { ! positions[i] = posList.get(i); ! } ! ! double[] scores = calculator.getScoresForPositions(positions); ! for (int i = 0; i < positions.length; ++i) { ! if (scores[i] != 0) { ! Point posStart = transformer.toPixel(positions[i], 0); ! Point posEnd = transformer.toPixel(positions[i], (int) scores[i]); ! int scaleX = scaler.toPixel(positions[i], 0).x ! - (int) (scaler.getXPixelsPerCoord() * 0.5); ! posStart.x = scaleX; ! posEnd.x = scaleX; ! graphics.drawLine(posStart.x, posStart.y, posEnd.x, posEnd.y); ! } ! } ! } } |