站场图显示模块详细设计.docx

上传人:b****6 文档编号:5728562 上传时间:2022-12-31 格式:DOCX 页数:46 大小:86.27KB
下载 相关 举报
站场图显示模块详细设计.docx_第1页
第1页 / 共46页
站场图显示模块详细设计.docx_第2页
第2页 / 共46页
站场图显示模块详细设计.docx_第3页
第3页 / 共46页
站场图显示模块详细设计.docx_第4页
第4页 / 共46页
站场图显示模块详细设计.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

站场图显示模块详细设计.docx

《站场图显示模块详细设计.docx》由会员分享,可在线阅读,更多相关《站场图显示模块详细设计.docx(46页珍藏版)》请在冰豆网上搜索。

站场图显示模块详细设计.docx

站场图显示模块详细设计

 

站场图显示模块

详细设计

 

站场图显示模块详细设计

1.引言

1.1.编写目的及背景

在CTC项目中,有多个模块需要显示站场图,且各个模块对站场图的显示和操作有不同需求,旧站场图模块抽象的功能较为单一,功能已经越来越不能满足各个模块的需求,各个模块各自实现了自己所需功能,各模块所实现的功能重复性较多,在此前提下,急需把各个模块所需功能提取出来,扩充旧站场图模块,编写新的站场图模块,新模块提取了各个模块需求的共性,且最大限度地满足各个模块的使用需求,在原有站场图模块的基础上,使其结构更加合理,条理清晰,易于扩充。

1.2.定义

站场图模块:

如未特别说明,指新站场图模块。

站场视图:

用来显示站场图的视图,其程序实现为CZctView类。

CZctView:

显示站场图的视图类。

CStation:

站场类,包含一个站的所有站场元素。

CStationSet:

站集类,包含有一个或多个站场类。

CZctElement:

所有站场图元素的基类,表示一个站场元素。

单站:

一个站场所有元素的集合,在程序中用CStation类表示。

站集:

单站的集合,在程序中由CStationSet类表示。

ZctElementList:

站场图元素列表,其为双向链表结构。

2.站场图模块的结构

站场图模块编写的总体原则为,把各个子功能,在物理和逻辑上都划分清晰,一个逻辑上的功能在物理上有一个实现文件与之对应,这样便于理解和以后的扩充,整个模块可以分为3部分,现分别描述如下:

一:

各个站场图元素,如“道岔”,“信号机”,“按钮”等,这部分主要是对站场图各个元素的抽象,不同的站场图元素用不同类进行抽象实现。

这部分主要放置在Src/ZctElements文件夹下,每一类元素对应一个文件。

现在实现的站场图元素有14种:

“按钮”,“箭头”,“表示灯”,“桥梁”,“道岔”,“道岔表示”,“绝缘节”,“信号机”,“信号楼”,“站台”,“脱轨器”,“车次窗”,“区段”和“文本”。

 

二:

站场元素的管理,即站和站集。

站包含一个站的元素列表,主要来管理这个站的元素,在程序中由CStation类实现。

站集包含一个或多个站,可以管理多个站。

在程序中由CStationSet来实现。

三:

站场和站集的显示。

程序中的CZctView类实现了站场和站集的显示,并支持多种对站场图的操作。

2.1.物理结构

模块的物理组织,即文件和文件夹的组织,模块的所有文件放在Zctxs文件夹中,其下的文件及文件夹如下:

inc:

存放模块中的所有头文件。

res:

存放模块使用的资源文件。

src:

程序源文件目录。

ZctModule.cpp:

站场图模块主文件。

为了方便模块的使用,其他模块如需要站场图模块,只要在项目中加入此一个文件即可,其包含了系统中的其他所有文件。

2.1.1.Inc目录

AnNiu.h:

按钮类的头文件

Arrow.h:

箭头类的头文件

BiaoShiDeng.h:

表示灯类的头文件

Bridge.h:

桥梁类的头文件

DaoCha.h:

道岔类的头文件

Dcbs.h:

道岔表示的头文件

DisplayPara.h:

显示设置结构头文件

