Построение и обработка графических объектов

Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 04:20, курсовая работа

Описание работы

В настоящее время рынок программного обеспечения переполнен различными программами и редакторами, позволяющими обрабатывать и редактировать цифровые фото. Человеку, не слишком хорошо понимающему особенности тех или иных программных средств, порой очень сложно разобраться в этом многообразии софта. Однако, правильный выбор программных средств для решения конкретной задачи по обработке фотоснимков является одним из залогов успеха получения законченных фотографий.

Содержание работы

Введение……………………………………………………………………… 5
1 Аналитический обзор литературы 7
2 Разработка алгоритма ………………………………………………………. 9
3 Разработка программного стредства 11
3.1 Описание классов 11
3.2 Диаграмма классов…………………………………………………… 16
4 Обоснование технических приемов программирования 18
5 Тестрование, эксперементальные исследования и анализ полученных результатов………………………………………………………………………...19
6 Руководство пользователя………………………………………………………28
Заключение 33
Список литературы 34
Приложение листинг программы……………..……………………………....35
Ведомость…………………………………………………………………….....

Файлы: 1 файл

Курсовая работа Каханович Артур.docx

— 861.97 Кб (Скачать файл)


 

Чтобы изменить размер ставим курсор на прямоугольник в углу области выделения, а затем тянем за него в любую сторону, в зависимости от того, как мы хотим изменить размер.

 

 

Растягивание овала вниз

 

 

 

 

Для перемещения фигуры, необходимо зажать маленький прямоугольник  в центре фигуры и потянуть фигуру куда нам необходимо.

 

 


 

При клике на левую синюю стрелку (отмена последней операции) Овал вернется туда, откуда был перенесен:

 

 

 

При выборе правой стрелки вернется туда, куда мы ее перемещали:

 

ЗАКЛЮЧЕНИЕ

 

В результате выполнения курсового проекта был  получен работающий программный  продукт, реализующий поставленную задачу. Для реализации проекта использовалась интегрированная среда разработки Visual Studio 2010 и язык программирования высокого уровня Visual C#. В ходе выполнения курсового проекта были изучены шаблона проектирования “фабричный метод”и “хранитель”. В ходе предварительного проектирования определены основные составляющие части программного обеспечения. При детальном проектировании система была разбита на классы, для достижения группирования родственного функционала.

Базовая функциональность программного обеспечения и его  архитектура, реализованные в рамках курсового проекта, предполагают дальнейшее наращивание его функциональных возможностей.

СПИСОК ЛИТЕРАТУРЫ

 

 [1] MSDN [Электронный ресурс]. – Электронные данные. – Режим доступа: http://msdn.microsoft.com.

[2] Троелсен Э. - Язык программирования C# 2011 и платформа .NET 4 – М.: издательский дом «Вильямс», 2011. – 1392  с.

[3] Шилдт Г. Полное руководство С#4.0 – М.: издательский дом «Вильямс», 2011. – 1056  с.

 

ПРИЛОЖЕНИЕ В 
Листинг программы

Файл Circle.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Circle : Shape

    {

        public override void draw(Graphics grph)

        {

            int x, y;

            if (p2.X < p1.X)

                x = p2.X;

            else

                x = p1.X;

            if (p2.Y < p1.Y)

                y = p2.Y;

            else

                y = p1.Y;

 

            grph.DrawEllipse(this.pen, x, y, Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y));

        }

    }

}

 

 

 

Файл CircleBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    public class CircleBuilder : ShapeBuilder

    {

        public CircleBuilder()

        {

            namebuilder =  "Ellipse";

        }

        public override Shape CreateShape()

        {

            return new Circle();

        }

    }

}

 

 

 

 

 

Файл Erase.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Erase : Shape

    {

        public override void draw(Graphics grph)

        {

            grph.FillRectangle(Brushes.White, p2.X, p2.Y, 25, 25);

        }

        public override void PickOutMe(Graphics grph)

        {

        }

    }

}

 

 

 

Файл EraseBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace WindowsFormsApplication1

{

    public class EraseBuilder : ShapeBuilder

    {

        public EraseBuilder()

        {

            namebuilder = "Erase";

        }

        public override Shape CreateShape()

        {

            return new Erase();

        }

    }

}

 

 

Файл Line.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Line: Shape

    {

        public override void draw(Graphics grph)

        {

            grph.DrawLine(this.pen, p1, p2);

        }

       

    }

}

 

 

 

Файл LineBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace WindowsFormsApplication1

