Дипломный проект. Разработка векторного редактора
проект по информатике и икт

Ларионов Виктор Игоревич

Проект по разработке векторного графического редактора

Скачать:

ВложениеРазмер
Файл diplom._sozdanie_vektornogo_redaktora.docx753.31 КБ

Предварительный просмотр:

СОДЕРЖАНИЕ

СПИСОК ИСПОЛЬЗУЕМЫХ СОКРАЩЕНИЙ        

ВВЕДЕНИЕ        6

1        ПОСТАНОВКА ЗАДАЧИ И МЕТОДЫ ЕЁ РЕШЕНИЯ        9

1.1        Постановка задачи        9

1.2        Анализ геометрических фигур        10

1.3        Разработка классов        11

1.4        Методология рисования фигур        11

1.5        Выбор фигуры для манипуляций.        13

1.6        Определение принадлежности точки фигуре        14

1.7        Нахождение точки пересечения отрезков        15

1.8        Поворот фигуры на угол        17

1.9        Интерфейс (дизайн) ПО        18

2        ОБЗОР ПРОГРАММНЫХ СРЕДСТВ ЯЗЫКОВ И ТЕХНОЛОГИЙ        19

2.1        Языки и технологии        19

2.2        Достоинства языка С++        21

2.3        Достоинства ООП        22

2.4        Программное обеспечение        24

2.5        Преимущества Microsoft Visual Studio        25

2.6        Вывод о выбранных языках, технологиях и ПО        27

2.7        Требования по используемой аппаратуре        28

2.8        Особенности создаваемого ПО        29

3.        ОПИСАНИЕ РАЗРАБОТАННЫХ ПРОГРАММНЫХ СРЕДСТВ        30

3.1.        Общее описание работы приложения        30

3.2.        Структура приложения        34

3.3.        Организация файлов приложения        36

3.4.        Иерархия классов        39

3.5.        Описание классов, свойств, методов        41

ЗАКЛЮЧЕНИЕ        47

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ        48


СПИСОК ИСПОЛЬЗУЕМЫХ СОКРАЩЕНИЙ

ООП – объектно–ориентированное программирование

СОП – объектно–ориентированное программирование

ПО – программное обеспечение

ОС – операционная система

VS – Visual Studio

GDI – Graphics Device Interface


ВВЕДЕНИЕ

Для выпускной дипломной работы выбрана тема: «Разработка векторного графического редактора с использованием интегрированной среды разработки программного обеспечения Microsoft Visual Studio и языка программирования С++/CLI». Данная работа имеет большой упор в сторону практического применения навыков программирования.

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

Достоинством векторной графики является то, что векторные рисунки могут быть увеличены или уменьшены без потери качества. Это возможно, так как изменение размера рисунка производится с помощью простого умножения координат точек графических объектов на коэффициент масштабирования. Другое достоинство векторной графики - небольшой информационный объем файлов по сравнению с объемом файлов, содержащих растровые изображения. Термин «векторная графика» используется в основном в контексте двумерной компьютерной графики.

        Рассмотрим, к примеру, такой графический примитив, как окружность радиуса r. Для её построения необходимо и достаточно следующих исходных данных:

  1. координаты центра окружности;
  2. значение радиуса r;
  3. цвет заполнения (если окружность не прозрачная);
  4. цвет и толщина контура (в случае наличия контура).

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

  • Размер, занимаемый описательной частью, не зависит от реальной величины объекта, что позволяет, используя минимальное количество информации, описать сколько угодно большой объект файлом минимального размера.
  • В связи с тем, что информация об объекте хранится в описательной форме, можно бесконечно увеличить графический примитив, например, дугу окружности, и она останется гладкой. С другой стороны, если кривая представлена в виде ломаной линии, увеличение покажет, что она на самом деле не кривая.
  • Параметры объектов хранятся и могут быть легко изменены. Также это означает что перемещение, масштабирование, вращение, заполнение и т.д. не ухудшает качества рисунка. Более того, обычно указывают размеры в аппаратно-независимых единицах (англ. device-independent unit), которые ведут к наилучшей возможной растеризации на растровых устройствах.
  • При увеличении или уменьшении объектов толщина линий может быть задана постоянной величиной, независимо от реального контура.

Типичные примитивные объекты:

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

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

Примеры существующих векторных редакторов:

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


  1. ПОСТАНОВКА ЗАДАЧИ И МЕТОДЫ ЕЁ РЕШЕНИЯ
  1. Постановка задачи

Назначение дипломной работы – создание графического векторного редактора на языке программирования высокого уровня С++/CLI. Программа будет написана под ОС Windows, т.к. она до сих пор является самой распространенной операционной системой.

Исходные данные:

  • События мыши и клавиатуры
  • Файл, из которого происходит загрузка изображений

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

К модификации объекта относятся такие действия:

  • Поворот на угол
  • Изменение положение вершины (изменение формы)
  • Изменение размеров

Графически примитивы, построение которых необходимо организовать:

  • Кривая
  • Эллипс (окружность)
  • Прямая
  • Ломанная
  • Произвольный многоугольник (треугольник, трапеция, звезда)
  • Прямоугольник (квадрат)
  • Текст

  1. Анализ геометрических фигур

