Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI + Как повернуть фигуру на Х - градусов, Помогите не очень опытному 
V
    Опции темы
LectorSP
Дата 5.12.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 13.4.2006
Где: г. Минск

Репутация: 1
Всего: 2



Помогите пожалуйста разобраться! 

У меня такой вопрос – есть произвольная фигура(например пятиконечная звезда) нарисованная с помощью GraphicsPach, как потом повернуть эту фигуру на определенное количество градусов относительно центра или любой другой точки.

Или хотя бы скажите где можно поподробнее почитать про классы GDI+

--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.12.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Берём пример отсюда и адаптируем под нашу задачу; вместо рисования линий Pen-ом, будет рисование полной фигуры GraphicsPath-ом, и центр GraphicsPath будет центром координат.


--------------------
user posted image
PM MAIL WWW   Вверх
LectorSP
Дата 7.12.2006, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 13.4.2006
Где: г. Минск

Репутация: 1
Всего: 2



Принцип понятен!

Но я так понял, что сама матрици вращяеться относительно начала координат(верхний левый угол), а как сделать, что бы она вращалась относительно своего центра, а то у меня получаеться вот так
Код

void DrawArrow(Graphics gr, /*Point start,*/ float angle)
        {
            
            //float x1 = start.X, y1 = start.Y;

            

            // сохраняем старое состояние Graphics, чтобы потом его восстановить
            GraphicsState state = gr.Save();

            // трансформация: сдвиг к точке start и поворот на угол
            //gr.TranslateTransform(x1, y1);
            gr.RotateTransform(angle);
            
            using (Pen pen = new Pen(Color.Red, 2f))
            {
                GraphicsPath path;
                path = new GraphicsPath(new Point[]{
                                        new Point(150,150),
                                        new Point(150,350),
                                        new Point(350,350),
                                        new Point(350,150),
                                        new Point(150,150)
                                        
                                        }, new byte[]{
                                                    (byte)PathPointType.Start,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line
                                                    
                                        });
                
                gr.DrawPath(pen, path);
            }

            // восстанавливаем старое состояние Graphics (убираем наши трансформации)\
            gr.Restore(state);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            DrawArrow(e.Graphics, /*new Point(0,0),*/ -40); 
        } 

--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
LectorSP
Дата 7.12.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 13.4.2006
Где: г. Минск

Репутация: 1
Всего: 2



Все стало ясно как только взял в руки карандаш и листок бумаги.

Все получилось, огромное спасибо за совет!


        
Код

void DrawArrow(Graphics gr, Point start, float angle)
        {
            
            float x1 = start.X, y1 = start.Y;

            

            // сохраняем старое состояние Graphics, чтобы потом его восстановить
            GraphicsState state = gr.Save();

            // трансформация: сдвиг к точке start и поворот на угол
            gr.TranslateTransform(x1, y1);
            gr.RotateTransform(angle);
            
            using (Pen pen = new Pen(Color.Red, 2f))
            {
                GraphicsPath path;
                path = new GraphicsPath(new Point[]{
                                        new Point(-200,-200),
                                        new Point(200,-200),
                                        new Point(200,200),
                                        new Point(-200,200),
                                        new Point(-200,-200)
                                        
                                        }, new byte[]{
                                                    (byte)PathPointType.Start,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line,
                                                    (byte)PathPointType.Line
                                                    
                                        });
                
                gr.DrawPath(pen, path);
            }
           
            // восстанавливаем старое состояние Graphics (убираем наши трансформации)\
            gr.Restore(state);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            DrawArrow(e.Graphics, new Point(400,400), 25); 
        } 

--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
HelgaZaharova
Дата 7.5.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



А кто-нибудь знает, как повернуть картинку в PictureBox на любой угол?
Код

Image imgTemp = (Image)pictureBox1.Image.Clone();      // Soxranim nash Image dlya risovaniya
   pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); // <-- nado delat' esli kartinka v picture boxe men'she
                     // samogo picture box inache budet obrezano vse
   Graphics g = Graphics.FromImage(pictureBox1.Image);      
   g.Clear(pictureBox1.BackColor);
   float myAngle = 30.0F;
   g.RotateTransform(myAngle);            // Stavim nash transform
   g.DrawImage(imgTemp,new Point(0,0));         // I risuem nash starii image 
   g.ResetTransform();              // Ochischaem transform
   pictureBox1.Refresh();             // Pererisovivaem picture box
   imgTemp.Dispose();
   g.Dispose();



Вот это не очень как-то работает.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.4459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.