📄 hotfrontshapedecoration.java
字号:
//**********************************************************************////<copyright>////BBN Technologies//10 Moulton Street//Cambridge, MA 02138//(617) 873-8000////Copyright (C) BBNT Solutions LLC. All rights reserved.////</copyright>//**********************************************************************////$Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/omGraphics/meteo/HotFrontShapeDecoration.java,v $//$RCSfile: HotFrontShapeDecoration.java,v $//$Revision: 1.4.2.2 $//$Date: 2005/08/09 21:17:50 $//$Author: dietrick $////**********************************************************************package com.bbn.openmap.omGraphics.meteo;import java.awt.Color;import java.awt.Graphics;import java.awt.geom.Point2D;import com.bbn.openmap.omGraphics.awt.AbstractShapeDecoration;/** * A ShapeDecoration for meteorological hot fronts. * * @author Eric LEPICIER * @version 28 juil. 2002 */public class HotFrontShapeDecoration extends AbstractShapeDecoration { /** We use to draw them red ! */ public static Color COLOR = Color.red; /** * Filled half circles for surface fronts, empty ones for altitude * fronts */ private boolean filled = true; /** * Constructor. * * @param length * @param width * @param orientation */ public HotFrontShapeDecoration(int length, int width, int orientation) { super(length, width, orientation); setPaint(COLOR); } /** * @see com.bbn.openmap.omGraphics.awt.ShapeDecoration#draw(Graphics, * Point2D[], boolean) */ public void draw(Graphics g, Point2D[] points, boolean complete) { setGraphics(g); int nbpts = points.length; int xcoord[] = new int[nbpts + 6]; int ycoord[] = new int[nbpts + 6]; for (int i = 0; i < nbpts; i++) { xcoord[i] = (int) points[i].getX(); ycoord[i] = (int) points[i].getY(); } if (complete) { int orient = getOrientation() == LEFT ? -1 : 1; // Compute cosinus and sinus of rotation angle double dx = points[nbpts - 1].getX() - points[0].getX(); double dy = points[nbpts - 1].getY() - points[0].getY(); double norm = Math.sqrt(dx * dx + dy * dy); double rcos = dx / norm; double rsin = dy / norm; // Compute vertices (6 lines to approximate) double ll = getLength(); // en x avant rotation double ww = orient * getWidth(); // en y avant rotation double l, w; l = 0.9330127 * ll; // i.e. (2 + sqrt(3))/4 w = 0.5 * ww; xcoord[nbpts] = (int) (points[0].getX() + l * rcos - w * rsin); ycoord[nbpts++] = (int) (points[0].getY() + l * rsin + w * rcos); l = 0.85355339 * ll; // i.e. (2 + sqrt(2))/4 w = 0.70710678 * ww; xcoord[nbpts] = (int) (points[0].getX() + l * rcos - w * rsin); ycoord[nbpts++] = (int) (points[0].getY() + l * rsin + w * rcos); l = 0.5 * ll; w = ww; xcoord[nbpts] = (int) (points[0].getX() + l * rcos - w * rsin); ycoord[nbpts++] = (int) (points[0].getY() + l * rsin + w * rcos); l = 0.14644661 * ll; // i.e. (2 - sqrt(2))/4 w = 0.70710678 * ww; xcoord[nbpts] = (int) (points[0].getX() + l * rcos - w * rsin); ycoord[nbpts++] = (int) (points[0].getY() + l * rsin + w * rcos); l = 0.066987298 * ll; // i.e. (2 - sqrt(3))/4 w = 0.5 * ww; xcoord[nbpts] = (int) (points[0].getX() + l * rcos - w * rsin); ycoord[nbpts++] = (int) (points[0].getY() + l * rsin + w * rcos); // link to start xcoord[nbpts] = (int) points[0].getX(); ycoord[nbpts++] = (int) points[0].getY(); if (filled) g.fillPolygon(xcoord, ycoord, nbpts); } g.drawPolyline(xcoord, ycoord, nbpts); restoreGraphics(g); } /** * Returns the filled boolean. * * @return boolean */ public boolean isFilled() { return filled; } /** * Sets the filled (draw a half disk or a half circle ?). * * @param filled The filled to set */ public void setFilled(boolean filled) { this.filled = filled; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -