15 #include "boost/bind.hpp"
17 #include <vtkCamera.h>
18 #include <vtkRenderer.h>
19 #include <vtkProperty.h>
20 #include <vtkImageData.h>
21 #include <vtkLineSource.h>
23 #include <vtkProbeFilter.h>
24 #include <vtkSphereSource.h>
25 #include <vtkRenderWindow.h>
26 #include <vtkCallbackCommand.h>
27 #include <vtkPolyDataMapper.h>
29 #include <vtkEventQtSlotConnect.h>
39 #include <vtkRenderWindowInteractor.h>
41 #include "vtkVolumePicker.h"
44 #ifdef CX_BUILD_MEHDI_VTKMULTIVOLUME
45 #include "vtkMultiVolumePicker.h"
60 mDataManager(dataManager),
61 mPickedPoint(), mSphereRadius(2)
108 disconnect(
mTool.get(), SIGNAL(toolTransformAndTimestamp(
Transform3D,
double)),
this,
116 connect(
mTool.get(), SIGNAL(toolTransformAndTimestamp(
Transform3D,
double)),
this,
153 int hit = picker->Pick(clickPosition[0], clickPosition[1], 0, renderer);
164 std::map<QString, DataPtr> allData =
mDataManager->getDatas();
165 for (std::map<QString, DataPtr>::iterator iter = allData.begin(); iter != allData.end(); ++iter)
167 MeshPtr mesh = boost::dynamic_pointer_cast<Mesh>(iter->second);
168 if (mesh && mesh->getVtkPolyData() == data)
171 ImagePtr image = boost::dynamic_pointer_cast<Image>(iter->second);
172 if (image && image->getBaseVtkImageData() == data)
177 Vector3D pick_w(picker->GetPickPosition());
182 ||(
mTool && (data ==
mTool->getGraphicsPolyData() )))
217 iren->GetEventPosition(pickedPoint);
220 if (renderer == NULL)
223 Vector3D clickPoint(pickedPoint[0], pickedPoint[1], 0);
269 void* vtkNotUsed(calldata))
276 case vtkCommand::LeftButtonPressEvent:
279 case vtkCommand::LeftButtonReleaseEvent:
280 self->OnLeftButtonUp();
282 case vtkCommand::MouseMoveEvent:
295 ren->SetDisplayPoint(p_d.data());
296 ren->DisplayToWorld();
297 ren->GetWorldPoint(worldPt);
298 return Vector3D(worldPt)/worldPt[3];
308 ren->SetWorldPoint(p_w[0], p_w[1], p_w[2], 1.0);
309 ren->WorldToDisplay();
310 ren->GetDisplayPoint(p_d.data());
327 Vector3D p_current_d(interactor->GetEventPosition()[0], interactor->GetEventPosition()[1], p_prev_d[2]);
335 return p_current_w - p_prev_w;
386 i->AddObserver(vtkCommand::LeftButtonPressEvent, this->
mCallbackCommand, 1.0);
387 i->AddObserver(vtkCommand::LeftButtonReleaseEvent, this->
mCallbackCommand, 1.0);
409 reportDebug(
"Cannot add rep actor to a NULL view.");