Я хочу иметь возможность рисовать изображения в окне просмотра в моем плагине 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);
};