我希望能够在我的 3d Max 插件中将图像绘制到视口,GraphicsWindow 类具有在视口中绘制 3d 对象的功能,但这些绘图调用受到当前视口和图形渲染限制的限制。这是不可取的,因为无论 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);
};