图形学课设计算机软件及应用IT计算机专业资料.docx
- 文档编号:11343463
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:24
- 大小:80.94KB
图形学课设计算机软件及应用IT计算机专业资料.docx
《图形学课设计算机软件及应用IT计算机专业资料.docx》由会员分享,可在线阅读,更多相关《图形学课设计算机软件及应用IT计算机专业资料.docx(24页珍藏版)》请在冰豆网上搜索。
图形学课设计算机软件及应用IT计算机专业资料
二0一五~二0一六学年第一学期
计算机科学与技术学院
课程设计报告书
题目:
JAVA简单画图程序
课程名称:
图形学与平面设计
班级:
学号:
姓名:
指导教师:
二0一五年十一月二十七日
一设计目的
课程设计是信息与计算科学专业集中实践性环节之一,是学习完《计算机图形学》课程后进行的一次全面的综合练习。
其目的是:
(1)要达到理论与实际应用相结合,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养良好的程序设计技能。
(2)在实践中认识为什么要学习数据结构,掌握数据结构、程序设计语言、程序设计技术之间的关系,是前面所学知识的综合和回顾
课程设计是我们的主要教学实践环节,通过课程设计我们围绕基础课或者专业课,运用学的知识,结合实际应用设计而进行的一次综合分析设计能力的训练.
课程设计的宗旨在与培养我们在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料,综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础.
通过本次课程设计,能够锻炼我们的动手能力,使我们能够很好的巩固上一个学期所学的知识内容,掌握工程软件设计的基本方法,强化了我们上机动手的能力,通过这次的课程设计,我们感觉到了以前学习的不足,以及在学习的过程中遇到的问题,能使我们对学过的知识加深理解,为后续学的计算机专业课,打下坚实的基础.
二总体设计
简单绘图板程序
此图形图像处理机具有如下功能:
1能由鼠标控制绘制直线、矩形、椭圆,并能控制线条的颜色
2能改变矩形和椭圆。
3能打开和保存为图形文件。
4能打开图片。
5能通过参数对图片进行缩放
我们做的这个绘图板是一个简易的类似Windows画图工具的简单绘图板程序,我们设计
了主要有菜单栏,状态栏等基本元素,能够实现简单的集合画图,也能够在鼠标控制下进行手动画图.通过测试程序能够顺利运行.要求利用C#的编程思想以及组件开发原理来完成系统的设计。
主要流程图如下:
三源代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Drawing.Drawing2D;
usingSystem.Runtime.Serialization.Formatters.Binary;
usingSystem.IO;
usingSystem.Xml.Serialization;
usingSystem.Drawing.Imaging;
namespace画图板
{publicenumShapeType//绘图类型
{
FreeDraw,Eraser,Line,Rectangle,Ellipse,FillEllipse,FillRectangle,Curve,Path,Pick,Polygon,Text,Circle,FillCircle,SelectRectangle,SelectFillRectangle
}
publicenumSizeGrip//区块的位置
{None=0,Top,Bottom,Left,Right,TopLeft,TopRight,BottomLeft,BottomRight,All
}
publicpartialclassMainForm:
Form
{
#region初始化
publicMainForm()
{
InitializeComponent();
clr=colorHatch1.CurrentColor;
}
{
get
{
if(sizeGripRectList==null)
{
sizeGripRectList=newDictionary
}
returnsizeGripRectList;
}
}
#endregion
#region绘图工具事件
privatevoidbtnFree_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.FreeDraw;
}
privatevoidbtnCurve_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Curve;
tmpCurve=newCurve(clr);
}
privatevoidbtnRectangle_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Rectangle;
}
privatevoidbtnFilledRectangle_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.FillRectangle;
}
privatevoidbtnCircle_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Circle;
}
privatevoidbtnFillCircle_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.FillCircle;
}
privatevoidbtnEllipse_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Ellipse;
}
privatevoidbtnFillEllipse_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.FillEllipse;
}
privatevoidbtnPolygon_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Polygon;
tmpPolygon=newPolygon(clr);
}
privatevoidbtnText_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Text;
label1.Visible=true;
}
privatevoidbtnPath_Click(objectsender,EventArgse)
{
type=ShapeType.Path;
}
privatevoidbtnPick_Click(objectsender,EventArgse)
{
Initl();
type=ShapeType.Pick;
}
#endregion
#region图片框事件
privatevoidpictureBox1_MouseDown(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
{
p1=newPoint(e.X,e.Y);
if(finish)
{
if(sizegrip==SizeGrip.All)
{
tempmove=p1;
return;
}
else
{
if(textBox1.Visible)
{
shape=newText(clr,textBox1.Text,textBox1.Font,newPoint(textBox1.Location.X-98,textBox1.Location.Y-34));
textBox1.Text="";
textBox1.Visible=false;
label1.Visible=false;
}
shapeList.Add(shape);
finish=false;
StartPolygon=true;
Selectshape.Clear();
tmpPolygon=newPolygon(clr);
tmpCurve=newCurve(clr);
pictureBox1.Refresh();
Points.Clear();
}
}
if(type==ShapeType.Polygon)
{
if(StartPolygon)
{
tmpPolygon.AddPoint(p1);
selectRecStart=selectRecEnd=p1;
StartPolygon=false;
}
elseif(p1==tmpPolygon.Points[0])
{
foreach(PointpintmpPolygon.Points)
{
selectRecStart=newPoint(Math.Min(selectRecStart.X,p.X),Math.Min(selectRecStart.Y,p.Y));
selectRecEnd=newPoint(Math.Max(selectRecEnd.X,p.X),Math.Max(selectRecEnd.Y,p.Y));
}
selectRecSize=newSize(selectRecEnd.X-selectRecStart.X,selectRecEnd.Y-selectRecStart.Y);
finish=true;
}
else
{
shape=newPolygon(clr,tmpPolygon.Points,p1,width);
pictureBox1.Refresh();
}
}
elseif(type==ShapeType.Curve)
{
if(StartPolygon)
{
tmpCurve.AddPoint(p1);
selectRecStart=selectRecEnd=p1;
StartPolygon=false;
}
elseif(tmpCurve.Points.Count==3)
{
tmpCurve.AddPoint(p1);
foreach(PointpintmpCurve.Points)
{
selectRecStart=newPoint(Math.Min(selectRecStart.X,p.X),Math.Min(selectRecStart.Y,p.Y));
selectRecEnd=newPoint(Math.Max(selectRecEnd.X,p.X),Math.Max(selectRecEnd.Y,p.Y));
}
selectRecSize=newSize(selectRecEnd.X-selectRecStart.X,selectRecEnd.Y-selectRecStart.Y);
finish=true;
}
else
{
shape=newCurve(clr,tmpCurve.Points,p1,width);
pictureBox1.Refresh();
}
}
elseif(type==ShapeType.FreeDraw||type==ShapeType.Eraser)
{Points.Add(p1);}
elseif(type==ShapeType.Pick)
{
clr=colorHatch1.CurrentColor=CreateImage().GetPixel(e.X,e.Y);
}
}
if(e.Button==MouseButtons.Right)
{
finish=false;
StartPolygon=true;
Selectshape.Clear();
tmpPolygon=newPolygon(clr);
tmpCurve=newCurve(clr);
shape=null;
textBox1.Text="";
textBox1.Visible=false;
pictureBox1.Refresh();
Points.Clear();
}
}
privatevoidpictureBox1_MouseMove(objectsender,MouseEventArgse)
{
if(box.Contains(e.X,e.Y))
{
if(type==ShapeType.Eraser)
this.Cursor=defaultcursor;
else
{
this.defaultcursor=Cursors.Cross;
this.Cursor=this.defaultcursor;
}
}
break;
caseShapeType.FillCircle:
shape=newFillCircle(clr,p1,p2);
break;
default:
break;
}
pictureBox1.Refresh();
}
}
privatevoidpictureBox1_MouseUp(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
{
if(type==ShapeType.Eraser||type==ShapeType.FreeDraw)
{
shapeList.Add(shape);
Points=newList
return;
}
elseif(type==ShapeType.Pick)
{
colorHatch1.CurrentColor=CreateImage().GetPixel(e.X,e.Y);
return;
}
elseif(type==ShapeType.Polygon||type==ShapeType.Curve)
{}
else
{
if(p1==newPoint(e.X,e.Y))
return;
}
if(!
finish)
{
if(type==ShapeType.Polygon)
{
tmpPolygon.AddPoint(newPoint(e.X,e.Y));
}
elseif(type==ShapeType.Curve)
{
tmpCurve.AddPoint(newPoint(e.X,e.Y));
}
else
{
startpoint=p1;
endpoint=newPoint(e.X,e.Y);
finish=true;
selectRecStart=newPoint(Math.Min(p1.X,p2.X),Math.Min(p1.Y,p2.Y));
selectRecSize=newSize(Math.Abs(p1.X-p2.X),Math.Abs(p1.Y-p2.Y));
}
}
privatevoidpictureBox1_MouseDoubleClick(objectsender,MouseEventArgse)
{
if(type==ShapeType.Polygon)
{
foreach(PointpintmpPolygon.Points)
{
selectRecStart=newPoint(Math.Min(selectRecStart.X,p.X),Math.Min(selectRecStart.Y,p.Y));
selectRecEnd=newPoint(Math.Max(selectRecEnd.X,p.X),Math.Max(selectRecEnd.Y,p.Y));
}
selectRecSize=newSize(selectRecEnd.X-selectRecStart.X,selectRecEnd.Y-selectRecStart.Y);
finish=true;
}
elseif(type==ShapeType.Curve)
{
foreach(PointpintmpCurve.Points)
{
selectRecStart=newPoint(Math.Min(selectRecStart.X,p.X),Math.Min(selectRecStart.Y,p.Y));
selectRecEnd=newPoint(Math.Max(selectRecEnd.X,p.X),Math.Max(selectRecEnd.Y,p.Y));
}
selectRecSize=newSize(selectRecEnd.X-selectRecStart.X,selectRecEnd.Y-selectRecStart.Y);
finish=true;
privatevoidpictureBox1_Paint(objectsender,PaintEventArgse)
{
g=e.Graphics;
if(shapeList.Count>0)
{
foreach(ShapesinshapeList)
s.Draw(g);
}
if(Selectshape.Count>0)
{
foreach(ShapesinSelectshape)
s.Draw(g);
}
if(shape!
=null)
shape.Draw(g);
}
privatevoidcolorHatch1_ColorChange(objectsender,MyControl.ColorHatch.ColorChangeEventArgse)
{
clr=colorHatch1.CurrentColor;
textBox1.ForeColor=clr;
if(StartPolygon==false)
switch(type)
{
caseShapeType.Curve:
tmpCurve=newCurve(clr,tmpCurve.Points,width);break;
caseShapeType.Polygon:
tmpPolygon=newPolygon(clr,tmpPolygon.Points,width);break;
}
///初始化按键
///
privatevoidInitl()
{
if(finish)
{
if(textBox1.Visible)
{
shape=newText(clr,textBox1.Text,textBox1.Font,newPoint(textBox1.Location.X-98,textBox1.Location.Y-34));
textBox1.Text="";
textBox1.Visible=false;
}
shapeList.Add(shape);
finish=false;
shape=null;
StartPolygon=true;
Selectshape.Clear();
Points.Clear();
pictureBox1.Refresh();
}
}
///
///获取橡皮擦鼠标样式
///
privatevoidEraserCursor()
{
Bitmapbitmap=newBitmap(width*2,width*2);
Graphicsg=Graphics.FromImage(bitmap);
g.Clear(Color.White);
g.DrawRectangle(newPen(Color.Black),newSystem.Drawing.Rectangle(0,0,bitmap.Size.Width-1,bitmap.Size.Width-1));
g.Dispose();
this.defaultcursor=newCursor(Icon.FromHandle(bitmap.GetHicon()).Handle);
}
privatevoidsave(stringpath)
{
if(path==null)
path=@".\图片.sav";
if(serializer)
{
try
{
BinaryFormatterbinserializer=newBinaryFormatter();
using(FileStreamfs=newFileStream(path,FileMode.CreateNew))
{
binserializer.Serialize(fs,shapeList);
fs.Close();
MessageBox.Show("保存成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
catch(Exceptionex)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 计算机软件 应用 IT 计算机专业 资料