Archive

Posts Tagged ‘draw’

Drawing wave line in C#

March 31st, 2009

Download source code (Microsoft Visual C# 2005 Express Edition)

 image

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace Tutorial6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
            PointF[] pt = new PointF[] {
                new PointF(50,50),
                new PointF(150,50),
                new PointF(200,100),
                new PointF(200,200),
            };
            e.Graphics.DrawLines(Pens.Gray, pt);
            List<PointF> PointList = new List<PointF>();
            float curDist = 0;
            float distance = 0;
            for (int i = 0; i < pt.Length - 1; i++)
            {
                PointF ptA = pt[i];
                PointF ptB = pt[i + 1];
                float deltaX = ptB.X - ptA.X;
                float deltaY = ptB.Y - ptA.Y;
                curDist = 0;
                distance = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2));
                while (curDist < distance)
                {
                    curDist++;
                    float offsetX = (float)((double)curDist / (double)distance * (double)deltaX);
                    float offsetY = (float)((double)curDist / (double)distance * (double)deltaY);
                    PointList.Add(new PointF(ptA.X + offsetX, ptA.Y + offsetY));
                }
            }
            for (int i = 0; i < PointList.Count - 24; i = i + 24)
            {
                drawWaveLine(e.Graphics, Pens.Black, PointList[i].X, PointList[i].Y, PointList[i + 24].X, PointList[i + 24].Y);
            }
        }

        public void drawWaveLine(Graphics g, Pen pen, float x1, float y1, float x2, float y2)
        {
            float angle = (float)((Math.Atan2(y2 - y1, x2 - x1) * 180 / 3.14159265));
            g.TranslateTransform(x1, y1);
            g.RotateTransform(angle);
            GraphicsPath gp1 = new GraphicsPath();
            Point[] p1 = new Point[] {
                new Point(0,0),
                new Point(3,-3),
                new Point(6,-4),
                new Point(9,-3),
                new Point(12,0),
                new Point(15,3),
                new Point(18,4),
                new Point(21,3),
                new Point(24,0)
            };
            g.DrawLines(pen, p1);
            g.RotateTransform(-angle);
            g.TranslateTransform(-x1, -y1);
        }

    }
}

admin General , , , , , ,