Как нарисовать изображения для просмотра в Max SDK - PullRequest
1 голос
/ 28 декабря 2011

Я хочу иметь возможность рисовать изображения в окне просмотра в моем плагине 3d Max, Класс GraphicsWindow имеет функции для рисования трехмерных объектов в окне просмотра, но эти вызовы рисования ограничены текущим окном просмотра и пределами визуализации графики. Это нежелательно, так как изображение, которое я хочу нарисовать, всегда должно быть нарисовано независимо от того, в каком графическом режиме используется 3d max и используется ли аппаратное обеспечение, кроме того, я рисую только 2d изображения, поэтому нет необходимости рисовать его в 3D-контексте.

Мне удалось получить HWND окна просмотра, и максимальный SDK имеет функцию DrawIconButton ();

и я попытался использовать эту функцию, но она не работает должным образом, изображение случайно мигает при взаимодействии с пользователем, но исчезает при отсутствии интерактивности. Я реализовал эту функцию в Функция RedrawViewsCallback, однако функция DrawIconButton () не документирована, и я не уверен, является ли это правильным способом ее реализации.

Вот код, который я использую для рисования изображения:

void Sketch_RedrawViewsCallback::proc (Interface * ip)
{

    Interface10* ip10 = GetCOREInterface10();
    ViewExp* viewExp = ip10->GetActiveViewport();
    ViewExp10* currentViewport;

    if (viewExp != NULL)
    {
        currentViewport = reinterpret_cast<ViewExp10*>(viewExp->Execute(ViewExp::kEXECUTE_GET_VIEWEXP_10));
    } else {
        return;
    }

    GraphicsWindow* gw = currentViewport->getGW();

    HWND ViewportWindow = gw->getHWnd();
    HDC hdc = GetDC(ViewportWindow); 
    HBITMAP bitmapImage = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
    Rect rbox(IPoint2(0,0),IPoint2(48,48));

    DrawIconButton(hdc, bitmapImage, rbox, rbox, true);

    ReleaseDC(ViewportWindow, hdc);
    ip->ReleaseViewport(currentViewport);

};

Ответы [ 2 ]

0 голосов
/ 24 февраля 2015

Может быть полная перерисовка решит проблему. ForceCompleteRedraw

0 голосов
/ 30 декабря 2011

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

...