实验三 交互式绘制多边形

visual studio2019实现交互式绘制多边形

置顶内容:
孔令德的无密码的实验代码是有的,如下:

计算机图形学课程实验与课程设计源码:https://wws.lanzoui.com/ibmDWtpe97e

实验实现的目标

在屏幕上点击一个点,松开移动鼠标,线就会跟着鼠标进行延长,再次点击就会形成新的点,两点之间形成线段,然后新的线继续跟着鼠标跑。
当鼠标经过起点的时候,直线自动连到起点,形成闭合多边形,并且完成颜色的填充。
所以相对实验二,我们要实现直线的动态显示(橡皮筋绘制技术)和填充多边形。其中填充多边形用到了双缓冲机制,避免绘图的过渡(瞬间上色)。

橡皮筋技术和用户交互

直线在鼠标的移动下像橡皮筋那样拉伸,就是橡皮筋技术。实现这个技术同样需要双缓冲机制。

下面的代码是网上找来的。来源

int isPress=0;
CPoint start;
CPoint end;

//将上述代码放在***View.cpp里面的开头部分(只要能在***View.cpp里面起控制全局的作用就行,例如放在#endif后面)
//在***View.cpp里面用添加类向导将单击鼠标左键,鼠标移动映射为相应的函数。并且添加以下代码

void CXiangpijinView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    isPress=1;
    start=point;
    end=start;
    CView::OnLButtonDown(nFlags, point);
}

void CXiangpijinView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CDC *pDC=this->GetWindowDC();
    if (isPress)
    {
        pDC->SetROP2(R2_NOT);
        pDC->MoveTo(start);
        pDC->LineTo(end);
        pDC->MoveTo(start);
        pDC->LineTo(point);
        end=point;
    }
    CView::OnMouseMove(nFlags, point);
}

以上代码实现了画线的橡皮筋功能,效果类似于实验二,但是是系统调用的方法。

实现绘制多边形

可以在屏幕上画线了,就要绘制多边形。

当鼠标左击一次,就创建一个点,鼠标移动显示橡皮筋拉伸的线。再次点击,生成第二个点,线段生成,并生成新的橡皮筋线。

我们需要保存画的点和线。

//在view.h中建立一个CPoint
CPoint point[100];

如果要保存边,就要创建新的类,AET和Bucket类

虽然孔令德的实验代码没办法得到,但是他的课本课后习题的代码在网上有,其中就有“多边形有效边表填充算法”的实验,里面实现了AET和Bucket

文件我就不发出来了,最后看我的代码就可以。

使用AET和Bucket保存边,并且进行填充。

最后实现画图的功能,vs2019工程文件,代码不方便一一展示,就放在后面供大家下载参考吧。

程序刚启动的时候不要着急点,等待程序加载,不然你会发现点不出直线。
左键用来画线,右键用来绘制,切记!!

本文代码:https://www.lanzouw.com/i1LQ9vkcj8f

posted @ 2019-06-03 17:05  晒太阳,灭bug  阅读(2766)  评论(5编辑  收藏  举报