版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/rabbitbride/article/details/82422901
Image 转化 vtkPolydata
#include "vtkCellPicker.h"
#include "vtkSmartPointer.h"
#include "vtkMath.h"
void upoords(vtkObject* obj)
{
// 获取交互器
vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(obj);
// 获取鼠标的当前位置
int event_pos[2];
iren->GetEventPosition(event_pos);
//*三维点拾取
vtkSmartPointer<vtkCellPicker> picker = vtkSmartPointer<vtkCellPicker>::New();
picker->SetTolerance(0.005);
picker->Pick(event_pos[0], event_pos[1], 0.0, windows[1]->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
picker->GetPickPosition(pos);
//picker->GetSelectionPoint(pos);
QString str;
//****************点坐标转换**************
vtkIdType ptId = dsource->GetCurrentData()->originalImage->FindPoint(pos);
if ( ptId == -1 ){
str.sprintf("Off Image");
}else{
// find the nearest implicit point to pos
double closestPt[3];
dsource->originalImage->GetPoint(ptId,closestPt);
double origin[3];
dsource->originalImage->GetOrigin(origin);
double spacing[3];
dsource->originalImage->GetSpacing(spacing);
int extent[6];
dsource->originalImage->GetExtent(extent);
int iqtemp;
for (int i = 0; i < 3; i++)
{
// compute world to image coords
iqtemp = vtkMath::Round((closestPt[i]-origin[i])/spacing[i]);
// we have a valid pick already, just enforce bounds check
iq[i] = (iqtemp < extent[2*i])?extent[2*i]:((iqtemp > extent[2*i+1])?extent[2*i+1]:iqtemp);
// compute image to world coords
//q[i] = iq[i]*spacing[i] + origin[i];
}
pickedPixel = dsource->originalImage->GetScalarComponentAsDouble(iq[0],iq[1],iq[2],0);
str.sprintf("(x=%d : y=%d : z=%d, pixel=%f", iq[0], iq[1], iq[2], pickedPixel);
}
dsource->SeedList(iq[0],iq[1],iq[2],pickedPixel);
}