Re[2]: Помогите нарисовать облако
От: valager  
Дата: 17.02.07 00:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>> Вывожу при помощи GDI+ кучу разных простейших элементов, типа кружочки, квадратики, и.т.п. Их очень много и чтобы их хоть как-то разделять на группы хочется рисовать их внутри чего-то красивого, например облака. Не подскажите, как это можно сделать?


А>Как я понял, Вы хотите рисовать в пределах некоторой области. В пространстве имен System.Drawing есть класс Region, который позволяет задать область рисования. При рисовании за ее пределами, весь графический вывод будет отсекаться. Можно создать несколько таких Region-ов и выводить то в один, то в другой. Форма региона может быть любой (даже облаком). Форма региона указывается в конструкторе объекта класса регион:



А>
А>MyRegion1 = new Region(GP);
А>


А>Вот здесь GP как раз и задает форму ограничивающего региона. GP это замкнутая фигура любой формы. Это объект класса GraphicPath, который находится в пространстве имен System.Drawing2D. Нужно предварительно создать этот контур с помощью методов этого класса (а там много разных методов: окружности, кривые Безье и т.д). и передать как форму региона. Дальше можно в регионе рисовать. Вот к примеру.



А>
А>GraphicPath GP = new GraphicPath();
А>GP.AddArc(1,1,20,50,10,50);      // Добавили окружность к области
А>GP.AddArc(new Rectangle(30,40,100,56);  // Добавили прямоугольник к области

А>MyRegion1 = new Region(GP);             // Сделали регион на базе созданной области
А>


А>Далее нужно указать, что этот регион является ограничивающей областью холста, на котором происходит рисование. Для этого у холста (объекта Graphics) есть свойство Clip.


А>
А>e.Graphics.Clip = MyRegion1;
А>



А>Далее все рисование будет происходить в пределах этого региона:


А>Это в общих словах. Подробнее можно найти в MSDN-е. См. описание классов Region,GraphicPath и пространств имен System.Drawing и System.Drawing2D
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.