Draw Polygon : Polygon « 2D Graphics « C# / C Sharp

Home
C# / C Sharp
1.2D Graphics
2.Class Interface
3.Collections Data Structure
4.Components
5.Data Types
6.Database ADO.net
7.Date Time
8.Design Patterns
9.Development Class
10.Event
11.File Stream
12.Generics
13.GUI Windows Form
14.Internationalization I18N
15.Language Basics
16.LINQ
17.Network
18.Office
19.Reflection
20.Regular Expressions
21.Security
22.Services Event
23.Thread
24.Web Services
25.Windows
26.Windows Presentation Foundation
27.XML
28.XML LINQ
C# / C Sharp » 2D Graphics » Polygon 




Draw Polygon
Draw Polygon

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Poly
{
  /// <summary>
  /// Summary description for Form1.
  /// </summary>
  public class PolyclsMain : System.Windows.Forms.Form
  {
    private System.Windows.Forms.MainMenu mainMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.Windows.Forms.MenuItem mnuFileExit;
    private System.Windows.Forms.Label label1;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public PolyclsMain()
    {
      //
      // Required for Windows Form Designer support
      //
      InitializeComponent();
      InitForm ();

      //
      // TODO: Add any constructor code after InitializeComponent call
      //
    }
    clsPoint pt = new clsPoint (5050);
    clsEllipse ellipse = new clsEllipse (20015015075450);
    clsCircle circle = new clsCircle (400150150);
    clsLine line = new clsLine (400150150450);
//    clsShape [] Shapes;
    private void InitForm ()
    {
//    Shapes = new clsShape [] {pt, ellipse, circle, line};
      pt.color = Color.Red;
      this.MaximumSize = new Size (this.Bounds.Width, this.Bounds.Height);
      this.MinimumSize = this.MaximumSize;
      ellipse.color = Color.DarkOrange;
      line.color = Color.Blue;
    }
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Disposebool disposing )
    {
      ifdisposing )
      {
        if (components != null
        {
          components.Dispose();
        }
      }
      base.Disposedisposing );
    }

    #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.mnuFileExit = new System.Windows.Forms.MenuItem();
            this.menuItem1 = new System.Windows.Forms.MenuItem();
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.BackColor = System.Drawing.SystemColors.Window;
            this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(680341);
            this.label1.TabIndex = 0;
            this.label1.Paint += new System.Windows.Forms.PaintEventHandler(this.label1_Paint);
            // 
            // mnuFileExit
            // 
            this.mnuFileExit.Index = 0;
            this.mnuFileExit.Text = "Exit";
            this.mnuFileExit.Click += new System.EventHandler(this.mnuFileExit_Click);
            // 
            // menuItem1
            // 
            this.menuItem1.Index = 0;
            this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                        this.mnuFileExit});
            this.menuItem1.Text = "File";
            // 
            // mainMenu1
            // 
            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                        this.menuItem1});
            // 
            // clsMain
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(513);
            this.ClientSize = new System.Drawing.Size(680341);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                        this.label1});
            this.Menu = this.mainMenu1;
            this.MinimizeBox = false;
            this.Name = "Poly";
            this.Text = "Poly";
            this.ResumeLayout(false);

        }
        #endregion

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main() 
    {
      Application.Run(new PolyclsMain());
    }

    private void mnuFileExit_Click(object sender, System.EventArgs e)
    {
      this.Close ()
    }

    int m_cx = 100;
    int m_cy = 50;

    private void label1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