{

    public class LineBuilder : ShapeBuilder

    {

        public LineBuilder()

        {

            namebuilder = "Line";

        }

        public override Shape CreateShape()

        {

            return new Line();

        }

    }

}

 

 

 

Файл ManagerUndoRedo.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Xml.Serialization;

 

namespace WindowsFormsApplication1

{

    class ManagerUndoRedo

    {

        private Stack<List<MementoShape>> stackCurrentMementoes = new Stack<List<MementoShape>>();

        private Stack<List<MementoShape>> stackMementoesundoredo = new Stack<List<MementoShape>>();

 

        public void AddNewCurrentState(List<Shape> list_of_Shapes)

        {

            List<MementoShape> mementolist = new List<MementoShape>();

            foreach (var item in list_of_Shapes)

            {

                mementolist.Add(item.CreateMementoShape());

            }

            stackCurrentMementoes.Push(mementolist);

            stackMementoesundoredo.Clear();

        }

 

        public void ClearStack()

        {

            stackCurrentMementoes.Clear();

            stackMementoesundoredo.Clear();

  

        }

 

        public List<Shape> Undo()

        {

            List<MementoShape> mementolist;

            List<Shape> list_of_Shapes = new List<Shape>();

            if (stackCurrentMementoes.Count != 0)

            {

                stackMementoesundoredo.Push(stackCurrentMementoes.Pop());

                if (stackCurrentMementoes.Count != 0)

                {

                    mementolist = stackCurrentMementoes.Peek();

                    foreach (var item in mementolist)

                        list_of_Shapes.Add(item.ShapeState);

                }

            }

            return list_of_Shapes;

        }

 

        public List<Shape> Redo()

        {

            List<MementoShape> mementolist;

            List<Shape> list_of_Shapes = new List<Shape>();

            if (stackMementoesundoredo.Count != 0)

                stackCurrentMementoes.Push(stackMementoesundoredo.Pop());

            mementolist = stackCurrentMementoes.Peek();

            foreach (var item in mementolist)

                list_of_Shapes.Add(item.ShapeState);

            return list_of_Shapes;

        }

 

        public void SaveMementoes(string path)

        {

            XmlSerializer xs = new XmlSerializer(typeof(List<MementoShape>));

            StreamWriter sw = new StreamWriter(path + ".xml");

            if (stackCurrentMementoes.Count != 0)

            { xs.Serialize(sw, stackCurrentMementoes.Peek()); }

            sw.Close();

        }

 

        public List<Shape> LoadMementoes(string path)

        {

            XmlSerializer xs = new XmlSerializer(typeof(List<MementoShape>));

            Stream reader = new FileStream(path, FileMode.Open);

            stackCurrentMementoes.Push((List<MementoShape>)xs.Deserialize(reader));

            reader.Close();

            List<Shape> list_of_Shapes = new List<Shape>();

            List<MementoShape> mementolist;

            mementolist = stackCurrentMementoes.Peek();

            foreach (var item in mementolist)

                list_of_Shapes.Add(item.ShapeState);

            return list_of_Shapes;

        }

    }

}

 

 

 

Файл MementoShape.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class MementoShape

    {

        private Shape shapeState;

        private Point p1 = new Point(), p2 = new Point();

 

        public MementoShape() { }

 

        public MementoShape(Shape state)

        {

            shapeState = state;

            p1.X = state.P1.X; p1.Y = state.P1.Y;

            p2.X = state.P2.X; p2.Y = state.P2.Y;

        }

 

        public Shape ShapeState

        {

            get

            {

                shapeState.P1 = p1;

                shapeState.P2 = p2;

                return shapeState;

            }

            set

            {

                shapeState = value;

                p1 = shapeState.P1;

                p2 = shapeState.P2;

            }

        }

    }

}

 

 

 

Файл Pencil.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Pencil: Shape

    {

        public override void draw(Graphics grph)

        {

            grph.DrawLine(this.pen, p1, p2);

        }

        public override void PickOutMe(Graphics grph)

        {

        }

    }

}

 

Файл PencilBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace WindowsFormsApplication1

{

    public class PencilBuilder : ShapeBuilder

    {

        public PencilBuilder()

        {

            namebuilder = "Pencil";

        }

        public override Shape CreateShape()

        {

            return new Pencil();

        }

    }

}

 

 

 

Файл Rectangle.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Rectangle : Shape

    {

        public override void draw(Graphics grph)

        {

            int x, y;

            if (p2.X < p1.X)

                x = p2.X;

            else

                x = p1.X;

            if (p2.Y < p1.Y)

                y = p2.Y;

            else

                y = p1.Y;

            grph.DrawRectangle(this.pen, x, y, Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y));

        }

    }

}

 

 

 

