Java 类java.awt.geom.GeneralPath 实例源码

项目:JavaGraph    文件:JVertexView.java   
/** Creates a hexagonal shape inscribed in the bounds given in the parameters. */
private Shape createHexagonShape(double x, double y, double width, double height) {
    GeneralPath result = new GeneralPath(Path2D.WIND_NON_ZERO, 5);
    double extend = height * NodeShape.HEX_EXTEND_RATIO;
    // stat at top left corner
    result.moveTo(x + extend, y);
    // to top right
    result.lineTo(x + width - extend, y);
    // to right
    result.lineTo(x + width, y + height / 2);
    // to bottom right
    result.lineTo(x + width - extend, y + height);
    // to bottom left
    result.lineTo(x + extend, y + height);
    // to left
    result.lineTo(x, y + height / 2);
    result.closePath();
    return result;
}
项目:incubator-netbeans    文件:DiffSplitPaneDivider.java   
private void paintMatcher(Graphics2D g, Color fillClr, 
        int leftX, int rightX, int upL, int upR, int doR, int doL) {
    int topY = Math.min(upL, upR), bottomY = Math.max(doL, doR);
    // try rendering only curves in viewable area
    if (!g.hitClip(leftX, topY, rightX - leftX, bottomY - topY)) {
        return;
    }
    CubicCurve2D upper = new CubicCurve2D.Float(leftX, upL,
            (rightX -leftX)*.3f, upL,
            (rightX -leftX)*.7f, upR,
            rightX, upR);
    CubicCurve2D bottom = new CubicCurve2D.Float(rightX, doR,
            (rightX - leftX)*.7f, doR,
            (rightX -leftX)*.3f, doL,
            leftX, doL);
    GeneralPath path = new GeneralPath();
    path.append(upper, false);
    path.append(bottom, true);
    path.closePath();
    g.setColor(fillClr);
    g.fill(path);
    g.setColor(master.getColorLines());
    g.draw(upper);
    g.draw(bottom);
}
项目:rapidminer    文件:ProcessDrawUtils.java   
/**
 * Creates a spline connector shape from one {@link Point2D} to another.
 *
 * @param from
 *            the starting point
 * @param to
 *            the end point
 * @return the shape representing the connection, never {@code null}
 */
public static Shape createConnectionSpline(final Point2D from, final Point2D to) {
    if (from == null || to == null) {
        throw new IllegalArgumentException("from and to must not be null!");
    }

    int delta = 10;
    GeneralPath connector = new GeneralPath();
    connector.moveTo(from.getX() + 1, from.getY());
    double cx = (from.getX() + to.getX()) / 2;
    double cy = (from.getY() + to.getY()) / 2;
    if (to.getX() >= from.getX() + 2 * delta) {
        connector.curveTo(cx, from.getY(), cx, from.getY(), cx, cy);
        connector.curveTo(cx, to.getY(), cx, to.getY(), to.getX() - 1, to.getY());
    } else {
        connector.curveTo(from.getX() + delta, from.getY(), from.getX() + delta, cy, cx, cy);
        connector.curveTo(to.getX() - delta, cy, to.getX() - delta, to.getY(), to.getX() - 1, to.getY());
    }
    return connector;
}
项目:rapidminer    文件:DropDownButton.java   
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    GeneralPath arrow = new GeneralPath();
    int w, h;
    h = (int) (2 * sizeFactor);
    w = (int) (4 * sizeFactor);
    arrow.moveTo(getWidth() / 2 - w, getHeight() / 2);
    arrow.lineTo(getWidth() / 2 + w, getHeight() / 2);
    arrow.lineTo(getWidth() / 2, getHeight() / 2 + 2 * h);
    arrow.closePath();
    if (isEnabled()) {
        g.setColor(Color.BLACK);
    } else {
        g.setColor(Color.GRAY);
    }
    ((Graphics2D) g).fill(arrow);
}
项目:openjdk-jdk10    文件:LayoutPathImpl.java   
public Shape mapShape(Shape s) {
    if (LOGMAP) LOG.format("mapshape on path: %s\n", LayoutPathImpl.SegmentPath.this);
    PathIterator pi = s.getPathIterator(null, 1); // cheap way to handle curves.

    if (LOGMAP) LOG.format("start\n");
    init();

    final double[] coords = new double[2];
    while (!pi.isDone()) {
        switch (pi.currentSegment(coords)) {
        case SEG_CLOSE: close(); break;
        case SEG_MOVETO: moveTo(coords[0], coords[1]); break;
        case SEG_LINETO: lineTo(coords[0], coords[1]); break;
        default: break;
        }

        pi.next();
    }
    if (LOGMAP) LOG.format("finish\n\n");

    GeneralPath gp = new GeneralPath();
    for (Segment seg: segments) {
        gp.append(seg.gp, false);
    }
    return gp;
}
项目:FreeCol    文件:Flag.java   
/**
 * Returns either a single star, or a circle of stars with the
 * given radius, centered at the origin.
 *
 * @param radius The radius of the circle.
 * @return The circle of stars.
 */