Для выполнения построения геометрических фигур первым делом необходимо выяснить, какие общие черты они содержат. Для этого рассмотрим типичные фигуры:

C:\Users\Admin\Desktop\фигуры.jpg

Рис. 1 – Примеры геометрический фигур

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


  1. Разработка классов

        Было принято решение начать разработку с базового класса, который будет хранить в себе универсальные свойства, прессующие любой фигуре, такие как: толщина линии, цвет линии, цвет заливки, количество точек в фигуре, выделена фигура или нет и др. Углубляясь в различия одних фигур от других, будут создаваться производные классы. Простейшей фигурой является отрезок задаваемый координатами начала и конца. Совокупность таких отрезков образует ломанную. Замкнутая ломаная образует многоугольник. Т.е. с помощью замкнутой ломанной можно нарисовать квадрат, треугольник, ромб и трапецию. Получается, что отрезок, ломаную и разнообразные многоугольники можно описать в одном классе, нужно просто хранить набор точек, в той последовательность, в которой после они будут соединены. Так же нужно написать функцию, которая проверяет, пересекают ли отрезки друг друга, если да, то «лишние» очки отбрасываем, ломанную замыкаем и заливаем цветом. При поиске пересечений соседние точки не рассматриваем, т.к. в любом случае они имеют общую вершину. При отображении овалов, кругов, и остальных фигур, изображения будут строиться с помощью кривых линий проходящих через заданные точки. Фигуры должны храниться в массиве, каждая фигура имеет свой индекс. Сколько будет объектов всего, и уж тем более, сколько из них будет многоугольников, овалов и т.д., заранее знать не возможно, поэтому принято решение объекты создавать динамически.

  1. Методология рисования фигур

Для того, что бы нарисовать линию, мы выбираем на панели инструментов пиктограмму «линия» и производим щелчок в области рисования, после чего обработчик данного события определит, что в момент нажатия был выделен инструмент, линия, динамически создаст объект этого типа, и присвоит координатам первой точки координаты текущего положения курсора. По мере перемещения мыши объект должен перерисовываться, соединяя первую точку с положением курсора, в момент опускания кнопки, линия приобретает свою окончательную форму.

C:\Users\Admin\Desktop\по диплому материал\Рисование линии.jpg

Рис. 2 – Построение линии

Построение остальных фигур происходит подобным образом:

C:\Users\Admin\Desktop\по диплому материал\рисование прямоугольника.jpg

Рис. 3 – Построение прямоугольника

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

  • Нажатие кнопки мыши сигнализирует о начале операции рисования.
  • Местоположение курсора при нажатии кнопки мыши определяет начальную точку фигуры.
  • Перемещение мыши после обнаружения нажатия кнопки мыши – сигнал рисования фигуры, и позиция курсора представляет точку определения фигуры.
  • Позиция курсора во время отпускания кнопки мыши сигнализирует о том, что нарисована окончательная версия фигуры.

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

Программа должна уметь обрабатывать любую последовательность элементов. Это предполагает, что применение указателя базового класса для выбора функции  конкретного класса элемента с целью его рисования может несколько упростить задачу. Нам не нужно знать, что это за фигура, чтобы нарисовать её. До тех пор, пока обращение к элементу происходит через указатель его базового класса, всегда можно заставить его нарисовать себя с помощью виртуальной функции. Это пример полиморфизма. Главное убедиться, что классы, определяющие конкретные фигуры, разделяют общий базовый класс, и что в этом классе все функции, которые должны выбираться автоматически во время выполнения, являются виртуальными.

  1. Выбор фигуры для манипуляций.

Для того что бы совершать те или иные действия над объектом, необходимо для начала выбрать объект, который будет подвергаться изменениям. За состояние «выбран/не_выбран»» отвечает свойство selected, которое объявлено в базовом классе. Выбор объекта происходит следующим образом: в момент щелчка мыши «просматриваются» все фигуры, если точка соответствующая координатам мыши принадлежит объекту, то фигура помечается как выделенная, в противном случае, как не выделенная.

  1. Определение принадлежности точки фигуре

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

Для написания программы был выбран один из стандартных методов определения принадлежности точки произвольному простому многоугольнику – метод подсчета числа пересечений. Суть метода заключается в том, что луч, выпущенный из проверяемой точки в произвольном направлении (мы выбрали положительное направление горизонтальной оси), пересекает ребра многоугольника определенное количество раз. Для того, что бы подсчитать количество пересечений достаточно пройтись в цикле по рёбрам многоугольника и определить, пересекает ли луч каждое ребро. Если число пересечений нечётно, то объявляется, что точка лежит внутри многоугольника, если чётно — то снаружи (см. Рисунок 4). Это основано на том простом наблюдении, что при движении по лучу с каждым пересечением границы точка попеременно оказывается то внутри, то снаружи многоугольника. Алгоритм известен под такими названиями, как crossing number (count) algorithm или even-odd rule.

C:\Users\Admin\Desktop\Точка и фигура.jpg

Рис. 4 – Принадлежность произвольной точки многоугольнику

