Search in sources :

Example 1 with TextBox

use of org.jfree.text.TextBox in project SIMVA-SoS by SESoS.

the class PiePlot method drawLeftLabel.

/**
 * Draws a section label on the left side of the pie chart.
 *
 * @param g2  the graphics device.
 * @param state  the state.
 * @param record  the label record.
 */
protected void drawLeftLabel(Graphics2D g2, PiePlotState state, PieLabelRecord record) {
    double anchorX = state.getLinkArea().getMinX();
    double targetX = anchorX - record.getGap();
    double targetY = record.getAllocatedY();
    if (this.labelLinksVisible) {
        double theta = record.getAngle();
        double linkX = state.getPieCenterX() + Math.cos(theta) * state.getPieWRadius() * record.getLinkPercent();
        double linkY = state.getPieCenterY() - Math.sin(theta) * state.getPieHRadius() * record.getLinkPercent();
        double elbowX = state.getPieCenterX() + Math.cos(theta) * state.getLinkArea().getWidth() / 2.0;
        double elbowY = state.getPieCenterY() - Math.sin(theta) * state.getLinkArea().getHeight() / 2.0;
        double anchorY = elbowY;
        g2.setPaint(this.labelLinkPaint);
        g2.setStroke(this.labelLinkStroke);
        PieLabelLinkStyle style = getLabelLinkStyle();
        if (style.equals(PieLabelLinkStyle.STANDARD)) {
            g2.draw(new Line2D.Double(linkX, linkY, elbowX, elbowY));
            g2.draw(new Line2D.Double(anchorX, anchorY, elbowX, elbowY));
            g2.draw(new Line2D.Double(anchorX, anchorY, targetX, targetY));
        } else if (style.equals(PieLabelLinkStyle.QUAD_CURVE)) {
            QuadCurve2D q = new QuadCurve2D.Float();
            q.setCurve(targetX, targetY, anchorX, anchorY, elbowX, elbowY);
            g2.draw(q);
            g2.draw(new Line2D.Double(elbowX, elbowY, linkX, linkY));
        } else if (style.equals(PieLabelLinkStyle.CUBIC_CURVE)) {
            CubicCurve2D c = new CubicCurve2D.Float();
            c.setCurve(targetX, targetY, anchorX, anchorY, elbowX, elbowY, linkX, linkY);
            g2.draw(c);
        }
    }
    TextBox tb = record.getLabel();
    tb.draw(g2, (float) targetX, (float) targetY, RectangleAnchor.RIGHT);
}
Also used : CubicCurve2D(java.awt.geom.CubicCurve2D) TextBox(org.jfree.text.TextBox) QuadCurve2D(java.awt.geom.QuadCurve2D) Line2D(java.awt.geom.Line2D)

Example 2 with TextBox

use of org.jfree.text.TextBox in project SIMVA-SoS by SESoS.

the class PiePlot method drawRightLabels.

/**
 * Draws the right labels.
 *
 * @param keys  the keys.
 * @param g2  the graphics device.
 * @param plotArea  the plot area.
 * @param linkArea  the link area.
 * @param maxLabelWidth  the maximum label width.
 * @param state  the state.
 */
