网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月08日
漏签
0
天
vtk吧
关注:
1,218
贴子:
10,385
看贴
图片
吧主推荐
游戏
1
2
下一页
尾页
51
回复贴,共
2
页
,跳到
页
确定
<<返回vtk吧
>0< 加载中...
VTK中的2X2三视图显示
只看楼主
收藏
回复
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看到经常有人来问这个内容,给大家贴个能跑的完整版本吧,
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
1、include
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
//#include "vtkWin32OpenGLRenderWindow.h"
//#include "vtkWin32RenderWindowInteractor.h"
#include"vtkDICOMImageReader.h"
#include"vtkOutlineFilter.h"
#include"vtkPolyDataMapper.h"
#include"vtkActor.h"
#include"vtkImagePlaneWidget.h"
#include"vtkCellPicker.h"
#include"vtkProperty.h"
#include"vtkImageMapToColors.h"
#include"vtkImageActor.h"
#include"vtkCamera.h"
#include"vtkCommand.h"
#include"vtkVolume16Reader.h"
#include"vtkSliderWidget.h"
#include"vtkSliderRepresentation2D.h"
#include<vtkAxesActor.h>
#include<vtkTransform.h>
#include<vtkSmartPointer.h>
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
2、回调
class vtkSliderCallback :public vtkCommand
{
public:static vtkSliderCallback *New()
{
returnnew vtkSliderCallback;
}
virtualvoidExecute(vtkObject *caller,unsignedlong,void*)
{
vtkSliderWidget *sliderWidget = reinterpret_cast<vtkSliderWidget*>(caller);
if(!sliderWidget)return;int value =static_cast<int>(static_cast<vtkSliderRepresentation *>(sliderWidget->GetRepresentation())->GetValue());
if(this->WidgetX){this->WidgetX->SetSliceIndex(value);}
elseif(this->WidgetY){this->WidgetY->SetSliceIndex(value);}
elseif(this->WidgetZ){this->WidgetZ->SetSliceIndex(value);}
}
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
3、再回调
class vtkWidgetWindowLevelCallback :public vtkCommand
{public:static vtkWidgetWindowLevelCallback *New()
{
returnnew vtkWidgetWindowLevelCallback;
}
voidExecute( vtkObject *caller,unsignedlong vtkNotUsed(event),void*callData ){
vtkImagePlaneWidget*self=reinterpret_cast< vtkImagePlaneWidget*>(caller);
if(!self)return;
double* wl =static_cast<double*>( callData );
if(self==this->WidgetX)
{this->WidgetY->SetWindowLevel(wl[0],wl[1]);
this->WidgetZ->SetWindowLevel(wl[0],wl[1]);
}
elseif(self==this->WidgetY)
{this->WidgetX->SetWindowLevel(wl[0],wl[1]);
this->WidgetZ->SetWindowLevel(wl[0],wl[1]);}
elseif(self==this->WidgetZ)
{this->WidgetX->SetWindowLevel(wl[0],wl[1]);
this->WidgetY->SetWindowLevel(wl[0],wl[1]);}}
vtkWidgetWindowLevelCallback():WidgetX(0),WidgetY(0),WidgetZ(0){}
vtkImagePlaneWidget*WidgetX;
vtkImagePlaneWidget*WidgetY;
vtkImagePlaneWidget*WidgetZ;
};
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
4、读取
int main()
{/
//文件读取的操作
//vtkDICOMImageReader *pReader = vtkDICOMImageReader::New();
//pReader->SetDataByteOrderToLittleEndian();
//pReader->SetDirectoryName( "d:\\neck" );
//pReader->Update();
vtkVolume16Reader* pReader = vtkVolume16Reader::New();
pReader->SetDataDimensions(64,64);
pReader->SetDataByteOrderToLittleEndian();
pReader->SetImageRange(1,93);
pReader->SetDataSpacing(3.2,3.2,1.5);
pReader->SetFilePrefix("D:\\VTKITK\\vtkdata-5.6.0\\Data\\headsq\\quarter");
pReader->SetDataMask(0x7fff);
pReader->Update();
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
5、
vtkOutlineFilter *DicomOutline= vtkOutlineFilter::New();
DicomOutline->SetInputConnection( pReader->GetOutputPort());
vtkPolyDataMapper *pMapper = vtkPolyDataMapper::New();
pMapper->SetInputConnection(DicomOutline->GetOutputPort());
vtkActor *DicomActor= vtkActor::New();
DicomActor->SetMapper( pMapper );
vtkRenderer *ren = vtkRenderer::New();
vtkRenderer *ren1 = vtkRenderer::New();
vtkRenderer *ren2 = vtkRenderer::New();
vtkRenderer *ren3 = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
renWin->AddRenderer( ren1 );
renWin->AddRenderer( ren2 );
renWin->AddRenderer( ren3 );
renWin->AddRenderer( ren );
iren->SetRenderWindow(renWin);
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
6、这里只给出一个面,另外两个面类似
vtkCellPicker *picker = vtkCellPicker::New();
picker->SetTolerance(0.005);
vtkImagePlaneWidget *planeWidgetX = vtkImagePlaneWidget::New();
planeWidgetX->SetInteractor( iren );
planeWidgetX->SetKeyPressActivationValue('x');
planeWidgetX->SetPicker( picker );
planeWidgetX->RestrictPlaneToVolumeOn();
planeWidgetX->GetPlaneProperty()->SetColor(0.0,0.0,1.0);
planeWidgetX->DisplayTextOn();
//planeWidgetX->TextureInterpolateOn();
planeWidgetX->TextureInterpolateOff();
planeWidgetX->SetResliceInterpolateToLinear();
planeWidgetX->SetInput( (vtkDataSet*)pReader->GetOutput() );
planeWidgetX->SetPlaneOrientationToXAxes();//冠
planeWidgetX->SetSliceIndex( 32 );
planeWidgetX->GetTexturePlaneProperty()->SetOpacity( 1 );
planeWidgetX->On();
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
7、
//////////////////////////////////////////////////////
vtkWidgetWindowLevelCallback *cbk = vtkWidgetWindowLevelCallback::New();
cbk->WidgetX = planeWidgetX;
cbk->WidgetY = planeWidgetY;
cbk->WidgetZ = planeWidgetZ;
planeWidgetX->AddObserver( vtkCommand::EndWindowLevelEvent, cbk );
planeWidgetY->AddObserver( vtkCommand::EndWindowLevelEvent, cbk );
planeWidgetZ->AddObserver( vtkCommand::EndWindowLevelEvent, cbk );
cbk->Delete();
//////////////////////////////////////////////////////
vtkSliderRepresentation2D *sliderRep1 = vtkSliderRepresentation2D::New();
sliderRep1->SetMinimumValue(1);
sliderRep1->SetMaximumValue(50);
sliderRep1->SetValue(planeWidgetX->GetSliceIndex());
sliderRep1->GetPoint1Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep1->GetPoint1Coordinate()->SetValue(.0 ,.02);
sliderRep1->GetPoint2Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep1->GetPoint2Coordinate()->SetValue(1.0, .02);
vtkSliderWidget *sliderWidget1= vtkSliderWidget::New();
sliderWidget1->SetInteractor(iren);
sliderWidget1->SetRepresentation(sliderRep1);
sliderWidget1->SetAnimationModeToAnimate();
sliderWidget1->EnabledOn();
vtkSliderCallback *slidercbk = vtkSliderCallback::New();
slidercbk->WidgetX= planeWidgetX;
sliderWidget1->AddObserver(vtkCommand::InteractionEvent,slidercbk);
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
8、这里只给出一个面,另外两个面类似
//增加2D图像测试获取切片
vtkImageMapToColors *colorMap1 = vtkImageMapToColors::New();
colorMap1->PassAlphaToOutputOff(); //use in RGB
AcolorMap1->SetActiveComponent( 0 );
colorMap1->SetOutputFormatToLuminance();
colorMap1->SetInput( (vtkDataSet*)planeWidgetX->GetResliceOutput() );
colorMap1->SetLookupTable( (vtkScalarsToColors *)planeWidgetX->GetLookupTable() );
vtkImageActor *imageActor1 = vtkImageActor::New();
imageActor1->PickableOff();
imageActor1->SetInput( colorMap1->GetOutput() );
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
9、
vtkSmartPointer<vtkTransform> transform =vtkSmartPointer<vtkTransform>::New();
transform->Translate(-10.0, -10.0, -10.0);
vtkSmartPointer<vtkAxesActor> axes =vtkSmartPointer<vtkAxesActor>::New();
axes->SetUserTransform(transform);
ren->AddActor(axes);
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
10
ren->AddActor(DicomActor);//outline
ren1->AddActor( imageActor1 );
ren2->AddActor( imageActor2 );
ren3->AddActor( imageActor3 );
// OK
ren->SetBackground( 0.1, 0.1, 0.2 );
ren1->SetBackground( 0.1, 0.2, 0.1 );
ren2->SetBackground( 0.2, 0.1, 0.2 );
ren3->SetBackground( 0.2, 0.2, 0.2 );
renWin->SetSize(600,400);
//renWin->SetFullScreen(1);
ren3->SetViewport(0,0.5,0.5,1);
ren1->SetViewport(0.5,0.5,1,1);
ren2->SetViewport(0,0,0.5,0.5);
ren->SetViewport(0.5,0,1,0.5);
ren->GetActiveCamera()->Dolly(1.15);
ren1->GetActiveCamera()->Dolly(1.15);
ren2->GetActiveCamera()->Dolly(1.15);
ren3->GetActiveCamera()->Dolly(1.15);
ren->ResetCamera();
ren1->ResetCamera();
ren2->ResetCamera();
ren3->ResetCamera();
iren->Initialize();
renWin->SetWindowName("vtkSuperViewer by winston");
iren->Start();
renWin->Render();
//return 0;
}
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
代码太TM长了。。。终于贴完了
随便一玩啊
四年级
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
谢谢吧主,太好了
随便一玩啊
四年级
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
当我把这一句imageActor1->SetInputData( colorMap1->GetOutput() )改成imageActor1->SetInputData(planeWidgetY->GetResliceOutput())的时候 就能显示出图像来,但还是要重新手动调整相机的距离 这是为什么啊,我用的是vtkdicomreader读的DICOM图像
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示