数字媒体技术计算机图形学VC++实验3:直线段裁剪的Cohen-Sutherland编码算法

文章目录

1.实现绘制矩形窗口
2.实现绘制直线
3.实现裁剪

1. 实现绘制矩形窗口

创建项目 命名为ClipLine
首先实现将窗口绘制出来
在这里插入图片描述
首先 创建一个位图,并且拓展它的尺寸
这个非常关键
如果位图的尺寸过小,将导致出现一片空白的情况
并且没有任何报错,不知道的根本无法排查

ResouceView界面 右键 选择 插入

在这里插入图片描述
选择位图
在这里插入图片描述
修改其属性,将名字中的1去掉,命名为IDB_BITMAP
在这里插入图片描述

随后拉伸位图,最关键的一步
在这里插入图片描述
随后转到代码的编辑
ClipLineView.h添加矩形窗口边界坐标定义
以及内存预存DC Picture(我也不知道是什么)
在这里插入图片描述

ClipLineView.cpp构造函数中对数据进行初始化
在这里插入图片描述

ClipLineView.cpp的OnDraw函数 利用双缓冲绘图,绘制出矩形
在这里插入图片描述
随后编译运行,结果如下图
在这里插入图片描述

2.实现绘制直线

大概分析一下这一过程的逻辑

有两个主要的事件

  • 1.鼠标左键点击
    确定起点 确定终点
  • 2.鼠标移动
    在确定起点后,当鼠标发生移动,需要捕获鼠标的位置,实时地更新帧,绘制出起点到当前鼠标位置的直线
    在确定中点后不再捕捉鼠标的位置,不再更新直线位置

那么大概就需要修改三个函数

  • OnDraw()函数,帧更新过程中实现直线的绘制
  • 鼠标左键点击的函数,判断当前点击是起点还是终点
  • 鼠标移动函数

首先把菜单的点击函数创建出来
在这里插入图片描述
建立类向导
在这里插入图片描述
在这里插入图片描述

ClipLineView.h声明一些在函数中将用到的变量
m_Attatch
m_Draw
m_i
Pointx Pointy

在这里插入图片描述

在这里插入图片描述
然后在ClipLineView.cpp构造函数中对这些变量初始化
在这里插入图片描述

ClipLineView.cpp 定义菜单函数
Messagebox打错了!B要大写的
在这里插入图片描述
然后添加鼠标点击事件
建立类向导
在这里插入图片描述
ClipLineView.cpp添加鼠标点击事件实现
在这里插入图片描述
随后添加鼠标移动函数
建立类向导
在这里插入图片描述
ClipLineView.cpp添加其实现
在这里插入图片描述
最后,在OnDraw()函数中添加绘制直线的代码
在这里插入图片描述

并补充有关四舍五入的宏定义
在这里插入图片描述

随后编译运行

在这里插入图片描述

3.实现裁剪

菜单点击函数
裁剪函数
编码函数

先创建菜单函数
在这里插入图片描述
建立类向导
在这里插入图片描述
ClipLineView.cpp添加函数定义
在这里插入图片描述
ClipLineView.h 添加一些定义 与编码函数的声明
在这里插入图片描述
CliplineView.cpp构造函数中对这些变量初始化
在这里插入图片描述
ClipLineView.cpp添加编码函数声明
在这里插入图片描述

ClipLineView.cpp定义编码函数
在这里插入图片描述
声明裁剪函数
在这里插入图片描述
定义裁剪函数
在这里插入图片描述
最后补充一些宏定义
在这里插入图片描述
可以顺利编译运行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_62316271/article/details/130568146