@Override protected void paintComponent(Graphics g) { g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); final String text = getText(); final int len = text.length(); int x; if (centerText) { x = (getWidth() - widthOfW * len) / 2 + 1; } else { x = 5; } int y = (getHeight() - fontHeight) / 2 + fontAscent; Graphics2D g2d = (Graphics2D) g; Object oldHints = null; if (desktopAAHints != null) { oldHints = g2d.getRenderingHints(); g2d.addRenderingHints(desktopAAHints); } g.setColor(getForeground()); g2d.drawString(text, x, y); // Restore rendering hints appropriately. if (desktopAAHints != null) { g2d.addRenderingHints((Map) oldHints); } // separator g.setColor(Color.GRAY); g.drawLine(0, 0, 0, getHeight()); }
protected void paintComponent(Graphics g) { // Set up rendering hints to look as close to native as possible Graphics2D g2d = (Graphics2D) g; Object old = null; // First, try to use the rendering hint set that is "native". Map hints = (Map) getToolkit().getDesktopProperty("awt.font.desktophints"); if (hints != null) { old = g2d.getRenderingHints(); g2d.addRenderingHints(hints); } // If a "native" set isn't found, just turn on standard text AA. else { old = g2d.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING); g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } // if (jsc!=null) { // setText(null); // Stop "Foobar" from being painted // } // We never paint "selection" around the icon, to imitate Eclipse final int iconW = 18; int h = getHeight(); if (!selected) { g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), h); } else { g.setColor(altBG != null && evenRow ? altBG : list.getBackground()); g.fillRect(0, 0, iconW, h); g.setColor(getBackground()); // Selection color g.fillRect(iconW, 0, getWidth() - iconW, h); } if (getIcon() != null) { int y = (h - getIcon().getIconHeight()) / 2; getIcon().paintIcon(this, g, 0, y); } int x = getX() + iconW + 2; g.setColor(selected ? list.getSelectionForeground() : list.getForeground()); if (jsc != null && !simpleText) { jsc.rendererText(g, x, g.getFontMetrics().getHeight(), selected); } else { Completion c = jsc != null ? (Completion) jsc : nonJavaCompletion; if (c != null) { g.drawString(c.toString(), x, g.getFontMetrics().getHeight()); } } // Restore rendering hints appropriately. if (hints != null) { g2d.addRenderingHints((Map) old); } else { g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, old); } }
@Override protected void paintComponent(Graphics g) { g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); final String text = getText(); final int len = text.length(); int x = (getWidth() - widthOfW * len) / 2; int y = (getHeight() - fontHeight) / 2 + fontAscent; if (highlight.x >= 0) { g.setColor(highlightSelectionInAsciiDumpColor); g.fillRect( x + highlight.x * widthOfW, 0, (highlight.y - highlight.x + 1) * widthOfW, getRowHeight()); } Graphics2D g2d = (Graphics2D) g; Object oldHints = null; if (desktopAAHints != null) { oldHints = g2d.getRenderingHints(); g2d.addRenderingHints(desktopAAHints); } g.setColor(getForeground()); // not padding low bytes, and this one is in range 00-0f. if (len == 1) { x += widthOfW; } for (int i = 0; i < len; i++) { char ch = text.charAt(i); if (ch != ' ') { g.drawString(CHARACTERS[ch], x, y); } x += widthOfW; } // g.drawString(text, x, y); // Restore rendering hints appropriately. if (desktopAAHints != null) { g2d.addRenderingHints((Map) oldHints); } if (hasSeparatorLine) { g.setColor(Color.GRAY); g.drawLine(0, 0, 0, getHeight()); } }
public static void setupAntialiasing(final Graphics g) { if (DEFAULT_ALIASING) return; Graphics2D g2d = (Graphics2D) g; UISettings uiSettings = getInstance(); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); if (!isRemoteDesktopConnected() && UIUtil.isRetina()) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } else { if (uiSettings == null || uiSettings.ANTIALIASING_IN_EDITOR) { Toolkit tk = Toolkit.getDefaultToolkit(); //noinspection HardCodedStringLiteral Map map = (Map) tk.getDesktopProperty("awt.font.desktophints"); if (map != null) { if (isRemoteDesktopConnected()) { g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); } else { g2d.addRenderingHints(map); } } else { g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } if (FORCE_USE_FRACTIONAL_METRICS) { g2d.setRenderingHint( RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); } } else { g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } }
// <editor-fold defaultstate="collapsed" desc=" Paint "> @Override public void paint(Graphics g) { Graphics2D gg = (Graphics2D) g; gg.addRenderingHints(VNSwingUtils.getHints()); if (active) { switch (errorLevel) { case ERRORLEVEL_OK: gg.setPaint(okSmooth); break; case ERRORLEVEL_WARNING: gg.setPaint(warningSmooth); break; case ERRORLEVEL_ERROR: gg.setPaint(errorSmooth); break; } gg.fillOval(0, 0, w, h); } else { switch (errorLevel) { case ERRORLEVEL_OK: gg.setPaint(okSmoothSmall); break; case ERRORLEVEL_WARNING: gg.setPaint(warningSmoothSmall); break; case ERRORLEVEL_ERROR: gg.setPaint(errorSmoothSmall); break; } gg.fillOval(0, 0, w, h); } }
private <T> T scaleImageUsingAffineTransformation(final BufferedImage bufferedImage, T target) { BufferedImage destinationImage = generateDestinationImage(); Graphics2D graphics2D = destinationImage.createGraphics(); AffineTransform transformation = AffineTransform.getScaleInstance( ((double) getQualifiedWidth() / bufferedImage.getWidth()), ((double) getQualifiedHeight() / bufferedImage.getHeight())); graphics2D.drawRenderedImage(bufferedImage, transformation); graphics2D.addRenderingHints(retrieveRenderingHints()); try { if (target instanceof File) { LOGGER.info(String.format(M_TARGET_TYPE_OF, "File")); ImageIO.write(destinationImage, imageType.toString(), (File) target); } else if (target instanceof ImageOutputStream) { LOGGER.info(String.format(M_TARGET_TYPE_OF, "ImageOutputStream")); ImageIO.write(destinationImage, imageType.toString(), (ImageOutputStream) target); } else if (target instanceof OutputStream) { LOGGER.info(String.format(M_TARGET_TYPE_OF, "OutputStream")); ImageIO.write(destinationImage, imageType.toString(), (OutputStream) target); } else { target = null; } } catch (IOException e) { e.printStackTrace(); } return target; }
public static BufferedImage resize(BufferedImage image, int width, int height) { BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT); Graphics2D g2d = (Graphics2D) bi.createGraphics(); g2d.addRenderingHints( new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); g2d.drawImage(image, 0, 0, width, height, null); g2d.dispose(); return bi; }
/** * Set desktop hints (not supported by all platforms). * * @param g graphics reference */ public static void hints(final Graphics g) { if (HINTS != null && hints) { try { ((Graphics2D) g).addRenderingHints(HINTS); } catch (final Exception ex) { Util.stack(ex); hints = false; } } }
// breadcrump to update renderinghints: public static boolean updateRenderingHints(JComponent comp, Map<?, ?> renderingHints) { Graphics graphics = comp.getGraphics(); if (graphics instanceof Graphics2D) { ((Graphics2D) graphics).addRenderingHints(renderingHints); return true; } return false; }
@SuppressWarnings("unchecked") private <T> T scaleImageUsingGraphics2D(final BufferedImage bufferedImage, T target) { BufferedImage destinationImage = generateDestinationImage(); Graphics2D graphics2D = destinationImage.createGraphics(); graphics2D.addRenderingHints(retrieveRenderingHints()); graphics2D.drawImage(bufferedImage, O_X, O_Y, getQualifiedWidth(), getQualifiedHeight(), null); graphics2D.dispose(); target = (T) destinationImage; return target; }
public static Graphics2D prepareGraphics(Graphics g) { Graphics2D g2 = (Graphics2D) g; Map rhints = (Map) (Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints")); // NOI18N if (rhints == null && Boolean.getBoolean("swing.aatext")) { // NOI18N g2.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } else if (rhints != null) { g2.addRenderingHints(rhints); } return g2; }
public static BufferedImage addSelectionBorder(BufferedImage i, int shift) { BufferedImage i2 = new BufferedImage( i.getWidth() + shift * 2, i.getHeight() + shift * 2, BufferedImage.TYPE_INT_RGB); Graphics2D g = i2.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, i2.getWidth(), i2.getHeight()); g.drawImage(i, shift, shift, null); g.setColor(new Color(160, 160, 160)); g.setStroke(new BasicStroke((int) (shift * 1.5))); g.addRenderingHints(HINTS); g.drawOval(shift, shift, i.getWidth(), i.getHeight()); return i2; }
/** * Draw the icon at the specified location. Icon implementations may use the Component argument to * get properties useful for painting, e.g. the foreground or background color. */ public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2 = (Graphics2D) g; Toolkit tk = Toolkit.getDefaultToolkit(); Map<?, ?> map = (Map<?, ?>) (tk.getDesktopProperty("awt.font.desktophints")); if (map != null) { g2.addRenderingHints(map); } // We don't insist that it be on the same Component g2.setColor(c.getForeground()); g2.setFont(c.getFont()); if (fRotation == ROTATE_NONE) { int yPos = y + fCharHeight; for (int i = 0; i < fCharStrings.length; i++) { // Special rules for Japanese - "half-height" characters (like ya, yu, yo in combinations) // should draw in the top-right quadrant when drawn vertically // - they draw in the bottom-left normally int tweak; switch (fPosition[i]) { case POSITION_NORMAL: // Roman fonts should be centered. Japanese fonts are always monospaced. g2.drawString(fCharStrings[i], x + ((fWidth - fCharWidths[i]) / 2), yPos); break; case POSITION_TOP_RIGHT: tweak = fCharHeight / 3; // Should be 2, but they aren't actually half-height g2.drawString(fCharStrings[i], x + (tweak / 2), yPos - tweak); break; case POSITION_FAR_TOP_RIGHT: tweak = fCharHeight - fCharHeight / 3; g2.drawString(fCharStrings[i], x + (tweak / 2), yPos - tweak); break; default: throw new Error(); } yPos += fCharHeight; } } else if (fRotation == ROTATE_LEFT) { g2.translate(x + fWidth, y + fHeight); g2.rotate(-NINETY_DEGREES); g2.drawString(fLabel, K_BUFFER_SPACE, -fDescent); g2.rotate(NINETY_DEGREES); g2.translate(-(x + fWidth), -(y + fHeight)); } else if (fRotation == ROTATE_RIGHT) { g2.translate(x, y); g2.rotate(NINETY_DEGREES); g2.drawString(fLabel, K_BUFFER_SPACE, -fDescent); g2.rotate(-NINETY_DEGREES); g2.translate(-x, -y); } }
protected void createBackgroundImage(int width, int height) { whileLoopBackgroundImageSize.setSize(width, height); whileLoopBackgroundImage = new java.awt.image.BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_INT_ARGB); java.awt.Graphics2D g = (java.awt.Graphics2D) whileLoopBackgroundImage.getGraphics(); g.addRenderingHints( new java.awt.RenderingHints( java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON)); g.setColor(backgroundColor); g.fillRect(0, 0, width, height); /* * g.setColor( backgroundLineColor ); int spacing = 10; for( int x = 0; * x <= width; x += spacing ) { g.drawLine( x, 0, x, height ); } */ }
public void paint(Graphics g) { // repaint the whole transformer in case the view component was repainted Rectangle clipBounds = g.getClipBounds(); if (clipBounds != null && !clipBounds.equals(visibleRect)) { repaint(); } // clear the background g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); if (view != null && at.getDeterminant() != 0) { Graphics2D g2 = (Graphics2D) g.create(); Insets insets = getInsets(); Rectangle bounds = getBounds(); // don't forget about insets bounds.x += insets.left; bounds.y += insets.top; bounds.width -= insets.left + insets.right; bounds.height -= insets.top + insets.bottom; double centerX1 = bounds.getCenterX(); double centerY1 = bounds.getCenterY(); Rectangle tb = getTransformedSize(); double centerX2 = tb.getCenterX(); double centerY2 = tb.getCenterY(); // set antialiasing by default g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if (renderingHints != null) { g2.addRenderingHints(renderingHints); } // translate it to the center of the view component again double tx = centerX1 - centerX2 - getX(); double ty = centerY1 - centerY2 - getY(); g2.translate((int) tx, (int) ty); g2.transform(at); view.paint(g2); g2.dispose(); } // paint the border paintBorder(g); }
// init private static void init() { if (frame != null) frame.setVisible(false); frame = new JFrame(); offscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); onscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); offscreen = offscreenImage.createGraphics(); onscreen = onscreenImage.createGraphics(); setXscale(); setYscale(); offscreen.setColor(DEFAULT_CLEAR_COLOR); offscreen.fillRect(0, 0, width, height); setPenColor(); setPenRadius(); setFont(); clear(); // add anti-aliasing RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); offscreen.addRenderingHints(hints); // frame stuff ImageIcon icon = new ImageIcon(onscreenImage); JLabel draw = new JLabel(icon); draw.addMouseListener(std); draw.addMouseMotionListener(std); frame.setContentPane(draw); frame.addKeyListener(std); // JLabel cannot get keyboard focus frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // closes all windows // frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // closes only current window frame.setTitle("Standard Draw"); frame.setJMenuBar(createMenuBar()); frame.pack(); frame.requestFocusInWindow(); frame.setVisible(true); }
public void addRenderingHints(Map hints) { hostGraphics.addRenderingHints(hints); }
public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; // for antialising geometric shapes g2d.addRenderingHints( new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); // for antialiasing text g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.drawImage(this.boardImage, 0, 0, null); if (this.drawGrid) { for (int x = 0; x < 24; x++) { for (int y = 0; y < 29; y++) { g.setColor(Color.RED); g.drawRect( (int) ((x * GUI.xSize) + GUI.xOffset), (int) ((y * GUI.ySize) + GUI.yOffset), (int) GUI.xSize, (int) GUI.ySize); } } } if (ui.chooseMovementsMode) { for (int x = 0; x < 24; x++) { for (int y = 0; y < 29; y++) { if (ui.moveables[x][y] == 1) g.setColor(new Color(0, 255, 0, 60)); else if (ui.moveables[x][y] == 2) g.setColor(new Color(0, 0, 255, 80)); else continue; g.fillRect( (int) Math.ceil((x * GUI.xSize) + GUI.xOffset), (int) Math.ceil((y * GUI.ySize) + GUI.yOffset), (int) Math.ceil(GUI.xSize), (int) Math.ceil(GUI.ySize)); } } } for (Character c : Character.characters) { System.out.printf("%d %d\n", c.X, c.Y); Color targetColour = Color.BLACK; /* * new Character("Kasandra Scarlet", 18, 28), new Character("Jack Mustard", 7, 28), new Character("Diane White", 0, 19), new Character("Jacob Green", 0, 9), new Character("Eleanor Peacock", 20, 0), new Character("Victor Plum", 6, 0) */ if (c == Character.characters[0]) targetColour = scarletColor; else if (c == Character.characters[1]) targetColour = mustardColor; else if (c == Character.characters[2]) targetColour = whiteColor; else if (c == Character.characters[3]) targetColour = greenColor; else if (c == Character.characters[4]) targetColour = peacockColor; else if (c == Character.characters[5]) targetColour = plumColor; g.setColor(targetColour); g.fillOval( GUI.getCoordFromBoardX(c.X) + 2, GUI.getCoordFromBoardY(c.Y) + 2, (int) (GUI.xSize - 4), (int) (GUI.ySize - 4)); g.setColor(Color.BLACK); g.drawOval( GUI.getCoordFromBoardX(c.X) + 2, GUI.getCoordFromBoardY(c.Y) + 2, (int) (GUI.xSize - 4), (int) (GUI.ySize - 4)); } }
public void paintComponent(Graphics g) { super.paintComponent(g); // paint background Graphics2D g2 = (Graphics2D) g; // Turn on antialiasing Map m = new HashMap(); m.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.addRenderingHints(m); // Figure out how large the maze is Point p = maze.getSize(); double llx = 0.0, lly = 0.0, width = 0.0, height = 0.0, cellwidth = 0.0, cellheight = 0.0; // Do we need to update our cache? if ((panelSize == null) || (panelSize != getSize())) { panelSize = getSize(); llx = (double) panelSize.width * 0.025; lly = (double) panelSize.height * 0.025; width = (double) panelSize.width - (double) panelSize.width * 0.05; height = (double) panelSize.height - (double) panelSize.height * 0.05; cellwidth = width / (double) p.getX(); cellheight = height / (double) p.getY(); buildWalls(llx, lly, cellwidth, cellheight); double diameter = java.lang.Math.min(cellwidth, cellheight) * 0.75; player = new Arc2D.Double( new Rectangle2D.Double(-diameter / 2.0, -diameter / 2.0, diameter, diameter), 30.0, 300.0, Arc2D.PIE); diameter = java.lang.Math.min(cellwidth, cellheight) * 0.30; projectile = new Arc2D.Double( new Rectangle2D.Double(-diameter / 2.0, -diameter / 2.0, diameter, diameter), 0.0, 360.0, Arc2D.PIE); } // Flip coordinate system g2.translate(0.0, (double) panelSize.height); g2.scale(1.0, -1.0); // Draw the maze walls g2.setStroke(new BasicStroke(2.0f)); g2.setColor(Color.black); g2.draw(new Rectangle2D.Double(llx, lly, width, height)); Iterator it = wallList.iterator(); while (it.hasNext()) { Object o = it.next(); if (o instanceof Shape) { g2.draw((Shape) o); } else { throw new Error(); } } Font font = new Font("Arial", Font.PLAIN, 9); FontRenderContext frc = g2.getFontRenderContext(); // Obtain the location of the distinguished client Point cp = maze.getClientPoint(client); for (int i = 0; i < p.getY(); i++) { for (int j = 0; j < p.getX(); j++) { boolean cellVisible = true; Line2D visLine = new Line2D.Double( llx + (cp.getX() + 0.5) * cellwidth, lly + (cp.getY() + 0.5) * cellheight, llx + (j + 0.5) * cellwidth, lly + (i + 0.5) * cellheight); /* Visibility testing */ /* Iterator visIt = wallList.iterator(); while(visIt.hasNext()) { Object o = visIt.next(); if(o instanceof Line2D) { Line2D l = (Line2D)o; if(l.intersectsLine(visLine)) { cellVisible = false; } } else { throw new Error(); } } */ if (cellVisible) { Cell cell = maze.getCell(new Point(j, i)); Object o = cell.getContents(); if (o != null) { if (o instanceof Client) { Client c = (Client) o; if (c instanceof GUIClient) { g2.setColor(Color.green); } else if (c instanceof RobotClient) { g2.setColor(Color.red); } else if (c instanceof RemoteClient) { g2.setColor(Color.magenta); } double xoffset = llx + j * cellwidth + (cellwidth / 2.0); double yoffset = lly + i * cellheight + (cellheight / 2.0); Direction orient = c.getOrientation(); g2.translate(xoffset, yoffset); double rotation = 0.0; if (orient.equals(Direction.South)) { rotation = -java.lang.Math.PI / 2.0; } else if (orient.equals(Direction.North)) { rotation = java.lang.Math.PI / 2.0; } else if (orient.equals(Direction.West)) { rotation = java.lang.Math.PI; } g2.rotate(rotation); g2.fill(player); g2.rotate(-rotation); GlyphVector name = font.createGlyphVector(frc, c.getName()); g2.scale(1.0, -1.0); g2.setColor(Color.black); g2.drawGlyphVector(name, 0.0f, 0.0f); g2.scale(1.0, -1.0); g2.translate(-xoffset, -yoffset); } else { if (o instanceof Projectile) { g2.setColor(Color.yellow); double xoffset = llx + j * cellwidth + (cellwidth / 2.0); double yoffset = lly + i * cellheight + (cellheight / 2.0); g2.translate(xoffset, yoffset); g2.fill(projectile); g2.translate(-xoffset, -yoffset); } } } } } } }
public void render(Graphics2D g2d, IProgressMonitor monitor) throws RenderException { try { final IRenderContext currentContext = getContext(); currentContext.setStatus(ILayer.WAIT); CoordinateReferenceSystem destinationCRS = currentContext.getCRS(); // the bounds of the visible area in world coordinates // get the envelope and the screen extent Envelope envelope = getRenderBounds(); if (envelope == null || envelope.isNull()) { envelope = context.getImageBounds(); } Point upperLeft = currentContext.worldToPixel(new Coordinate(envelope.getMinX(), envelope.getMinY())); Point bottomRight = currentContext.worldToPixel(new Coordinate(envelope.getMaxX(), envelope.getMaxY())); Rectangle screenSize = new Rectangle(upperLeft); screenSize.add(bottomRight); final IGeoResource resource = getContext().getGeoResource(); if (resource == null || !resource.canResolve(JGrassMapGeoResource.class)) { return; } JGrassMapGeoResource grassMapGeoResource = resource.resolve(JGrassMapGeoResource.class, monitor); JGrassRegion fileWindow = new JGrassRegion(grassMapGeoResource.getFileWindow()); JGrassMapsetGeoResource parent = (JGrassMapsetGeoResource) grassMapGeoResource.parent(new NullProgressMonitor()); CoordinateReferenceSystem grassCrs = parent.getLocationCrs(); JGrassRegion screenDrawWindow = new JGrassRegion( envelope.getMinX(), envelope.getMaxX(), envelope.getMinY(), envelope.getMaxY(), fileWindow.getRows(), fileWindow.getCols()); // to intersect with the data window, we transform the screen window JGrassRegion reprojectedScreenDrawWindow = screenDrawWindow; if (!CRS.equalsIgnoreMetadata(destinationCRS, grassCrs)) { reprojectedScreenDrawWindow = screenDrawWindow.reproject(destinationCRS, grassCrs, true); } /* * if the map is not visible, do not render it */ // JGrassRegion fileWindow = grassMapGeoResource.getFileWindow(); Rectangle2D.Double fileRectDouble = fileWindow.getRectangle(); Double reprojScreenRectangle = reprojectedScreenDrawWindow.getRectangle(); if (!reprojScreenRectangle.intersects(fileRectDouble)) { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); System.out.println(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); return; } /* * we will draw only the intersection of the map in the display system = part of visible map */ Rectangle2D drawMapRectangle = reprojectedScreenDrawWindow.getRectangle().createIntersection(fileRectDouble); // Rectangle2D drawMapRectangle = fileRectDouble.getBounds2D(); // resolution is that of the file window double ewRes = fileWindow.getWEResolution(); double nsRes = fileWindow.getNSResolution(); if (fileRectDouble.getWidth() < ewRes || fileRectDouble.getHeight() < nsRes) { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); System.out.println(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); return; } MathTransform transform = CRS.findMathTransform(destinationCRS, grassCrs, true); Coordinate pixelSize = getContext().getPixelSize(); Coordinate c1 = new Coordinate(envelope.getMinX(), envelope.getMinY()); Coordinate c2 = new Coordinate(envelope.getMinX() + pixelSize.x, envelope.getMinY() + pixelSize.y); Envelope envy = new Envelope(c1, c2); Envelope envyTrans = JTS.transform(envy, transform); pixelSize = new Coordinate(envyTrans.getWidth(), envyTrans.getHeight()); /* * if the resolution is higher of that of the screen, it doesn't make much sense to draw it * all. So for visualization we just use the screen resolution to do things faster. */ if (ewRes < pixelSize.x) { ewRes = pixelSize.x; } if (nsRes < pixelSize.y) { nsRes = pixelSize.y; } fileWindow.setNSResolution(nsRes); fileWindow.setWEResolution(ewRes); nsRes = fileWindow.getNSResolution(); ewRes = fileWindow.getWEResolution(); /* * redefine the region of the map to be drawn */ /* * snap the screen to fit into the active region grid. This is mandatory for the exactness * of the query of the pixels (ex. d.what.rast). */ JGrassRegion activeWindow = grassMapGeoResource.getActiveWindow(); Coordinate minXY = JGrassRegion.snapToNextHigherInRegionResolution( drawMapRectangle.getMinX(), drawMapRectangle.getMinY(), activeWindow); Coordinate maxXY = JGrassRegion.snapToNextHigherInRegionResolution( drawMapRectangle.getMaxX(), drawMapRectangle.getMaxY(), activeWindow); JGrassRegion drawMapRegion = new JGrassRegion(minXY.x, maxXY.x, minXY.y, maxXY.y, ewRes, nsRes); // JGrassRegion drawMapRegion = new JGrassRegion(drawMapRectangle.getMinX(), // drawMapRectangle.getMaxX(), drawMapRectangle.getMinY(), drawMapRectangle // .getMaxY(), ewRes, nsRes); JGrassMapEnvironment grassMapEnvironment = grassMapGeoResource.getjGrassMapEnvironment(); GridCoverage2D coverage = JGrassCatalogUtilities.getGridcoverageFromGrassraster(grassMapEnvironment, drawMapRegion); coverage = coverage.view(ViewType.RENDERED); if (coverage != null) { // setting rendering hints RenderingHints hints = new RenderingHints(Collections.EMPTY_MAP); hints.add( new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED)); hints.add( new RenderingHints(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE)); hints.add( new RenderingHints( RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)); hints.add( new RenderingHints( RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED)); hints.add( new RenderingHints( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)); hints.add( new RenderingHints( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE)); hints.add( new RenderingHints( RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF)); hints.add(new RenderingHints(JAI.KEY_INTERPOLATION, new InterpolationNearest())); g2d.addRenderingHints(hints); final TileCache tempCache = JAI.createTileCache(); tempCache.setMemoryCapacity(16 * 1024 * 1024); tempCache.setMemoryThreshold(1.0f); hints.add(new RenderingHints(JAI.KEY_TILE_CACHE, tempCache)); // draw AffineTransform worldToScreen = RendererUtilities.worldToScreenTransform(envelope, screenSize, destinationCRS); final GridCoverageRenderer paint = new GridCoverageRenderer(destinationCRS, envelope, screenSize, worldToScreen, hints); RasterSymbolizer rasterSymbolizer = CommonFactoryFinder.getStyleFactory(null).createRasterSymbolizer(); paint.paint(g2d, coverage, rasterSymbolizer); tempCache.flush(); // IBlackboard blackboard = context.getMap().getBlackboard(); // String legendString = coverageReader.getLegendString(); // String name = grassMapGeoResource.getTitle(); // blackboard.putString(JGrassMapGeoResource.READERID + "#" + name, legendString); } } catch (Exception e) { e.printStackTrace(); } finally { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(null); } }
public void paint(Graphics g) { if (previewTree.getMesh() == null) { try { previewTree.remake(); } catch (Exception e) { System.err.println(e); e.printStackTrace(); } return; } Graphics2D g2 = (Graphics2D) g; // turn antialiasing on RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.addRenderingHints(rh); try { g.clearRect(0, 0, getWidth(), getHeight()); g.setColor(bgClr); if (perspective == PERSPECTIVE_FRONT) g.fillRect(0, 0, getWidth() - 1, getHeight()); else g.fillRect(0, 0, getWidth(), getHeight() - 1); // g.drawRect(10,10,getWidth()-20,getHeight()-20); initTransform(g); if (draft) previewTree.traverseTree(new StemDrawer(g)); // drawStems(g); else { drawMesh(g); // drawLeaves(g); previewTree.traverseTree(new LeafDrawer(g)); } // DEBUG // Enumeration e = previewTree.allStems(previewTree.getShowLevel()-1); // Stem stem = (Stem)e.nextElement(); // Vector diag = stem.getMaxPoint().sub(stem.getMinPoint()); // Vector orig = stem.getTransformation().getT(); // setOrigin(new Vector(orig.getX(),orig.getY(),0)); // Vector max = stem.getMaxPoint(); // Vector min = stem.getMinPoint(); // // // get greatest distance from orig // double x1 = Math.abs(min.getX())-Math.abs(orig.getX()); // double x2 = Math.abs(max.getX())-Math.abs(orig.getX()); // double x = Math.max(Math.abs(x1),Math.abs(x2)); // double y1 = Math.abs(min.getY())-Math.abs(orig.getY()); // double y2 = Math.abs(max.getY())-Math.abs(orig.getY()); // double y = Math.max(Math.abs(y1),Math.abs(y2)); // // Vector av = max.sub(orig).add(min.sub(orig)); // //av=av.mul(0.5); // //// double dw = Math.sqrt(x*x+y*y)*2; // double dw = Math.sqrt(av.getX()*av.getX()+av.getY()*av.getY())*2; // double minw = -dw/2; // // double dh = diag.getZ(); // double minh = min.getZ(); // // g.setColor(Color.RED); // drawLine(g,orig,min); // drawLine(g,orig,max); // // g.setColor(Color.GREEN); // drawLine(g,orig,orig.add(new Vector(dw/2,dw/2,0))); // // g.setColor(Color.BLUE); // drawLine(g,orig,av.add(orig)); //// drawLine(g,orig,new Vector(dw/4,dw/4,orig.getZ())); // //// g.setColor(Color.BLUE); //// drawLine(g,stem.getTransformation().getT(),stem.getMaxPoint().sub(stem.getMinPoint())); } catch (Exception e) { // do nothing, don't draw } }
public void addRenderingHints(Map hints) { g2d.addRenderingHints(hints); }
// also clip, transform, composite, // public boolean isOpaque(){return false;}//theOpaque!=null&&theOpaque;} // --------------------------------------------------------- private void doPaint(Graphics2D g, int s, Object o) { // process an operation from the buffer // System.out.println(s); Object o1 = null, o2 = null, o3 = null, o4 = null, o5 = null, o6 = null, o7 = null, o8 = null, o9 = null, o10 = null, o11 = null; if (o instanceof Object[]) { Object[] a = (Object[]) o; if (a.length > 0) o1 = a[0]; if (a.length > 1) o2 = a[1]; if (a.length > 2) o3 = a[2]; if (a.length > 3) o4 = a[3]; if (a.length > 4) o5 = a[4]; if (a.length > 5) o6 = a[5]; if (a.length > 6) o7 = a[6]; if (a.length > 7) o8 = a[7]; if (a.length > 8) o9 = a[8]; if (a.length > 9) o10 = a[9]; if (a.length > 10) o11 = a[10]; } switch (s) { case clear: paintBackground(g, theBackground); break; // public void addRenderingHints(Map<?,?> hints) // {toBuffer("addRenderingHints",hints );} case addRenderingHints: g.addRenderingHints((Map<?, ?>) o); break; case clip1: g.clip((Shape) o); break; case draw1: g.draw((Shape) o); break; case draw3DRect: g.draw3DRect((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Boolean) o5); break; case drawGlyphVector: g.drawGlyphVector((GlyphVector) o1, (Float) o2, (Float) o3); break; case drawImage1: g.drawImage((BufferedImage) o1, (BufferedImageOp) o2, (Integer) o3, (Integer) o4); break; case drawImage2: g.drawImage((Image) o1, (AffineTransform) o2, (ImageObserver) o3); break; case drawRenderableImage: g.drawRenderableImage((RenderableImage) o1, (AffineTransform) o2); break; case drawRenderedImage: g.drawRenderedImage((RenderedImage) o1, (AffineTransform) o2); break; case drawString1: g.drawString((AttributedCharacterIterator) o1, (Float) o2, (Float) o3); break; case drawString2: g.drawString((AttributedCharacterIterator) o1, (Integer) o2, (Integer) o3); break; case drawString3: g.drawString((String) o1, (Float) o2, (Float) o3); break; case drawString4: g.drawString((String) o1, (Integer) o2, (Integer) o3); break; case fill: g.fill((Shape) o); break; case fill3DRect: g.fill3DRect((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Boolean) o5); break; case rotate1: g.rotate((Double) o); break; case rotate2: g.rotate((Double) o1, (Double) o2, (Double) o3); break; case scale1: g.scale((Double) o1, (Double) o2); break; case setBackground: g.setBackground( (Color) o); // paintBackground(g,(Color)o); /*super.setBackground((Color)o) ;*/ break; case setComposite: g.setComposite((Composite) o); break; case setPaint: g.setPaint((Paint) o); break; case setRenderingHint: g.setRenderingHint((RenderingHints.Key) o1, o2); break; case setRenderingHints: g.setRenderingHints((Map<?, ?>) o); break; case setStroke: g.setStroke((Stroke) o); break; case setTransform: g.setTransform(makeTransform(o)); break; case shear: g.shear((Double) o1, (Double) o2); break; case transform1: g.transform(makeTransform(o)); break; case translate1: g.translate((Double) o1, (Double) o2); break; case translate2: g.translate((Integer) o1, (Integer) o2); break; case clearRect: g.clearRect((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; case copyArea: g.copyArea( (Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6); break; case drawArc: g.drawArc( (Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6); break; case drawBytes: g.drawBytes((byte[]) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5); break; case drawChars: g.drawChars((char[]) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5); break; case drawImage4: g.drawImage((Image) o1, (Integer) o2, (Integer) o3, (Color) o4, (ImageObserver) o5); break; case drawImage5: g.drawImage((Image) o1, (Integer) o2, (Integer) o3, (ImageObserver) o4); break; case drawImage6: g.drawImage( (Image) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Color) o6, (ImageObserver) o7); break; case drawImage7: g.drawImage( (Image) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (ImageObserver) o6); break; case drawImage8: g.drawImage( (Image) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6, (Integer) o7, (Integer) o8, (Integer) o9, (Color) o10, (ImageObserver) o11); break; case drawImage9: g.drawImage( (Image) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6, (Integer) o7, (Integer) o8, (Integer) o9, (ImageObserver) o10); break; case drawLine: g.drawLine((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; case drawOval: g.drawOval((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; case drawPolygon1: g.drawPolygon((int[]) o1, (int[]) o2, (Integer) o3); break; case drawPolygon2: g.drawPolygon((Polygon) o); break; case drawPolyline: g.drawPolyline((int[]) o1, (int[]) o2, (Integer) o3); break; case drawRect: g.drawRect((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; case drawRoundRect: g.drawRoundRect( (Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6); break; case fillArc: g.fillArc( (Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6); break; case fillOval: g.fillOval((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; // {toBuffer("fillPolygon",mkArg(xPoints, yPoints, nPoints) );} case fillPolygon1: g.fillPolygon((int[]) o1, (int[]) o2, (Integer) o3); break; case fillPolygon2: g.fillPolygon((Polygon) o); break; case fillRect: g.fillRect((Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4); break; case fillRoundRect: g.fillRoundRect( (Integer) o1, (Integer) o2, (Integer) o3, (Integer) o4, (Integer) o5, (Integer) o6); break; case setClip1: g.setClip((Shape) o); break; case setColor: g.setColor((Color) o); break; case setFont: g.setFont((Font) o); break; case setPaintMode: g.setPaintMode(); break; case setXORMode: g.setXORMode((Color) o); break; case opaque: super.setOpaque((Boolean) o); break; case drawOutline: // g.drawString((String)o1, (Integer)o2, (Integer)o3) ;break; { FontRenderContext frc = g.getFontRenderContext(); TextLayout tl = new TextLayout((String) o1, g.getFont(), frc); Shape s1 = tl.getOutline(null); AffineTransform af = g.getTransform(); g.translate((Integer) o2, (Integer) o3); g.draw(s1); g.setTransform(af); } ; break; default: System.out.println("Unknown image operation " + s); } }