📄 mappoly.c
字号:
/* MapPoly.C 11/5/99 */
/* *************************************************** */
#define byte unsigned char
#define word unsigned short
#include <stdlib.h>
#include "metawndo.h" /* master MetaWINDOW include file */
void Waiting(int a);
void mappoly( )
{
void quit(void);
int ScrnXmax,ScrnYmax,x,y,z,dx,dy,dxx,dyy;
rect sR, srcR, dstR;
point p_pts[7]; /* The polygon point series */
polyHead p_hdr; /* the polygon header array */
mwEvent waitEvent;
segPts s_pts[6];
ScreenRect(&sR);
RasterOp(zREPz);
ScrnXmax = sR.Xmax;
ScrnYmax = sR.Ymax;
/* set up the polygon header array */
p_hdr.polyBgn = 0;
p_hdr.polyEnd = 6;
p_hdr.polyRect= sR;
dx = (ScrnXmax+1)/4; dy=(ScrnYmax+1)/4;
dxx = dx/5;
dyy = dy/6;
PenColor(-1);
BackColor(0);
EraseRect(&sR);
x=0;
y=0;
z=0;
p_pts[z].X = x;
p_pts[z].Y = y;
z++;
p_pts[z].X = x+((dx-dxx)/2);
p_pts[z].Y = y+(dy-dyy);
z++;
p_pts[z].X = x+(dx-dxx);
p_pts[z].Y = y;
z++;
p_pts[z].X = x+(dx-dxx);
p_pts[z].Y = y+(dy-dyy);
z++;
p_pts[z].X = x+((dx-dxx)/2);
p_pts[z].Y = y;
z++;
p_pts[z].X = x;
p_pts[z].Y = y+(dy-dyy);
z++;
p_pts[z].X = x;
p_pts[z].Y = y;
FillPoly(1,&p_hdr,p_pts,9);
MoveTo( p_pts[5].X,p_pts[5].Y + 10 );
DrawString( "FillPoly" );
srcR.Xmin = x;
srcR.Ymin = y;
srcR.Xmax = srcR.Xmin + (dx-dxx);
srcR.Ymax = srcR.Ymin + (dy-dyy);
dstR.Xmin = x + (dx << 1);
dstR.Ymin = y;
dstR.Xmax = dstR.Xmin + (dx << 1);
dstR.Ymax = dstR.Ymin + (dy << 1);
MapPoly(1, &p_hdr, p_pts, &srcR, &dstR);
FillPoly(1,&p_hdr,p_pts,14);
MoveTo( p_pts[5].X,p_pts[5].Y + 10 );
DrawString( "MapPoly" );
s_pts[0].sX1 = p_pts[0].X;
s_pts[0].sY1 = p_pts[0].Y + (dy << 1);
s_pts[0].sX2 = p_pts[1].X - dxx;
s_pts[0].sY2 = p_pts[1].Y + (dy << 1);
s_pts[0].sCap = 0;
s_pts[1].sX1 = p_pts[1].X;
s_pts[1].sY1 = p_pts[1].Y + (dy << 1);
s_pts[1].sX2 = p_pts[2].X - dxx;
s_pts[1].sY2 = p_pts[2].Y + (dy << 1);
s_pts[1].sCap = 0;
s_pts[2].sX1 = p_pts[2].X;
s_pts[2].sY1 = p_pts[2].Y + (dy << 1) + dyy;
s_pts[2].sX2 = p_pts[3].X;
s_pts[2].sY2 = p_pts[3].Y + (dy << 1) - dyy;
s_pts[2].sCap = 0;
s_pts[3].sX1 = p_pts[3].X - dxx;
s_pts[3].sY1 = p_pts[3].Y + (dy << 1);
s_pts[3].sX2 = p_pts[4].X;
s_pts[3].sY2 = p_pts[4].Y + (dy << 1);
s_pts[3].sCap = 0;
s_pts[4].sX1 = p_pts[4].X - dxx;
s_pts[4].sY1 = p_pts[4].Y + (dy << 1);
s_pts[4].sX2 = p_pts[5].X;
s_pts[4].sY2 = p_pts[5].Y + (dy << 1);
s_pts[4].sCap = 0;
s_pts[5].sX1 = p_pts[5].X - dxx;
s_pts[5].sY1 = p_pts[5].Y + (dy << 1) - dyy;
s_pts[5].sX2 = p_pts[6].X - dxx;
s_pts[5].sY2 = p_pts[6].Y + (dy << 1) + dyy;
s_pts[5].sCap = 0;
PolySegment(6, s_pts);
MoveTo( s_pts[4].sX2,s_pts[4].sY2 + 10 );
DrawString( "PolySegment" );
#ifndef CYCLE
MoveTo( 0,sR.Ymax - 20 );
DrawString( "Press 'x' to exit" );
MoveTo( 0,sR.Ymax - 10 );
DrawString( "any other key to continue" );
while(!KeyEvent(1, &waitEvent));
if((waitEvent.eventChar == 'x') || (waitEvent.eventChar == 'X')) quit();
#else
#ifdef _MNT_
KeyEvent(0, &waitEvent);
if((waitEvent.eventChar == 'x') || (waitEvent.eventChar == 'X')) quit();
#endif
Waiting(150);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -