private void calcViewPort(ViewPort viewPort) throws NoninvertibleTransformException { viewPortList = new ViewPort[numCols * numRows]; /* * if(viewPort.getImageWidth() < width && viewPort.getImageHeight() < * height){ viewPortList[0] = viewPort; return; } */ int vpCnt = 0; double imgPxX = viewPort.getImageWidth(); double dWcX = viewPort.getAdjustedExtent().getWidth(); double tileWcW = (getTile(vpCnt).getSize().getWidth() * dWcX) / imgPxX; double imgPxY = viewPort.getImageHeight(); double dWcY = viewPort.getAdjustedExtent().getHeight(); double tileWcH = (getTile(vpCnt).getSize().getHeight() * dWcY) / imgPxY; viewPortList[0] = viewPort.cloneViewPort(); viewPortList[0].setImageSize(getTile(vpCnt).getSize()); viewPortList[0].setExtent( new Rectangle2D.Double( viewPort.getAdjustedExtent().getMinX(), viewPort.getAdjustedExtent().getMaxY() - tileWcH, tileWcW, tileWcH)); viewPortList[0].setAffineTransform(mat); double wt = tileWcW; double ht = tileWcH; double xt = viewPort.getAdjustedExtent().getMinX(); double yt = viewPort.getAdjustedExtent().getMaxY() - tileWcH; for (int stepY = 0; stepY < numRows; stepY++) { wt = tileWcW; xt = viewPort.getAdjustedExtent().getMinX(); for (int stepX = 0; stepX < numCols; stepX++) { vpCnt = stepY * numCols + stepX; if (vpCnt > 0) { if (stepX > 0) xt += wt; if ((xt + wt) > viewPort.getAdjustedExtent().getMaxX()) wt = Math.abs(viewPort.getAdjustedExtent().getMaxX() - xt); viewPortList[vpCnt] = viewPort.cloneViewPort(); viewPortList[vpCnt].setImageSize(getTile(vpCnt).getSize()); viewPortList[vpCnt].setExtent(new Rectangle2D.Double(xt, yt, wt, ht)); viewPortList[vpCnt].setAffineTransform(mat); } // System.out.println("ViewPort: "+vpCnt+" "+viewPortList[vpCnt].getAdjustedExtent()+" // "+getTile(vpCnt).getSize()); } if ((yt - ht) < viewPort.getAdjustedExtent().getMinY()) { ht = Math.abs(yt - viewPort.getAdjustedExtent().getMinY()); yt = viewPort.getAdjustedExtent().getMinY(); } else yt -= ht; } }