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.Design Patterns
8.Development Class
9.Event
10.File Stream
11.Generics
12.GUI Windows Form
13.Language Basics
14.LINQ
15.Network
16.Office
17.Reflection
18.Regular Expressions
19.Security
20.Services Event
21.Thread
22.Web Services
23.Windows
24.Windows Presentation Foundation
25.XML
26.XML LINQ
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source
C# / C Sharp » 2D Graphics » PolygonScreenshots 
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
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.