private GeneralPath getCircleOfStars(double radius) {
    double phi = Math.PI * 2 / stars;
    GeneralPath unionPath = new GeneralPath();
    if (stars == 0) {
        // nothing to do
    } else if (stars == 1) {
        // one double sized star
        unionPath = getStar(2, 0, 0);
    } else if (stars == 2) {
        // two larger stars, on the x axis
        unionPath.append(getStar(1.5, -radius, 0), false);
        unionPath.append(getStar(1.5, radius, 0), false);
    } else {
        // a general circle of stars
        for (int i = 0; i < stars; i++) {
            double x = -radius - radius * Math.sin(i * phi);
            double y = -radius * Math.cos(i * phi);
            unionPath.append(getStar(x, y), false);
        }
    }
    return unionPath;
}
项目:openjdk-jdk10    文件:Underline.java   
Shape getUnderlineShape(float thickness,
                        float x1,
                        float x2,
                        float y) {

    GeneralPath gp = new GeneralPath();

    Line2D.Float line = new Line2D.Float(x1, y, x2, y);
    gp.append(stroke.createStrokedShape(line), false);

    line.y1 += DEFAULT_THICKNESS;
    line.y2 += DEFAULT_THICKNESS;
    line.x1 += DEFAULT_THICKNESS;

    gp.append(stroke.createStrokedShape(line), false);

    return gp;
}
项目:Java-Algorithms-Learning    文件:StdDraw.java   
/**
 * Draws a polygon with the vertices 
 * (<em>x</em><sub>0</sub>, <em>y</em><sub>0</sub>),
 * (<em>x</em><sub>1</sub>, <em>y</em><sub>1</sub>), ...,
 * (<em>x</em><sub><em>n</em>–1</sub>, <em>y</em><sub><em>n</em>–1</sub>).
 *
 * @param  x an array of all the <em>x</em>-coordinates of the polygon
 * @param  y an array of all the <em>y</em>-coordinates of the polygon
 * @throws IllegalArgumentException unless {@code x[]} and {@code y[]}
 *         are of the same length
 */
public static void polygon(double[] x, double[] y) {
    if (x == null) throw new IllegalArgumentException("x-coordinate array is null");
    if (y == null) throw new IllegalArgumentException("y-coordinate array is null");
    int n1 = x.length;
    int n2 = y.length;
    if (n1 != n2) throw new IllegalArgumentException("arrays must be of the same length");
    int n = n1;
    if (n == 0) return;

    GeneralPath path = new GeneralPath();
    path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0]));
    for (int i = 0; i < n; i++)
        path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i]));
    path.closePath();
    offscreen.draw(path);
    draw();
}
项目:FreeCol    文件:Flag.java   
private void drawPerSaltire(Graphics2D g) {
    int colors = backgroundColors.size();
    GeneralPath path = new GeneralPath();
    int[] x = { 0, WIDTH, WIDTH, 0 };
    int[] y = { 0, 0, HEIGHT, HEIGHT };
    double halfWidth = WIDTH / 2;
    double halfHeight = HEIGHT / 2;
    for (int index = 0; index < 4; index++) {
        path.moveTo(x[index], y[index]);
        path.lineTo(halfWidth, halfHeight);
        int nextIndex = (index + 1) % 4;
        path.lineTo(x[nextIndex], y[nextIndex]);
        g.setColor(backgroundColors.get(index % colors));
        g.fill(path);
        path.reset();
    }
}
项目:FreeCol    文件:Flag.java   
/**
 * Return the basic five-point star.
 *
 * @return the basic star shape
 */
