参考:

代码是在vtk560环境下写出来的。下面直接贴代码:

using vtk;

namespace dicomorientationtest

{

public partial class Form1 : Form

{

#region 私有成员

private vtk.vtkFormsWindowControl vtkFormsWindowControl1 = null;

private vtk.vtkDICOMImageReader _reader = null;

private vtk.vtkVolume _vtkVolume = null;

private vtk.vtkRenderer _render = null;

private vtk.vtkGenericRenderWindowInteractor _iren = new vtk.vtkGenericRenderWindowInteractor();

private vtk.vtkRenderWindow _renwin = null;

private vtk.vtkFollower textActor;

#endregion

#region 属性

public string FileDir

{

get;

set;

}

#endregion

public Form1()

{

InitializeComponent();

InitRenderWindow();

}

private void InitRenderWindow()

{

this.vtkFormsWindowControl1 = new vtkFormsWindowControl();

this.SuspendLayout();

this.vtkFormsWindowControl1.Name = "vtkFormsWindowControl1";

this.vtkFormsWindowControl1.Size = new System.Drawing.Size(800, 800);

this.vtkFormsWindowControl1.TabIndex = 0;

this.Location = new System.Drawing.Point(10, 10);

this.vtkFormsWindowControl1.Text = "vtkFormsWindowControl1";

this.Controls.Add(vtkFormsWindowControl1);

}

private void btn_Open_Click(object sender, EventArgs e)

{

FolderBrowserDialog dlg = new FolderBrowserDialog();

if (DialogResult.OK == dlg.ShowDialog())

{

FileDir = dlg.SelectedPath;

}

}

private void btn_render_Click(object sender, EventArgs e)

{

if (!String.IsNullOrEmpty(FileDir))

{

_render = new vtkRenderer();

#region dicom

_reader = new vtkDICOMImageReader();

_reader.SetDirectoryName(FileDir);

_reader.SetDataByteOrderToLittleEndian();

_reader.Update();

int[] dimensions = _reader.GetOutput().GetDimensions();

#region opacity transfer

vtkPiecewiseFunction compositeOpacity = new vtkPiecewiseFunction();

compositeOpacity.AddPoint(-2048, 0);

compositeOpacity.AddPoint(128.643, 0);

compositeOpacity.AddPoint(129.982, 0.0982143);

compositeOpacity.AddPoint(173.636, 0.1);

compositeOpacity.AddPoint(255.884, 0.1);

compositeOpacity.AddPoint(3661, 1);

//compositeOpacity.AddPoint(173.636, 0);

//compositeOpacity.AddPoint(255.884, 0);

//compositeOpacity.AddPoint(3661, 0);

#endregion

#region colortransfer

vtkColorTransferFunction colorFun = new vtkColorTransferFunction();

colorFun.AddRGBPoint(-2048, 0, 0, 0);

colorFun.AddRGBPoint(128.643, 0, 0, 0);

colorFun.AddRGBPoint(129.982, 0.615686, 0, 0.0156863);

colorFun.AddRGBPoint(173.636, 0.909804, 0.454902, 0);

colorFun.AddRGBPoint(255.884, 0.886275, 0.886275, 0.886275);

colorFun.AddRGBPoint(584.878, 0.968627, 0.968627, 0.968627);

colorFun.AddRGBPoint(3661, 1, 1, 1);

#endregion

vtkVolumeProperty property = new vtkVolumeProperty();

property.ShadeOff();

property.SetInterpolationTypeToLinear();

property.SetColor(colorFun);

property.SetScalarOpacity(compositeOpacity);

property.SetDiffuse(0.9);

property.SetAmbient(0.1);

property.SetSpecular(0.2);

property.SetSpecularPower(10.0);

double[] range = _reader.GetOutput().GetScalarRange();

double min = range[0];

double max = range[1];

double diff = max - min;

double slope = 4095.0 / diff;//斜率

double inter = -slope * min;//截距

double shift = inter / slope;

vtkImageShiftScale vtkImageCast = new vtkImageShiftScale();

vtkImageCast.SetInput(_reader.GetOutput());

vtkImageCast.SetScale(slope);

vtkImageCast.SetShift(shift);

vtkImageCast.SetOutputScalarTypeToUnsignedShort();

vtkImageCast.Update();

vtkVolumeRayCastCompositeFunction compositefunction = new vtkVolumeRayCastCompositeFunction();

compositefunction.SetCompositeMethodToInterpolateFirst();

vtkVolumeRayCastMapper mapper = new vtkVolumeRayCastMapper();

mapper.SetVolumeRayCastFunction(compositefunction);

mapper.SetInput(vtkImageCast.GetOutput());

mapper.SetSampleDistance(0.1);

vtkVolume volume = new vtkVolume();

volume.SetMapper(mapper);

volume.SetProperty(property);

_render.AddViewProp(volume);

#endregion

#region axes

double[] space = _reader.GetOutput().GetSpacing();

Console.WriteLine("spacing[0]={0},[1]={1},[2]={2}", space[0], space[1], space[2]);

int[] extents = _reader.GetOutput().GetExtent();

Console.WriteLine("extents[0]={0},[1]={1},[2]={2},[3]={3},[4]={4},[5]={5}",

extents[0], extents[1], extents[2], extents[3], extents[4], extents[5]);

vtkTransform transform = new vtkTransform();

transform.Translate(0.0, 0.0, 0.0);

transform.Scale((extents[1]) * (space[0]), (extents[3]) * (space[1]), (extents[5]) * (space[2]));

vtkAxesActor axes = new vtkAxesActor();

axes.SetUserTransform(transform);

_render.AddActor(axes);

#endregion

#region  text

double scalesize=(extents[1]) * (space[0])/20;

//原点

vtkVectorText otext = new vtkVectorText();

otext.SetText("O");

vtkPolyDataMapper textMapper = new vtkOpenGLPolyDataMapper();

textMapper.SetInputConnection(otext.GetOutputPort());

textActor = new vtkFollower();

textActor.SetMapper(textMapper);

textActor.SetScale(scalesize,scalesize,scalesize);

textActor.AddPosition(0, -0.1, 0);

textActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(textActor);

//左 L

vtkVectorText lText = new vtkVectorText();

lText.SetText("L");

vtkPolyDataMapper lMapper = new vtkOpenGLPolyDataMapper();

lMapper.SetInputConnection(lText.GetOutputPort());

vtkFollower lActor = new vtkFollower();

lActor.SetMapper(lMapper);

lActor.SetScale(scalesize,scalesize,scalesize);

lActor.GetProperty().SetColor(0,1,0);

lActor.AddPosition((extents[1] * space[0])+10, (extents[3] * space[1]) / 2, (extents[5] * space[2]) / 2);

lActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(lActor);

//右 R

vtkVectorText rText = new vtkVectorText();

rText.SetText("R");

vtkPolyDataMapper rMapper = new vtkOpenGLPolyDataMapper();

rMapper.SetInputConnection(rText.GetOutputPort());

vtkFollower rActor = new vtkFollower();

rActor.SetMapper(rMapper);

rActor.SetScale(scalesize, scalesize, scalesize);

rActor.GetProperty().SetColor(1, 0, 0);

rActor.AddPosition(-10, (extents[3] * space[1]) / 2, (extents[5] * space[2]) / 2);

rActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(rActor);

//前 A

vtkVectorText aText = new vtkVectorText();

aText.SetText("A");

vtkPolyDataMapper aMapper = new vtkOpenGLPolyDataMapper();

aMapper.SetInputConnection(aText.GetOutputPort());

vtkFollower aActor = new vtkFollower();

aActor.SetMapper(aMapper);

aActor.SetScale(scalesize, scalesize, scalesize);

aActor.GetProperty().SetColor(0, 1, 0);

aActor.AddPosition((extents[1] * space[0]) / 2, (extents[3] * space[1])+10, (extents[5] * space[2]) / 2);

aActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(aActor);

//后 P

vtkVectorText pText = new vtkVectorText();

pText.SetText("P");

vtkPolyDataMapper pMapper = new vtkOpenGLPolyDataMapper();

pMapper.SetInputConnection(pText.GetOutputPort());

vtkFollower pActor = new vtkFollower();

pActor.SetMapper(pMapper);

pActor.SetScale(scalesize, scalesize, scalesize);

pActor.GetProperty().SetColor(1, 0, 0);

pActor.AddPosition((extents[1] * space[0]) / 2, -10, (extents[5] * space[2]) / 2);

pActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(pActor);

//头 H

vtkVectorText hText = new vtkVectorText();

hText.SetText("H");

vtkPolyDataMapper hMapper = new vtkOpenGLPolyDataMapper();

hMapper.SetInputConnection(hText.GetOutputPort());

vtkFollower hActor = new vtkFollower();

hActor.SetMapper(hMapper);

hActor.SetScale(scalesize, scalesize, scalesize);

hActor.GetProperty().SetColor(0, 1, 0);

hActor.AddPosition((extents[1] * space[0]) / 2,(extents[3] * space[1]) / 2,-10 );

hActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(hActor);

//脚 F

vtkVectorText fText = new vtkVectorText();

fText.SetText("F");

vtkPolyDataMapper fMapper = new vtkOpenGLPolyDataMapper();

fMapper.SetInputConnection(fText.GetOutputPort());

vtkFollower fActor = new vtkFollower();

fActor.SetMapper(fMapper);

fActor.SetScale(scalesize, scalesize, scalesize);

fActor.GetProperty().SetColor(0, 1, 0);

fActor.AddPosition((extents[1] * space[0]) / 2, (extents[3] * space[1]) / 2, (extents[5] * space[2])+10);

fActor.SetCamera(_render.GetActiveCamera());

_render.AddViewProp(fActor);

#endregion

_render.ResetCamera();

vtkFormsWindowControl1.GetRenderWindow().AddRenderer(_render);

_renwin = vtkFormsWindowControl1.GetRenderWindow();

_renwin.AddRenderer(_render);

_renwin.Render();

}

else

{

MessageBox.Show("请先选定文件夹!");

}

}

}

}

