大项目多曲线的曲线组件源码定制之详细需求,适用工控、军工、金融等数据分析领域 浮云E绘图

前文已经详细介绍了通用曲线控件源码定制开发从需求到编码实现,具体可参阅 通用曲线控件源码定制之设计实现篇 和 通用曲线控件定制之重点难点篇(附源码),本文由浮云E绘图开启大项目多曲线海量数据的曲线组件分析和实现之路。

一、需求背景

在一些工业控制领域,有大量设备采集多种类型的大量数据,需要可视化直观对比某时段/刻,同一设备上的各种数据状态,或者多个设备上的同一种数据,并且海量数据(数百万个点)高性能展示,现有市面上没有一款软件能做到精细化并高效的支持,需要专业团队定制研发一款适合大项目多曲线大数据量的曲线组件。

二、详细需求

本曲线组件功能需要主要包括:普通曲线功能、移动测量、多类型曲线、曲线组管理、业务支持和性能要求,具体描述如下表所示:

普通功能标题标题文字、字体大小、字颜色、背景色、位置等
脚注脚注文字、字体大小、字颜色、背景色、位置等
图例图例名称、图例曲线颜色、风格、粗细等,图例隐藏显示
X轴X轴是时间,刻度轴、刻度值、轴名称;
支持年月日时分秒毫秒微妙格式化缩放
Y轴Y轴是时间,刻度轴、刻度值、轴名称;
支持固定设置轴范围和自动计算轴范围
网格网格线粗细、线性、颜色等
曲线曲线粗细、颜色、风格、标注等,具体看多类型曲线
缩放放大/缩小曲线区域,对应X轴刻度缩放
移动翻页左右移动翻页
导出、打印曲线导出成图片,可打印
移动测量鼠标移动实时画十字线鼠标移动画异或十字线
透明信息提示框透明度、边框、显示位置、显示文本和字体颜色等
鼠标移动实时数值显示鼠标点捕获计算实时坐标值,并在提示框显示
多类型曲线状态量曲线即有限取值范围的曲线,比如红灯、黄灯、白灯、灭灯
模拟量曲线即Y值是数值的曲线,比如电压200伏
曲线组管理添加、删除多子曲线可一屏展示多区域曲线,比如某采集设备的4条曲线分4个区域展示
多子曲线同步移动、缩放等基于相同X时间轴,同步移动缩放所有子曲线
子曲线折叠/展开为了充分理由曲线区域,支持子曲线纵向折叠和展开
业务支持年、月统计曲线支持统计曲线,并标注
日曲线支持历史点曲线,一屏展示设备属性的一整天所有点
实时播放曲线曲线支持动态实时播放,比如实时曲线
曲线播放支持曲线回放时,按时间有序动态播放曲线
性能要求支持海量数据点高效绘制支持10条子曲线、200万以上个数据点的0.5s以内绘制

三、技术要求

要求把本曲线模块封装成功能独立的DLL,以供第三方项目跨语言支持。本曲线组件功能非常丰富,相关类很多、类的属性很多、类的方法很多,所以提供给第三方的接口非常多,为了更有模块化和清晰的接口结构,请不要用函数导出(C#和VC++调用dll步骤,接口指针、字符串等类型对应关系)方式提供接口,以类导出的方式提供接口,采用C++/CLI技术实现。

浮云E绘图已经完整实现了上述所有功能,满足所有功能要求、性能要求和技术要求,并已经成功应用于多个大项目上。有需要定制开发源码,请联系。

//作者:浮云E绘图,专业定制CAD等绘图工具、工控曲线、报表等软件
//QQ:316868127
void CChartView::OnPaint()
{
	CPaintDC outputdc(this);

	CRect rect;
	GetClientRect(&rect);

	SCROLLINFO sih;
	sih.cbSize = sizeof(SCROLLINFO);
	sih.fMask = SIF_POS;
	SCROLLINFO siv;
	siv.cbSize = sizeof(SCROLLINFO);
	siv.fMask = SIF_POS;
	if (!GetScrollInfo(SB_HORZ, &sih))
		sih.nPos = 0;
	if (!GetScrollInfo(SB_VERT, &siv))
		siv.nPos = 0;

	CRect totalRect;
	int virtheight = m_virtualHeight + 1;
	totalRect.SetRect(0, 0, rect.Width(), virtheight);

	// Creating memory CDC
	CDC dc;
	dc.CreateCompatibleDC(&outputdc);
	CBitmap bmp;
	bmp.CreateCompatibleBitmap(&outputdc, rect.right, rect.bottom);
	CBitmap* oldbmp = dc.SelectObject(&bmp);


	dc.SetWindowOrg(sih.nPos, siv.nPos);
	
	Draw(&dc, totalRect);

	// Blit the memory CDC to screen
	outputdc.BitBlt(0, 0, rect.right, rect.bottom, &dc, sih.nPos, siv.nPos, SRCCOPY);	        
    //sih.nPos->0, siv.nPos->0
	dc.SelectObject(oldbmp);
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮云绘图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值