private static GeneralPath getStar() {
    GeneralPath star = new GeneralPath(GeneralPath.WIND_NON_ZERO);
    double angle = 2 * Math.PI / 5;
    double radius = STAR_SIZE / 2;
    double x = 0;
    double y = -radius;
    star.moveTo(x, y);
    int[] vertex = { 2, 4, 1, 3 };
    for (int i : vertex) {
        double phi = i * angle;
        x = radius * Math.sin(phi);
        y = -radius * Math.cos(phi);
        star.lineTo(x, y);
    }
    star.closePath();
    return star;
}
项目:openjdk-jdk10    文件:StandardGlyphVector.java   
Rectangle2D getGlyphOutlineBounds(int glyphID, float x, float y) {
    Rectangle2D result = null;
    if (sgv.invdtx == null) {
        result = new Rectangle2D.Float();
        result.setRect(strike.getGlyphOutlineBounds(glyphID)); // don't mutate cached rect
    } else {
        GeneralPath gp = strike.getGlyphOutline(glyphID, 0, 0);
        gp.transform(sgv.invdtx);
        result = gp.getBounds2D();
    }
    /* Since x is the logical advance of the glyph to this point.
     * Because of the way that Rectangle.union is specified, this
     * means that subsequent unioning of a rect including that
     * will be affected, even if the glyph is empty. So skip such
     * cases. This alone isn't a complete solution since x==0
     * may also not be what is wanted. The code that does the
     * unioning also needs to be aware to ignore empty glyphs.
     */
    if (!result.isEmpty()) {
        result.setRect(result.getMinX() + x + dx,
                       result.getMinY() + y + dy,
                       result.getWidth(), result.getHeight());
    }
    return result;
}
项目:ramus    文件:DFDFunctionEllipse.java   
protected int getTriangle(final FloatPoint point) {
    int res = -1;

    FloatPoint l = getLocation();

    for (int type = MovingPanel.RIGHT; type <= MovingPanel.TOP; type++) {
        GeneralPath gp = getTrianglePath(type);
        double y = point.getY() + l.getY();
        double x = point.getX() + l.getX();
        if (gp.contains(new Point2D.Double(x, y))) {
            res = type;
            break;
        }
    }

    return res;
}
项目:Tarski    文件:mxLabelShape.java   
/**
 * Draws the glass effect
 */
public static void drawGlassEffect(mxGraphics2DCanvas canvas, mxCellState state) {
  double size = 0.4;
  canvas.getGraphics()
      .setPaint(new GradientPaint((float) state.getX(), (float) state.getY(),
          new Color(1, 1, 1, 0.9f), (float) (state.getX()),
          (float) (state.getY() + state.getHeight() * size), new Color(1, 1, 1, 0.3f)));

  float sw = (float) (mxUtils.getFloat(state.getStyle(), mxConstants.STYLE_STROKEWIDTH, 1)
      * canvas.getScale() / 2);

  GeneralPath path = new GeneralPath();
  path.moveTo((float) state.getX() - sw, (float) state.getY() - sw);
  path.lineTo((float) state.getX() - sw, (float) (state.getY() + state.getHeight() * size));
  path.quadTo((float) (state.getX() + state.getWidth() * 0.5),
      (float) (state.getY() + state.getHeight() * 0.7),
      (float) (state.getX() + state.getWidth() + sw),
      (float) (state.getY() + state.getHeight() * size));
  path.lineTo((float) (state.getX() + state.getWidth() + sw), (float) state.getY() - sw);
  path.closePath();

  canvas.getGraphics().fill(path);
}
项目:geomapapp    文件:UnknownDataSet.java   
public static Shape createStar(int arms, Point2D center, double rOuter, double rInner)
{
    double angle = Math.PI / arms;

    GeneralPath path = new GeneralPath();

    for (int i = 0; i < 2 * arms; i++)
    {
        double r = (i & 1) == 0 ? rOuter : rInner;
        Point2D.Double p = new Point2D.Double(center.getX() + Math.cos(i * angle) * r, center.getY() + Math.sin(i * angle) * r);
        if (i == 0) path.moveTo(p.getX(), p.getY());
        else path.lineTo(p.getX(), p.getY());
    }
    path.closePath();
    return path;
}
项目:freecol    文件:Flag.java   
private GeneralPath getCross(Decoration decoration) {
    double quarterWidth = (WIDTH - DECORATION_SIZE) / 2;
    double quarterHeight = (HEIGHT - DECORATION_SIZE) / 2;
    double offset = 0;
    double width = WIDTH;
    double height = HEIGHT;
    switch(decoration) {
    case SCANDINAVIAN_CROSS:
        offset = CROSS_OFFSET;
        break;
    case GREEK_CROSS:
        width = height = Math.min(WIDTH, HEIGHT) - 2 * DECORATION_SIZE;
        break;
    default:
        break;
    }
    GeneralPath cross = new GeneralPath();
    cross.append(new Rectangle2D.Double((WIDTH - width) / 2, quarterHeight,
                                        width, DECORATION_SIZE), false);
    cross.append(new Rectangle2D.Double(quarterWidth - offset, (HEIGHT - height) / 2,
                                        DECORATION_SIZE, height), false);
    return cross;
}
项目:freecol    文件:Flag.java   
private GeneralPath getBend(boolean sinister) {
    GeneralPath path = new GeneralPath();
    if (sinister) {
        path.moveTo(0, HEIGHT);
        path.lineTo(0, HEIGHT - BEND_Y);
        path.lineTo(WIDTH - BEND_X, 0);
        path.lineTo(WIDTH, 0);
        path.lineTo(WIDTH, BEND_Y);
        path.lineTo(BEND_X, HEIGHT);
    } else {
        path.moveTo(0, 0);
        path.lineTo(BEND_X, 0);
        path.lineTo(WIDTH, HEIGHT - BEND_Y);
        path.lineTo(WIDTH, HEIGHT);
        path.lineTo(WIDTH - BEND_X, HEIGHT);
        path.lineTo(0, BEND_Y);
    }
    return path;
}
项目:freecol    文件:Flag.java   
/**
 * Return the basic five-point star.
 *
 * @return the basic star shape
 */
