I think GetSelection() should be the function of choice <br><br><div class="gmail_quote">On Mon, Apr 26, 2010 at 10:17 AM, 朱文武 <span dir="ltr"><<a href="mailto:cool.wenwu@gmail.com">cool.wenwu@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">hi all,<br><br> i encounter a problem, and need your kind help ! I get 3D global coordinate by using vtkCellPicker, then i want to know the 2D coordinate of point which is picked in the 3D scene. However, the 2D coordiante i transformed was not accurate. Could anyone give some suggestion or better methods? thanks in advance!<br>
<br>All related code is as follows:<br> vtkBMPReader *m_read=... // read bmp image <br> m_read->SetDataSpacing(CReadBmp::m_Dx,CReadBmp::m_Dy,CReadBmp::m_Dz);// <br> m_read->SetDataExtentCReadBmp::m_Xmin,CReadBmp::m_Xmax,CReadBmp::m_Ymin,CReadBmp::m_Ymax,CReadBmp::m_Zmin,CReadBmp::m_Zmax);//<br>
<br><br> vtkInteractorStyleTrackballCamera *style;<br> vtkRenderWindowInteractor *iren;<br> vtkCellPicker *picker;<br> iren->SetInteractorStyle(style);<br><br> style->AddObserver(vtkCommand::MiddleButtonReleaseEvent, cmd);<br>
cmd->SetCallback(MyExecute);<br> picker->SetTolerance(0.0001);<br> iren->SetPicker(picker);<br><br>void MyExecute(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)<br>{<br> double globalCoordinate[3]; //<br>
double selPt[2];<br> picker->Pick(psurface->iren->GetEventPosition()[0],psurface->iren->GetEventPosition()[1],0, psurface->aRenderer);<br> picker->GetPickPosition(globalCoordinate); <br>
<br> int _2DCoor[3];<br>//<span style="color: rgb(255, 0, 0);"> this is the map formula</span><br> <span style="color: rgb(255, 0, 0);"> _2DCoor[0] = static_cast<int>(globalCoordinate[0] / CReadBmp::m_Dx); //2D x Coordinate</span><br style="color: rgb(255, 0, 0);">
<span style="color: rgb(255, 0, 0);"> </span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> _2DCoor[1] = CReadBmp::m_Ymax + 1 - static_cast<int>(globalCoordinate[1] / CReadBmp::m_Dy);//2D y Coordinate</span><br style="color: rgb(255, 0, 0);">
<br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> _2DCoor[2] = static_cast<int>(globalCoordinate[2] / CReadBmp::m_Dz + 0.5) + CReadBmp::m_Zmin ; </span>// the index of image<br><br>}<br><br>
<br>wenwu<br><br><br><br><br>
<br>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br>