<div>Hellow everyone,</div>
<div> </div>
<div>I'm developing PACS-system with MIP-plugin which can view Maximum Intensity Projection of DICOM images ( mainly CT-slices) and now i'm having troubles with programming mouse handler in which i should change LUT or use predefined handler in vtkWin32RenderWindowInteractor - these actions are made subject to the user's choise. The trouble is that if hte LUT changing tool is chosen the LUT parameters don't change at all. The part of code where the handler decides what to do is below ( CVRWindowInteractor is derived from vtkWin32RenderWindowInteractor ). if i'm not mistaken, i should invoke some methods to apply the changes in m_pOpacityFun (vtkPiecewiseFunction ) and m_pColorFun (vtkColorTransferFunction), but i don't know which. Could you please tell me where i'm wrong.</div>
<div> </div>
<div>Thank you for your reply.</div>
<div> </div>
<div><font color="#0000ff" size="2">
<p>void</p></font><font size="2"> CVRWindowInteractor::OnLButtonDown( HWND wnd, UINT nFlags, </font><font color="#0000ff" size="2">int</font><font size="2"> X, </font><font color="#0000ff" size="2">int</font><font size="2"> Y, </font><font color="#0000ff" size="2">int</font><font size="2"> repeat )
<p>{</p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> (!</font><font color="#0000ff" size="2">this</font><font size="2">->Enabled)
<p>{</p>
<p></p></font><font color="#0000ff" size="2">return</font><font size="2">;
<p>}</p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> ( MIP_LUTChange == m_Mode )
<p>{</p>
<p>SetFocus( wnd );</p>
<p>SetCapture( wnd );</p>
<p>m_pLUTChangeControl->ChangeWin( 0, 0, </p></font><font color="#0000ff" size="2">false</font><font size="2"> );
<p></p></font><font color="#0000ff" size="2">int</font><font size="2"> WinCenter = 0;
<p></p></font><font color="#0000ff" size="2">int</font><font size="2"> WinWidth = 0;
<p>m_pLUTChangeControl->GetCW( &WinCenter, &WinWidth );</p>
<p>m_pOpacityFun->RemoveAllPoints();</p>
<p></p></font><font color="#0000ff" size="2">double</font><font size="2"> lfCenter = ( WinCenter - m_lfaCastRange[ 0 ] ) * ( VTK_UNSIGNED_SHORT_MAX /
<p>( m_lfaCastRange[ 1 ] - m_lfaCastRange[ 0 ] ) );</p>
<p></p></font><font color="#0000ff" size="2">double</font><font size="2"> lfWindow = ( WinWidth - m_lfaCastRange[ 0 ] ) * ( VTK_UNSIGNED_SHORT_MAX /
<p>( m_lfaCastRange[ 1 ] - m_lfaCastRange[ 0 ] ) );</p>
<p>m_pOpacityFun->AddPoint( lfCenter - lfWindow / 2, 0.0 );</p>
<p>m_pOpacityFun->AddPoint( lfCenter + lfWindow / 2, 1.0 );</p>
<p>m_pColorFun->BuildFunctionFromTable( lfCenter - lfWindow / 2, lfCenter + lfWindow / 2, </p>
<p>VTK_UNSIGNED_CHAR_MAX + 1 , (</p></font><font color="#0000ff" size="2">double</font><font size="2">*)( &m_lfaColorTable ) );
<p>}</p>
<p></p></font><font color="#0000ff" size="2">else</font><font size="2"> </font><font color="#0000ff" size="2">if</font><font size="2"> ( MIP_Rotate == m_Mode )
<p>{</p>
<p>SetFocus( wnd );</p>
<p>SetCapture( wnd );</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->SetEventInformationFlipY( X,
<p>Y, </p>
<p>nFlags & MK_CONTROL, </p>
<p>nFlags & MK_SHIFT,</p>
<p>0, repeat);</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->SetAltKey( GetKeyState( VK_MENU ) & (~1) );
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->InvokeEvent( vtkCommand::LeftButtonPressEvent, NULL );
<p>}</p>
<p>}</p></font><font color="#0000ff" size="2">
<p>void</p></font><font size="2"> CVRWindowInteractor::OnMouseMove( HWND wnd, UINT nFlags, </font><font color="#0000ff" size="2">int</font><font size="2"> X, </font><font color="#0000ff" size="2">int</font><font size="2"> Y )
<p>{</p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> (!</font><font color="#0000ff" size="2">this</font><font size="2">->Enabled)
<p>{</p>
<p></p></font><font color="#0000ff" size="2">return</font><font size="2">;
<p>}</p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> ( ( MIP_LUTChange == m_Mode ) && ( MK_LBUTTON == nFlags ) )
<p>{</p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> ( !</font><font color="#0000ff" size="2">this</font><font size="2">->MouseInWindow &&
<p>( X >= 0 && X < </p></font><font color="#0000ff" size="2">this</font><font size="2">->Size[ 0 ] && Y >= 0 && Y < </font><font color="#0000ff" size="2">this</font><font size="2">->Size[ 1 ] ) )
<p>{</p>
<p>m_pLUTChangeControl->ChangeWin( X, Y, </p></font><font color="#0000ff" size="2">true</font><font size="2"> );
<p></p></font><font color="#0000ff" size="2">int</font><font size="2"> WinCenter = 0;
<p></p></font><font color="#0000ff" size="2">int</font><font size="2"> WinWidth = 0;
<p>m_pLUTChangeControl->GetCW( &WinCenter, &WinWidth );</p>
<p>m_pOpacityFun->RemoveAllPoints();</p>
<p></p></font><font color="#0000ff" size="2">double</font><font size="2"> lfCenter = ( WinCenter - m_lfaCastRange[ 0 ] ) * ( VTK_UNSIGNED_SHORT_MAX /
<p>( m_lfaCastRange[ 1 ] - m_lfaCastRange[ 0 ] ) );</p>
<p></p></font><font color="#0000ff" size="2">double</font><font size="2"> lfWindow = ( WinWidth - m_lfaCastRange[ 0 ] ) * ( VTK_UNSIGNED_SHORT_MAX /
<p>( m_lfaCastRange[ 1 ] - m_lfaCastRange[ 0 ] ) );</p>
<p>m_pOpacityFun->AddPoint( lfCenter - lfWindow / 2, 0.0 );</p>
<p>m_pOpacityFun->AddPoint( lfCenter + lfWindow / 2, 1.0 );</p>
<p>m_pColorFun->BuildFunctionFromTable( lfCenter - lfWindow / 2, lfCenter + lfWindow / 2, </p>
<p>VTK_UNSIGNED_CHAR_MAX + 1 , (</p></font><font color="#0000ff" size="2">double</font><font size="2">*)( &m_lfaColorTable ) );
<p>}</p>
<p>}</p>
<p></p></font><font color="#0000ff" size="2">else</font><font size="2"> </font><font color="#0000ff" size="2">if</font><font size="2"> ( MIP_Rotate == m_Mode )
<p>{</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->SetEventInformationFlipY( X,
<p>Y, </p>
<p>nFlags & MK_CONTROL, </p>
<p>nFlags & MK_SHIFT );</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->SetAltKey( GetKeyState( VK_MENU ) & ( ~1 ) );
<p></p>
<p></p></font><font color="#0000ff" size="2">if</font><font size="2"> ( !</font><font color="#0000ff" size="2">this</font><font size="2">->MouseInWindow &&
<p>( X >= 0 && X < </p></font><font color="#0000ff" size="2">this</font><font size="2">->Size[ 0 ] && Y >= 0 && Y < </font><font color="#0000ff" size="2">this</font><font size="2">->Size[ 1 ] ) )
<p>{</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->InvokeEvent(vtkCommand::EnterEvent, NULL);
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->MouseInWindow = 1;
<p></p></font><font color="#008000" size="2">// request WM_MOUSELEAVE generation</font><font size="2">
<p>TRACKMOUSEEVENT tme;</p>
<p>tme.cbSize = </p></font><font color="#0000ff" size="2">sizeof</font><font size="2">(TRACKMOUSEEVENT);
<p>tme.dwFlags = TME_LEAVE;</p>
<p>tme.hwndTrack = wnd;</p>
<p>TrackMouseEvent(&tme);</p>
<p>}</p>
<p></p></font><font color="#0000ff" size="2">this</font><font size="2">->InvokeEvent(vtkCommand::MouseMoveEvent, NULL);
<p>}</p>
<p>}</p></font></div>