IniFile.h:

读写INI文件类的头文件

Jyj.h:

绝缘节类的头文件

LogicKgl.h:

逻辑开关量类的头文件

RealKgl.h:

实际开关量类的头文件

Signal.h:

信号机类的头文件

SignStair.h:

信号楼类的头文件

StaDesktop.h:

站台类的头文件

Station.h:

车站类的头文件

StationSet.h:

站集类的头文件

Tgq.h:

脱轨器类的头文件

Train.h:

车列类的头文件

TrainNo.h:

车次窗类的头文件

WcqdorGd.h:

无岔区段或股道类的头文件

WenBen.h:

文本类的头文件

ZctElement.h:

抽象的站场图元素类的头文件

ZctElementCollection.h:

站场图元素集合类的头文件

ZctLoader.h:

站场图载入类的头文件

ZctSaver.h:

站场图保存类的头文件

ZctView.h:

站场图显示类的头文件

Zctxs.h:

预定义头文件

2.1.2.Res目录

2.1.3.Src目录

2.2.概述

站场图模块采用文档/视图结构,视图类(CZctView)用来显示站场图,文档类(CStation/CStationSet)来对单站和多站进行管理。

为了简化模块的使用,把单站看成是多站的特例进行统一处理。

CStatoinSet中含有CStation的链表,各个单站在站集中由一个双向链表串接在一起。

对站场元素进行抽象,用CZctElement类表示,其为抽象类,不能生成具体实例,所有实际的站场图元素都由该类派生,代表实际的站场图元素,如道岔,信号机等。

CStation中包含有一个站场元素列表(ZctElementList),站的所有站场元素均在该链表中。

站场图模块的编写没有考虑多线程程序的使用,如果在多线程程序中使用该模块,程序中要保证数据的一致性。

为了消除屏幕的闪烁,站场图的显示采用双缓冲,建立一个内存图,所有的绘图操作发生在内存图上,绘制好后再贴到屏幕上。

内存图的大小和屏幕的大小一致,在屏幕大小改变时为了减少频繁生成内存位图,在屏幕大小变小时不重新生成内存位图,而用原来的内存位图。

为了提高效率,减少绘制时的工作量,在绘制运行图元素时,仅绘制屏幕可见元素,略过不可见元素的绘制。

每个元素都有一个可视矩形区域,该区域不包括元素的名称,如果该区域和窗口视图区域(CZctView)有重叠,则认为该元素可见。

在站集多屏幕情形下,所有的元素都可见时,如果一个元素的状态发生变化,绘制一个站的所有元素,也会有非常大工作量,在模块中采取只绘制状态发生变化的元素。

但如此的话将会引发新的问题,即有些元素状态发生变化前后的画法不一致,这就要求首先清除元素,然后再按新的画法进行绘制,清除元素有多种方式,其一,就是取得元素的显示矩形,然后用视图背景色进行填充,这样会把此区域中的其他元素也清掉,对于“道岔”特别明显,这种方法也不能清掉元素的名称。

其二为用背景色重新绘制该元素,程序中即采取此种方法。

清除掉旧的状态,再按新状态绘制元素,仅绘制状态发生变化的元素,cpu占用率可降至最低。

当元素的状态发生变化,按新状态绘制后会引发另外一个问题,对于“股道”,其状态发生变化,重新绘制后,原来在上面的“按钮”,变成了在“股道”的下面,即在“股道”绘制后,也应该再绘制一下其上面的“按钮”元素。

为了解决这个问题,引入了一个“元素层次”,即每个元素都有一个层次,底层的按钮绘制后,也应该绘制在其上层的元素。

3.站场图模块设计说明

3.1.CZctView站场图视图类

3.1.1.概述

该类继承自CScrollView,用来显示站场图,为了简化程序设计,有一个指向站场图站集的指针,所有的站都按站集处理。

在类中有一间隔为0.1秒的定时器,在定时器中会递增ticks变量。

程序中所有时间间隔都依此为基准。

在该类中实现的功能有:

1.鼠标移动停留时对鼠标所指元素的提示框提示功能。