private static GeneralPath getStar() {
    GeneralPath star = new GeneralPath(GeneralPath.WIND_NON_ZERO);
    double angle = 2 * Math.PI / 5;
    double radius = STAR_SIZE / 2;
    double x = 0;
    double y = -radius;
    star.moveTo(x, y);
    int[] vertex = { 2, 4, 1, 3 };
    for (int i : vertex) {
        double phi = i * angle;
        x = radius * Math.sin(phi);
        y = -radius * Math.cos(phi);
        star.lineTo(x, y);
    }
    star.closePath();
    return star;
}
项目:Princeton_Algorithms    文件:StdDraw.java   
/**
 * Draws a polygon with the vertices 
 * (<em>x</em><sub>0</sub>, <em>y</em><sub>0</sub>),
 * (<em>x</em><sub>1</sub>, <em>y</em><sub>1</sub>), ...,
 * (<em>x</em><sub><em>n</em>–1</sub>, <em>y</em><sub><em>n</em>–1</sub>).
 *
 * @param  x an array of all the <em>x</em>-coordinates of the polygon
 * @param  y an array of all the <em>y</em>-coordinates of the polygon
 * @throws IllegalArgumentException unless {@code x[]} and {@code y[]}
 *         are of the same length
 */
public static void polygon(double[] x, double[] y) {
    if (x == null) throw new IllegalArgumentException();
    if (y == null) throw new IllegalArgumentException();
    int n1 = x.length;
    int n2 = y.length;
    if (n1 != n2) throw new IllegalArgumentException("arrays must be of the same length");
    int n = n1;
    GeneralPath path = new GeneralPath();
    path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0]));
    for (int i = 0; i < n; i++)
        path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i]));
    path.closePath();
    offscreen.draw(path);
    draw();
}
项目:openjdk-jdk10    文件:PixelToShapeConverter.java   
private Shape makePoly(int xPoints[], int yPoints[],
                       int nPoints, boolean close) {
    GeneralPath gp = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
    if (nPoints > 0) {
        gp.moveTo(xPoints[0], yPoints[0]);
        for (int i = 1; i < nPoints; i++) {
            gp.lineTo(xPoints[i], yPoints[i]);
        }
        if (close) {
            gp.closePath();
        }
    }
    return gp;
}
项目:jdk8u-jdk    文件:TextLine.java   
public Shape getOutline(AffineTransform tx) {

        GeneralPath dstShape = new GeneralPath(GeneralPath.WIND_NON_ZERO);

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            dstShape.append(tlc.getOutline(locs[n], locs[n+1]), false);
        }

        if (tx != null) {
            dstShape.transform(tx);
        }
        return dstShape;
    }
