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);
};