Файл RectangleBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    public class RectangleBuilder :ShapeBuilder

    {

        public RectangleBuilder()

        {

            namebuilder =  "Rectangle";

        }

        public override Shape CreateShape()

        {

            return new Rectangle();

        }

    }

}

 

 

 

Файл SetCursor.cs

 

using System;

using System.ComponentModel;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Reflection;

 

static class SetCursor

{

    public static Cursor LoadCustomCursor(string path)

    {

        IntPtr hCurs = LoadCursorFromFile(path);

        if (hCurs == IntPtr.Zero) throw new Win32Exception();

        var curs = new Cursor(hCurs);

        // Note: force the cursor to own the handle so it gets released properly

        var fi = typeof(Cursor).GetField("ownHandle", BindingFlags.NonPublic | BindingFlags.Instance);

        fi.SetValue(curs, true);

        return curs;

    }

    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]

    private static extern IntPtr LoadCursorFromFile(string path);

}

 

 

Файл Shape.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

using System.Xml.Serialization;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    [XmlInclude(typeof(Rectangle)), XmlInclude(typeof(Circle)), XmlInclude(typeof(Triangle)), XmlInclude(typeof(Line)), XmlInclude(typeof(Pencil))]

    public abstract class Shape

    {

        protected Point p1 = new Point(), p2 = new Point();

        protected Pen pen = new Pen(Color.Black);

 

        public abstract void draw(System.Drawing.Graphics grph);

 

        public Point P1

        {

            get { return p1;}

            set { p1 = value;}

        }

        public Point P2

        {

            get { return p2; }

            set { p2 = value; }

        }

        public void SetPenColor(Pen tmppen)

        {

            pen.Color = tmppen.Color;

        }

        public void SetPenWidth(Pen tmppen)

        {

            pen.Width = tmppen.Width;

           

        }

        public void SetLineStyle()

        {

            pen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;

        }

        public virtual void PickOutMe(Graphics grph)

        {

            Pen blackpen = new Pen(Color.Black,2);

            int x1, x2, y1, y2;

            if (P1.X < P2.X)

            {

                x1 = P1.X;

                x2 = P2.X;

            }

            else

            {

                x2 = P1.X;

                x1 = P2.X;

            }

            if (P1.Y < P2.Y)

            {

                y1 = P1.Y;

                y2 = P2.Y;

            }

            else

            {

                y2 = P1.Y;

                y1 = P2.Y;

            }

            grph.DrawRectangle(blackpen, p2.X-4, p2.Y-4, 8, 8);

            grph.DrawRectangle(blackpen, x1+(x2-x1)/2-4, y1-4+(y2-y1)/2, 8, 8);

            blackpen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;

            blackpen.Width = 1;

            grph.DrawRectangle(blackpen, x1-6, y1-6, x2 - x1+12, y2 - y1+12);

        }

 

        public MementoShape CreateMementoShape()

        {

            return (new MementoShape(this));

        }

 

        /*public void SetMementoShape(MementoShape mementoShape)

        {

            this = mementoShape.ShapeState;

        }*/

    }

}

 

 

 

Файл ShapeBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public abstract class ShapeBuilder

    {

        public abstract Shape CreateShape();

        public string namebuilder;

        public string NameBuilder

        {

            get { return namebuilder; }

            set { namebuilder = value; }

        }

    }

}

 

 

Файл Triangle.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    [Serializable]

    public class Triangle : Shape

    {

        public override void draw(Graphics grph)

        {

            Point p3 = new Point();

            p3.X = p1.X;

            p3.Y = p2.Y;

            grph.DrawLine(this.pen, p1, p2);

            grph.DrawLine(this.pen, p2, p3);

            grph.DrawLine(this.pen, p3, p1);

        }

    }

}

 

 

 

Файл TriangleBuilder.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    class TriangleBuilder : ShapeBuilder

    {

        public TriangleBuilder()

        {

            namebuilder =  "Triangle";

        }

        public override Shape CreateShape()

        {

            return new Triangle();

        }

    }

}

 

 

 

Файл UserShape.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using WindowsFormsApplication1;

 

namespace WindowsFormsApplication1

{

    public class UserShape :Shape

    {

        private List<Shape> listofShapes = new List<Shape>();

        private int length, width;

 

        public UserShape(List<Shape> tmplist, int x, int y)

        {

            listofShapes = tmplist;

            length = x;

            width = y;

        }

 

        public override void draw(Graphics grph)

Информация о работе Построение и обработка графических объектов