Annotation of researchv10dc/630/man/src/p_man/man3/polygon.3l, revision 1.1

1.1     ! root        1: .ds ZZ DEVELOPMENT PACKAGE
        !             2: .TH POLYGON 3L "630 MTG"
        !             3: .XE "polyf()"
        !             4: .XE "ptinpoly()"
        !             5: .SH NAME
        !             6: polygon: polyf, ptinpoly \- polygon routines
        !             7: .SH SYNOPSIS
        !             8: .ft B
        !             9: #include <dmd.h>
        !            10: .sp
        !            11: int polyf (bp, poly, np, t, f)
        !            12: .sp
        !            13: int ptinpoly (pt, poly, np)
        !            14: .sp
        !            15: Bitmap \(**bp;
        !            16: .br
        !            17: Point poly[ ];
        !            18: .br
        !            19: short np;
        !            20: .br
        !            21: Texture16 \(**t;
        !            22: .br
        !            23: Code f;        
        !            24: .br
        !            25: Point pt;
        !            26: .SH DESCRIPTION
        !            27: The
        !            28: .I polyf
        !            29: function
        !            30: is used to fill a closed polygon defined by the
        !            31: .I np
        !            32: Points in the array of Points
        !            33: .IR poly .
        !            34: The Points are absolute with respect to the Bitmap
        !            35: .I bp.
        !            36: The polygon is filled with the Texture16
        !            37: .I t
        !            38: using Code
        !            39: .I f.
        !            40: The
        !            41: .I polyf
        !            42: call
        !            43: returns 0 if the polygon is filled and -1 if a memory allocation
        !            44: error occurred during processing, in which case the polygon
        !            45: is not filled.
        !            46: .PP
        !            47: The
        !            48: .I ptinpoly
        !            49: call
        !            50: determines whether the Point
        !            51: .I pt
        !            52: is contained in the polygon defined by
        !            53: .I poly
        !            54: and
        !            55: .I np.
        !            56: The
        !            57: .I ptinpoly
        !            58: function
        !            59: returns 1 if the Point is inside the polygon,
        !            60: 0 if the Point is not inside the polygon,
        !            61: and -1 if a memory allocation error occurs.
        !            62: .PP
        !            63: The polygon can consist of an arbitrary number of filled and unfilled
        !            64: regions.
        !            65: For example, a doughnut shape could be formed
        !            66: without filling
        !            67: the portion of the Bitmap corresponding to the hole of the doughnut.
        !            68: This permits a preservation of any background information previously
        !            69: placed in the Bitmap.
        !            70: Each region, filled or unfilled, is delimited
        !            71: by a Point whose x-coordinate has a value of
        !            72: .I \s-1POLY_F\s+1
        !            73: (defined in \f3dmd.h\f1).
        !            74: This Point in
        !            75: .I poly
        !            76: is ignored and merely serves as a flag indicating
        !            77: the start of a new region.
        !            78: There is always an assumed line connecting the first and last Point
        !            79: of each region.
        !            80: .SH EXAMPLE
        !            81: The following code permits interactive drawing of
        !            82: a polygon with interior regions, fills it, and then
        !            83: uses \f2ptinpoly\f1 to determine if the mouse is inside the polygon.
        !            84: Button 1 is used to draw the points, and button 2 sets a point to \f2POLY_F\f1.  After the polygon fills, clicking button 1 with the mouse inside the polygon will ring the terminal bell.  Clicking button 3 will exit
        !            85: the drawing and exit the program.
        !            86: .bp
        !            87: .PP
        !            88: .RS 3
        !            89: .nf
        !            90: \s-1
        !            91: .ft CM
        !            92: #include <dmd.h>
        !            93: 
        !            94: Point npoly[1000];
        !            95: 
        !            96: main()
        !            97: {
        !            98:        register int i, j;
        !            99:        register char c;
        !           100: 
        !           101:        request (MOUSE|KBD);
        !           102: 
        !           103:        i = 0;
        !           104:        for (;;)
        !           105:        {
        !           106:                while (i < 1000){
        !           107:                        wait (MOUSE);
        !           108:                        if( button1 () ){
        !           109:                                npoly[i++] = mouse.xy;
        !           110:                                point (&display, mouse.xy,
        !           111:                                    F_STORE);
        !           112:                                sleep (10);
        !           113:                                continue;
        !           114:                        }
        !           115:                        if( button2 () ){
        !           116:                                npoly[i++].x = POLY_F;
        !           117:                                continue;
        !           118:                        }
        !           119:                        if( button3 () ) break;
        !           120:                }
        !           121:                polyf (&display, npoly, i, &T_black,
        !           122:                    F_STORE);
        !           123: 
        !           124:                wait(MOUSE);
        !           125: 
        !           126:                while( !button3() ){
        !           127:                        wait (MOUSE);
        !           128:                        if( button1() && ptinpoly
        !           129:                            (mouse.xy, npoly, i) )
        !           130:                                ringbell();
        !           131: 
        !           132:                }
        !           133:                break;
        !           134:        }
        !           135: }
        !           136: \fR
        !           137: .fi
        !           138: .RE
        !           139: \s+1

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.