2.对内存位图的自动处理。

包括生成,窗口变大时的位图调整。

3.鼠标对站场图的拖动。

4.闪烁元素的自动绘制。

5.站场图的放大缩小。

如要使用站场图模块显示站场图,只要从该类派生出自己的类,增加自己所需的额外功能即可。

3.1.2.主要数据成员描述

private:

//鼠标移动时的嘀嗒值,用于计算鼠标没有移动的时间

intm_nMouseMoveTick;

CPointm_mouseLocPos;//鼠标当前的位置

CPointm_mouseDownPos;//鼠标按下的位置

boolm_bRedrawMemBitmap;//是否重画内存图

CToolTipCtrlm_tips;//提示窗口

CBitmapm_bgdBitmap;//内存图

CDC*m_pMemDC;//向内存图绘制的DC指针

public:

CStationSet*m_pStaSet;//显示的站集指针

protected:

CSizem_bgdBitmapSize;//内存图大小

3.1.3.主要函数描述

CDC*GetMemDC();

说明:

得到向内存图绘制的DC指针,绘制后不用释放,如对DC有的改变,使用后应恢复以前的设置。

参数:

返回值:

指向内存dc的指针。

voidGetLocViewRect(RECT&);

说明:

得到当前的逻辑显示区域。

即加上了把滚动条的值。

参数:

矩形结构引用

返回值:

voidSetElementsVisible();

说明:

设置元素的可见性,当滚动条滚动逻辑显示区域发生变化,或视图大小发生变化时,要重新设置站集中元素的可见性。

在以上说说的情况下,系统会自动处理。

该函数外界一般不会使用。

参数:

返回值:

voidGetLocPos(CPoint&);

说明:

屏幕坐标和逻辑视图坐标的装换。

即加上了把滚动条的值。

参数:

屏幕坐标值

返回值:

voidReDraw();

说明:

重新绘制内存图。

参数:

返回值:

voidFreshViewRect();

说明:

重新计算元素的可见性,并重画视图。

参数:

返回值:

voidZoom(floatscale);

说明:

放大站场图

参数:

scale:

!

=1.0放缩比例,相对于上次。

=1.0还原站场图的原始大小。

返回值:

voidSetZctBkColor(COLORREF);

说明:

设置背景颜色

参数:

颜色

返回值:

COLORREFGetZctBkColor();

说明:

得到背景颜色

参数:

返回值:

背景颜色

virtualvoidOnDraw(CDC*pDC);

说明:

绘制站场图

参数:

返回值:

voidSetStatusByKgl(MultiStationBuf*pBuf);

说明:

根据开关量设置站集状态,并重画状态改变的元素。

参数:

站集信息结构

返回值:

3.2.CStation站场类

3.2.1.概述

该类用于管理一个车站的所有元素。

有一个元素数组,来保存该站的所有元素。

该类实现的功能有:

1.载入保存一个站。

2.显示一个站。

3.设置站内元素的可见性。

4.放大缩小站场。

3.2.2.主要数据成员描述

protected:

//车站名称

stringm_name;

//要显示给站的视图的指针

CZctView*m_pZctView;

//站控状态(是否非常站控)

boolm_bCtrlStatus;

//背景色

COLORREFm_bkColor;

//x,y方向的放大系数

floatm_xScale;

floatm_yScale;

//从站场图配置文件读取的原始放缩比例,是放大缩小倍数的基数。

//该值初始化后,不会改变,在还原站场图时使用。

floatm_xScale0;

floatm_yScale0;

//原点偏移坐标

POINTm_offset;

//默认的画笔宽度

intm_nPenWidth;

//显示控制参数

CShowElementParam_showPara;

public:

//开关量数组

CTypedPtrArraym_RealKglArray;//实际开关量数组

CTypedPtrArraym_LogicKglArray;//逻辑开关量数组

//定义各种设备的数组

CZctElementCollectionm_zctElements;

//被选中元素列表

CZctElementCollectionm_selElements;

3.2.3.主要函数描述

voidResumeScale();

说明:

还原缩放比例,还原为从站场图文件中载入的缩放比例。

参数:

返回值:

floatGetScaleRatio();

说明:

得到站场图的放大比例,因为站场图x,y可以分别放大,用x方向的缩放比例来代替。

参数:

返回值:

站场图的放大比例

constchar*Get_Name();

说明:

取得车站名称。

参数:

返回值:

车站名称

voidSet_Name(constchar*name);

说明:

设置车站名称。

参数:

车站名称

返回值:

floatGet_XScale();

说明:

取得X方向的缩放比例。

参数:

返回值:

X方向的缩放比例

voidSet_XScale(floatval);

说明:

设置X方向的缩放比例。

参数:

X方向的缩放比例

返回值:

floatGet_YScale();

说明:

取得Y方向的缩放比例。

参数:

返回值:

Y方向的缩放比例

voidSet_YScale(floatval);

说明:

设置Y方向的缩放比例。

参数:

Y方向的缩放比例

返回值:

POINTGet_OrgOffset();

说明:

取得原点偏移坐标。

参数:

返回值:

原点偏移坐标

voidSet_OrgOffset(POINT&pt);

说明:

设置原点偏移坐标。

参数:

原点偏移坐标

返回值:

intGet_PenWidth();

说明:

取得默认的画笔宽度

参数:

返回值:

默认的画笔宽度

voidSet_PenWidth(int);

说明:

设置默认的画笔宽度

参数:

默认的画笔宽度

返回值:

CZctElement*GetElement(POINTpt,CZctElementCollection*pSelectedElements=NULL);

说明:

得到指定点处的元素。

参数:

pt:

指定的点

pSelectedElements:

保存选中控件的列表

返回值:

指定点处最上层的元素

voidGetElements(ObjectTypetype,CZctElementCollection&list);

说明:

得到指定类别的元素。

参数:

type:

要得到元素的类别

List:

保存指定类别元素的列表

返回值:

voidGetElemetsInRect(constRECT&rect,CZctElementCollection*pSelectedElements,boolbAll);

说明:

得到指定的矩形中的元素列表

参数:

rect:

矩形区域

pSelectedElements:

得到的元素列表

bAll:

true:

所有元素,包括不可见,和不需要显示的元素

false:

不包括不可见和不需要显示的元素

返回值:

voidClear();

说明:

清除站场图。

参数:

返回值:

virtualintDraw(CDC*pDC,CZctElementCollection*pElementList=NULL);

说明:

画指定的元素列表。

参数:

pDC:

DC指针

pElementList:

要画的元素列表

返回值:

画的元素个数

boolDraw(CDC*pDC,CZctElement*pElement,DRAWSTRUCT*pds=NULL);

说明:

画指定的元素。

参数:

pDC:

DC指针

pElement:

要画的元素指针

pds:

绘制元素的信息结构

返回值:

是否重画了该元素

boolGetCtrlStatus();

说明:

得到车站的站控状态。

此状态从大排队中获得。

参数:

返回值:

该站是否非常站控

virtualboolSearchKgl();

说明:

寻找每个元素的每个开关量所在大排队中的位置。

参数:

返回值:

是否寻找成功

virtualboolLoadFromFile(constchar*pszFileName);

说明:

从文件中载入站场图。

参数:

站场图文件的全路径

返回值:

是否载入成功

virtualboolSaveToFile(constchar*pszFileName);

说明:

保存站场图到文件。

参数:

要保存文件的全路径

返回值:

是否保存成功

voidGetZctRect(RECT&);

说明:

得到站场图的大小。

参数:

矩形结构引用

返回值:

voidSetElementsVisible(RECT&viewRect);

说明:

根据窗口大小,设置各个元素的可见性。

参数:

窗口大小

返回值:

voidUpdateElementRedrawList();

说明:

更新元素的重绘列表

参数:

返回值:

voidSetShowPara(ObjectTypetype,DWORDpara);

说明:

设置站内元素显示控制参数。

参数:

type:

要设置的元素类型

para:

显示参数

返回值:

DWORDGetShowPara(ObjectTypetype);

说明:

