none
Win32 C++. Как в системе координат GDI+ перевести начало координат из левого верхнего угла в левый нижний угол? RRS feed

  • Вопрос

  • Напишите, пожалуйста, как в системе координат GDI+ перевести начало координат из левого верхнего угла в левый нижний угол. Перевернул массу информации в интернете и не нашёл, где бы это нормально описывалось, как это сделать в приложении Win32. Помогите, пожалуйста.
    27 января 2020 г. 14:06

Ответы

  • Примерно так:

    graphics.RotateTransform(180.0f);
    graphics.TranslateTransform(0.0f, height);
    
    где height - высота окна/элемента/изображения - того, на чем рисуете

    Здравствуйте.

    Немного дополнительной информации. Заранее сорри, так как знаком с VB, а не С++...

    graphics.RotateTransform(180.0f);
    graphics.TranslateTransform(0.0f, height);
    <функции отрисовки>
    graphics.ResetTransform();
    Не знаю, как в С++, но в VB надо выполнить ResetTransform после отрисовки. Иначе (в данном случае) при следующем событии Paint будет переворот на 180 градусов, то есть коодинаты вернуться в изначальное состояние. Так и будет "кувыркаться" при каждой отрисовке.


    Alexandr_Smirnoff

    • Помечено в качестве ответа Purple_Apple 8 февраля 2020 г. 12:24
    • Снята пометка об ответе Purple_Apple 8 февраля 2020 г. 12:30
    • Помечено в качестве ответа Purple_Apple 8 февраля 2020 г. 14:02
    30 января 2020 г. 23:36

Все ответы

  • Примерно так:

    graphics.RotateTransform(180.0f);
    graphics.TranslateTransform(0.0f, height);
    
    где height - высота окна/элемента/изображения - того, на чем рисуете

    28 января 2020 г. 5:41
  • Спасибо, Вадим.
    28 января 2020 г. 10:31
  • Примерно так:

    graphics.RotateTransform(180.0f);
    graphics.TranslateTransform(0.0f, height);
    
    где height - высота окна/элемента/изображения - того, на чем рисуете

    Здравствуйте.

    Немного дополнительной информации. Заранее сорри, так как знаком с VB, а не С++...

    graphics.RotateTransform(180.0f);
    graphics.TranslateTransform(0.0f, height);
    <функции отрисовки>
    graphics.ResetTransform();
    Не знаю, как в С++, но в VB надо выполнить ResetTransform после отрисовки. Иначе (в данном случае) при следующем событии Paint будет переворот на 180 градусов, то есть коодинаты вернуться в изначальное состояние. Так и будет "кувыркаться" при каждой отрисовке.


    Alexandr_Smirnoff

    • Помечено в качестве ответа Purple_Apple 8 февраля 2020 г. 12:24
    • Снята пометка об ответе Purple_Apple 8 февраля 2020 г. 12:30
    • Помечено в качестве ответа Purple_Apple 8 февраля 2020 г. 14:02
    30 января 2020 г. 23:36
  • Мой пример предполагает, что этот код будет вызван только один раз для данного объекта Graphics. В С++ переменная Graphics должна быть локальной для метода отрисовки, так чтобы при каждом вызове существовал новый объект, тогда проблемы не будет. Если переменная существует дольше и вызывать этот код несколько раз, да, поведение будет именно таким.
    31 января 2020 г. 4:59
  • Мой пример предполагает, что этот код будет вызван только один раз для данного объекта Graphics. В С++ переменная Graphics должна быть локальной для метода отрисовки, так чтобы при каждом вызове существовал новый объект, тогда проблемы не будет. Если переменная существует дольше и вызывать этот код несколько раз, да, поведение будет именно таким.
    Да, именно так.

    Alexandr_Smirnoff

    31 января 2020 г. 10:34
  • Спасибо большое, Александр. А скажите, пожалуйста, можно ли разместить центр координат в центре клиентской области окна приложения (т.е. сделать классическую декартову систему координат в окне приложения) используя, опять же, GDI+? Я имею в виду многократное возникновение событий Paint - отрисовку большого числа линий или кривых, используя множество координатных точек. Например, отрисовку триангуляционной сетки при триангуляции Делоне (здесь многократная отрисовка линий)? Или, скажем, отрисовку спектра сигнала по дискретному преобразованию Фурье в реальном времени (здесь многократная отрисовка линий и кривых)? Буду очень благодарен вам за помощь.


    • Изменено Purple_Apple 8 февраля 2020 г. 12:41
    8 февраля 2020 г. 12:37
  • Спасибо большое, Александр. А скажите, пожалуйста, можно ли разместить центр координат в центре клиентской области окна приложения (т.е. сделать классическую декартову систему координат в окне приложения) используя, опять же, GDI+? Я имею в виду многократное возникновение событий Paint - отрисовку большого числа линий или кривых, используя множество координатных точек. Например, отрисовку триангуляционной сетки при триангуляции Делоне (здесь многократная отрисовка линий)? Или, скажем, отрисовку спектра сигнала по дискретному преобразованию Фурье в реальном времени (здесь многократная отрисовка линий и кривых)? Буду очень благодарен вам за помощь.


    Здравствуйте.

    Да, такое возможно.

    Посмотрите ответы в похожей теме 

    А здесь - справка по координатам: https://docs.microsoft.com/ru-ru/dotnet/framework/winforms/windows-forms-coordinates


    Alexandr_Smirnoff

    8 февраля 2020 г. 15:22