VTK在读取的DICOM图片上画线或者画框
vtk吧
全部回复
仅看楼主
level 3
zero9079 楼主
下面是继承 vtkInteractorStyleImage类来用鼠标右键画一条线,不知道为什么画不到图片上,哪位大神帮帮忙,我要疯了~~~~~~~~~~~~~~~~~~~~
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkJPEGReader.h>
#include <vtkImageActor.h>
#include <vtkRendererCollection.h>
#include <vtkPointPicker.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkActor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkObjectFactory.h>
#include <vtkProperty.h>
#include <vtkLineSource.h>
class PointPickerInteractorStyle : public vtkInteractorStyleImage
{
public:
static PointPickerInteractorStyle* New();
vtkTypeMacro(PointPickerInteractorStyle, vtkInteractorStyleImage);
virtual void OnRightButtonDown()
{
std::cout << "Picking pixel: " << this->Interactor->GetEventPosition()[0] << " " << this->Interactor- >GetEventPosition()[1] << std::endl;
this->Interactor->GetPicker()->Pick(this->Interactor->GetEventPosition()[0],
this->Interactor->GetEventPosition()[1],
0, // always zero.
this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
double picked[3];
this->Interactor->GetPicker()->GetPickPosition(picked);
std::cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << std::endl;
vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
double leftup[3], leftdown[3];
leftup[0] = picked[0], leftup[1] = picked[1], leftup[2] = picked[2];
leftdown[0] = picked[0] + 1, leftdown[1] = picked[1] + 1, leftdown[2] = picked[2];
lineSource->SetPoint1(leftup);
lineSource->SetPoint2(leftdown);
lineSource->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(lineSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->SetPosition(picked);
//actor->SetScale(0.05);
actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(actor);
//this->Interactor->GetRenderWindow()->Render();
//QMessageBox::information(this, "Note", "drawRect event", QMessageBox::Yes);
//vtkInteractorStyleImage::OnRightButtonDown();
}
};
2016年11月19日 02点11分 1
level 12
截图看看你现在的效果
2016年11月21日 05点11分 2
level 7
VTK 不能直接修改dicom图片的原文件
2016年11月28日 07点11分 3
level 1
楼主后来实现了吗?我现在也在纠结这个问题
2017年02月23日 12点02分 4
level 6
第一,leftdown[0] = picked[0] + 1,这句加1太小了有可能是画出来了但是看不见;
第二,actor->SetPosition(picked);这句应该注释掉,既然已经确定坐标位置了,再用这句会继续平移的。
2017年02月24日 00点02分 5
level 1
这个可以通过在图像表面再构造一个图层来解决
2017年02月27日 17点02分 6
level 1
楼主解决了吗 小的也遇到这种问题了……
2017年06月08日 11点06分 7
level 1
各位大佬 有人解决了吗 我也遇到了这个问题
2018年08月08日 05点08分 8
level 1
我发现了我的程序的问题 因为画的点太小了 程序逻辑基本上没有问题
2018年08月08日 08点08分 9
1