关于得到坐标位置的问题
vtk吧
全部回复
仅看楼主
level 7
wangdong1210 楼主
我用mfc开发vtk,读取并显示了一个dicom序列图像
现在我想通过鼠标点击画面,获得当前鼠标点的像素值。
理论上使用GetScalarPointer(Pos);来获得像素的值。
现在的问题是像素坐标,Pos是一个三维的坐标值,分别是图像的X,Y和序列的序号
问题是现在怎么通过鼠标的位置,得到这个三维坐标啊?
采用GetEventPosition(pos);得到了鼠标在窗体内的相对于屏幕像素的坐标值;
Interactor->GetPicker()->Pick(pos[0],pos[1],0,CurrentRenderer);
double* worldPosition = Interactor->GetPicker()->GetPickPosition();
然后用Picker得到世界坐标系,这个坐标系是一个有正有负的值 范围也并不是 -1到+1
请问这里怎么能得到相对于图片的坐标系啊?
2017年06月01日 10点06分 1
level 7
首先你应该将imageData的原点坐标设为(0,0,0);
imageData->setOrigin(0,0,0);这样你在点击图片时取到的世界坐标就都是正数,然后用世界坐标除以图像的spacing,就可以得到你获取的像素在图像中的index值,这时候再用 GetScalarPointer(x,y,z)就可以了。
PS :getscalarpointer 要的不是坐标值而是像素的index;
2017年06月02日 01点06分 2
多谢多谢了
2017年06月02日 03点06分
可以了!再次感谢您!
2017年06月04日 09点06分
@wangdong1210 不客气,互相交流嘛。
2017年06月05日 01点06分
最近我也遇到了这个问题,但是我没有成功,请问我能看看您的详细步骤吗
2019年07月07日 11点07分
level 2
请问从三维模型actor中通过鼠标选取点 该怎么做呢 提取的点偏离的非常大
2021年09月14日 08点09分 3
level 1
百度下vtkInteractorStyleTrackballCamera,重写下这个类
void MouseInteractorStyle::OnLeftButtonDown()
vtkNew<vtkCellPicker> picker;
picker->SetTolerance(0.0005);
int* p = this->GetInteractor()->GetEventPosition();
picker->Pick(p[0], p[1], 0, this->GetDefaultRenderer());
double *pos = picker->GetPickPosition();
我感觉这个拾取点的坐标还挺准确的,还可以可以通过
renderer->SetWorldPoint(pos);
renderer->WorldToDisplay();
renderer->GetDisplayPoint();
获取display二维坐标点
2021年11月24日 08点11分 4
1