12,999,653 members (64,799 online)
alternative version

#### Stats

87.9K views
51 bookmarked
Posted 14 Jul 2004

# 2D Poligon Drawer-Animator

, 1 Aug 2004
 Rate this:
Draw poligons, manipulate them, and animate them.

## Introduction

I started thinking of the way to build a 2D polygon animator. First of all, I needed a good stuff to memorize my graphics. This article is based on the way I can memorize some 2D graphics. I choose a non bitmap way. This is because, I want a fast and simple way to animate my graphics. So, I choose a 2D vectorial approach. In this article, I propose the (simple) structures I chose to represent my graphics and to animate it. I propose also a graphic editor to generate 2D graphics, and a tool to create animation from the graphics tool. The proposed exe and the source is in the provided download.

## The idea

In a bitmap, we have a set of pixels (each of them refer to a palette color) that defines an image. In my approach, I define an image as a set of "polygons". Each polygon is composed by a set of points, (like the polygons of the `Graphics` class). Each polygon has also a "center color", a "color", and a "center point" from which diffuses the brush color gradient. Here are the classes used:

## Using the code

Remember that `GrpLst` contains a list of references to `GrpObj`, and `GrpObj` contains a list of references to `Point`. Following snippet shows how to use the classes:

```// create a List of poligons
ExtGrpLst g_l = new ExtGrpLst();

// to create a Poligon
pubO = new GrpObj();
pubO.color =  button4.BackColor;
pubO.centerColor = button1.BackColor;
// add a poligon to the list
// I can add new point to the poligon like this (I'm plaing with references)
// or like this (to add a point to the last poligon of the list)

To render the scene, we transform the `ExtGrpLst` into a `GraphicsPath`.

```foreach (GrpObj r in g_l.list)
{
PointF[] appo = new PointF[r.pointList.Count];
int i = 0;
foreach (PointF p in r.pointList)
{
appo[i] = p;
i++;
}
GraphicsPath gr_pth = new GraphicsPath();
if (filled) // draw only lines or filled poligon
{
GraphicsPath g_p = new GraphicsPath();
pgbrush.CenterPoint=r.centerPoint;
pgbrush.CenterColor=r.centerColor;
pgbrush.SurroundColors=new Color[] { r.color };
offScreenDC.FillPolygon(pgbrush, appo);
g_p.Dispose();
}
Pen pen = new Pen(r.color, 1);
offScreenDC.DrawPath(pen,gr_pth);
gr_pth.Dispose();
}```

See the `canvas.redraw()` method.

## Using the tool

First of all, activate a canvas with Frame->New. Then you can draw what you want and try all the functions. You can activate Animation-->New. The canvas is the same as the Frame, with the possibility to store frames and recolor them. Click on Animate to start your animation. If you load (Animation-->Load) the file codeP_anim2.anim, you can test it by clicking "Animate".

## FAQ

To close a polygon while drawing, click on the first node (point) from which you started.

In this version of the tool, you cannot draw lines and ellipses.

## Notes

I didn't write a help file for the tool, maybe in the future. I'll be glad to help/explain any problem. If any good designer/animator will create something cool with that tool, I'll be glad to see his work.

## Update 26/07/2004

Added the following features. Add/remove points to selected poligon. X and Y mirroring of selected poligons. Undo function. Save scene as JPG/BMP. Load a background image. Some bugs cleared.

## Share

 Software Developer Italy
No Biography provided

## You may also be interested in...

 First Prev Next
 My vote of 5 Blagoje11-Mar-16 15:18 Blagoje 11-Mar-16 15:18
 My vote of 5 manoj kumar choubey21-Feb-12 23:51 manoj kumar choubey 21-Feb-12 23:51
 What time can test the links？Can be exported or load svg files? hudawei12-Apr-10 5:39 hudawei 12-Apr-10 5:39
 reply kold1618-Feb-09 11:34 kold16 18-Feb-09 11:34
 Re: reply acontoli18-Feb-09 21:40 acontoli 18-Feb-09 21:40
 Nice Article Anand Ranjan Pandey5-Feb-09 21:50 Anand Ranjan Pandey 5-Feb-09 21:50
 my homepage acontoli20-Sep-07 2:13 acontoli 20-Sep-07 2:13
 Help in graphics programming needed !! Lalito8019-Jun-07 5:02 Lalito80 19-Jun-07 5:02
 Hi: I am Eduardo, writing from Peru (Lima) and the author of program Secciones (http://sourceforge.net/projects/secciones/) developed with .NET 2 and CSharp and i realize that you have experience with graphics management, viewpoints, viewports, etc. and I was wondering if you can help me improve my little program Secciones. If you have a look on my program, you will see that the graphics are poor and i need to improve them (now i am using ZedGraph). I would like to have a graphics interface like Autocad or any CAD Tools (maybe not so advanced), with the following features: * Allow me to see the Polygons and 2d figures defined by (x,y) points in their real form (Scale on X = Scale on Y). * Zooming functions (In / Out / Rectangular area) * Panning * Grids with points * Able to have "sensible" areas, like the tag of html. * Obviously FREE or Open Source !!! Is there any way to do this? Can you help on that, giving some directions or related information? pd. Sorry for my bad english. Thanks in advance. Regards Saludos, Eduardo Rivera Alva Teléfono: (51-1) 226-1440 (Oficina) Celular : (51-1) 9-506-9736 (Móvil) Email 1 : eriveraa@gmail.com Email 2 : eriveraa@hotmail.com Lima - Perú ----------------------------------------------------------
 Spelling? Colin Angus Mackay2-Aug-04 3:12 Colin Angus Mackay 2-Aug-04 3:12
 Re: Spelling? Milkybar Kid3-Aug-04 13:06 Milkybar Kid 3-Aug-04 13:06
 Re: Spelling? Colin Angus Mackay3-Aug-04 13:15 Colin Angus Mackay 3-Aug-04 13:15
 Memory hungry Doubin15-Jul-04 1:11 Doubin 15-Jul-04 1:11
 Re: Memory hungry acontoli15-Jul-04 2:32 acontoli 15-Jul-04 2:32
 Last Visit: 31-Dec-99 18:00     Last Update: 24-Jun-17 10:18 Refresh 1