GIS程序设计(八)鼠标交互式绘图

原创 2018年04月14日 23:47:14

GIS程序设计(八)鼠标交互式绘图

1、加入一个绘图菜单

添加字串

2、添加至菜单,并添加点击函数

 

 

3、在实现文件中,添加菜单点击函数

void CDrawView::OnDrawLine()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 1;

}

void CDrawView::OnDrawPline()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 2;

}

 

 

void CDrawView::OnDrawCircle()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 4;

}

 

void CDrawView::OnDrawArc()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 6;

}

 

void CDrawView::OnDrawRgn()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 3;

}

 

void CDrawView::OnDrawCircle1()

{

// TODO: Add your command handler code here

PushNumb = 0;

m_DrawCurrent = 5;

}

这些函数的代码非常简单,只是对两个变量PushNumb m_DrawCurrent 进行了初始化,这两个变量用来记录当前进行的操作类别和按下鼠标左键的次数,这两个变量在视图类【CDrawView】中定义:

protected:

int m_DrawCurrent; //当前正进行操作的序号

int PushNumb; //记录按下鼠标的次数

 

4、获得图形元素的唯一识别号

矢量图形在GIS系统中具有唯一的标识号。在本应用程序中,采用同类元素具有唯一识别号的方法,即每一类的所以图形元素具有不同的成员变量m_id_only

为了得到每类图形元素的唯一识别号,在文档类【CDrawdoc】中定义一个成员函数。

int GetGraphID(short Lb);  //用来得到要增加的各类图形元素的唯一识别号

参数:Lb表示图形类别

在实现文件中加入函数的实现代码:


函数中所用的成员变量m_Index是一个整数数组,在文档类【CDrawDoc】中定义:

 

在构造函数中初始化:

 

在析构函数中释放:

 

GetGraphID函数中的GetID函数在图形元素基类中定义:

int GetID()

{

             return m_id_only;

};   //返回图形元素唯一识别号

 

5、绘制直线

添加鼠标左键点击消息,鼠标移动消息,鼠标右击消息

添加左键点击代码:

添加鼠标移动代码:

添加鼠标右击代码:

在交互绘制直线并且已经按中了直线起点的情况下,按中鼠标右键会将屏幕上拖动的橡皮线擦除,结束本次直线的绘制并释放捕捉的鼠标。

 

6、连续直线的绘制

连续直线的绘制原理和直线的绘制相同,不同的是连续直线是由多个顶点组成的,需要更多的鼠标事件来控制。现在假定鼠标左键按下画点,鼠标移动显示橡皮条效果,按下鼠标右键完成连续直线的绘制。


在鼠标左键点击函数中添加如下代码:

以上代码中,利用结构数组PointXyz来存储连续直线顶点的实际坐标,每次按下鼠标左键,得到一个按下点的实际坐标后转换成实际坐标存在PointXyz数组中,同时用PushNumb记录按下鼠标左键的数目。

结构指针PointXyz在【CDrawView】类中定义:

PointStruct *PointXyz; //记录连续直线顶点坐标的数组指针

 

在构造函数中进行初始化:

PointXyz=new PointStruct[3000];//存储连续直线点的数组

在析构函数中释放:

delete PointXyz;

 

在鼠标移动击函数中添加如下代码:

else if((m_DrawCurrent==2||m_DrawCurrent==3)&&PushNumb>=1)

//如果是绘制连续直线或封闭多边形,并且已经按下第一点

{

if(mPointOld!=point)//如果鼠标的现在移动点与上一个点不相同

       //将上一个顶点到上一个移动点的直线擦除,绘制从上一个顶点到移动点的直线

{

ddd.MoveTo(mPointOrign);

ddd.LineTo(mPointOld);   //擦除原来的直线

ddd.MoveTo(mPointOrign);

ddd.LineTo(point);       //重画移动到点的直线

mPointOld=point;  

}

}

 

在鼠标右击函数中添加如下代码:

参考资料:陈建春,Visual C++开发GIS系统--开发实例剖析。

地理信息科学

Writed By NX

QQ:1051926720


MFC编写一个交互式绘图程序

  • 2008年06月27日 17:28
  • 1.52MB
  • 下载

OpenCV鼠标交互作图

#include // Define our callback which we will install for // mouse events // void my_mouse_...
  • todayq
  • todayq
  • 2014-04-08 14:54:18
  • 1149

python中Matplotlib库显示界面中进行鼠标交互绘制操作

近期在用Python做医学图像处理系统制作,逐步跟大家分享我遇到的问题以及解决方案。今天来跟大家说一下在matplotlib库显示界面中进行鼠标交互绘制等操作。 先上图,下图为用matplotlib...
  • Dream__TT
  • Dream__TT
  • 2017-06-19 19:50:52
  • 3516

交互式绘图程序(MFC) 绘图例子

  • 2011年05月27日 21:31
  • 1.52MB
  • 下载

使用python制作ArcGIS插件(4)界面交互

使用python制作ArcGIS插件(4)界面交互 by 李远祥     插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pytho...
  • liyuanxiang1984
  • liyuanxiang1984
  • 2016-10-10 08:40:47
  • 3820

10.8交互式绘图

MATLAB中还设置了相应的鼠标操作的图形操作指令,分别是ginput,gtext,和zoom函数,首先对这三个函数说明 (1)除了ginput函数只能应用于二维图形之外,其余两个函数对二维和三...
  • MATLAB_matlab
  • MATLAB_matlab
  • 2016-12-17 14:53:47
  • 798

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

GIS程序设计(六)鼠标交互式绘图基础(简单实例)之前实现了运行程序直接将OnDraw()函数中画的图形显示出来,现在进行鼠标交互式绘图的探索,先从简单的开始入手,只了解下鼠标交互绘图的步骤,以鼠标绘...
  • a1051926720
  • a1051926720
  • 2018-04-07 16:54:51
  • 18

windows编程交互式绘图完整程序

  • 2009年04月15日 19:58
  • 16KB
  • 下载

MFC文档(SDI)应用:绘图程序(画圆、画线、鼠标事件)

1、 在客户区输出一条顺时针45度的直线、一个正方形、一个大圆; 2、 在客户区输出一个图标; 3、 当按下鼠标左键时,将以鼠标坐标为圆心画直径为20个单位的小圆;...
  • rl529014
  • rl529014
  • 2016-04-21 20:48:18
  • 1905

matlab交互式程序设计示例:GUI界面编程1

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及  数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。  ...
  • u013713010
  • u013713010
  • 2015-01-29 09:23:28
  • 1500
收藏助手
不良信息举报
您举报文章:GIS程序设计(八)鼠标交互式绘图
举报原因:
原因补充:

(最多只允许输入30个字)