2D几何图形绘制库GeoIO简介

在软件开发领域,2D绘图是一个常见的需求。开发者经常需要创建应用程序来绘制各种几何图形,如线条、圆形、弧线、文本等。然而,由于各种原因,如时间限制、不愿意探索OpenGL、从头开始开发模块等,许多开发者在实现这一功能时遇到了困难。MFC(Microsoft Foundation Classes)提供了一些绘制简单图形的类,如线条、圆形、矩形等,但对于初学者来说,可能需要一段时间来学习、理解和实践。GeoIO库将MFC的全部绘图功能封装成一组核心几何类,使得开发者可以轻松地将其添加到项目中并开始使用。此外,该库还支持绘图、拖动操作以及序列化功能。

一些开发者/程序员在开发一个简单的2D几何图形绘制应用程序时遇到了障碍。他们可能因为缺乏时间、不愿意探索OpenGL、从头开始开发模块等原因而受阻。MFC的DeviceContext类提供了一些绘制简单实体的功能,但对于初学者来说,可能需要一段时间来学习、理解和实验。GeoIO库将MFC的全部功能封装成一组核心几何类。只需要将这个模块添加到项目中,然后就可以开始使用了。该模块还支持在OnMouseMove处理器上的绘图和拖动操作以及序列化。

使用GeoIO库

GeoIO是一个简单的MFCDLL。可以将其作为动态链接或静态链接添加到项目中。最初使用这个模块可能会看起来有些困难,但一旦阅读了以下基本概念,应该能够轻松地使用它。打开示例项目Cad2D(SDI MFC应用程序),它使用GeoIO来绘制2D基本几何对象。请探索这个示例项目,以学习和理解GeoIO的用法。注意:该项目有.vcproj和.vcxproj文件,因此应该可以在Visual Studio 2010及更早版本中打开。

GeoIO中的几何类

以下是GeoIO库中定义的一些几何类:

  • CPrimitive - 所有以下类的基础类。
  • CGeoArc - 绘制和序列化弧线的类。
  • CGeoCircle - 绘制和序列化圆的类。
  • CGeoLine - 绘制和序列化线的类。
  • CGeoPolybezier - 绘制和序列化贝塞尔曲线的类。
  • CGeoPolygon - 绘制和序列化多边形的类。
  • CGeoRectangle - 绘制和序列化矩形的类。
  • CGeoText - 绘制和序列化字符串的类。

注意:一些绘图逻辑受到了各种在线文章的启发。

集合类

以下是GeoIO库中定义的一些集合类:

  • CEntityList - 持有CPrimitive对象的类(如CGeoArcCGeoLineCGeoRectangle等)。
  • CLayerList - 持有CLayer对象的类。
  • CLayer - 存储一个CEntityList实例的类。一个CLayer对象通过层ID来识别。

在应用程序中的使用

在应用程序中,可以按照以下步骤使用GeoIO库:

CLayer *pLayer = new CLayer(); // 创建一个新的图层 CPrimitive *pEntity = new CGeoLine(); // 创建一个线条实体 pEntity->m_StPnt = CPoint(10, 10); // 设置线条的起点 pEntity->m_EndPoint = CPoint(100, 100); // 设置线条的终点 pEntity->m_clr = RGB(255, 255, 255); // 设置线条的颜色 pLayer->AddEntityToLayer(pEntity); // 将实体添加到图层

在窗口类的OnDraw(CDC *pDC)方法中,调用:

pLayer->DrawLayer(pDC); // 绘制图层

注意:在上面的示例中,硬编码了pEntity->m_StPntpEntity->m_EndPoint为一些随机的CPoint值。理想情况下,这应该在OnLButtonDown处理器中完成,它会将CPoint数据作为参数提供。

图层概念

在应用程序中,可以创建'N'个图层,并将它们维护在CLayerList类中。在窗口类的OnDraw()方法中,可以选择要绘制的CLayer。如果想绘制所有图层,那么遍历CLayerList中的每个图层,然后调用CLayerDrawLayer()方法。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485