Click here to Skip to main content
13,143,637 members (28,482 online)
Rate this:
Please Sign up or sign in to vote.
See more:
How to draw a polygon using mouse then after calculate its area using
Posted 2-Feb-13 4:49am
Sandeep Mewara 2-Feb-13 12:02pm
1. You fail to share the language you are working on.
2. You fail to share what have you tried so far and where are you stuck?

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Ok, this isn't actually difficult, but you need to think about it, and do a few things.

If I assume you draw on a panel, then you need to set up a list of Point objects:
private List<Point> polygon = null;
This will hold the polygon vertices as you create it.
You then need to handle the Panel.MouseClick event:
private void myPolygonPanel_MouseClick(object sender, MouseEventArgs e)
    if (polygon == null)
        polygon = new List<Point>();
And the Paint event:
private void myPolygonPanel_Paint(object sender, PaintEventArgs e)
    if (polygon != null && polygon.Count > 1)
        for (int i = 0; i < polygon.Count - 1; i++)
            e.Graphics.DrawLine(Pens.Red, polygon[i], polygon[i + 1]);
Calculating the area is another matter: this is a simple Brute-Force-and-Ignorance method converted from C++
double GetArea(List<Point> polygon)
    double area = 0.0;
    for (int i = 0; i < polygon.Count; i++)
        int j = (i + 1) % polygon.Count;
        area += polygon[i].X * polygon[j].Y;
        area -= polygon[i].Y * polygon[j].X;
    area /= 2;
    if (area < 0)
        area = -area;
    return area;
You may want to be a little more intelligent! Wiki can probably help you.

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

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web03 | 2.8.170915.1 | Last Updated 2 Feb 2013
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100