效果图:

vtkdelaunay3d的参数设置_VTK 渲染体数据并加方位标注相关推荐

  1. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

    文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...

  2. jmeter的java请求参数设置_Jmeter中json数据参数化、断言设置

    第一步:光标定位到测试计划上,右键菜单"添加" -> Threads(users) -> 线程组,如下图 第二步: 光标定位到线程组,右键菜单选择 "添加&q ...

  3. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  4. 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )

    文章目录 一. 时钟相关概念解析 1. 相关概念术语 ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 ) ( 2 ...

  5. Jdbc访问mysql查询聚合函数_JDBC连接参数设置对Oracle数据库的影响分析

    一次数据库性能问题处理引发的JDBC参数设置思考 近期某环境下系统,出现大面积页面访问缓慢情况,每个页面交易响应时间2-5秒,严重超过平日访问阈值. 经排查分析,问题主要出现在数据库,生成AWR得到3 ...

  6. sklearn逻辑回归参数设置_【机器学习笔记】:逻辑回归实战练习(二)

    作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 前言 前几篇介绍了逻辑回归在机器学习中的重要性:5个原因告诉你:为什么在成为数据科学家之前,"逻辑回归&q ...

  7. 聚类方法:DBSCAN算法研究(1)--DBSCAN原理、流程、参数设置、优缺点以及算法

    DBSCAN聚类算法三部分: 1.        DBSCAN原理.流程.参数设置.优缺点以及算法: http://blog.csdn.net/zhouxianen1987/article/detai ...

  8. CAN总线的位时序与参数设置

    CAN总线的位时序与参数设置 CAN的位时序构成 CAN总线的每个位(Bit)的周期 Tbit = 1 / Baudrate.根据CAN规范,每个位的时间内又可细分成4段: 同步段(Synchroni ...

  9. layui进度条:调用、参数设置、动态渲染、数据热更新 (含案例、代码)

    文章目录 layui进度条:调用.参数设置.动态渲染.数据热更新 (含案例.代码) 一.demo案例 1.1. 应用 · 截图: 1.2. 案例 · 全部代码: 二.自定义案例 2.1. 部分代码: ...

  10. x264中重要结构体参数解释,参数设置,函数说明

    x264中重要结构体参数解释 http://www.usr.cc/thread-51995-1-3.html x264参数设置 http://www.usr.cc/thread-51996-1-3.h ...

最新文章

  1. WIN7 任务栏放右侧 有个BUG
  2. CentOS 6.7 RPM安装MySQL
  3. python【蓝桥杯vip练习题库】ADV-104打水问题
  4. 【数据结构】——堆排序
  5. Google搜索语法
  6. EJB3.0学习笔记---定义客户端访问接口:
  7. hdu 1698 线段树成段更新
  8. 团队作业2 需求分析与原型设计
  9. 也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
  10. Composite UI Application Block(CAB)
  11. webpack配置babel-loader
  12. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_04-新增页面-服务端-接口开发...
  13. java isbn_ISBN(国际标准书号)的校验
  14. Git:rebase 是什么
  15. 双11商超大促,竞争白热化,智慧供应链成品牌最大助力!
  16. Uniapp微信小程序视频全屏播放功能极简实现法
  17. 简述c语言中break的作用,c语言break什么意思?
  18. 大二Web课程设计期末考试——基于HTML+CSS+JavaScript+jQuery电商类化妆品购物商城
  19. 大学物理实验报告 迈克尔逊干涉 and 三棱镜衍射
  20. Opencv4 CV_LOAD_IMAGE_GRAYSCALE找不到解决方法

热门文章

  1. C语言程序设计基础篇
  2. c# 使用winform内嵌浏览器
  3. 兄弟HL-1118加粉清零
  4. MyBatis【钢镚核恒】
  5. 共轭梯度法(CG)详解
  6. 2013职称计算机试题,2013年职称计算机Word试题及答案(三)
  7. cad导出pdf_CAD如何导出高分辨率图片
  8. 真北方向、坐标北向以及磁北向
  9. java 对象转json忽略某个属性
  10. 最新华为悦盒V9_V9U_V9E_V9A_V8通用傻瓜式破解