项目:openjdk-jdk10    文件:DashStrokeTest.java   
public static void main(String[] args) {

        GeneralPath shape = new GeneralPath();
        int[] pointTypes = {0, 0, 1, 1, 0, 1, 1, 0};
        double[] xpoints = {428, 420, 400, 400, 400, 400, 420, 733};
        double[] ypoints = {180, 180, 180, 160, 30, 10, 10, 10};
        shape.moveTo(xpoints[0], ypoints[0]);
        for (int i = 1; i < pointTypes.length; i++) {
            if (pointTypes[i] == 1 && i < pointTypes.length - 1) {
                shape.quadTo(xpoints[i], ypoints[i],
                             xpoints[i + 1], ypoints[i + 1]);
            } else {
                shape.lineTo(xpoints[i], ypoints[i]);
            }
        }

        BufferedImage image = new
            BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = image.createGraphics();

        Color color = new Color(124, 0, 124, 255);
        g2.setColor(color);
        Stroke stroke = new BasicStroke(1.0f,
                                        BasicStroke.CAP_BUTT,
                                        BasicStroke.JOIN_BEVEL,
                                        10.0f, new float[] {9, 6}, 0.0f);
        g2.setStroke(stroke);
        g2.draw(shape);
    }
项目:FreeCol    文件:Flag.java   
private GeneralPath getRhombus() {
    GeneralPath rhombus = new GeneralPath();
    rhombus.moveTo(WIDTH / 2, BEND_Y);
    rhombus.lineTo(WIDTH - BEND_X, HEIGHT / 2);
    rhombus.lineTo(WIDTH / 2, HEIGHT - BEND_Y);
    rhombus.lineTo(BEND_X, HEIGHT / 2);
    return rhombus;
}
项目:incubator-netbeans    文件:ArrowAnchorShape.java   
public ArrowAnchorShape (int degrees, int size) {
    this.size = size;
    path = new GeneralPath ();

    double radians = Math.PI * degrees / 180.0;
    double cos = Math.cos (radians / 2.0);
    double sin = -size * Math.sqrt (1 - cos * cos);
    cos *= size;

    path.moveTo (0.0f, 0.0f);
    path.lineTo ((float) cos, (float) -sin);
    path.moveTo (0.0f, 0.0f);
    path.lineTo ((float) cos, (float) sin);
}
项目:rapidminer    文件:PlotInstanceLegendCreator.java   
private static GeneralPath createBarShape() {
    GeneralPath barShape = new GeneralPath();
    barShape.moveTo(0, 0);
    barShape.lineTo(0, -5);
    barShape.lineTo(5, -5);
    barShape.lineTo(5, 0);
    barShape.lineTo(5, -15);
    barShape.lineTo(10, -15);
    barShape.lineTo(10, 0);
    barShape.lineTo(10, -10);
    barShape.lineTo(15, -10);
    barShape.lineTo(15, 0);
    barShape.closePath();
    return barShape;
}
项目:rapidminer    文件:SeriesFormat.java   
public static Shape createDiamond() {
    final float s = SHAPE_SIZE;
    double d = Math.round(Math.sqrt(2 * s * s) / 2.0);
    final GeneralPath p = new GeneralPath();
    p.moveTo(0, d);
    p.lineTo(d, 0);
    p.lineTo(0, -d);
    p.lineTo(-d, 0);
    p.closePath();
    return p;

    // final float s = shapeSize;
    // final float l = s / 4.0f;
    // final float t = s / 4.0f;
    //
    // final float SQRT2 = (float) Math.pow(2.0, 0.5);
    // final GeneralPath p0 = new GeneralPath();
    // p0.moveTo(-l - t, -l + t);
    // p0.lineTo(-l + t, -l - t);
    // p0.lineTo(0.0f, -t * SQRT2);
    // p0.lineTo(l - t, -l - t);
    // p0.lineTo(l + t, -l + t);
    // p0.lineTo(t * SQRT2, 0.0f);
    // p0.lineTo(l + t, l - t);
    // p0.lineTo(l - t, l + t);
    // p0.lineTo(0.0f, t * SQRT2);
    // p0.lineTo(-l + t, l + t);
    // p0.lineTo(-l - t, l - t);
    // p0.lineTo(-t * SQRT2, 0.0f);
    // p0.closePath();
    // return p0;
}
项目:geomapapp    文件:WWMGG.java   
protected void setCurrentSegment(GeneralPath path) {
    if (currentSegment != null)
        trackLayer.removeRenderable( currentSegment );

    if (path == null)
    {
        currentSegment = null;
        return;
    }

    PathIterator pi =
        path.getPathIterator(new AffineTransform());
    List<LatLon> pos = new LinkedList<LatLon>();

    float [] coords = new float[6];
    int t = pi.currentSegment(coords);
    pos.add( LatLon.fromDegrees(coords[1], coords[0]));
    while (!pi.isDone())
    {
        t = pi.currentSegment(coords);
        if (t == PathIterator.SEG_LINETO && 
                !(coords[1] == 0 && coords[0]==0))
            pos.add( LatLon.fromDegrees(coords[1], coords[0]));

        pi.next();
    }

    Polyline line = new Polyline(pos, 0);
    line.setLineWidth(4);
    line.setFollowTerrain(true);
    line.setColor( Color.red );
    trackLayer.addRenderable(line);
    currentSegment = line;

}
项目:rapidminer    文件:ArrowButton.java   
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    GeneralPath arrow = new GeneralPath();
    int w, h;
    switch (direction) {
        case SwingConstants.SOUTH:
            h = 2;
            w = 4;
            arrow.moveTo(getWidth() / 2 - w, getHeight() / 2);
            arrow.lineTo(getWidth() / 2 + w, getHeight() / 2);
            arrow.lineTo(getWidth() / 2, getHeight() / 2 + 2 * h);
            arrow.closePath();
            break;
        case SwingConstants.EAST:
            h = 4;
            w = 2;
            arrow.moveTo(getWidth() / 2 - w, getHeight() / 2 - h);
            arrow.lineTo(getWidth() / 2 + w, getHeight() / 2);
            arrow.lineTo(getWidth() / 2 - w, getHeight() / 2 + h);
            arrow.closePath();
            break;
        default:
            throw new IllegalArgumentException("Illegal direction: " + direction);
    }
    if (isEnabled()) {
        g.setColor(Color.BLACK);
    } else {
        g.setColor(Color.GRAY);
    }
    ((Graphics2D) g).fill(arrow);
}
项目:jmt    文件:JmtEdgeView.java   
@Override
public Shape getShape() {
    if (sharedPath != null) {
        return sharedPath;
    } else if (mediator.getIsReleased()) {
        return sharedPath = (GeneralPath) renderer.createShape();
    } else {
        return sharedPath = (GeneralPath) renderer.createShape2();
    }
}
项目:jdk8u-jdk    文件:StandardGlyphVector.java   
/**
 * Used by getOutline, getGlyphsOutline
 */
