第二章 交互式绘图软件开发与设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、区域填充函数
下列填充函数不画边界线,只填充内部区域。
1.FillRect:用指定画刷填充一个矩形区域 void FillRect (LPCRECT lpRect, CBrush * pBrush); 单色填充: void FillSolidRect (LPCRECT lpRect, COLORRER clr); void FillSolidRect (int x,int y,int cx,int cy, COLORRER clr); 用当前反色填充矩形: void InvertRect (LPCRECT lpRect);
三、坐标系统设置与转换
坐标系统是通过确定逻辑坐标与设备坐标之间的关 系来定义的。逻辑坐标是指用户使用CDC绘图函数绘制 图形的坐标,设备坐标是指计算机系统使用输出设备(显 示器或打印机)来绘出图形的坐标。设备坐标是用户不能 改变的。
设备坐标的原点总是在左上角,单位为像素,横坐 标(x)为水平向右;纵坐标(y)为垂直向下。改变逻 辑坐标与设备坐标的关系是使用CDC的映射模式设置函 数。而当逻辑坐标与设备坐标不一致时,可通过坐标转换 函数来实现。
图形绘制常用函数
6 画弧
BOOL Arc (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL ArcTo (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); 其中,(x1,y1),(x2,y2)是边界矩形的左上角和右下角坐标, (x3,y3),(x4,y4)是弧的起点和终点。在Windows系统 中,弧线从始点到终点的方向是逆时针方向。
四、设置绘图属性
3.绘图模式设置 绘图模式指定Windows如何组合画笔颜色和显 示设备上的当前颜色的方式。线的绘制除由画笔的 颜色和宽度决定外,也受当前绘图模式的影响。线 上每个象素的最后颜色取决于画笔颜色、当前显示 设备上的颜色和绘图模式。缺省绘图模式为 R2_COPYPEN,即画笔颜色为线的颜色 函数SetROP2用于改变绘图模式,函数原型为: int SetROP2(int nDrawMode);
8 画饼图:
BOOL pie (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL pie (LPCRECT lpRect, POINT ptStart, POINT ptEnd);
例:
pDC->Pie(100,100,500,500,200,300,150,75);
图形绘制常用函数
4 画矩形或圆角矩形
BOOL Rectangle(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); 或 BOOL Rectangle(LPCRECT lpRect);
例:
pDC->Rectangle(190,270,250,310); pDC->Rectangle(CRect(100,100,200,200));
图形绘制常用函数
4 画矩形或圆角矩形
BOOL RoundRect(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight);
其中的前四个参数与Rectangle()函数相同, nWidth表示圆角的宽度, nHeight表示圆角的 高度。 例:pDC->RoundRect(265,270,330,310,30,20);
1.映射模式
映射模式用于定义逻辑坐标的单位与设备坐标间的关系。 在缺省的映射模式下(MM_TEXT),逻辑坐标与设备坐标相同, 坐标原点也在窗口左上角,以像素为单位,横坐标向右,纵坐 标向下。但是,如果窗口支持滚动,原点将随滚动而调整。 Windows包含八种不同的映射模式(表2-6)。
2.设置映射模式
Baidu Nhomakorabea
图形绘制常用函数
3 多边形
BOOL Polygon(LPPOINT *lpPoints, int cCount);
会自动将起点和终点相连形成封闭的多边形 例: 三角形: POINT polygonPts[3]={{390,160},{430,220}, {350,210}}; pDC->Polygon(polygonPts,3); 多边形: POINT polygonPts[6]={{125,350},{250,450}, {450,300},{350,50},{300,200},{200,100}}; pDC->Polygon(polygonPts,6);
void FillRgn (CRgn * pRgn, CBrush * pBrush);
例:CBrush Brush;
Brush.CreateSolidBrush(RGB(255,0,0)); CRgn r; r.CreateRectRgn(100,100,200,200); pDC->FillRgn(&r,&Brush);
计算机图形学
交互式绘图软件开发与设计
理工学院 刘小飞
一、图形绘制常用函数
1 像素点 SetPixel
例: pDC->SetPixel(100,20,RGB(255,0,0)); pDC->SetPixel(110,20,RGB(0,255,0)); pDC->SetPixel(120,20,RGB(0,0,255));
int GetMapMode( ) const; virtual int SetMapMode(int nMapMode); 参数nMapMode为表2-6中列出的八种映射模式之一。
例如:
CRect rect; GetClientRect(rect); //指定窗口的用户区域矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置当前映射为非约束模式 pDC->SetWindowExt(1000,1000); //窗口宽和高为1000个逻辑单位 pDC->SetViewportExt(rect.right,-rect.bottom); // 视口的大小同当前客户区 pDC->SetViewportOrg(rect.right/2,rect.bottom/2); // 视口的坐标原点设置在当前客户区的中央 pDC->Ellipse(CRect(-500,-500,500,500));
例: pDC->InvertRect(CRect(100,100,300,300));
区域填充函数
2. FloodFill :用当前画刷从(x,y)点开始向四周填充到颜色 为crColor的边界,相当于画图中的油漆桶。 BOOL FloodFill (int x, int y, COLORREF crColor); 3. FillRgn:用指定画刷填充一个任意封闭的区域
图形绘制常用函数
6 画弧
例:画圆弧: pDC->Arc(200,200,500,700,350,150,0,0); 画圆: pDC->Arc(100,100,300,300,0,0,0,0);
7 弓弦
BOOL Chord (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); 例: pDC->Chord(200,200,500,700,350,150,0,0);
图形绘制常用函数
5 画圆或椭圆
BOOL Ellipse(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); 或 BOOL Ellipse(LPCRECT lpRect);
例:
pDC->Ellipse(260,200,400,300); pDC->Ellipse(260-50,200-30,260+50,200+30); pDC->Ellipse(CRect(200,200,400,400));
2 画线
(1)当前位置 MoveTo (2)直线 LineTo pDC->MoveTo(20,90); pDC->LineTo(160,150);
图形绘制常用函数
(3)折线 BOOL Polyline( LPPOINT lpPoints, int nCount ); lpPoints是指向折线顶点数组的指针,而nCount是折线顶点 数组中的顶点数。 例如,绘制一条具有4个顶点的折线,程序如下: POINT polylinepoint[4]={{70,240},{20,190}, {70,190},{20,240}}; pDC->Polyline(polylinepoint,4); 注:由于一条折线至少需要2个顶点,因此nCount数不应该小 于2。
参数nDrawMode用于指定绘图模式。见表2-8, MFC预定义了16种绘图模式,其中,R2_NOT称 为反转模式,是实现交互式绘图中橡皮筋技术的关 键。第一次画线时,为与背景色相反的颜色,而第 二次画同一条线时,为与背景色相同,即擦除第一 次所画的线。
四、设置绘图属性
1.背景颜色设置 缺省时,图形的背景颜色是白色。GetBkColor获 得当前背景颜色若要设置新的背景颜色,调用函数 SetBkColor。 例如,要将背景颜色设置为绿色,语句为:
pDC->SetBkColor(RGB(0, 255,0));
2.背景模式设置 GetBkMode和SetBkMode获得和设置当前的 背景模式。 nBkMode取值见表2-7
3.坐标转换 使用函数LPtoDP将逻辑坐标转换为设备坐标 void LPtoDP(LPPOINT lpPoints,int nCount=1); 函数DPtoLP将设备坐标转换为逻辑坐标,函数原型为: void DPtoLP(LPPOINT lpPoints,int nCount=1);
参数lpPoints是指向POINT结构或CPoint对象的数 组,nCount表示数组中的点数。 一般在改变映射模式或设置滚动功能后需要 将鼠标的设备坐标转换为图形的逻辑坐标。