Click here to Skip to main content
15,881,820 members
Articles / Programming Languages / C#
Article

2D Poligon Drawer-Animator

Rate me:
Please Sign up or sign in to vote.
4.57/5 (21 votes)
1 Aug 2004CPOL2 min read 104.8K   4.7K   52   13
Draw poligons, manipulate them, and animate them.

Sample Image - 2D_Poligon_Drawer-Animato.jpg

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:

Sample screenshot

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:

C#
// 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
g_l.addObj(pubO);
// I can add new point to the poligon like this (I'm plaing with references)
pubO.addPoint(new Point(e.X,e.Y);
// or like this (to add a point to the last poligon of the list)
g_l.addPoint(appo);

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

C#
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();
    gr_pthGlb.AddPolygon(appo);
    gr_pth.AddPolygon(appo);
    if (filled) // draw only lines or filled poligon
    {
       GraphicsPath g_p = new GraphicsPath();
       g_p.AddPolygon(appo);
       PathGradientBrush pgbrush= new PathGradientBrush(g_p);
       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".

Sample screenshot

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.

Update Sample screenshot

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
Blagoje11-Mar-16 15:18
Blagoje11-Mar-16 15:18 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey21-Feb-12 23:51
professionalManoj Kumar Choubey21-Feb-12 23:51 
QuestionWhat time can test the links?Can be exported or load svg files? Pin
hudawei12-Apr-10 5:39
hudawei12-Apr-10 5:39 
Generalreply Pin
kold1618-Feb-09 11:34
kold1618-Feb-09 11:34 
GeneralRe: reply Pin
andrea contoli18-Feb-09 21:40
andrea contoli18-Feb-09 21:40 
GeneralNice Article Pin
Anand Ranjan Pandey5-Feb-09 21:50
professionalAnand Ranjan Pandey5-Feb-09 21:50 
Generalmy homepage Pin
andrea contoli20-Sep-07 2:13
andrea contoli20-Sep-07 2:13 
GeneralHelp in graphics programming needed !! Pin
Lalito8019-Jun-07 5:02
Lalito8019-Jun-07 5:02 
QuestionSpelling? Pin
Colin Angus Mackay2-Aug-04 3:12
Colin Angus Mackay2-Aug-04 3:12 
AnswerRe: Spelling? Pin
Milkybar Kid3-Aug-04 13:06
sussMilkybar Kid3-Aug-04 13:06 
GeneralRe: Spelling? Pin
Colin Angus Mackay3-Aug-04 13:15
Colin Angus Mackay3-Aug-04 13:15 
GeneralMemory hungry Pin
Doubin15-Jul-04 1:11
Doubin15-Jul-04 1:11 
GeneralRe: Memory hungry Pin
andrea contoli15-Jul-04 2:32
andrea contoli15-Jul-04 2:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.