一、需求描述
本项目是一个图形编辑类的工具一部分界面及其功能的外包。
必须使用MFC(visual studio 2013)来完成。
如果使用到了集合,必须是用std标准库,比如std::vector,std::map等等。除非无法满足技术条件,可以协商。
所有控件使用默认风格,不使用图标。比如新建线段的按钮,直接用文字表达。
本项目要求分阶段交付源代码来减少风险。比如当完成了下述功能1后,可以交付这部分源代码供客户体验。完成了功能3后,立马交付这部分源代码供客户体验。
本项目主要涉及对于7个图形,包括:线段(Line)、圆弧(Arc)、圆(Circyle)、椭圆(Ellipse)、多边形(Polygon)、多段线(Polyline)、曲线(Spline)的操作及其界面,其功能如下:
1.能对某个文件进行读取和解析,解析出其中包含的上述7个图形的数据。
这个解析,及其这些图形的结构定义都是用开源的第三方C++库(dxflib)来完成。直接调用dxflib的API即可完成。dxflib有调用得Example源代码。可以参考如下资料链接:
http://www.1pluscad.com/197.html
2.能在一个画布上使用GDI+的API,对已经解析出来的上述7种类型的图形数据进行绘制。并且能设置绘制的线宽(Thickness)和颜色。线宽使用GDI+ API中Pen得Width来实现。
颜色话使用预设几个颜色的按钮去设置。厚度的话使用拉杆条和数字输入控件让用户精确控制(线宽精度要求为最小0.1或0.5,根据实际绘制出来的效果而定)。
当用户设置完后,直接按照新设置的线宽和颜色,重新绘制画布中所有图形元素。
3.要求在绘制的画布上能用鼠标左键点选、框选上述已经绘制的图形。并且在右侧显示一个窗口。
该窗口平时隐藏,当点选、框选中后显示其信息。
比如当选中某条线段后,显示其开始点,结束点、类型是线段。
同时要将选中的图形做标记,比如选中某线段,则对这条线段进行高亮(颜色为白色),该线段的起始点和结束点,要起始点和结束点中心坐标,绘制了两个小的正方形。
又比如曲线,则对这条曲线进行高亮(颜色为白色),要以该曲线的多个转折点为中心坐标,绘制了对应数量的小正方形。
4.要求点选图形新建按钮后,能通过鼠标操作来新建图形。比如点击了新建线段的按钮:则当用户鼠标左键点击AB两点后,以A为起始点、B为结束点、新建一个线段图形,并且显示在画布上。
又比如点击了新建曲线的按钮:则当用户鼠标左键点击ABC三点后,以ABC三点形成一个曲线。线段、曲线等都使用1所述中的开源的第三方C++库的结构。
因为有7种图形类型,所以有对应的7个图形新建按钮。
5.要求必须将解析自文件的上述7个图形的信息,比如线段的起始点、结束点。比如圆的圆心点、半径等信息,按照一定格式(会提供协议)输出到一个csv文件。
6.要求能对已选中的图形做镜像操作,比如上下镜像,左右镜像。当选中某个图形后点击“镜像”按钮就可以对选中的图形做镜像操作,并且在画布上显示镜像后的结果。
该镜像必须是真实的改变其数据,而不是使用渲染变换仅作用在显示上的。
7. 要求能将编辑后的图形,重新另存为一个dxf文件。直接调用dxflib的API即可完成。
8.要求能对已选中的图形做删除操作。删除后,该图形就从画布上消失。
9.能通过鼠标滚轮对画布进行实时缩放,放大缩小后要求已绘制的图形同步缩放,并且不能产生变形。当画布放大后,要允许用户按住鼠标左键拖拽画布、使用横竖滚动条两种方式来调整可以看见的区域。
但是画布这个控件在整个exe的大小不能变化。
10.在画布右下角显示鼠标在画布上的实时坐标,比如 x=100,y=102这样的标签来显示。
11.要求能对两个进行测量,比如按下“测量按钮”,能对选中的两个点进行长度计算,并且以文本的方式,显示在界面上。
12.要求在界面上显示一个BMP图,并且能将该BMP保存到某个目录,该图片是解析自包含图形信息的文件的。
13.要求能设置一个定时器,逐个绘制图形。比如按下“轨迹”按钮后,按照第一秒绘制线段1,第2秒绘制圆弧2,第n秒绘制图形n的流程,将所有已经解析出来的图形绘制出来。
14.要求能清空画布,比如按下“清空”按钮后,画布上已绘制的图形,全部清空,消失。
二、人才要求
MFC开发经验3-5年以上。
必须熟悉GDI+ 的API。
以前制作过图形编辑类工具优先。
上海地区及其周边优先。
必须要能满足分阶段交付源代码的要求。
三、参考做品
操作的流程,比如点选,选中。缩放,拖拽,新建等可以参考AutoCAD中绘图部分或QCAD软件。
四、合作方式
采用项目整包的合作方式。整个项目要求20天交货。
如果时间来不及,可以协商完成上述功能中的几个,另发项目来合作。
比如完成界面操作的实现。则协商另发项目来合作。