⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawcube.jsp

📁 提供 精通Java Web动态图表编程 一书的源代码, 大家赶快下载呀
💻 JSP
字号:
<!--
	Fig. 6.04_08: drawCube.jsp
	功能:绘制立方体
-->
<%@ page language="java" contentType="image/png;charset=GB2312"
	import="java.awt.image.*"
	import="java.awt.*"
	import="javax.imageio.*"
%>

<%!
    int baseXPts = 10, baseYPts = 200; // 缺省的立方体基准点坐标
    int width = 100; // 缺省的立方体的宽度
    int height = 120; // 缺省的立方体的高度
    int thickness = 30; // 缺省的立方体的厚度

    int alpha = 45; // 缺省的平行四边形的夹角
    int offsetX = 0; // 偏移量X
    int offsetY = 0; // 偏移量Y
    final int PARALLELOGRAM_POINT_NUMBER = 4; // 平行四边形的端点数目

    // 顶部平行四边形端点的X坐标数组
    int[] pTopX = new int[PARALLELOGRAM_POINT_NUMBER];
    // 顶部平行四边形端点的Y坐标数组
    int[] pTopY = new int[PARALLELOGRAM_POINT_NUMBER];

    // 右侧面平行四边形端点的X坐标数组
    int[] pRightX = new int[PARALLELOGRAM_POINT_NUMBER];
    // 右侧面平行四边形端点的Y坐标数组
    int[] pRightY = new int[PARALLELOGRAM_POINT_NUMBER];

    // 立方体的方向
    //final int UP = 1, RIGHT = 2, DOWN = 3, LEFT = 4;

    // 立方体的绘制风格
    final int OUTLINE = 1, FILL = 2, MIXED = 3;

    Color rFrontFillColor = new Color(178, 0, 0); // 缺省的填充颜色
    Color pTopFillColor = Color.RED; // 缺省的填充颜色
    Color pRightFillColor = new Color(124, 0, 0); // 缺省的填充颜色
    Color outlineColor = Color.LIGHT_GRAY; //缺省的立方体轮廓颜色

    // 设置整个立方体的轮廓颜色
    public void setOutlineColor(Color outlineColor)
    {
        this.outlineColor = outlineColor;
    }

    // 设置正面实心矩形的填充颜色
    public void setFrontFillColor(Color rFrontFillColor)
    {
        this.rFrontFillColor = rFrontFillColor;
    }

    // 设置顶部实心平行四边形的填充颜色
    public void setPTopFillColor(Color pTopFillColor)
    {
        this.pTopFillColor = pTopFillColor;
    }

    // 设置右侧面实心平行四边形的填充颜色
    public void setPRightFillColor(Color pRightFillColor)
    {
        this.pRightFillColor = pRightFillColor;
    }


    // 设置基准点的坐标
    public void setBasePoint(int baseXPts, int baseYPts)
    {
        this.baseXPts = baseXPts;
        this.baseYPts = baseYPts;
    }

    // 设置立方体的宽度
    public void setWidth(int width)
    {
        this.width = width;
    }

    // 设置立方体的高度
    public void setHeight(int height)
    {
        this.height = height;
    }

    // 设置立方体的厚度
    public void setThickness(int thickness)
    {
        this.thickness = thickness;
    }

    // 设置平行四边形的夹角alpha
    public void setAngle(int alpha)
    {
        this.alpha = alpha;
    }

    // 计算offsetX和offsetY的值
    public void calculateOffset()
    {
        offsetX = (int)(Math.cos(alpha * Math.PI / 180) * thickness + 0.5);
        offsetY = (int)(Math.sin(alpha * Math.PI / 180) * thickness + 0.5);
    }

    // 设置绘制正面矩形所需的数据
    public void buildRFront()
    {
        pRightX[0] = baseXPts + width;
        pRightY[0] = baseYPts;

        pRightX[1] = pRightX[0];
        pRightY[1] = baseYPts - height;

        pTopX[0] = baseXPts;
        pTopY[0] = pRightY[1];
    }

    // 设置绘制顶部平行四边形所需的数据
    public void buildPTop()
    {
        pTopX[1] = pRightX[1];
        pTopY[1] = pRightY[1];

        pTopX[2] = pTopX[1] + offsetX;
        pTopY[2] = pTopY[1] - offsetY;

        pTopX[3] = pTopX[0] + offsetX;
        pTopY[3] = pTopY[2];
    }

    // 设置绘制右侧面平行四边形所需的数据
    public void buildPRight()
    {
        pRightX[2] = pTopX[2];
        pRightY[2] = pTopY[2];

        pRightX[3] = pRightX[2];
        pRightY[3] = pRightY[2] + height;
    }

    // 绘制立方体
    public void drawCube(int cubeStyle, Graphics g)
    {
        calculateOffset();
        buildRFront();
        buildPTop();
        buildPRight();

        switch (cubeStyle)
        {
            case 1:
                g.setColor(outlineColor);
                g.drawPolygon(pTopX, pTopY, PARALLELOGRAM_POINT_NUMBER);

                g.drawRect(pTopX[0], pTopY[0], width, height);

                g.drawPolygon(pRightX, pRightY, PARALLELOGRAM_POINT_NUMBER);
                break;

            case 2:
                g.setColor(pTopFillColor);
                g.fillPolygon(pTopX, pTopY, PARALLELOGRAM_POINT_NUMBER);

                g.setColor(rFrontFillColor);
                g.fillRect(pTopX[0], pTopY[0], width, height);

                g.setColor(pRightFillColor);
                g.fillPolygon(pRightX, pRightY, PARALLELOGRAM_POINT_NUMBER);

                break;

            case 3:
                g.setColor(pTopFillColor);
                g.fillPolygon(pTopX, pTopY, PARALLELOGRAM_POINT_NUMBER);

                g.setColor(rFrontFillColor);
                g.fillRect(pTopX[0], pTopY[0], width, height);

                g.setColor(pRightFillColor);
                g.fillPolygon(pRightX, pRightY, PARALLELOGRAM_POINT_NUMBER);

                g.setColor(outlineColor);
                g.drawPolygon(pTopX, pTopY, PARALLELOGRAM_POINT_NUMBER);

                g.drawRect(pTopX[0], pTopY[0], width, height);

                g.drawPolygon(pRightX, pRightY, PARALLELOGRAM_POINT_NUMBER);
                break;
        }
    }
