?? pieplot3d.java
字號:
}
else { // the segment starts at the back (still extending
// CLOCKWISE)
if (!isAngleAtFront(end)) {
if (extent > -180.0) { // whole segment stays at the back
if (drawBack) {
Area side = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
arc.getEndPoint().getX()
- arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side.intersect(back);
g2.setPaint(paint);
g2.fill(side);
g2.setPaint(outlinePaint);
g2.draw(side);
}
}
else { // starts at the back, wraps around front, and
// finishes at back again
Area side1 = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side1.intersect(back);
Area side2 = new Area(
new Rectangle2D.Double(
plotArea.getX(), plotArea.getY(),
arc.getEndPoint().getX() - plotArea.getX(),
plotArea.getHeight()
)
);
side2.intersect(back);
g2.setPaint(paint);
if (drawBack) {
g2.fill(side1);
g2.fill(side2);
}
if (drawFront) {
g2.fill(front);
}
g2.setPaint(outlinePaint);
if (drawBack) {
g2.draw(side1);
g2.draw(side2);
}
if (drawFront) {
g2.draw(front);
}
}
}
else { // starts at back, finishes at front (CLOCKWISE)
if (drawBack) {
Area side1 = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side1.intersect(back);
g2.setPaint(paint);
g2.fill(side1);
g2.setPaint(outlinePaint);
g2.draw(side1);
}
if (drawFront) {
Area side2 = new Area(
new Rectangle2D.Double(
arc.getEndPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getEndPoint().getX(),
plotArea.getHeight()
)
);
side2.intersect(front);
g2.setPaint(paint);
g2.fill(side2);
g2.setPaint(outlinePaint);
g2.draw(side2);
}
}
}
}
else if (extent > 0.0) { // the pie sections are arranged ANTICLOCKWISE
if (isAngleAtFront(start)) { // segment starts at the front
if (!isAngleAtBack(end)) { // and finishes at the front
if (extent < 180.0) { // segment only occupies the front
if (drawFront) {
Area side = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
arc.getEndPoint().getX()
- arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side.intersect(front);
g2.setPaint(paint);
g2.fill(side);
g2.setPaint(outlinePaint);
g2.draw(side);
}
}
else { // segments wraps right around the back...
Area side1 = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side1.intersect(front);
Area side2 = new Area(
new Rectangle2D.Double(
plotArea.getX(), plotArea.getY(),
arc.getEndPoint().getX() - plotArea.getX(),
plotArea.getHeight()
)
);
side2.intersect(front);
g2.setPaint(paint);
if (drawFront) {
g2.fill(side1);
g2.fill(side2);
}
if (drawBack) {
g2.fill(back);
}
g2.setPaint(outlinePaint);
if (drawFront) {
g2.draw(side1);
g2.draw(side2);
}
if (drawBack) {
g2.draw(back);
}
}
}
else { // segments starts at front and finishes at back...
if (drawBack) {
Area side2 = new Area(
new Rectangle2D.Double(
arc.getEndPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getEndPoint().getX(),
plotArea.getHeight()
)
);
side2.intersect(back);
g2.setPaint(paint);
g2.fill(side2);
g2.setPaint(outlinePaint);
g2.draw(side2);
}
if (drawFront) {
Area side1 = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side1.intersect(front);
g2.setPaint(paint);
g2.fill(side1);
g2.setPaint(outlinePaint);
g2.draw(side1);
}
}
}
else { // segment starts at back
if (!isAngleAtFront(end)) {
if (extent < 180.0) { // and finishes at back
if (drawBack) {
Area side = new Area(
new Rectangle2D.Double(
arc.getEndPoint().getX(), plotArea.getY(),
arc.getStartPoint().getX()
- arc.getEndPoint().getX(),
plotArea.getHeight()
)
);
side.intersect(back);
g2.setPaint(paint);
g2.fill(side);
g2.setPaint(outlinePaint);
g2.draw(side);
}
}
else { // starts at back and wraps right around to the
// back again
Area side1 = new Area(
new Rectangle2D.Double(
arc.getStartPoint().getX(), plotArea.getY(),
plotArea.getX() - arc.getStartPoint().getX(),
plotArea.getHeight()
)
);
side1.intersect(back);
Area side2 = new Area(
new Rectangle2D.Double(
arc.getEndPoint().getX(), plotArea.getY(),
plotArea.getMaxX() - arc.getEndPoint().getX(),
plotArea.getHeight()
)
);
side2.intersect(back);
g2.setPaint(paint);
if (drawBack) {
g2.fill(side1);
g2.fill(side2);
}
if (drawFront) {
g2.fill(front);
}
g2.setPaint(outlinePaint);
if (drawBack) {
g2.draw(side1);
g2.draw(side2);
}
if (drawFront) {
g2.draw(front);
}
}
}
else { // starts at the back and finishes at the front
// (wrapping the left side)
if (drawBack) {
Area side1 = new Area(
new Rectangle2D.Double(
plotArea.getX(), plotArea.getY(),
arc.getStartPoint().getX() - plotArea.getX(),
plotArea.getHeight()
)
);
side1.intersect(back);
g2.setPaint(paint);
g2.fill(side1);
g2.setPaint(outlinePaint);
g2.draw(side1);
}
if (drawFront) {
Area side2 = new Area(
new Rectangle2D.Double(
plotArea.getX(), plotArea.getY(),
arc.getEndPoint().getX() - plotArea.getX(),
plotArea.getHeight()
)
);
side2.intersect(front);
g2.setPaint(paint);
g2.fill(side2);
g2.setPaint(outlinePaint);
g2.draw(side2);
}
}
}
}
}
/**
* Returns a short string describing the type of plot.
*
* @return <i>Pie 3D Plot</i>.
*/
public String getPlotType () {
return localizationResources.getString("Pie_3D_Plot");
}
/**
* A utility method that returns true if the angle represents a point at
* the front of the 3D pie chart. 0 - 180 degrees is the back, 180 - 360
* is the front.
*
* @param angle the angle.
*
* @return A boolean.
*/
private boolean isAngleAtFront(double angle) {
return (Math.sin(Math.toRadians(angle)) < 0.0);
}
/**
* A utility method that returns true if the angle represents a point at
* the back of the 3D pie chart. 0 - 180 degrees is the back, 180 - 360
* is the front.
*
* @param angle the angle.
*
* @return <code>true</code> if the angle is at the back of the pie.
*/
private boolean isAngleAtBack(double angle) {
return (Math.sin(Math.toRadians(angle)) > 0.0);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -