实验三 交互式绘制多边形

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

这个实验······在网上找不到。孔令德的实验代码下载下来有密码,暴力破解没希望,只能自己写了。
这个和实验二是紧密相连的。

实验实现的目标

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

橡皮筋技术和用户交互

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

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

int isPress=0;
CPoint start;
CPoint end;

//将上述代码放在***View.cpp里面的开头部分(只要能在***View.cpp里面起控制全局的作用就行,例如放在#endif后面)
//在***View.cpp里面用添加类向导
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现交互式多边形绘制,可以在鼠标左键按下、移动和松开的事件响应函数中分别处理。 首先,在鼠标左键按下事件响应函数中,创建一个新的多边形对象,将鼠标当前位置作为多边形的第一个顶点,并将该顶点添加到多边形的顶点列表中。然后,开始捕捉鼠标移动事件。 在鼠标移动事件响应函数中,获取当前鼠标位置,并将其作为多边形的下一个顶点,更新多边形的顶点列表。同时,使用CDC类的Polyline函数将多边形的边实时绘制出来。 最后,在鼠标左键松开事件响应函数中,结束多边形绘制,并将多边形对象添加到文档中。 下面是一个示例代码: ```cpp void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { // 创建新的多边形对象 CPolygon polygon; polygon.AddVertex(point); // 添加多边形到文档中 CMyDoc* pDoc = GetDocument(); pDoc->AddPolygon(polygon); // 捕捉鼠标移动事件 SetCapture(); } void CMyView::OnMouseMove(UINT nFlags, CPoint point) { // 获取文档中的最后一个多边形对象 CMyDoc* pDoc = GetDocument(); CPolygon& polygon = pDoc->GetLastPolygon(); // 更新多边形的顶点列表 polygon.AddVertex(point); // 在设备上下文中绘制多边形的边 CDC* pDC = GetDC(); pDC->SelectStockObject(NULL_BRUSH); pDC->Polyline(polygon.GetPoints(), polygon.GetVertexCount()); ReleaseDC(pDC); } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // 结束捕捉鼠标移动事件 ReleaseCapture(); } ``` 上面的代码使用了CPolygon类来表示多边形对象。CPolygon类的实现可以参考下面的代码: ```cpp class CPolygon { public: void AddVertex(const CPoint& point) { m_points.push_back(point); } const CPoint* GetPoints() const { return m_points.data(); } int GetVertexCount() const { return static_cast<int>(m_points.size()); } private: std::vector<CPoint> m_points; }; ``` 注意,上面的代码中使用了STL的vector容器来存储多边形的顶点列表。如果您不想使用STL,可以使用数组或链表等其它数据结构来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值