1

3d Max プラグインでビューポートに画像を描画できるようにしたいのですが、GraphicsWindow クラスにはビューポートで 3d オブジェクトを描画する関数がありますが、これらの描画呼び出しは現在のビューポートとグラフィックスのレンダリング制限によって制限されています。3d max のグラフィック モードやハードウェアの使用に関係なく、描画したい画像を常に描画する必要があるため、これは望ましくありません。さらに、2d 画像しか描画していないため、3d コンテキストで描画する必要はありません。

ビューポートの HWND を取得することができました。max SDK には DrawIconButton(); 関数があります。

この機能を使用してみましたが、正しく機能しません。ユーザーの操作で画像がランダムにちらつきますが、操作がない場合は消えます。i 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

完全な再描画で問題が解決する場合があります。ForceCompleteRedraw

于 2015-02-24T01:17:16.627 に答える