protected void drawRightLabels(KeyedValues keys, Graphics2D g2, Rectangle2D plotArea, Rectangle2D linkArea, float maxLabelWidth, PiePlotState state) {
    // draw the right labels...
    this.labelDistributor.clear();
    double lGap = plotArea.getWidth() * this.labelGap;
    double verticalLinkRadius = state.getLinkArea().getHeight() / 2.0;
    for (int i = 0; i < keys.getItemCount(); i++) {
        String label = this.labelGenerator.generateSectionLabel(this.dataset, keys.getKey(i));
        if (label != null) {
            TextBlock block = TextUtilities.createTextBlock(label, this.labelFont, this.labelPaint, maxLabelWidth, new G2TextMeasurer(g2));
            TextBox labelBox = new TextBox(block);
            labelBox.setBackgroundPaint(this.labelBackgroundPaint);
            labelBox.setOutlinePaint(this.labelOutlinePaint);
            labelBox.setOutlineStroke(this.labelOutlineStroke);
            if (this.shadowGenerator == null) {
                labelBox.setShadowPaint(this.labelShadowPaint);
            } else {
                labelBox.setShadowPaint(null);
            }
            labelBox.setInteriorGap(this.labelPadding);
            double theta = Math.toRadians(keys.getValue(i).doubleValue());
            double baseY = state.getPieCenterY() - Math.sin(theta) * verticalLinkRadius;
            double hh = labelBox.getHeight(g2);
            this.labelDistributor.addPieLabelRecord(new PieLabelRecord(keys.getKey(i), theta, baseY, labelBox, hh, lGap / 2.0 + lGap / 2.0 * Math.cos(theta), 1.0 - getLabelLinkDepth() + getExplodePercent(keys.getKey(i))));
        }
    }
    double hh = plotArea.getHeight();
    // hh * getInteriorGap();
    double gap = 0.00;
    this.labelDistributor.distributeLabels(plotArea.getMinY() + gap, hh - 2 * gap);
    for (int i = 0; i < this.labelDistributor.getItemCount(); i++) {
        drawRightLabel(g2, state, this.labelDistributor.getPieLabelRecord(i));
    }
}
Also used : G2TextMeasurer(org.jfree.text.G2TextMeasurer) TextBox(org.jfree.text.TextBox) TextBlock(org.jfree.text.TextBlock) RadialGradientPaint(java.awt.RadialGradientPaint) Paint(java.awt.Paint)

Example 3 with TextBox

use of org.jfree.text.TextBox in project SIMVA-SoS by SESoS.

the class PieLabelRecordTest method testEquals.

/**
 * Confirm that the equals method can distinguish all the required fields.
 */
@Test
public void testEquals() {
    PieLabelRecord p1 = new PieLabelRecord("A", 1.0, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    PieLabelRecord p2 = new PieLabelRecord("A", 1.0, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    assertTrue(p2.equals(p1));
    p1 = new PieLabelRecord("B", 1.0, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.0, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.0, new TextBox("B"), 3.0, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("B"), 3.0, 4.0, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("B"), 3.0, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.0, 4.0, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.0, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.0, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.0, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.4, 5.0);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.4, 5.0);
    assertTrue(p1.equals(p2));
    p1 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.4, 5.5);
    assertFalse(p1.equals(p2));
    p2 = new PieLabelRecord("B", 1.1, 2.2, new TextBox("C"), 3.3, 4.4, 5.5);
    assertTrue(p1.equals(p2));
}
Also used : TextBox(org.jfree.text.TextBox) Test(org.junit.Test)

Example 4 with TextBox

use of org.jfree.text.TextBox in project SIMVA-SoS by SESoS.

the class PiePlot method drawLeftLabels.

/**
 * Draws the left labels.
 *
 * @param leftKeys  a collection of keys and angles (to the middle of the
 *         section, in degrees) for the sections on the left side of the
 *         plot.
 * @param g2  the graphics device.
 * @param plotArea  the plot area.
 * @param linkArea  the link area.
 * @param maxLabelWidth  the maximum label width.
 * @param state  the state.
 */
protected void drawLeftLabels(KeyedValues leftKeys, Graphics2D g2, Rectangle2D plotArea, Rectangle2D linkArea, float maxLabelWidth, PiePlotState state) {
    this.labelDistributor.clear();
    double lGap = plotArea.getWidth() * this.labelGap;
    double verticalLinkRadius = state.getLinkArea().getHeight() / 2.0;
    for (int i = 0; i < leftKeys.getItemCount(); i++) {
        String label = this.labelGenerator.generateSectionLabel(this.dataset, leftKeys.getKey(i));
        if (label != null) {
            TextBlock block = TextUtilities.createTextBlock(label, this.labelFont, this.labelPaint, maxLabelWidth, new G2TextMeasurer(g2));
            TextBox labelBox = new TextBox(block);
            labelBox.setBackgroundPaint(this.labelBackgroundPaint);
            labelBox.setOutlinePaint(this.labelOutlinePaint);
            labelBox.setOutlineStroke(this.labelOutlineStroke);
            if (this.shadowGenerator == null) {
                labelBox.setShadowPaint(this.labelShadowPaint);
            } else {
                labelBox.setShadowPaint(null);
            }
            labelBox.setInteriorGap(this.labelPadding);
            double theta = Math.toRadians(leftKeys.getValue(i).doubleValue());
            double baseY = state.getPieCenterY() - Math.sin(theta) * verticalLinkRadius;
            double hh = labelBox.getHeight(g2);
            this.labelDistributor.addPieLabelRecord(new PieLabelRecord(leftKeys.getKey(i), theta, baseY, labelBox, hh, lGap / 2.0 + lGap / 2.0 * -Math.cos(theta), 1.0 - getLabelLinkDepth() + getExplodePercent(leftKeys.getKey(i))));
        }
    }
    double hh = plotArea.getHeight();
    double gap = hh * getInteriorGap();
    this.labelDistributor.distributeLabels(plotArea.getMinY() + gap, hh - 2 * gap);
    for (int i = 0; i < this.labelDistributor.getItemCount(); i++) {
        drawLeftLabel(g2, state, this.labelDistributor.getPieLabelRecord(i));
    }
}
Also used : G2TextMeasurer(org.jfree.text.G2TextMeasurer) TextBox(org.jfree.text.TextBox) TextBlock(org.jfree.text.TextBlock) RadialGradientPaint(java.awt.RadialGradientPaint) Paint(java.awt.Paint)

