void ClippingLine(CDC*pDC,RECT r,int x1,int y1,int x2,int y2,COLORREF color)
{
int t,c1,c2;
c2=Code(r,x2,y2); //计算(x2,y2)的区域码
while(true)
{
c1=Code(r,x1,y1); //计算(x1,y1)的区域码
if(c1==0&&c2==0)
{
Line1(pDC,x1,y1,x2,y2,color);
break;
} //用(x1,y1)和(x2,y2)在窗口内绘制直线全部可见段
else if((c1&c2)!=0)
break; //直线不可见
else if(c1==0)
{
t=x1,x1=x2,x2=t;
t=y1,y1=y2,y2=t; //交换(x2,y2)与(x1,y1)
t=c1,c1=c2,c2=t; //交换c1与c2
}
if((c1&1)!=0) //(x1,y1)端点在窗口左边
x1=r.left,y1=y1+(y2-y1)*(r.left-x1)/(x2-x1);
else if((c1&2)!=0) //(x1,y1)端点在窗口右边
x1=r.right,y1=y1+(y2-y1)*(r.right-x1)/(x2-x1);
else if((c1&8)!=0) //(x1,y1)端点在窗口下边
x1=x1+(x2-x1)*(r.bottom-y1)/(y2-y1),y1=r.bottom;
else if((c1&4)!=0) //(x1,y1)端点在窗口上边
x1=x1+(x2-x1)*(r.top-y1)/(y2-y1),y1=r.top;
}
}
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余3页未读,立即下载