If I comment this line:
==
renWin->SetParentId(hWnd); //<-- hWnd : handle of my windows where I display my rendering
==
I intercept all events !!!
In fact, I create a view under my MFC project. Then I call my C++ method with handle of my View.
I dont understand why if I display the rendered on my window (View under MFC) I cant capture events?
Any Idea.
_____
De : toulgen [mailto:toul... @gmail.com ] Envoyé : lundi 6 juillet 2009 15:33 À : 'Will Schroeder' Cc : 'vtku... @vtk.org ' Objet : RE: [vtk-users] capture mouse event
No, I dont receive answer.
I try this code :
My code:
========
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection( cone->GetOutputPort() );
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->AddActor( coneActor2 );
ren1->SetBackground( 0.1, 0.2, 0.4 );
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer( ren1 );
renWin->SetSize( 300, 300 );
renWin->SetParentId(hWnd); //<-- hWnd : handle of my windows where I display my rendering
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkMyCallback *callb = vtkMyCallback::New();
vtkInteractorStyleUser *style = vtkInteractorStyleUser::New();
style->AddObserver(vtkCommand::AnyEvent, callb);
iren->SetInteractorStyle(style);
iren->Initialize();
//iren->Start(); //<- Not used
vtkMyCallback Class:
====================
class vtkMyCallback : public vtkCommand
{
public:
static vtkMyCallback *New()
{
return new vtkMyCallback;
}
virtual void Execute(vtkObject *caller, unsigned long Id, void* ptVal)
{
vtkInteractorStyleUser *style = static_cast< vtkInteractorStyleUser* >(caller);
switch( Id)
{
case vtkCommand::CharEvent: // <-- Never captured event
switch( style->GetChar() )
{
case 'h':
OutputDebugString("*********** >>> h <<<************** /n/n/n");
break;
}
break;
case vtkCommand::MouseWheelBackwardEvent: // <-- Never captured event
OutputDebugString("MouseWheelBackwardEvent /n");
break;
case vtkCommand::MouseWheelForwardEvent: // <-- Never captured event
OutputDebugString("MouseWheelForwardEvent /n");
break;
case vtkCommand::MouseMoveEvent: // <-- OK
OutputDebugString("MouseMoveEvent/n");
break;
case vtkCommand::LeftButtonPressEvent: // <-- OK
OutputDebugString("LeftButtonPressEvent /n");
break;
case vtkCommand::RightButtonPressEvent: // <-- OK
OutputDebugString("RightButtonPressEvent /n");
break;
}
}
};
I can intercept MouseMoveEvent, LeftButtonPressEvent and RightButtonPressEvent events. But never with this events: MouseWheelBackwardEvent, MouseWheelForwardEvent and CharEvent.
Have you any idea ? or examples ?
Thank you,
ToulGen
_____
De : Will Schroeder [mailto:will... @kitware.com ] Envoyé : mercredi 1 juillet 2009 12:53 À : toulgen Objet : Re: [vtk-developers] capture mouse event
Did you receive an answer? If not you have some studying to do :-) You will want to start with the interactor styles.
Will
On Thu, Jun 25, 2009 at 11:20 AM, toulgen <toul... @gmail.com > wrote:
Hi,
I use this pipeline to render volume.
My question is: how I can capture a mouse event? I want to zoom in/zoom out my volume with mouse wheel scrolls.
Thx,
ToulGen
My code :
========
this->m_vtkpRendererVolume = vtkRenderer::New();
this->m_vtkpRenWin = vtkRenderWindow::New();
this->m_vtkpRenWin->DoubleBufferOn();
this->m_vtkpRenWin->SetDesiredUpdateRate(1);
this->m_vtkpRenWin->SetSize(this->m_Width, this->m_Height);
this->m_vtkpRenWin->AddRenderer( this->m_vtkpRendererVolume );
this->m_vtkpRenWin ->SetParentId(hWnd);
// Make interactive
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetStillUpdateRate(1);
iren->SetDesiredUpdateRate(10);
iren->SetRenderWindow(this->m_vtkpRenWin);
// Standard transfer functions
...
vtkVolumeRayCastCompositeFunction *compositeFunction = vtkVolumeRayCastCompositeFunction::New();
compositeFunction->SetCompositeMethodToInterpolateFirst();
vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
volumeMapper->SetVolumeRayCastFunction(compositeFunction);
volumeMapper->SetInput(this->m_vtkpVolume->GetOutput());
m_vtkpVolumeForDisplay = vtkVolume::New();
m_vtkpVolumeForDisplay->SetMapper(volumeMapper);
m_vtkpVolumeForDisplay->SetProperty(volumeProperty);
this->m_vtkpRendererVolume->AddVolume(m_vtkpVolumeForDisplay);
this->m_vtkpRenWin->Render();
_______________________________________________ Powered by www.kitware.com
Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe: http://www.vtk.org/mailman/listinfo/vtk-developers
-- William J. Schroeder, PhD Kitware, Inc. 28 Corporate Drive Clifton Park, NY 12065 will... @kitware.com http://www.kitware.com (518) 881-4902
_______________________________________________ Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the VTK FAQ at:
http://www.vtk.org/Wiki/VTK_FAQ
Follow this link to subscribe/unsubscribe: http://www.vtk.org/mailman/listinfo/vtkusers