This blog is under construction

Sunday 8 September 2013

Horizontal Bar Chart - Animation using C graphics

Implement horizontal bar chart animation using C graphics


  #include <stdio.h>
  #include <conio.h>
  #include <graphics.h>
  #include <dos.h>

  int main() {
        char str[64];
        /* request auto detection */
        int gdriver = DETECT, gmode, err;
        int i, midx, midy, tmp1, tmp2;
        int v[4][2], w[4][2], x[4][2], y[4][2], z[4][2];
        char depart[5][32] = {"R&D", "ERS", "N/W",
                                "HR","DEV"};

        /* initialize graphic mode */
        initgraph(&gdriver, &gmode, "C:/TURBOC3/BGI");
        err = graphresult();

        if (err != grOk) {
                /* error occurred */
                printf("Graphics Error: %s",
                                grapherrormsg(err));
                return 0;
        }

        /* mid position at x and y-axis */
        midx = getmaxx() / 2;
        midy = getmaxy() / 2;

        /* y and x-axis */
        line(70, 0, 70, getmaxy() - 50);
        line(70, getmaxy() - 50, getmaxx(), getmaxy() - 50);

        /* departments at y axis */
        for (i = 0; i < 5; i++) {
                settextstyle(TRIPLEX_FONT, HORIZ_DIR, 1);
                settextjustify(CENTER_TEXT, CENTER_TEXT);
                moveto(40, getmaxy() - 100 - i * 90);
                outtext(depart[i]);
        }

        /* y axis represents departments */
        moveto(5, midy);
        settextstyle(TRIPLEX_FONT, VERT_DIR, 1);
        settextjustify(CENTER_TEXT, CENTER_TEXT);
        sprintf(str, "%s", "DEPARTMENTS");
        outtext(str);

        /* x-axis represents revenue */
        moveto(midx, getmaxy() - 10);
        settextstyle(TRIPLEX_FONT, HORIZ_DIR, 1);
        sprintf(str, "%s", "REVENUE");
        outtext(str);

        tmp1 = getmaxy() - 40;
        tmp2 = 135;

        /* units at y-axis */
        for (i = 0; i < 5; i++) {
                moveto(tmp2, tmp1);
                sprintf(str, "%d", 20 + i * 20);
                outtext(str);
                tmp2 = tmp2 + 110;
        }

        /* initial positions for horizontal bars */
        v[0][0] = 71, v[0][1] = getmaxy() - 70;
        v[1][0] = 71, v[1][1] = getmaxy() - 130;

        w[0][0] = 71, w[0][1] = getmaxy() - 160;
        w[1][0] = 71, w[1][1] = getmaxy() - 220;

        x[0][0] = 71, x[0][1] = getmaxy() - 250;
        x[1][0] = 71, x[1][1] = getmaxy() - 310;

        y[0][0] = 71, y[0][1] = getmaxy() - 340;
        y[1][0] = 71, y[1][1] = getmaxy() - 400;

        z[0][0] = 71, z[0][1] = getmaxy() - 430;
        z[1][0] = 71, z[1][1] = getmaxy() - 490;

        /* animate horizontal bars in bar graph */
        for (i = 0; i < getmaxx() - 150; i++) {
                /* horizontal bar 1- R&D */
                if (i <= getmaxx() - 180) {
                        setcolor(BLUE);
                        line(v[0][0], v[0][1], v[1][0], v[1][1]);
                        v[0][0] = v[0][0] + 1;
                        v[1][0] = v[1][0] + 1;
                }

                /* horizontal bar 2- ERS */
                if (i <= getmaxx() - 250) {
                        setcolor(LIGHTRED);
                        line(w[0][0], w[0][1], w[1][0], w[1][1]);
                        w[0][0] = w[0][0] + 1;
                        w[1][0] = w[1][0] + 1;
                }

                /* horizontal bar 3 - N/W */
                if (i <= getmaxx() - 350) {
                        setcolor(LIGHTGREEN);
                        line(x[0][0], x[0][1], x[1][0], x[1][1]);
                        x[0][0] = x[0][0] + 1;
                        x[1][0] = x[1][0] + 1;
                }

                /* horizontal bar 4 - HR */
                if (i <= getmaxx() - 470) {
                        setcolor(DARKGRAY);
                        line(y[0][0], y[0][1], y[1][0], y[1][1]);
                        y[0][0] = y[0][0] + 1;
                        y[1][0] = y[1][0] + 1;
                }

                /* horizontal bar 5 - DEV */
                if (i <= getmaxx() - 550) {
                        setcolor(YELLOW);
                        line(z[0][0], z[0][1], z[1][0], z[1][1]);
                        z[0][0] = z[0][0] + 1;
                        z[1][0] = z[1][0] + 1;
                }

                /* sleep for 25 milliseconds */
                delay(25);
        }

        getch();

        /* deallocate memory allocated for graphic screen */
        closegraph();
        return 0;
  }





Output: (Animate horizontal bar chart using C graphics)


No comments:

Post a Comment