1
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
Cad 2D attached which exposes some of the
basic drawing
and serilaization functionality of the
GeoIO library.
2
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.
3
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 Cad
2D (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.
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:
Collapse | Copy
Code
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);
In the
OnDraw(CDC *pDC)
method of your window class, call the
Collapse | Copy
Code
pLayer->DrawLayer(pDC);
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
.