В алгоритме возникает затруднение в вырожденном случае, когда луч пересекает вершину многоугольника. Для правильности работы алгоритма проверяем на принадлежность вершины лучу, и если принадлежность обнаружена, то считать два пересечения как одно. Алгоритм работает за время O(N) для N-угольника.

        Описанный выше метод позволяет определить принадлежность точки многоугольнику, но если нужно, к примеру, выполнить выделение линии, то этот метод не подойдет. Следовательно, для линии будем проверять принадлежность точки прямой. Этот способ распространили и на ломанную, т.к. она представляет собой совокупность линий. Эту проверку будем использовать и для многоугольника, перед вышеописанным алгоритмом «even-odd rule», т.к. он не работоспособен, если точка лежит на грани.

  1. Нахождение точки пересечения отрезков

Нахождение точки пересечения отрезков необходимо, для определения пересекают ли линии ломанной друг друга,  т.е. замкнута ли она

Даны координаты двух точек определяющих отрезок:

 и  - координаты вершин первого отрезка

 и  - координаты вершин второго отрезка

Для нахождения пересечения составляем уравнения прямых.

первое уравнение:

второе уравнение:

Эти уравнения определяют прямую проходящую через две точки, то, что и требуется. Следует проверить параллельность этих отрезков при помощи угловых коэффициентов:

где  и  тангенсы угла наклона отрезков к положительному направлению оси ОХ, если , то отрезки параллельны, а значит, не имеют точек пересечения, в противном случае они пересекаются.

Из уравнений (1) и (2) находим  и  по следующим формулам:

Для того, что бы узнать принадлежит ли найденная точка  нашим отрезкам, нужно проверить условие:

Если условие

(((x1x)and(x2x)and(x3x)and(x4x))or

((y1y)and(y2y)and(y3y)  and(y4y))),

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

  1.  Поворот фигуры на угол

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

C:\Users\Admin\Desktop\поворт.png

Рис. 5 – Поворот фигуры на угол

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

,

Где (X,Y) – координаты точек до преобразования

(X’,Y’) – координаты точек после преобразования

 – угол, на который был произведен поворот

(Xс,Yс) – координаты точки относительно которой поворачивали фигуру

  1. Интерфейс (дизайн) ПО

        Программа имеет простой и удобный дизайн. На форме находятся следующие компоненты:

  • Главное меню
  • Панель инструментов
  • Область рисования
  • Обозреватель свойств
  • Строка состояния

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


  1. ОБЗОР ПРОГРАММНЫХ СРЕДСТВ ЯЗЫКОВ И ТЕХНОЛОГИЙ
  1.  Языки и технологии

«Язык формирует наш способ мышления и определяет, о чем мы можем мыслить.» Б.Л. Ворф. В идеальном случае подход к разработке программы делится на три части: вначале получаем ясное понимание задачи, потом выделяем ключевые идеи, входящие в ее решение и наконец, выражаем решение в виде программы. Однако подробности задачи и идеи решения часто становятся ясны только в результате попытки написания программы, поэтому для разработки я выбрал С++/CLI — это привязка языка программирования С++ к среде программирования .NET фирмы Microsoft. Она интегрирует С++ стандарта ISO с Объединённой Системой Типов (Unified Type System, UTS), рассматриваемой как часть Общей Языковой Инфраструктуры (Common Language Infrastructure, CLI). Она поддерживает и исходный уровень, и функциональную совместимость исполняемых файлов, скомпилированных с родного и управляемого C++. C++/CLI представляет собой дальнейшее развитие С++. Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист.

При разработке программы были применены принципы объектно-ориентированное программирования. Объектно-ориентированное программирования — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

Основные понятия в ООП:

Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.

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

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.


Наряду с ООП была использована концепция событийно -ориентированного программирования. Событийно - ориентированное программирование (англ. event-driven programming; в дальнейшем СОП) — парадигма программирования, в которой выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета). СОП можно также определить как способ построения компьютерной программы, при котором в коде (как правило, в головной функции программы) явным образом выделяется главный цикл приложения, тело которого состоит из двух частей: выборки события и обработки события.

Для представления графических объектов было принято решение использовать GDI (Graphics Device Interface) — один из трёх основных компонентов или «подсистем», вместе с ядром и Windows API составляющих пользовательский интерфейс Microsoft Windows. GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры. GDI отвечает за отрисовку линий и кривых, отображение шрифтов и обработку палитры. Он не отвечает за отрисовку окон, меню и т. п., эта задача закреплена за пользовательской подсистемой, располагающейся в user32.dll и основывающейся на GDI.

  1. Достоинства языка С++

C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности: Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, Имеется возможность работы на низком уровне с памятью, адресами, портами. Возможность создания обобщённых алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны. Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем. Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы. Значительное преимущество C++/CLI состоит в способности смешивать неуправляемый (native) код с управляемым кодом

  1. Достоинства ООП

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

  • Классы позволяют проводить конструирование из полезных компонент, обладающих простыми инструментами, что дает возможность абстрагироваться от деталей реализации.
  • Данные и операции вместе образуют определенную сущность и они не «размазываются» по всей программе, как это нередко бывает в случае процедурного программирования.
  • Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
  • Инкапсуляция информации защищает наиболее критичные данные от несанкционированного доступа.

ООП дает возможность создавать расширяемые системы (extensible systems). Это одно из самых значительных достоинств ООП и именно оно отличает данный подход от традиционных методов программирования. Расширяемость (extensibility) означает, что существующую систему можно заставить работать с новыми компонентами, причем без внесения в нее каких-либо изменений. Компоненты могут быть добавлены на этапе выполнения.

