0% found this document useful (0 votes)
13 views

2D Drawing

The document introduces the GeoIO library, a simple geometry library for drawing 2D shapes like lines, circles, and arcs, with support for undo/redo operations. It provides a sample application, Cad2D, to demonstrate its functionality and ease of use, encapsulating MFC drawing capabilities into core geometry classes. The library allows developers to create and manage multiple layers of geometric entities in their applications efficiently.

Uploaded by

kate.moss
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

2D Drawing

The document introduces the GeoIO library, a simple geometry library for drawing 2D shapes like lines, circles, and arcs, with support for undo/redo operations. It provides a sample application, Cad2D, to demonstrate its functionality and ease of use, encapsulating MFC drawing capabilities into core geometry classes. The library allows developers to create and manage multiple layers of geometric entities in their applications efficiently.

Uploaded by

kate.moss
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

https://www.codeproject.

com/Articles/421275/2D-Drawing-Doc-View-architecture

2D Drawing - Doc/View architecture

Sunil P V

3.79/5 (7 votes)

20 Jul 2012CPOL3 min read 46.1K 4.3K


This article is a simple geometry library for drawing lines, circles, arcs, text, etc.
Download demo Project - 114.1 KB
Download demo - 93 KB

Introduction

GeoIO lib is a simple geometry library that encapsulates the drawing of various geometrical entities (like lines,
circle, arc, text etc), storing them in a list with support for undo/redo operations. There is a sample application
called Cad2D attached which exposes some of the basic drawing and serilaization functionality of the
GeoIO library.

Background

Couple of developers/programmers have come across a situation to develop simple application to draw 2-
Dimensional geometry entities. However they are blocked due to many reasons like lack of time, unwilling to
explore OpenGL, develop the module from base etc. The MFC set of classes (DeviceContext) gives some
good functionality to draw simple entities like lines, circles, rectangles etc, but a first timer may take sometime
to learn, understand and experiment it. GeoIO library has encapsulated the complete functionality of MFC into
set of core geometry classes. All that you have to do is add this module into your project and start with it. The
module also supports drawing, dragging operation OnMouseMove handler and serialization.

Using the code

GeoIO is simple MFC DLL. Add this as dynamic-linked or static-linked to your project. Initially the usage of this
module might look difficult, but once you read the below fundamental concepts you should sail through easily.
Open the sample project Cad2D (SDI MFC application) which uses GeoIO to draw 2D basic geometry objects.
Please explore this sample project to learn and understand the usage of GeoIO.

1
NOTE: The project has .vcproj and .vcxproj files so it should open in VS2010 and earlier versions of Visual
Studio.

Geometry classes in GeoIO:

 CPrimitive - the principle base class for all the below mentioned classes.
 CGeoArc - class to draw and serialize an arc
 CGeoCircle - class to draw and serialize a circle
 CGeoLine - class to draw and serialize a line
 CGeoPolybezier - class to draw and serialize a polybezier
 CGeoPolygon - class to draw and serialize a polygon
 CGeoRectangle - class to draw and serialize a rectangle
 CGeoText - class to draw and serialize a string

Note: Some drawing logic have been inspired from various online articles.

Collection classes:

 CEntityList - class to hold objects of CPrimitive (like CGeoArc, CGeoLine, CGeoRectangle, etc).
 CLayerList - class to hold objects of CLayer
 CLayer - class stores an instance of CEntityList. A CLayer object is identified by a layer ID.

So, in your application follow the below procedure:

C++
CLayer *pLayer = new CLayer(); // member variable of your window class
CPrimitive *pEntity = new CGeoLine(); // create an entity of time line
pEntity->m_StPnt = CPoint(10, 10);
// set the start point of the line

2
pEntity->m_EndPoint = CPoint(100, 100); // set the end point of the line
pEntity->m_clr = RGB(255, 255, 255); // set the color of the line
pLayer->AddEntityToLayer(pEntity); // store it to the layer class

In the OnDraw(CDC *pDC) method of your window class, call the

C++
pLayer->DrawLayer(pDC); // NOTE: pLayer should be a member of your window class that is created in the
constructor.

Also note that in the example above I have hard-coded the pEntity->m_StPnt and pEntity->m_EndPnt to some
random CPoint values. Ideally this should be done in the OnLButtonDown handler which gives you
the CPoint data as a parameter.

Concept of layers

In your application, you can create 'N' number layers and maintain them in the CLayerList class. In
the OnDraw() method of your window class, you can select which CLayer to be drawn. If you wish to draw all
the layers then iterate each layer in the CLayerList and then call DrawLayer() method of the CLayer.

3
4
5

You might also like