计算机图形学实习教程之实验平台的建立,利用C#实现,附源码

环境:Win10+Visual Studio 2022 Community

搭建环境需要下载的模块:.NET桌面开发

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第1张图片

目录

一、实验目的

二、实验步骤

1.创建新项目

2.建立菜单

3.建立菜单响应函数

4.橡皮筋技术


一、实验目的

1.掌握创建Windows窗体应用程序得到基本步骤

2.掌握创建菜单的基本方法

3.掌握建立菜单响应函数的基本步骤

4.掌握用鼠标画直线的“橡皮筋”技术的基本方法

二、实验步骤

1.创建新项目

创建一个空的Windows窗体程序框架,如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第2张图片

其中包含一个名为Form1的窗体,用鼠标调整Form1窗口的大小,如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第3张图片

在Form1窗体被选中的情况下(如果没有被选中,用鼠标点击一下Form1窗体即可),系统窗口右下角的属性窗口列出了窗体Form1的属性值,找到Text属性,键入属性值“计算机图形学练习平台”(如图所示)。由于Form1窗体是应用程序的主窗口,该属性值在程序执行时作为程序的标题显示出来。

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第4张图片

2.建立菜单

用鼠标指向 VS平台左边框架的“工具箱”,在“菜单和工具栏”项目中用鼠标将“MenuStrip”拖到Form1窗体,建立应用程序菜单系统,如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第5张图片

在Form1窗体下面,系统建立了名为“MenuStrip1”的控件,用鼠标选中该控件,Form1窗体出现菜单第一项,显示“请在此处键入”,如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第6张图片

输入“基本图形生成”,可以看到该菜单项右边和下面分别出现两个空菜单项,右边是与该菜单项同级并列的另一个菜单项,下面则是该菜单项的子菜单,在下面的子菜单项中输入“DDA 直线”,如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第7张图片

在DDA直线菜单项选中的情况下,在该菜单项属性窗口中找到Name属性,鼠标点击属性值,改成DDALine

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第8张图片

用同样的方法依次建立其他菜单项,各项子菜单如图所示

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第9张图片

3.建立菜单响应函数

菜单响应函数定义了菜单项应该完成的动作,以“退出”菜单项为例说明如何建立一个菜单项的响应函数。首先将其Name属性值改为“Exit”,鼠标双击“退出”菜单项,系统出现如下代码段。可以看到,刚才的菜单设计是在“Form1.cs[设计]”页面中进行,现在打开的是“Form1.cs”页面,它是专门针对窗体Form1进行编程的环境,针对Form1编写的程序都存储在文件Forml.cs 中

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Exit_Click(object sender, EventArgs e)
        {
            
        }
    }
}

在鼠标双击“退出”菜单项后,系统在Form1.cs中自动添加了一个空函数Exit_Click。从函数名就可以看出,它是鼠标点击名为“Exit”的某个单元后的响应函数。Exit就是刚才在建立“退出”菜单项时为菜单项Name属性设置的属性值。所以该函数就是“退出”菜单响应函数,功能是结束应用程序。因此,添加内容如下所示

private void Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

按启动调试键,如果没有任何语法、逻辑上的错误,系统编译并执行程序,得到如图所示画面

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第10张图片

4.橡皮筋技术

用Visual Studio 2022打开刚刚编制的图形程序,可以看到上次编制的Form1窗体和菜单系统,它们都存在于Form1.cs[设计]页面中。Form1.cs页面用来保存设计页面的后台程序,点击Form1打开Form1.cs页面,

在这里,我们借用“DDA直线”菜单项.演示如何实现橡皮筋技术。在Form1.cs[设计]页面中,双击“DDA直线”菜单项,系统在Form1.cs页面自动生成空函粒,private void DDALine_Click(object sender , EventArgs e)。在程序中添加如下内容:

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        Color BackColor1 = Color.White;
        Color ForeColor1 = Color.Black;
        public int MenuID, PressNum, FirstX, FirstY, OldX, OldY;

        private void DDALine_Click(object sender, EventArgs e)
        {
            MenuID = 1;
            PressNum = 0;
            Graphics g = CreateGraphics();  //创建图形设备
            g.Clear(BackColor1);            //设置背景颜色
        }
}

其中,MenuID变量是菜单项的标志,PressNum变量记录鼠标按键次数,FirstX、FirstY用来记录线段第一端点坐标。实际的选点操作用Form1窗体中的鼠标操作完成,但因为窗体中的鼠标操作还要为众多的其他图形操作服务,并非为DDA直线所专有,所以要设置MenuID变量使窗体能够明确鼠标操作的服务对象。

在Form1.cs[设计]页面点击Form1窗体空白处选中窗体,在系统窗口右下角的属性窗口中找到“MouseClick”事件(如图)和“MouseMove”事件(如图),并双击,系统自动建立空的响应函数Form1_MouseClick和Form1_MouseMove

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第11张图片计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第12张图片

在程序中添加如下内容:

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        Color BackColor1 = Color.White;
        Color ForeColor1 = Color.Black;
        public int MenuID, PressNum, FirstX, FirstY, OldX, OldY;

        private void DDALine_Click(object sender, EventArgs e)
        {
            MenuID = 1;
            PressNum = 0;
            Graphics g = CreateGraphics();  //创建图形设备
            g.Clear(BackColor1);            //设置背景颜色
        }

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            Graphics g = CreateGraphics();  //创建图形设备
            Pen MyPen = new Pen(Color.Red, 1);
            if (MenuID == 1)
            {
                if (PressNum == 0)          //第一点,保留
                {
                    FirstX = e.X;
                    FirstY = e.Y;
                    OldX = e.X;
                    OldY = e.Y;
                }
                else                        //第二点,画线
                {
                    g.DrawLine(MyPen, FirstX, FirstY, e.X, e.Y);
                }
                PressNum++;
                if (PressNum >= 2)
                {
                    PressNum = 0;     //画线完毕,清零,为画下一条线做准备
                }
            }
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics g = CreateGraphics();  //创建图形设备
            Pen BackPen = new Pen(BackColor1, 1);
            Pen MyPen = new Pen(ForeColor1, 1);
            if (MenuID == 1 && PressNum == 1)
            {
                if (!(e.X == OldX && e.Y == OldY))
                {
                    g.DrawLine(BackPen, FirstX, FirstY, OldX, OldY);
                    g.DrawLine(MyPen, FirstX, FirstY, e.X, e.Y);
                    OldX = e.X;
                    OldY = e.Y;
                }
            }
        }
    }
}

画线结果如图所示:

计算机图形学实习教程之实验平台的建立,利用C#实现,附源码_第13张图片

你可能感兴趣的:(计算机图形学,c#,开发语言,visual,studio,算法)