Расширение типа (type extension) и вытекающий из него полиморфизм переменных оказываются полезными преимущественно в следующих ситуациях.

  • Обработка разнородных структур данных. Программы могут работать, не утруждая себя изучением вида объектов. Новые виды могут быть добавлены в любой момент.
  • Изменение поведения во время выполнения. На этапе выполнения один объект может быть заменен другим. Это может привести к изменению алгоритма, в котором используется данный объект.
  • Реализация родовых компонент. Алгоритмы можно обобщать до такой степени, что они уже смогут работать более, чем с одним видом объектов.
  • Доведение полуфабрикатов. Компоненты нет надобности подстраивать под определенное приложение. Их можно сохранять в библиотеке в виде полуфабрикатов (semifinished products) и расширять по мере необходимости до различных законченных продуктов.
  • Расширение каркаса. Независимые от приложения части предметной области могут быть реализованы в виде каркаса и в дальнейшем расширены за счет добавления частей, специфичных для конкретного приложения.

Многоразового использования программного обеспечения на практике добиться не удается из-за того, что существующие компоненты уже не отвечают новым требованиям. ООП помогает этого достичь без нарушения работы уже имеющихся клиентов, что позволяет нам извлечь максимум из многоразового использования компонент:

  • Мы сокращаем время на разработку, которое с выгодой может быть отдано другим проектам.
  • Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
  • Когда некая компонента используется сразу несколькими клиентами, то улучшения, вносимые в ее код, одновременно оказывают свое положительное влияние и на множество работающих с ней программ.
  • Если программа опирается на стандартные компоненты, то ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает ее использование.
  1. Программное обеспечение
  1. Microsoft Visual Studio — линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Microsoft Silverlight. Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных.
  2. Microsoft Windows – семейство проприетарных операционных систем корпорации Microsoft, ориентированных на применении графического интерфейса при управлении.
  3. Adobe Photoshop – многофункциональный графический редактор, разработанный и распространяемый фирмой Adobe Systems, применяли для создания пиктограмм. Имеет возможность обрезки изображения и изменения его размера. Может изменять формат изображения.
  1. Преимущества Microsoft Visual Studio
  • Конструктор Windows Forms позволяет добавлять элементы управления в форму, упорядочивать их и писать код для обработки их событий. Используя конструктор, можно:

  • Добавлять в форму компоненты, элементов управления данными или элементы управления Windows.
  • Дважды щелкните форму в конструкторе и напишите код в событии Load этой формы или дважды щелкните элемент управления в форме и напишите код для события элемента управления по умолчанию.
  • Измените свойство Text, выбрав элемент управления и введя имя.
  • Настраивать расположение выбранного элемента управления путем его перемещения с помощью мыши или клавиш со стрелками. Для более точной настройки следует использовать сочетание клавиши CTRL и клавиш со стрелками. Наконец, следует настроить размер элементов управления, используя сочетание клавиши SHIFT и клавиш со стрелками.
  • Выделение нескольких элементов управления с помощью нажатия клавиш SHIFT или CTRL и одновременного щелчка кнопкой мыши. При использовании SHIFT+щелчок первый выделенный элемент является главным при выравнивании и управлении размером. При использовании CTRL+щелчок последний выделенный элемент управления является главным; главный элемент управления меняется с каждым новым добавленным элементом управления. Кроме того, несколько элементов управления можно выделить, щелкнув форму и перетащив прямоугольник выделения вокруг нужных элементов.

Главные достоинства конструктора Windows Forms:

  • Конструктор Windows Forms предлагает решения быстрой разработки при создании приложений Windows.
  • Он позволяет наглядно разрабатывать формы на стороне клиента.
  • Элементы управления можно перетащить на поверхность конструктора из панели элементов.