%>

<%
		// 清空缓冲区
		response.reset();

		// 注意这里的MIME类型
		response.setContentType("image/png");

		// 创建一个 640X480 的图像
		int width = 640, height = 480;

		BufferedImage image = new BufferedImage(width, height,
		  BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();

		// 填充背景
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);

        g.setColor(Color.BLACK);

		// 设置字体
        g.setFont(new Font("汉真广标", Font.PLAIN, 35));
        g.drawString("立方体的画法", 10, 35);

        // 绘制默认立方体		
        drawCube(FILL, g);

        // 绘制立方体2
        setBasePoint(150, 300);
        setWidth(80);
        setHeight(220);
        setThickness(40);
        setAngle(60);
        setPTopFillColor(new Color(0, 0, 255));
        setFrontFillColor(new Color(0, 0, 178));
        setPRightFillColor(new Color(0, 0, 124));
        drawCube(FILL, g);

        // 绘制立方体3
        setBasePoint(280, 300);
        setOutlineColor(Color.ORANGE);
        drawCube(OUTLINE, g);

        // 绘制立方体4
        setBasePoint(400, 280);
        setWidth(120);
        setHeight(180);
        setThickness(20);
        setAngle(30);
        setPTopFillColor(Color.GREEN);
        setFrontFillColor(Color.MAGENTA);
        setPRightFillColor(Color.PINK);
        setOutlineColor(Color.BLACK);
        drawCube(MIXED, g);

		// 部署图形
		g.dispose();

		// 利用ImageIO类的write方法对图像进行编码
		ServletOutputStream sos = response.getOutputStream();
		ImageIO.write(image, "PNG", sos);
		sos.close();
%>


<%
/**************************************************************************
 * (C) Copyright 2004-2005 by Jingkui Zhong(钟京馗) and Huan Tang(唐桓).  *
 * All Rights Reserved.                                                   *
 *                                                                        *
 * DISCLAIMER: The authors of this code have used their                   *
 * best efforts in preparing the code. These efforts include the          *
 * development, research, and testing of the theories and programs        *
 * to determine their effectiveness. The authors and publisher make       *
 * no warranty of any kind, expressed or implied, with regard to these    *
 * programs or to the documentation contained in these codes. The authors *
 * shall not be liable in any event for incidental or consequential       *
 * damages in connection with, or arising out of, the furnishing,         *
 * performance, or use of these programs.                                 *
 **************************************************************************/

%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -