1

我希望能够在我的 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);

};
4

2 回答 2

0

我找不到直接绘制到视口窗口的方法,但是我通过使用透明的无模式对话框解决了这个问题。

于 2011-12-30T15:29:55.697 回答
0

可能是一个完整的重绘将解决问题。强制完成重绘

于 2015-02-24T01:17:16.627 回答