Главные достоинства технологии IntelliSense:

  • IntelliSense является удобным способом просмотреть описания функций, в том числе списки их аргументов. Она ускоряет разработку ПО, уменьшая количество имён и параметров, которые программист должен держать в памяти.
  • В ходе работы IntelliSense формирует в памяти базу данных, содержащую метаданные классов, переменных и иных конструкций, которые используются в разрабатываемом приложении. «Классическая» реализация IntelliSense работает, находя в коде специальные маркеры, такие как символ точки. Как только пользователь вводит один из таких маркеров после имени сущности, содержащей один или несколько доступных членов (таких как переменные или методы), IntelliSense показывает пользователю всплывающее окно со списком подходящих членов.
  • Если пользователь вводит дополнительные символы, то IntelliSense фильтрует свои результаты, выводя пользователю лишь те члены, которые начинаются на уже введённые буквы.
  • Отладчик в VS очень хорош. Приложение создано, ошибки построения исправлены. Теперь следует исправить логические ошибки, которые препятствуют правильному выполнению приложения или хранимых процедур. Это можно сделать с помощью интегрированных функций отладки среды разработки. Они позволяют приостанавливать исполнение процедур, проверять значения в памяти и регистрах, изменять переменные, наблюдать за обменом сообщениями и получать полное представление о том, что делает код.
  1. Вывод о выбранных языках, технологиях и ПО
  1. Visual Studio - это полный набор инструментов и служб, которые можно использовать для разработки мощных, высокопроизводительных приложений как для платформы Microsoft, так и для других платформ.
  2. C++/CLI - привязка языка программирования С++ к среде программирования .NET. C++/CLI представляет собой дальнейшее развитие С++.  С++  очень мощный язык, который широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Имеет огромную область применения вплоть до написания ОС.
  3. .NET Framework— программная платформа. Программа для .NET Framework, написанная на любом поддерживаемом языке программирования, сначала переводится компилятором в единый для .NET промежуточный байт-код. Затем код либо исполняется виртуальной машиной Common Language Runtime (CLR), либо транслируется утилитой. Использование виртуальной машины предпочтительно, так как избавляет разработчиков от необходимости заботиться об особенностях аппаратной части. Современная технология динамической компиляции позволяет достигнуть высокого уровня быстродействия. Виртуальная машина CLR также сама заботится о базовой безопасности, управлении памятью и системе исключений, избавляя разработчика от части работы.
  4. Применение ООП позволяет писать гибкие, расширяемые, хорошо читаемые программы. ООП дает возможность использовать в программировании понятия, более близкие к предметной области, получать более простую структуру в результате инкапсуляции, а также способствует простоте модификации программ.
  5. GDI — позволяет унифицировать работы с различными устройствами. Используя GDI, можно одними и теми же функциями рисовать на разных устройствах, таких как экран или принтер, получая на них практически одинаковые изображения. Эта возможность лежит в центре всех WYSIWYG-приложений для Windows.
  6. Разрабатываемое приложение будет функционировать в  Windows XP и последующих версиях Windows.
  1. Требования по используемой аппаратуре

Среда создания разработки:

 Microsoft Visual Studio— интегрированная среда разработки программного обеспечения.

Созданный векторный графический редактор является самостоятельным продуктом и не требует дополнительного программного обеспечения, для работы достаточно иметь исполняемый файл программы и операционную систему Windows. Требования к аппаратной части достаточно низкие, поэтому на любом современном компьютере программа будет работать успешно.


  1. Особенности создаваемого ПО
  1. Разделение программы на несколько файлов:
  • Файл с основным телом программы
  • Файл, описывающий собственные функции
  • Заголовочные файлы
  • Файл ресурсов
  1. Фигуры должны отображаться в том порядке, в котором они были созданы, т.е. если квадрат и круг пересекаются, и круг был нарисован позже, то квадрат будет виден не полностью.
  2. Программа имеет удобный и интуитивно понятный дизайн. У каждого инструмента есть пиктограмма, которая его характеризует.
  3. Программа содержит компоненты позволяющие выбрать, цвет контура и заливки, а так же толщину контура.
  4.  В текущий момент времени можно рисовать только один из примитивов.
  5. При написании программы применяются принципы объектно-ориентированного программирования и событийно-ориентированного программирования.
  6.  Над каждой фигурой можно проводить ряд операций: выделить, удалить, переместить, копировать, повернуть, изменить положение вершины.
  7. Возможность печатать созданного изображения из программы
  8. Наличие главного меню
  9. Строка состояния отображает координаты положения курсора и текущий масштаб.
  10. При нажатии клавиши shift линия рисуется под углом кратным 45-ти градусам, прямоугольник отображается квадратом, а эллипс – кругом.
  1. ОПИСАНИЕ РАЗРАБОТАННЫХ ПРОГРАММНЫХ СРЕДСТВ
  1. Общее описание работы приложения
  1. Запуск программы

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

  1. Переключение между инструментами

Переключение между инструментами обеспечивает панель инструментов. Выбор инструмента зависит от того, что мы хотим сделать. Можно нарисовать новую фигуру, а можно модифицировать (изменить цвет, положение, форму), уже нарисованную фигуру.

  1. Рисование фигур

Что бы нарисовать фигуру нужно выбрать пиктограмму одного из примитивов на панели инструментов. Щелкнув мышью в области рисования, мы сигнализируем о начале рисования. Динамически создается объект выбранного типа. Перемещая мышь, видим предполагаемый результат рисования. При отпускании клавиши мыши, фигура обретает окончательное очертание.

  1. Перемещение фигуры

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

C:\Users\Admin\Desktop\перемещение.jpg

Рис. 6. Скриншот программы демонстрирующий перемещение фигуры

  1. Изменение очертаний

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

C:\Users\Admin\Desktop\фигура программа.jpg

Рис. 7. Скриншот программы демонстрирующий изменение границ

  1.  Поворот фигуры

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

C:\Users\Admin\Desktop\поворот.jpg

Рис. 8. Скриншот программы демонстрирующий поворот фигуры

  1. Изменение цвета фигуры

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

  1. Панель «свойств фигуры»

Панель свойств фигуры отображает текущие параметры новой или уже созданной фигуры в зависимости выделен объект или нет. Если объект выделен, то изменения вносимые через панель «свойства фигуры» тут же отобразятся на его внешнем виде

C:\Users\Admin\Desktop\свойства.jpg

Рис. 9. Скриншот программы демонстрирующий фрагмент окна с панелью «свойства фигуры»

  1. Кнопки управления масштабом

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

  1. Строка состояния отображает координаты текущего положения мыши, и масштаб в котором в данный момент работает пользователь

C:\Users\Admin\Desktop\масштаб.png

Рис. 10. Скриншот программы демонстрирующий строку состояния, отображающую текущий масштаб

  1. Структура приложения

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

C:\Users\Admin\Desktop\структура программы.jpg

Рис. 11. Структура программы «Векторный редактор»


  1.  Организация файлов приложения

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

  • math.h — заголовочный файл стандартной библиотеки языка программирования С, разработанный для выполнения простых математических операций. Большинство функций привлекают использование чисел с плавающей точкой. C++ также реализует данные функции для обеспечения совместимости, все они содержатся в заголовочном файле cmath. Используется в программе при подсчетов косинусов, синусов, и выполнении прочих математических операций. Все эти функции принимают double, если не определено иначе. Для работы с типами float и long double используются функции с постфиксами f и l соответственно. Все функции, принимающие или возвращающие угол, работают с радианами.
  • System.Drawing.dll —.библиотека хранящая классы, предназначенные для рисования в клиентских областях Windows-приложений. В данную библиотеку входят:
  • Brush - класс кисти;
  • Pen - класс пера;
  • Graphics - класс "контекст устройства".
  • System.Windows.Forms.dll – библиотека содержащая класс Form, который представляет окно в приложении. Windows Forms.dll включает широкий набор классов, которые позволяют создавать пользовательские панели инструментов и меню, отличающиеся современным обликом и поведением. Некоторые элементы управления предназначены для ввода данных в приложении, например элементы TextBox и ComboBox. Другие элементы управления отображают данные приложений, например Label и ListView. Это пространство имен также предоставляет элементы управления для вызова команд в приложении, например Button.
  • System.dll - является одним из основных файлов системы.

Можно было весь код программы написать в одном этом файле, но расчленение его на несколько частей даем массу преимуществ. Если программа состоит из нескольких файлов, то код каждого файла можно компилировать отдельно, а это облегчает процесс устранения ошибок. Код программы разбитый на несколько файлов, где классы хранятся отдельно от основного тела программы, проще читается и в него легче вносить изменения. Так же файл с классами, написанными для одной программы, может быть успешно использован в другой. Поэтому было принято решение хранить код в нескольких файлах.

Типы одного объекта или функции должны быть согласованы во всех их описаниях. Должен быть согласован по типам и входной текст, обрабатываемый транслятором, и связываемые части программы. Есть простой, способ добиться согласованности описаний в различных файлах. Это: включить во входные файлы, содержащие операторы и определения данных, заголовочные файлы, которые содержат интерфейсную информацию.

Средством включения текстов служит макрокоманда #include, которая позволяет собрать в один файл (единицу трансляции) несколько исходных файлов программы. Команда #include "включаемый-файл" заменяет строку, в которой она была задана, на содержимое файла включаемый-файл. Естественно, это содержимое должно быть текстом на С++, поскольку его будет читать транслятор.

Описание файлов с раширением .h:

  • MyForm.h – основной файл проекта, в нем происходи обработка всех событий, таких как нажатие клавиши, щелчок кнопки мыши, перемещение курсора и др. с учетом активного инструмента на панели инструментов. В этом файле происходит создание объектов и вызов функций описанных в подключенном к нему заголовочном файле MyFigure.h , который содержат интерфейсную информацию об объектах и классах хранящихся в файле MyFigure.cpp.
  • MyFigure.h – файл содержащий интерфейсную информацию о классах, их методах и свойствах, а так же глобальные переменные.

Описание файлов с расширением .cpp:

  • MyForm.cpp – файл в котором содержится автоматически сгенерированный код при создании приложения WindowsForms.
  • MyFigure.cpp – файл с исполняемым кодом в котором реализуются функции и классы.

Классы, реализованные в этом файле:

  • MyPoint – класс позволяющий работать с точкой, более функциональный, чем стандартный класс Point, точка может быть выделена или не выделена, имеет свой собственный метод рисования
  • CFigure – класс родитель классов CLomanaya, CEllipse, CCurve
  • CLomanaya – класс позволяющий работать с линией, ломанной, а так же замкнутой ломанной (многоугольником).
  • CEllipse – класс позволяющий рисовать эллипс, круг и ClosedCurve фигуры
  • MyTools – класс позволяющий работать с панелью инструментов
  1. Иерархия классов

В моем проекте существует иерархия классов, т.к. одни классы, являются классами-потомками других. Это достигается за счет механизма наследования.

Описание: C:\Users\Admin\Desktop\по диплому материал\Наследование.jpg

Рис. 12. Суть механизма наследования

Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса. Простыми словами это означает, что, если есть класс, чьи элементы данных или функции-элементы могут быть использованы новым классом, можно построить этот новый класс в терминах существующего (или базового) класса. Новый класс в свою очередь будет наследовать свойства и методы существующего класса. Использование наследования для построения новых классов сэкономило значительное время и силы на программирование. Объектно-ориентированное программирование широко использует наследование, позволяя программе строить сложные объекты из небольших легко управляемых объектов.

  1. Описание классов, свойств, методов

 CFigure - это базовый класс. В этом классе все функции объявлены как виртуальные, с помощью ключевого слова virtual. Если функция базового класса специализированная как виртуальная, а в производном классе имеется другое определение данной функции, это сообщит компилятору, что нам не нужна статическая компоновка функции. Это позволяет добиться того, что функция, которая вызвана в любой заданной точке программы, основана на типе объекта, для которого она вызывается. Т.е. виртуальная функция draw Для многоугольника рисует многоугольник, а для эллипса – эллипс.