private Shape getGlyphsOutline(int start, int count, float x, float y) {
    setFRCTX();
    initPositions();

    GeneralPath result = new GeneralPath(GeneralPath.WIND_NON_ZERO);
    for (int i = start, e = start + count, n = start * 2; i < e; ++i, n += 2) {
        float px = x + positions[n];
        float py = y + positions[n+1];

        getGlyphStrike(i).appendGlyphOutline(glyphs[i], result, px, py);
    }

    return result;
}
项目:FreeCol    文件:Flag.java   
private void drawPerBend(Graphics2D g, boolean sinister) {
    drawBackground(g);
    int colors = backgroundColors.size();
    GeneralPath path = new GeneralPath();
    path.moveTo(0, HEIGHT);
    path.lineTo(sinister ? WIDTH : 0, 0);
    path.lineTo(WIDTH, HEIGHT);
    g.setColor(backgroundColors.get(1 % colors));
    g.fill(path);
}
项目:openjdk-jdk10    文件:StandardGlyphVector.java   
void appendGlyphOutline(int glyphID, GeneralPath result, float x, float y) {
    // !!! fontStrike needs a method for this.  For that matter, GeneralPath does.
    GeneralPath gp = null;
    if (sgv.invdtx == null) {
        gp = strike.getGlyphOutline(glyphID, x + dx, y + dy);
    } else {
        gp = strike.getGlyphOutline(glyphID, 0, 0);
        gp.transform(sgv.invdtx);
        gp.transform(AffineTransform.getTranslateInstance(x + dx, y + dy));
    }
    PathIterator iterator = gp.getPathIterator(null);
    result.append(iterator, false);
}
项目:vexillo    文件:Symbol.java   
private static void coArcTo(GeneralPath p, double x2, double y2, double x3, double y3) {
    Point2D p1 = p.getCurrentPoint();
    double x1 = p1.getX();
    double y1 = p1.getY();
    boolean xe = (x1 == x2 && x2 == x3);
    boolean ye = (y1 == y2 && y2 == y3);
    if (xe && ye) return;
    if (xe || ye) { p.lineTo(x3, y3); return; }
    double d = arcHK(x1, y1, x2, y2, x3, y3);
    double h = arcH(x1, y1, x2, y2, x3, y3) / d;
    double k = arcK(x1, y1, x2, y2, x3, y3) / d;
    if (Double.isNaN(h) || Double.isInfinite(h)) { p.lineTo(x3, y3); return; }
    if (Double.isNaN(k) || Double.isInfinite(k)) { p.lineTo(x3, y3); return; }
    double r = Math.hypot(k - y1, x1 - h);
    double a1 = Math.toDegrees(Math.atan2(k - y1, x1 - h));
    double a2 = Math.toDegrees(Math.atan2(k - y2, x2 - h));
    double a3 = Math.toDegrees(Math.atan2(k - y3, x3 - h));
    Arc2D.Double arc = new Arc2D.Double();
    arc.x = h - r;
    arc.y = k - r;
    arc.width = r + r;
    arc.height = r + r;
    arc.start = a1;
    if ((a1 <= a2 && a2 <= a3) || (a3 <= a2 && a2 <= a1)) {
        arc.extent = a3 - a1;
    } else if (a3 <= a1) {
        arc.extent = a3 - a1 + 360;
    } else {
        arc.extent = a3 - a1 - 360;
    }
    p.append(arc, true);
}
项目:jtk    文件:TriMeshView.java   
private static void drawLine(
  Graphics2D g2d, GeneralPath path, int x1, int y1, int x2, int y2)
{
  if (path==null) {
    g2d.drawLine(x1,y1,x2,y2);
  } else {
    path.moveTo(x1,y1);
    path.lineTo(x2,y2);
  }
}
项目:OpenJSharp    文件:FileFont.java   
GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, float x, float y) {
    try {
        return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y);
    } catch (FontScalerException fe) {
        scaler = FontScaler.getNullScaler();
        return getGlyphOutline(pScalerContext, glyphCode, x, y);
    }
}
项目:javase    文件:Sinx.java   
private void drawSinx(GeneralPath gp, Graphics2D g2d) {
    for (double i = 0.000001; i <= 8 * Math.PI; i += 0.0001 * Math.PI) {
        gp.lineTo(20 * i, 100 * -Math.sin(i));
    }
    g2d.draw(gp);
    g2d.rotate(Math.PI);
    g2d.draw(gp);
}
项目:javase    文件:Sinx.java   
@SuppressWarnings("unused")
private void drawSinxDX(GeneralPath gp, Graphics2D g) {
    for (double i = 0.000001; i <= 8 * Math.PI; i += 0.0001 * Math.PI) {
        gp.lineTo(20 * i, 100 * -Math.sin(i) / i);
    }
    g.draw(gp);
    g.scale(-1, 1);
    g.draw(gp);
}
项目:jmonet    文件:FlexQuadrilateral.java   
public Shape getShape() {
    GeneralPath path = new GeneralPath();
    path.moveTo(topLeft.getX(), topLeft.getY());
    path.lineTo(topRight.getX(), topRight.getY());
    path.lineTo(bottomRight.getX(), bottomRight.getY());
    path.lineTo(bottomLeft.getX(), bottomLeft.getY());
    path.closePath();

    return path;
}
项目:GIFKR    文件:FloatInterpolator.java   
@Override
public void paintGraph(Graphics2D g, int width, int height) {
    g.setColor(new Color(0, 0, 0, 127));

    g.drawString("1.0", 2, g.getFontMetrics().getHeight());
    g.drawString("0.0", 2, height-g.getFontMetrics().getDescent());
    g.setColor(new Color(0, 0, 0, 200));

    g.setStroke(new BasicStroke(3f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND));

    ArrayList<Keyframe<Float>> copy = new ArrayList<>(keyframes);
    if(dragFrame != null)
        copy.add(dragFrame);
    Collections.sort(copy);

    if(copy.get(0).getTime() != 0f)
        copy.add(0, new Keyframe<Float>(0f, copy.get(0).getValue()));
    if(copy.get(copy.size()-1).getTime() != 1f)
        copy.add(new Keyframe<Float>(1f, copy.get(copy.size()-1).getValue()));

    GeneralPath path = new GeneralPath();
    path.moveTo(copy.get(0).getTime() * width, (1f - copy.get(0).getValue()) * height);
    for(int i = 1; i < copy.size(); i++)
        path.lineTo(copy.get(i).getTime() * width, ((1f - copy.get(i).getValue()) * height-.5f));
    g.draw(path);

    g.setStroke(new BasicStroke(3)); //Draw red bar at each keyframe
    g.setColor(new Color(255, 0, 0, 32));
    for(int i = 1; i < copy.size()-1; i++)
        g.drawLine((int) (copy.get(i).getTime() * width), 0, (int) (copy.get(i).getTime() * width), height);
}
项目:GIFKR    文件:DoubleInterpolator.java   
@Override
public void paintGraph(Graphics2D g, int width, int height) {
    FontMetrics fm = g.getFontMetrics();
    double min = (Double) minSpinner.getValue();
    double max = (Double) maxSpinner.getValue();
    double range = max - min;

    g.setColor(scaleTextColor);

    g.drawString(String.format("%.1f", range/2d+min), scaleTextInset, (height+fm.getHeight())/2 - fm.getDescent());
    g.setColor(lineColor);

    g.setStroke(new BasicStroke(3f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND));

    ArrayList<Keyframe<Double>> copy = new ArrayList<>(keyframes);
    if(dragFrame != null)
        copy.add(dragFrame);
    Collections.sort(copy);

    if(copy.get(0).getTime() != 0f)
        copy.add(0, new Keyframe<Double>(0f, copy.get(0).getValue()));
    if(copy.get(copy.size()-1).getTime() != 1f)
        copy.add(new Keyframe<Double>(1f, copy.get(copy.size()-1).getValue()));

    GeneralPath path = new GeneralPath();
    path.moveTo(copy.get(0).getTime() * width, Math.round(((1f - (copy.get(0).getValue()-min)/range) * height)));
    for(int i = 1; i < copy.size(); i++)
        path.lineTo(copy.get(i).getTime() * width, Math.round((1f - (copy.get(i).getValue()-min)/range) * height)-.5f);
    g.draw(path);

    g.setStroke(new BasicStroke(3)); //Draw red bar at each keyframe
    g.setColor(keyframeIndicatorColor);
    for(int i = 1; i < copy.size()-1; i++)
        g.drawLine((int) (copy.get(i).getTime() * width), 0, (int) (copy.get(i).getTime() * width), height);
    if(min < 0 && max > 0) {
        g.setColor(zeroLineColor);
        g.drawLine(0, (int) ((1-(-min/range))*height), width, (int) ((1-(-min/range))*height));
    }
}
项目:openjdk-jdk10    文件:CompositeStrike.java   
GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) {
    GeneralPath path = null;
    GeneralPath gp;
    int glyphIndex = 0;
    int[] tmpGlyphs;

    while (glyphIndex < glyphs.length) {
        int start = glyphIndex;
        int slot = glyphs[glyphIndex] >>> 24;
        while (glyphIndex < glyphs.length &&
               (glyphs[glyphIndex+1] >>> 24) == slot) {
            glyphIndex++;
        }
        int tmpLen = glyphIndex-start+1;
        tmpGlyphs = new int[tmpLen];
        for (int i=0;i<tmpLen;i++) {
            tmpGlyphs[i] = glyphs[i] & SLOTMASK;
        }
        gp = getStrikeForSlot(slot).getGlyphVectorOutline(tmpGlyphs, x, y);
        if (path == null) {
            path = gp;
        } else if (gp != null) {
            path.append(gp, false);
        }
    }
    if (path == null) {
        return new GeneralPath();
    } else {
        return path;
    }
}