Example 5 with TextBox

use of org.jfree.text.TextBox in project SIMVA-SoS by SESoS.

the class PiePlot method drawRightLabel.

/**
 * Draws a section label on the right side of the pie chart.
 *
 * @param g2  the graphics device.
 * @param state  the state.
 * @param record  the label record.
 */
protected void drawRightLabel(Graphics2D g2, PiePlotState state, PieLabelRecord record) {
    double anchorX = state.getLinkArea().getMaxX();
    double targetX = anchorX + record.getGap();
    double targetY = record.getAllocatedY();
    if (this.labelLinksVisible) {
        double theta = record.getAngle();
        double linkX = state.getPieCenterX() + Math.cos(theta) * state.getPieWRadius() * record.getLinkPercent();
        double linkY = state.getPieCenterY() - Math.sin(theta) * state.getPieHRadius() * record.getLinkPercent();
        double elbowX = state.getPieCenterX() + Math.cos(theta) * state.getLinkArea().getWidth() / 2.0;
        double elbowY = state.getPieCenterY() - Math.sin(theta) * state.getLinkArea().getHeight() / 2.0;
        double anchorY = elbowY;
        g2.setPaint(this.labelLinkPaint);
        g2.setStroke(this.labelLinkStroke);
        PieLabelLinkStyle style = getLabelLinkStyle();
        if (style.equals(PieLabelLinkStyle.STANDARD)) {
            g2.draw(new Line2D.Double(linkX, linkY, elbowX, elbowY));
            g2.draw(new Line2D.Double(anchorX, anchorY, elbowX, elbowY));
            g2.draw(new Line2D.Double(anchorX, anchorY, targetX, targetY));
        } else if (style.equals(PieLabelLinkStyle.QUAD_CURVE)) {
            QuadCurve2D q = new QuadCurve2D.Float();
            q.setCurve(targetX, targetY, anchorX, anchorY, elbowX, elbowY);
            g2.draw(q);
            g2.draw(new Line2D.Double(elbowX, elbowY, linkX, linkY));
        } else if (style.equals(PieLabelLinkStyle.CUBIC_CURVE)) {
            CubicCurve2D c = new CubicCurve2D.Float();
            c.setCurve(targetX, targetY, anchorX, anchorY, elbowX, elbowY, linkX, linkY);
            g2.draw(c);
        }
    }
    TextBox tb = record.getLabel();
    tb.draw(g2, (float) targetX, (float) targetY, RectangleAnchor.LEFT);
}
Also used : CubicCurve2D(java.awt.geom.CubicCurve2D) TextBox(org.jfree.text.TextBox) QuadCurve2D(java.awt.geom.QuadCurve2D) Line2D(java.awt.geom.Line2D)

Aggregations

TextBox (org.jfree.text.TextBox)7 Test (org.junit.Test)3 Paint (java.awt.Paint)2 RadialGradientPaint (java.awt.RadialGradientPaint)2 CubicCurve2D (java.awt.geom.CubicCurve2D)2 Line2D (java.awt.geom.Line2D)2 QuadCurve2D (java.awt.geom.QuadCurve2D)2 G2TextMeasurer (org.jfree.text.G2TextMeasurer)2 TextBlock (org.jfree.text.TextBlock)2