C:\Users\Admin\Desktop\моя.jpg

Рис 13. Использование виртуальных функций в программе

Поля класса CFigure:

Color СontourColor – поле хранит цвет линии

Color FillColor – поле храни цвет заливки

int PenWidth – поле хранит толщину контура фигуры

MyPoint center_mass – поле хранит точку относительно которой будет происходить вращение

int point_count – поле хранящее количество точек в фигуре

array^ Points – массив хранящий вершины всех точек фигуры

static int index – разделяемое свойство для всех объектов данного класса, о чем говорит слово static. Это свойство хранит общее количество объектов класса CFigure

bool Selected – свойство хранящие состояние объекта “выделен/не_выделен”

Эти поля хранят свойства, которые имеет любая фигура. Они будут унаследованы всеми классами потомками.

\C:\Users\Admin\Desktop\разделение свойства.jpg

Рис 14. Использование static свойства в программе


Методы класса CFigure:

  • draw(PaintEventArgs^ obj) – виртуальный метод, который  позволяет изобразить фигуру
  • bool PtInObj(Point) – виртуальный метод, который определяет принадлежит ли точка, данной фигуре.
  • void SetSelParam(Point) – виртуальный метод который при перемещении объекта мышью запоминает в момент клика положение фигуры относительно координат мыши.
  • SetSelMove(Point) – виртуальный метод, который изменяет положение каждой точки объекта, на величину смещение курсора относительно прежних координат, благодаря это функции происходит перемещение объекта мышью.
  • void COPY (array^ Figures) – этот метод создает новый объект в массиве объектов и присваивает ему свои свойства, т.е. создает собственный дубликат.
  • void mymove(int) – это свойство позволяет перемещать объект, если он выделен, с помощью стрелок клавиатуры. В параметр передается код нажатой клавиши.
  • void building(bool shifted,array^ Figures,Point e) – метод который строит фигуру, определенным образом при нажатии клавиши “shift”, т.е. при рисовании эллипса рисует круг, прямоугольника – квадрат, а при рисовании ломанной откладывает углы кратные 45 градусам.
  • void Rotation(double ugol); - этот метод вычисляет новые координаты каждой точки по математическим формулам поворачивая тем самым фигуры на угол относительно точки хранящейся в свойстве center_mass.

        Класс CEllipse, является классом потомком класса CFigure имеет собственный конструктор CEllipse() и переопределяет следующие виртуальные методы:

  • bool PtInObj(Point myPos)
  • void draw(PaintEventArgs^ obj)
  • void SetSelParam(Point e)
  • void SetSelMove(Point e)
  • void COPY (array^ Figures)
  • void mymove(int)

        Класс CLomanaya является классом потомком класса CFigure, имеет собственный конструктор CLomanaya() и переопределяет следующие виртуальные методы:

  • bool PtInObj(Point myPos)
  • void draw(PaintEventArgs^ obj)
  • void SetSelParam(Point e)
  • void SetSelMove(Point e)
  • void COPY (array^ Figures)
  • void mymove(int) override;

А так же имеет собственные методы и свойства:

void add_point(Point a) – метод добавляющий точку в фигуру

        void del_point(int index) – метод удаляющий точку из фигуры

void TryClose(Point e,Point^ perese4,bool^ flag,bool shifted) – метод который проверяет пересекаются ли линии ломанной и если да, то ломанная замыкается и ведет себя как многоугольник

        bool filled – свойство которое получает значение true, если ломанная замкнута и ее можно “залить цветом”.

        Класс MyPoint используется в других классах для хранения информации о вершинах фигур. Поле Coord имеет тип PointF и служит для хранения координат вершин. Тип PointF отличается от типа Point тем, что он имеет поля типа double, когда обычный Point - типа int. Т.к. координаты точек экрана – целые числа то, можно было предположить, что типа Point должно быть достаточно. Однако на практики, вращая фигуру мышью, были замечены искажения пропорций фигуры. Проблема оказалась в том, что при вращении происходит вычисление новых координат вершин по тригонометрическим формулам. В результате получаем значения координат  и  типа double, которые сохраняются в int. Т.к. тип int имеет меньшую точность, чем double, то в результате многократного поворота накапливается достаточно серьезная погрешность и фигура теряет свой первоначальный вид. Поэтому было принято решение использовать тип PointF для класса MyPoint.

Поля класса MyPoint:

        PointF Coord – содержит координаты х,у вершины

bool selected – хранит одно из двух состояний “выделена\не_выделена”                                  void draw(PaintEventArgs^ obj) - метод который отображает вершину, если она выделена, красным цветом и синим - если она не выделена.

MyPoint multiply(double mass) – метод который возвращает точку, которая умножена на число. Используется при работе с масштабом.

Класс MyTools используется для создания панели инструментов и является наследником класса PictureBox.

