本人河南某本科高校测绘学子,当时也是耗费大量时间做成,为了给各位学弟学妹提供参考(鬼笑),特此上传,为了不泄露个人隐私,选择此方式上传,实属无奈!若还需要VS源程序文件,请联系本人,低价有偿私人单发。
程序为C#窗口版,具体窗口界面见附件窗口图片,
主窗口程序:
public partial class Form1 : Form
{
//Bitmap bitmap;
public Form1()
{
InitializeComponent();
}
Color BackColor1 = Color.White;
Color ForeColor1 = Color.Black;
public int MenuID, pressNum, FirstX, FirstY, OldX, OldY,SecondX,SecondY;
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||MenuID ==2||MenuID ==3)
{
if (pressNum ==0)
{
FirstX = e.X;FirstY = e.Y;
OldX = e.X; OldY = e.Y;
}
else
{
if (MenuID ==1)
DDALine1(FirstX, FirstY, e.X, e.Y);
if (MenuID == 2)
MidLine1(FirstX, FirstY, e.X, e.Y);
if(MenuID ==3)
BresenhamLine1(FirstX, FirstY, e.X, e.Y);
}
pressNum++;
if (pressNum >= 2) pressNum = 0;
}
if (MenuID == 4 || MenuID == 5) //画圆部分
{
if (pressNum == 0) //圆心保留
{
FirstX = e.X; FirstY = e.Y;
}
else
{
if (FirstX == e.X && FirstY == e.Y)//半径为零就不画了
return;
if (MenuID == 4)
MidCircle1(FirstX, FirstY, e.X, e.Y);
if (MenuID == 5)
BresenhamCircle1(FirstX, FirstY, e.X, e.Y);
}
pressNum++;
if (pressNum >= 2) pressNum = 0;//画圆完毕,清零,为画下一圆做准备
}
if (MenuID==6)//椭圆部分
{
if (pressNum == 0) //圆心保留
{
FirstX = e.X; FirstY = e.Y;
OldX = e.X; OldY = e.Y;
}
if(pressNum==1)
{
SecondX = e.X;SecondY = e.Y;
}
if (pressNum==2)
{
if (FirstX == e.X && FirstY == e.Y)
return;
if (SecondX == e.X && SecondY == e.Y)
return;
MidEllipse1(FirstX, FirstY, SecondX, SecondY, e.X, e.Y);
}
pressNum++;
if (pressNum >= 3) pressNum = 0;//画椭圆完毕,清零,为画下一椭圆做准备
}
if (MenuID == 7)//扫描线填充
{
if (e.Button == MouseButtons.Left)//如果按左键,存顶点
{
group[pressNum].X = e.X;
group[pressNum].Y = e.Y;
if (pressNum > 0)//依次画多边形边
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[pressNum]);
}
pressNum++;//这里,pressNum记录了多边形顶点数
SecondX = group[1].X; SecondY = group[1].Y;
}
if (e.Button == MouseButtons.Right)//如果按右键,结束顶点采集,开始填充
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[0]);
ScanLineFill1();//调用填充算法,开始填充
pressNum = 0;//清零,为绘制下一个图形做准备
}
}
if (MenuID ==8)//四连通区域填充
{
if (e.Button == MouseButtons.Left)//如果按左键,存顶点
{
group[pressNum].X = e.X;
group[pressNum].Y = e.Y;
if (pressNum > 1)//依次画多边形边
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[pressNum]);
}
pressNum++;//这里,pressNum记录了多边形顶点数
SecondX = group [1].X; SecondY = group[1].Y;
}
if (e.Button ==MouseButtons.Right)//如果按右键,结束顶点采集,开始填充
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[1]);
//Graphics graphics;
//graphics = CreateGraphics();
//bitmap = new Bitmap(700, 500);
//bitmap.SetPixel(group[0].X, group[0].Y, Color.Blue);
//Point seed = new Point(group[0].X, group[0].Y);
//bitmap.SetPixel(SecondX, SecondY, Color.Red);
//bitmap.SetPixel(40, 40, Color.Yellow);
////开始填充
//////Seedfill(bitmap.GetPixel(SecondX, SecondY), seed, bitmap.GetPixel(40, 40), bitmap);
////graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
pressNum = 0;//清零,为绘制下一个图形做准备
}
}
if (MenuID == 17)//窗口多边形裁剪
{
if (e.Button == MouseButtons.Left)//如果按左键,存顶点
{
group[pressNum].X = e.X;
group[pressNum].Y = e.Y;
if (pressNum > 0)
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[pressNum]);
}
pressNum++;
}
if (e.Button == MouseButtons.Right)//如果按右键,结束顶点采集
{
g.DrawLine(Pens.Red, group[pressNum - 1], group[0]);
WindowCut1();
pressNum = 0;//清零,为绘制下一个图形做准备
}
}
if (MenuID ==9||MenuID ==10||MenuID ==11)
{
if (pressNum ==0)
{
FirstX = e.X;FirstY = e.Y;pressNum++;
}
else
{
if (MenuID == 9)
CohenCut1(FirstX, FirstY, e.X, e.Y);
if (MenuID == 10)
MidCut1(FirstX, FirstY, e.X, e.Y);
if (MenuID == 11)
LiangCut1(FirstX, FirstY, e.X, e.Y);
pressNum = 0;
}
}
if (MenuID ==12)
{
if(pressNum ==0)
{
FirstX = e.X;FirstY = e.Y;
}
else
{
for (int i=0;i<4;i++)
{
pointsgroup[i].X += e.X - FirstX;
pointsgroup[i].Y += e.Y- FirstY;
}
g.DrawPolygon(Pens.Blue, pointsgroup);
}

喜欢偷懒的白日梦
- 粉丝: 0
最新资源
- (源码)基于OpenGL框架的CG机器人手臂模拟系统.zip
- 基于MATLAB的模糊自适应PID控制:程序调通,动态性能提升的10页报告 - 仿真
- 微电网两阶段鲁棒优化经济调度方法及其Python代码实现
- (源码)基于 Raspberry Pi 的 FM 广播系统.zip
- MATLAB仿真下基于串电阻策略的双馈风力发电机低电压穿越研究
- 基于深度强化学习(DQNDDPGTD3)的混合动力汽车能量管理策略研究与应用
- (源码)基于Python和PyTorch的图像分类深度学习系统.zip
- 复现兰志勇老师的新型三矢量模型:预测电流控制下的永磁同步电机控制原理 - 三角函数运算 权威版
- 基于MATLAB的信号处理GUI:AM、DSB、SSB及FM调制解调交互系统设计与实现 · MATLAB
- (源码)基于C语言的嵌入式LED显示与串行通信系统.zip
- 小型三相光伏并网发电系统:电导增量法与干扰观察法的控制策略研究
- (源码)基于C语言的Crazyflie无人机控制系统.zip
- 永磁同步电机绕组计算器:磁动势与绕组系数的技术解析及应用 说明
- 基于PLC S7-1200与MCGS组态的小区恒压供水系统仿真及优化
- (源码)基于Python的智能家庭助手系统.zip
- 基于OpenFAST与Simulink联合仿真模型的非线性风电机组独立变桨与统一变桨控制研究
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