得到站内元素显示控制参数。

参数:

要得到显示控制参数的元素类型

返回值:

显示控制参数

intGetPenWidth();

说明:

得到画笔宽度,此处得到的画笔宽度是乘上缩放比例后的宽度。

参数:

返回值:

画笔宽度

virtualCZctElement*CreateElement(ObjectTypetype);

说明:

根据指定的类型创建一个元素。

参数:

指定的类型

返回值:

指向创建元素的指针

virtualvoidSetStatusByKgl(CDC*pDC,unsignedchar*pDigitBuf,intBufLen,

CZctElementCollection*pStaChangedList);

说明:

由开关量设置元素状态。

参数:

pDC:

DC指针

pDigitBuf:

指向开关量缓冲区的指针

BufLen:

开关量缓冲区长度

pStaChangedList:

保存状态改变的元素的列表

返回值:

BOOLGetKglStatus(KglTypeType,intXh,unsignedchar*pDigitBuf,intBufLen);

说明:

取开关量状态。

参数:

Type:

开关量类型

Xh:

开关量的序号

pDigitBuf:

指向开关量缓冲区的指针

BufLen:

开关量缓冲区长度

返回值:

开关量状态

voidGetFlashStateChanged(CZctElementCollection&);

说明:

得到闪烁状态改变的元素。

参数:

保存闪烁状态改变的元素列表

返回值:

voidFlashSync();

说明:

闪烁同步,使元素闪烁的初始状态相同。

参数:

返回值:

voidGetElementDisRect(RECT&r,CZctElement*pElement);

说明:

得到指定元素的显示区域。

参数:

r:

保存要得到元素的显示区域

pElement:

指定的元素

返回值:

voidToElementPoint(POINT&pt,CZctElement*pElement);

说明:

把点转换到没有偏移,缩放比例为1时的位置。

参数:

pt:

要转换的点

pElement:

元素指针

返回值:

DRAWSTRUCT&PrepareDrawStruct(CDC*pDC,DRAWSTRUCT&ds);

说明:

设置绘制元素的信息结构。

参数:

pDC:

DC指针

ds:

绘制元素的信息结构

返回值:

绘制元素的信息结构

voidClearDisplay(CDC*pDC,CZctElement*pElement);

说明:

清除指定的元素。

参数:

pDC:

DC指针

pElement:

指向要清除元素的指针

返回值:

voidClearDisplay(CDC*pDC,CZctElementCollection*pElementList=NULL);

说明:

清除指定的元素。

参数:

pDC:

DC指针

pElementList:

要清除元素的列表

返回值:

3.3.CStationSet站集类

3.3.1.概述

该类用于管理一个或多个车站。

有一个车站数组,来保存该各个车站。

该类实现的功能有:

1.载入保存一个站集。

2.显示一个站集。

3.设置站集内元素的可见性。

4.放大缩小站场。

3.3.2.主要数据成员描述

public:

//车站列表

ZctStationListm_staList;

protected:

//站集偏移量

POINTm_offset;

//X和Y方向上的缩放比例

floatm_xScale;

floatm_yScale;

//显示该站集的视图指针

CZctView*m_pZctView;

3.3.3.主要函数描述

CStationSet(CZctView*pZctView);

说明:

构造函数。

参数:

显示该对象的视图指针

CStationSet();

说明:

构造函数

参数:

virtualCStation*CreateStation();

说明:

创建一个单站对象。

参数:

返回值:

指向创建的单站的指针

voidSetView(CZctView*pZctView);

说明:

设置视图指针,如果在构造该对象时没有设置视图指针,在使用前必须调用该函数设置视图指针。

参数:

显示该站集的视图指针

返回值:

intDraw(CDC*pDC);

说明:

绘制站集。

参数:

DC指针

返回值:

绘制元素个数

intDraw(CDC*pDC,CZctElementCollection&list);

说明:

绘制指定的元素列表

参数:

pDC:

DC指针

list:

要绘制的元素列表

voidAddStation(CStation*pStation);

说明:

向站集中增加一个单站。

参数:

单站指

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1