Класс MyTools содержит следующие поля и методы:

  • void SetSelected(bool) – метод позволяющий сделать инструмент активным или пассивным
  • bool GetSelected() – возвращает  текущее значение поля “selected”
  • bool selected – поле, которое хранит состояние выбран\не_выбран

Описание отдельных функций:

bool SelForMove(array^ Figures,Point e) – функция «проходит» по всем элементам массива объектов CFigure, и с помощью виртуальной функции PtInObj которая имеет свою реализацию для каждого класса, проверяет принадлежит ли данная точка какому-нибудь объекту, если да, то свойство Select этого объекта устанавливается как true и функция тоже вернет значение true. Функция позволяет выбрать объект и определить, был произведён выбор, или нет.

int ReturnSelecter(array^ Figures) – функция проверяет свойство select у всех элементов массива, переданного в качестве аргумента. Если функция обнаружила, что свойство selected=true, то она возвращает индекс данного элемента, если таких элементов не обнаружилось, тогда функция возвращает значение -1.

bool Perece4(Point p1,Point p2,Point p3,Point p4,Point ^Perese4eniya)- эта функция получает координаты концов двух отрезков. Пятый параметр это дескриптор точки, которой будут присвоены координаты пересечения прямых, образованных точками p1,p2,p3,p4.

void MinMax(int a,int b,int^ min, int^ max) – функция которая сравнивает два числа  и   и присваивает переменной   большее из них, а переменной  – меньшее.

bool PointInLine(Point myPos, Point p1, Point p2) – функция проверяет принадлежит ли точка MyPos отрезку образованному точками p1 pи 2

double GradToRad (double grad) – функция переводит  градусов в радианы по формуле

double RadToGrad (double rad) – функция переводит радиан в градусы  по формуле

ЗАКЛЮЧЕНИЕ

        Моей целью при написании этой дипломной работы было создание векторного графического редактора. В ходе решения поставленной задачи был изучен язык C++/CLI, который имеет достаточно много отличий от чистого С++ и представляет собой его дальнейшее развитие. Перед тем как непосредственно приступить к написанию программного кода были определены требования к программному продукту, таким образом, что бы он мог удовлетворять всем желаниям пользователя по созданию графических объектов и действий над ними. Приступая к разработке, были рассмотрены основные геометрические примитивы, и найдены общие черты и закономерности в их построении. На основании подготовительной работы были составлены представления о классах, которыми будут описываться фигуры и общей организацией проекта. Получившаяся программа имеет простой и удобный дизайн и довольно хорошую функциональность. Она позволяет создавать множество примитивов, таких как, прямая, ломаная, эллипс, прямоугольник, круг, многоугольник и т.д.. Программа позволяет перемещать фигуры, копировать, изменять их границы и свойства, работать в масштабе, а так же поворачивать фигуры на любой угол относительно заданной точки и удалять объекты. Так же фигуре можно добавить новую вершину или удалить существующую. При выполнении данной работы были применены на практики навыки объектно-ориентированного программирования, а так же знания аналитической геометрии. При надобности  можно распечатать созданное изображение прямо из программы. В дальнейшем планируется расширять имеющиеся возможности программы. Данная программа будет работать на любой операционной системе Windows версии  XP и выше.


СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Гордон Хогенсон. C++/CLI: The Visual C++ Language for .NET.2007 г.

2. Ефимов Н.В. Краткий курс аналитической геометрии: учебник Издательство: ФИЗМАТЛИТ, 2006

3. http://www.rsdn.ru/article/gdi/gdiplus1.xml

4. Лафоре Р. Объектно-ориентированное программирование в С++.Питер.2004

5. В. Зиборов MS Visual C++ 2010 в среде .NET Издательство: "Питер" 2012 г.

6. Павловская Т. C C++ Программирование на языке высокого уровня.Питер.2003.

7. В. И. Медведев Особенности обектно-ориентированного программирования на С++/CLI, C# и Java Казань 2010

8. ru.wikipedia.org/wiki/Поворот 9.

10. Айвор Хортон Visual C++ 2010 Полный Курс

11. Б. Пахомов C/C++ и MS Visual C++ 2008 для начинающих



По теме: методические разработки, презентации и конспекты

урок 20 Знакомство с векторным редактором, встроенным в Word 2007

В презентации к уроку к рассмотрению предлагаются:- основные приемы работы с графическими примитивами;- ознакомление с графическим интерфейсом Word 2007;- творческие работы учащихся 6-х классов....

Векторный редактор

Урок производственного обучения по теме: Векторная графика. Основы работы с векторными объектами....

Авторский урок по информатике для 9-го класса из элективного курса на тему: «Векторная графика. Векторный редактор Corel Draw»

Урок «Создание пейзажа в  векторном редакторе Corel Draw X6».Содержит детальную методическую разработку  создания рисунка в Corel Draw X6.Урок демонстрирует создание произвольных фигур разли...

Элективный курс по информатике и ИКТ для 9-х классов «Компьютерная графика. Векторный редактор CorelDraw»

Элективный курс по информатике и ИКТ «Компьютерная графика. Векторный редактор CorelDraw»предназначен для предпрофильных классов....

Практическая работа для построения рисунков в векторном редакторе для 6 класса

Построение рисунка в векторном графическом редакторе...

Векторная графика. Векторный редактор CorelDraw

Элективный курс для 7 класса...