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

📄 wexbasic.c

📁 cpc-1631的BSP包for VxWorks操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
    * (see the windows example).
    */

    uglColorAlloc (devId, &colorTable[BLACK].rgbColor, UGL_NULL, 
                   &colorTable[BLACK].uglColor, 1);
    uglColorAlloc(devId, &colorTable[BLUE].rgbColor, UGL_NULL,
                  &colorTable[BLUE].uglColor, 1);
    uglColorAlloc(devId, &colorTable[GREEN].rgbColor, UGL_NULL,
                  &colorTable[GREEN].uglColor, 1);
    uglColorAlloc(devId, &colorTable[CYAN].rgbColor, UGL_NULL,
                  &colorTable[CYAN].uglColor, 1);

    uglColorAlloc(devId, &colorTable[RED].rgbColor, UGL_NULL,
                  &colorTable[RED].uglColor, 1);
    uglColorAlloc(devId, &colorTable[MAGENTA].rgbColor, UGL_NULL,
                  &colorTable[MAGENTA].uglColor, 1);
    uglColorAlloc(devId, &colorTable[BROWN].rgbColor, UGL_NULL,
                  &colorTable[BROWN].uglColor, 1);
    uglColorAlloc(devId, &colorTable[LIGHTGRAY].rgbColor, UGL_NULL,
                  &colorTable[LIGHTGRAY].uglColor, 1);

    uglColorAlloc(devId, &colorTable[DARKGRAY].rgbColor, UGL_NULL,
                  &colorTable[DARKGRAY].uglColor, 1);
    uglColorAlloc(devId, &colorTable[LIGHTBLUE].rgbColor, UGL_NULL,
                  &colorTable[LIGHTBLUE].uglColor, 1);
    uglColorAlloc(devId, &colorTable[LIGHTGREEN].rgbColor, UGL_NULL,
                  &colorTable[LIGHTGREEN].uglColor, 1);
    uglColorAlloc(devId, &colorTable[LIGHTCYAN].rgbColor, UGL_NULL,
                  &colorTable[LIGHTCYAN].uglColor, 1);

    uglColorAlloc(devId, &colorTable[LIGHTRED].rgbColor, UGL_NULL,
                  &colorTable[LIGHTRED].uglColor, 1);
    uglColorAlloc(devId, &colorTable[LIGHTMAGENTA].rgbColor, UGL_NULL,
                  &colorTable[LIGHTMAGENTA].uglColor, 1);
    uglColorAlloc(devId, &colorTable[YELLOW].rgbColor,  UGL_NULL,
                  &colorTable[YELLOW].uglColor, 1);
    uglColorAlloc(devId, &colorTable[WHITE].rgbColor,  UGL_NULL,
                  &colorTable[WHITE].uglColor, 1);


    /*
    * Here is where we actually create the bitmap for the fill
    * pattern.  We are not going to do much with bitmaps here, just
    * use one for a fill pattern.  Bitmaps are a huge topic, so for 
    * more information about bitmaps and associated operations, look
    * at the bitmap example and WindML documentation.
    */

    patternDib.width = patternDib.stride = patternData.width;
    patternDib.height = patternData.height;
    patternDib.pImage = patternData.data;
    patternBitmap = uglMonoBitmapCreate(devId, &patternDib, 
                                        UGL_DIB_INIT_DATA, 0, UGL_NULL);

    /* Get the screen ready for some drawing. */

    ClearScreen(gc);

    /* ----------------------- Draw a line. ---------------------------
    */

    /*
    * The batch commands are bracketing each of the different drawing
    * areas.  Since we are really just drawing everything and then
    * pausing, only one batch start at the beginning and then a
    * batch stop at the end is needed.  We'll keep them around each
    * section as a reminder.  The batch commands are optional; they
    * can enhance performance by locking resources for the UGL
    * functions called within their scope.  Otherwise each UGL function
    * will do its own resource locking and un-locking which adds over-
    * head.
    */

    uglBatchStart(gc);
    
    /*
    * The foreground color is the color of the object being drawn.
    * There is a background color that is used to define the color
    * of solid fills (no pattern is defined).  Both of these values
    * are part of the Graphics Context (GC).  So here we are changing
    * the GC.  If the GC didn't contain the color, we would have to 
    * pass them to the line drawing function as parameters (since the
    * GC does contain the colors, passing them as parameters is not 
    * an option in UGL).
    */

	uglForegroundColorSet(gc, colorTable[WHITE].uglColor);

    /* Draw the line!  Diagonal from upper left to lower right. */

	uglLine(gc, 0, 0, displayWidth - 1, displayHeight - 1);
    uglBatchEnd(gc);

    /* ------------------- Draw a dashed line. ------------------------
    */

    uglBatchStart(gc);
    
    /*
    * This is another change to the a GC value.  Change the style of
    * line; there are two options from which to choose: solid and dashed.
    */

    uglLineStyleSet(gc, UGL_LINE_STYLE_DASHED);
	uglForegroundColorSet(gc, colorTable[WHITE].uglColor);

    /* Diagonal from upper right to lower left */

    uglLine(gc, displayWidth - 1, 0, 0, displayHeight -1);
    uglBatchEnd(gc);


    /* ------------------- Draw a thick line. -----------------------
    */

    uglBatchStart(gc);
	uglForegroundColorSet(gc, colorTable[WHITE].uglColor);
    uglLineStyleSet(gc, UGL_LINE_STYLE_SOLID);
	uglLineWidthSet(gc, 7);
	uglLine(gc, displayWidth / 2, 0, displayWidth / 2, displayHeight -1);
    uglBatchEnd(gc);

    /* --------------- Draw a thick dashed line. ----------------------
    */

    uglBatchStart(gc);
    uglLineStyleSet(gc, UGL_LINE_STYLE_DASHED);
	uglForegroundColorSet(gc, colorTable[WHITE].uglColor);
	uglLineWidthSet(gc, 7);
	uglLine(gc, 0, displayHeight / 2, displayWidth - 1, displayHeight / 2);
    uglBatchEnd(gc);


    /* -------------------- Draw a rectangle. -------------------------
    */

    uglBatchStart(gc);

    /*
    * Here we are setting the pattern bitmap in the GC. Since it is in
    * the GC all subsequent drawing that does a fill will use this
    * pattern.
    */

    uglFillPatternSet(gc, patternBitmap);
	uglForegroundColorSet(gc, colorTable[WHITE].uglColor);
	uglBackgroundColorSet(gc, colorTable[GREEN].uglColor);
    uglLineStyleSet(gc, UGL_LINE_STYLE_SOLID);
	uglLineWidthSet(gc, 7);
	uglRectangle(gc, displayWidth / 8, displayHeight / 8, displayWidth / 4, displayHeight / 4);
    uglBatchEnd(gc);

    /* -------------------- Draw polygons. ----------------------------
    */

    uglBatchStart(gc);
    {
    int j;
    
    /*
    * poly[] is and array of points.  The uglPolygon() function actually 
    * is looking for a list of position values and assumes they are
    * organized as alternating x and y coordinates (x, y, x, y, x, ...).
    * I am using a list of points since it creates a compatible list
    * of positions and I can then manipulate the coordinates a little
    * more conveniently.  It does require a cast in uglPolygon's parms
    * though.  The polygon definition must be a closed path; the first
    * point and the last point are equal.  Polygon lines may cross
    * without a problem.
    */

    UGL_POINT poly[] = {{0,17},{30,0},{30,10},{70,0},{66,6},{90,3},{60,10},{64,5},{24,17},{24,10},{0,17}};

    /*
    * Since the fill pattern from before is still in the GC, these
    * polygons will have the same pattern.  These polygons are rather
    * flat, so the pattern doesn't show as more than a few pixels inside.
    * Also note that the colors are set differently and that the colors
    * are applied to the fill pattern as well.
    */

    uglForegroundColorSet(gc, colorTable[LIGHTCYAN].uglColor);
    uglBackgroundColorSet(gc, colorTable[BLACK].uglColor);
	uglLineWidthSet(gc, 1);
    uglLineStyleSet(gc, UGL_LINE_STYLE_SOLID);

    /*
    * Adjust the position of the entire polygon.  Add the same x
    * coordinate adjustment to all of the x-coordinates.  The same
    * is done for all of the y coordinates.
    */

    for (j=0;j<11;j++)
        {
        poly[j].x += displayWidth / 2 - 60;
        poly[j].y += displayHeight / 2 - 40;
        }

    /*
    * Just to make it interesting, draw five of these
    * polygons, spaced 15 pixels apart vertically.
    */

    for (i = 0; i < 5;i++)
        {
        int j;
        uglPolygon(gc, 11, (UGL_POS *)poly);
        for (j=0;j<11;j++)
            {
            poly[j].x += 10;
            poly[j].y += 15;
            }
        }
    }
    uglBatchEnd(gc);

    /* ---------------- Draw solid filled polygons. -------------------
     */

    uglBatchStart(gc);
    {
    UGL_POINT poly[] = {{0,17},{30,0},{30,10},{70,0},{66,6},{90,3},{60,10},{64,5},{24,17},{24,10},{0,17}};

    int j, k;

    for (j=0;j<11;j++)
        {
        poly[j].x += displayWidth / 2 - 200;
        poly[j].y += displayHeight / 2 + 45;
        }

    /*
    * By setting the GC's fill pattern to UGL_NULL uglPolygon() will
    * assume a solid pattern for its fill.  This would be the default,
    * but since we used a different fill for the rectangle, we need to
    * set it back again now.
    */

    uglFillPatternSet(gc, UGL_NULL);
    uglForegroundColorSet(gc, colorTable[LIGHTCYAN].uglColor);
    uglBackgroundColorSet(gc, colorTable[CYAN].uglColor);
	uglLineWidthSet(gc, 1);
    uglLineStyleSet(gc, UGL_LINE_STYLE_SOLID);

    /* To make it even more interesting, draw three sets of 5 polygons. */
    
    for (k = 0; k < 3;k++)
        {
        for (i = 0; i < 5;i++)
            {
            uglPolygon(gc, 11, (UGL_POS *)poly);
            for (j=0;j<11;j++)
                {
                poly[j].x += 10;
                poly[j].y += 15;
                }
            }

        /* Move each of the 3, five polygon, sets to a different position. */

        for (j=0;j<11;j++)
            {
            poly[j].x += 100;
            poly[j].y -= 60;
            }

        }
    }
    uglBatchEnd(gc);

    /* --------------------- Draw an ellipse. -------------------------
    */

    /*
    * With the drivers that ship with WindML, the ellipse only draws
    * single pixel width borders.
    */

    uglBatchStart(gc);
	{
	uglForegroundColorSet(gc, colorTable[BLUE].uglColor);
	uglBackgroundColorSet(gc, colorTable[RED].uglColor);
	uglEllipse(gc, 5 * displayWidth / 8, displayHeight / 6, 15 * displayWidth / 16, displayHeight / 3, 0, 0, 0, 0);
	}
    uglBatchEnd(gc);

    /* ---------------- Draw a pie sliced ellipse. --------------------
    */

    /*
    * The coordinates chosen here put this pie slice on top of the
    * previous ellipse.
    */

    uglBatchStart(gc);
	{
	uglForegroundColorSet(gc, colorTable[YELLOW].uglColor);
	uglBackgroundColorSet(gc, colorTable[GREEN].uglColor);
	uglEllipse(gc, 5 * displayWidth / 8, displayHeight / 6, 15 * displayWidth / 16, displayHeight / 3, 5 * displayWidth / 8, displayHeight / 6, 5 * displayWidth / 8, displayHeight / 3);
	}
    uglBatchEnd(gc);

    /* -------- Wait for the signal to quit from basicStop. -------------
    */

    wexPause();
	
    /* ---------------- Clean everything up and exit. -----------------
    */

    uglMonoBitmapDestroy(devId, patternBitmap);
    uglGcDestroy (gc);

    uglDeinitialize();

    return(0);
    }

⌨️ 快捷键说明

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