//    foreach (clsShape shape in Shapes)
//      shape.Show (e);
      pt.Show(e);
      ellipse.Show (e);
      circle.Show (e);
      line.Show (e);
    }
  }
  abstract public class clsShape
  {
    protected clsShape() { }
    ~clsShape ()
    {
      if (m_Pen != null)
        m_Pen.Dispose ();
      if (m_Brush != null)
        m_Brush.Dispose ();
    }
    protected Pen m_Pen = null;
    protected SolidBrush m_Brush = null;
    public Color color
    {
      get
      {
        if (m_Brush == null)
          m_Brush = new SolidBrush (Color.Black);
        return (m_Brush.Color);
      }
      set
      {
        if (m_Brush != null)
          m_Brush.Dispose ();
        m_Brush = new SolidBrush (value);
      }
    }
    protected virtual SolidBrush brush
    {
      get
      {
        if (m_Brush == null)
          m_Brush = new SolidBrush (Color.Black);
        return (m_Brush);
      }
    }
    protected virtual Pen pen
    {
      get
      {
        if (m_Pen == null)
          SetPen();
        return (m_Pen);
      }
      set {SetPen ();}
    }
    private void SetPen ()
    {
      if (m_Brush == null)
        m_Brush = new SolidBrush (Color.Black);
      if (m_Pen != null)
        m_Pen.Dispose ();
      m_Pen = new Pen (m_Brush, 2);
    }
    public void Show (PaintEventArgs e)
    {
      Draw (e);
    }
    virtual protected void Draw (PaintEventArgs e)
    {
    }
    protected void Rotate (int angle, Point ptCenter, Point [] ptControl)
    {
            // If the angle is 0, there's nothing to do
      if (angle == 0)
        return;
            
            // The angle is in tenths of a degree. Convert to radians
      double fAngle = (angle / 10.057.29578;
            
            // Calculate the sine of the angle
      double fSine = Math.Sin (fAngle);
            
            // Calculate the cosing of the angle
      double fCosine = Math.Cos (fAngle);
            
            // Translate the center point so it can be the center of rotation
      double fRotateX = ptCenter.X - ptCenter.X * fCosine - ptCenter.Y * fSine;
      double fRotateY = ptCenter.Y + ptCenter.X * fSine - ptCenter.Y * fCosine;
      for (int x = 0; x <  ptControl.Length; ++x)
      {
                // Rotate the control point and add the translated center point
        double fNewX = ptControl[x].X * fCosine + ptControl[x].Y *fSine + fRotateX;
        double fNewY = -ptControl[x].X * fSine + ptControl[x].Y *fCosine + fRotateY;
                
                // Put the new values in the control point
        ptControl[x].X = (intfNewX;
        ptControl[x].Y = (intfNewY;
      }
    }
  }
  public class clsPoint : clsShape
  {
    protected clsPoint () { }
    public clsPoint (int cx, int cy)
    {
      m_cx = cx;
      m_cy = cy;
    }
    public int cx
    {
      get {return(m_cx);}
      set {m_cx = value;}
    }
    public int cy
    {
      get {return(m_cy);}
      set {m_cy = value;}
    }
    protected int m_cx;
    protected int m_cy;
    override protected void Draw (PaintEventArgs e)
    {
      Point pt1 = new Point (m_cx, m_cy - 1);
      Point pt2 = new Point (m_cx, m_cy + 1);
      e.Graphics.DrawLine (pen, pt1, pt2);
      pt1.X = m_cx - 1;
      pt2.X = m_cx + 1;
      pt1.Y = pt2.Y = m_cy;
      e.Graphics.DrawLine (pen, pt1, pt2);
      e.Graphics.DrawRectangle (pen, m_cx - 3, m_cy - 366);
    }
  }
  public class clsLine : clsShape
  {
    protected clsLine () { }
    public clsLine (int cx, int cy, int length, int angle)
    {
      m_Start = new Point (cx, cy);
      m_End = new Point (cx + length, cy);
      m_Angle = angle;
    }
    protected Point m_End;
    protected Point m_Start;
    protected int m_Angle;
    override protected void Draw (PaintEventArgs e)
    {
      Point ptStart = new Point (m_Start.X, m_Start.Y);
      Point [] ptEnd = new Point[1] {new Point (m_End.X, m_End.Y)};
      Rotate (m_Angle, ptStart, ptEnd);
      e.Graphics.DrawLine (pen, ptStart, ptEnd[0]);
    }
  }
  public class clsCircle : clsPoint
  {
    protected clsCircle () { }
    public clsCircle (int cx, int cy, int radius)
    {
      m_cx = cx;
      m_cy = cy;
      m_Radius = radius;
    }
    protected int m_Radius;
    override protected void Draw (PaintEventArgs e)
    {
      e.Graphics.DrawEllipse (pen, m_cx - m_Radius, m_cy - m_Radius, * m_Radius, * m_Radius);
      DrawCenter (e);
    }
    public void DrawCenter (PaintEventArgs e)
    {
      base.Draw (e);
    }
  }
  /// <summary>
  /// Draws an ellipse using Bezier points
  /// </summary>
  public class clsEllipse : clsCircle, IDisposable
  {
    protected clsEllipse () { }
    public void Dispose ()
    {
    }
    public clsEllipse (int cx, int cy, int horiz, int vert, int rotate)
    {
      m_cx = cx;
      m_cy = cy;
      m_Radius = horiz;
      m_Vert = vert;
      m_Rotate = rotate;
    }
    protected double m_Eccentric;
    protected int m_Vert;
    protected int m_Rotate;
        /// <summary>
        /// Overridden from the clsCircle class
        /// </summary>
        /// <param name="e"></param>
    override protected void Draw (PaintEventArgs e)
    {
      int OffsetX = (int) (* m_Radius * ((Math.Sqrt(2130.5);
      int OffsetY = (int) (* m_Vert * ((Math.Sqrt(2130.5);
      Point [] ptEllipse = new Point [13]
          {
          new Point (m_cx + m_Radius, m_cy),
          new Point (m_cx + m_Radius, m_cy - OffsetY),
          new Point (m_cx + OffsetX,  m_cy - m_Vert),
          new Point (m_cx,            m_cy - m_Vert),
          new Point (m_cx - OffsetX,  m_cy - m_Vert),
          new Point (m_cx - m_Radius, m_cy - OffsetY),
          new Point (m_cx - m_Radius, m_cy),
          new Point (m_cx - m_Radius, m_cy + OffsetY),
          new Point (m_cx - OffsetX,  m_cy + m_Vert),
          new Point (m_cx,            m_cy + m_Vert),
          new Point (m_cx + OffsetX,  m_cy + m_Vert),
          new Point (m_cx + m_Radius, m_cy + OffsetY),
          new Point (m_cx + m_Radius, m_cy)
          };
      Point ptCenter = new Point (m_cx, m_cy);
      Rotate (m_Rotate, ptCenter, ptEllipse);
      e.Graphics.DrawBeziers (pen, ptEllipse);
      base.DrawCenter (e);
    }
  }
}



           
       














Related examples in the same category
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.