VTK:读取raw文件进行面绘制

#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkRayCastImageDisplayHelper.h>
#include <vtkSmartPointer.h>
#include <vtkImageReader.h>
#include <vtkImageCast.h>
#include <vtkMarchingCubes.h>
#include <vtkStripper.h>
#include <vtkDataObject.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkOutlineFilter.h>
void main()

{
	vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();//设置绘制者(绘制对象指针)
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();//设置绘制窗口
	renWin->AddRenderer(ren);//将绘制者加入绘制窗口
	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();//设置绘制交互操作窗口的
	iren->SetRenderWindow(renWin);//将绘制窗口添加到交互窗口

	vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();//交互摄像机
	iren->SetInteractorStyle(style);//style为交互模式
	vtkSmartPointer<vtkImageReader> reader = vtkSmartPointer<vtkImageReader>::New();

	reader->SetFileName("C:\\Users\\HuangWang\\Desktop\\Head_256x256x256.raw");
	reader->SetFileDimensionality(3);//设置显示图像的维数
	reader->SetDataScalarType(VTK_UNSIGNED_CHAR);//VTK_UNSIGNED_short将数据转换为unsigned char型
	reader->SetDataExtent(0, 255, 0, 255, 0, 255);
	reader->SetDataSpacing(0.9, 0.9, 0.9); //设置像素间间距
	reader->SetDataOrigin(0.0, 0.0, 0.0);//设置基准点,(一般没有用)做虚拟切片时可能会用的上
	reader->Update();

	vtkSmartPointer<vtkImageCast> readerImageCast = vtkSmartPointer<vtkImageCast>::New();//数据类型转换  
	readerImageCast->SetInputConnection(reader->GetOutputPort());  
	readerImageCast->SetOutputScalarTypeToUnsignedChar();  
	readerImageCast->ClampOverflowOn();//阀值 

	vtkSmartPointer<vtkMarchingCubes>marchingcube=vtkSmartPointer<vtkMarchingCubes>::New();  
	marchingcube->SetInput((vtkDataObject*)readerImageCast->GetOutput());  
	//marchingcube->SetInputConnection(Reader->GetOutputPort());      //第二种读取数据的方法  
	marchingcube->SetValue(0,160);    

	vtkSmartPointer<vtkStripper>Stripper=vtkSmartPointer<vtkStripper>::New();  
	Stripper->SetInput( marchingcube->GetOutput());   

	vtkSmartPointer<vtkPolyDataMapper>polyMapper=vtkSmartPointer<vtkPolyDataMapper>::New();  
	polyMapper->SetInput(Stripper->GetOutput());  
	polyMapper->ScalarVisibilityOff();  

	vtkSmartPointer<vtkActor>actor=vtkSmartPointer<vtkActor>::New();  
	actor->SetMapper(polyMapper);  
	actor->GetProperty()->SetDiffuseColor(1,0.19,0.15);  
	actor->GetProperty()->SetSpecular(0.1);  
	actor->GetProperty()->SetSpecularPower(10);  
	actor->GetProperty()->SetColor(1,0,0);  

	vtkSmartPointer<vtkOutlineFilter>outlinefilter=vtkSmartPointer<vtkOutlineFilter>::New();  
	outlinefilter->SetInputConnection(reader->GetOutputPort());  

	vtkSmartPointer<vtkPolyDataMapper>outlineMapper=vtkSmartPointer<vtkPolyDataMapper>::New();  
	outlineMapper->SetInputConnection(outlinefilter->GetOutputPort());  

	vtkSmartPointer<vtkActor>outlineActor=vtkSmartPointer<vtkActor>::New();  
	outlineActor->SetMapper(outlineMapper);  
	outlineActor->GetProperty()->SetColor(0,0,0);  

	
	ren->AddActor(actor);  
	ren->AddActor(outlineActor);  
	ren->SetBackground(1,1,1);  
	renWin->SetSize(640,640);  
	iren->Initialize();  
	iren->Start(); 
	ren->ResetCameraClippingRange();  
	 
}

 

raw测试文件可进入我的个站进行下载:https://www.stubbornhuang.com/448/

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值