文档章节

VTK 实现MarchingCube Activiz

小王爷_2019
 小王爷_2019
发布于 2015/11/27 14:12
字数 246
阅读 209
收藏 0
   public partial class Form1 : Form
    {

        #region 私有成员
        private string _fileName = null;
        private vtkRenderer render = null;
        private vtkRenderWindow renwin = null;
        private vtkRenderWindowInteractor iren = null;
        private vtkDICOMImageReader reader = null;
        private vtkContourFilter skinExtractor = null;
      
        #endregion

        #region
        public string FileName
        {
            get { return _fileName; }
            set { _fileName=value;}
        }
        #endregion


        public Form1()
        {
            InitializeComponent();
        }

        private void renderWindowControl1_Load(object sender, EventArgs e)
        {
             render = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
             renwin = renderWindowControl1.RenderWindow;
             iren = renderWindowControl1.RenderWindow.GetInteractor();
        
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            btn_render.Enabled = false;
            _fileName = null;
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                _fileName= dlg.SelectedPath;
            }
            dlg.Dispose();
            btn_render.Enabled = true;
        }

        private void btn_render_Click(object sender, EventArgs e)
        {       


            if(String.IsNullOrEmpty(_fileName))
            {
                MessageBox.Show("请先指定文件夹路径!");
                return;
            }
            //还需要修改,可以将这一部分抽取出来做一个单独的方法。
            if (reader != null)
            {
                reader.Dispose();
                skinExtractor.Dispose();//需要修正
                render.RemoveAllViewProps();
                render.ResetCamera();

            }
            
            reader = new vtkDICOMImageReader();
            reader.SetDataByteOrderToLittleEndian();
            //reader.SetDirectoryName(@"E:\decompress");
            reader.SetDirectoryName(_fileName);
            reader.Update();


            skinExtractor = vtkContourFilter.New();
            skinExtractor.SetInputConnection(reader.GetOutputPort());
            skinExtractor.SetValue(0, 200);//200
            //skinExtractor.Modified();
            //skinExtractor.SetValue(1, 500);

            vtkPolyDataNormals skinNormals = vtkPolyDataNormals.New();
            skinNormals.SetInputConnection(skinExtractor.GetOutputPort());
            skinNormals.SetFeatureAngle(60.0);//?

            vtkPolyDataMapper skinmapper = vtkPolyDataMapper.New();
            skinmapper.SetInputConnection(skinNormals.GetOutputPort());

            skinmapper.ScalarVisibilityOff();
            vtkActor skin = new vtkActor();
            skin.SetMapper(skinmapper);

            vtkOutlineFilter outLineData = vtkOutlineFilter.New();
            outLineData.SetInputConnection(reader.GetOutputPort());
            vtkPolyDataMapper outlinemapper = vtkPolyDataMapper.New();

            outlinemapper.SetInputConnection(outLineData.GetOutputPort());

            vtkActor outline = vtkActor.New();
            outline.SetMapper(outlinemapper);
            outline.GetProperty().SetColor(0, 0, 0);

            vtkCamera acamera = render.GetActiveCamera();
            acamera.SetViewUp(0, 0, -1);
            acamera.SetPosition(0, 1, 0);
            acamera.SetFocalPoint(0, 0, 0);
            acamera.ComputeViewPlaneNormal();

            render.AddActor(outline);
            render.AddActor(skin);
            render.ResetCamera();
            acamera.Dolly(1.5);

            render.SetBackground(1, 1, 1);

            render.ResetCameraClippingRange();
            renwin.Render();
            iren.Initialize();
            iren.Start();
            
        }


    }


© 著作权归作者所有

共有 人打赏支持
小王爷_2019
粉丝 14
博文 31
码字总数 35373
作品 0
海淀
程序员
私信 提问
VTK实现Reslice

参考水灵大神的代码编写的,将其改为在C#下,用activiz实现。 大神的源码在这里: http://blog.csdn.net/wwwdolingnet/article/details/8551523 在c#中,有些VTK的功能不支持,所以需要自己改...

小王爷和老王爷
2015/11/27
247
0
Activiz 使用笔记-3 数据源(1)

activiz本身自带的user guide 比较简单,所以我按着vtk的user guide来慢慢学。从简单例子入手去学习VTK。当然我之前已经看过很多VTK相关的东西了,但是没有自己去写去总结,导致我一段时间不...

小王爷和老王爷
2015/09/07
230
0
VTK 实现MinIP Activiz

public partial class Form1 : Form { #region 私有变量 private Kitware.VTK.vtkRenderer render = null; private Kitware.VTK.vtkRenderWindow renWin = null; private Kitware.VTK.vtkRen......

小王爷和老王爷
2015/11/27
67
0
Activiz 使用笔记-4 数据源(2)

上一篇写了一些数据源的生成或者读取方法。下面开始严肃的讲一下VTK中的数据集,虽然感觉有时候不会直接去用,但是感觉这个是基础,所以要先看。 直接看《VTK用户手册》的第44页 3.1 可视化v...

小王爷和老王爷
2015/11/24
124
0
Activiz 使用笔记 (6) 图像数据及其处理

http://image.szpt.edu.cn/UploadFiles/%E5%9B%BE%E5%83%8F%E6%95%B0%E6%8D%AE%E5%8F%8A%E5%85%B6%E5%A4%84%E7%90%86.swf 图像数据集用类vtkImageData表示。其结构与结构化点数据集是一样的,......

小王爷和老王爷
2015/11/26
99
0

没有更多内容

加载失败,请刷新页面

加载更多

table边框样式

table{ border:0.5px solid #000; border-collapse:collapse; //去除边框间空隙}th,td{ border:0.5px solid #000;}...

学霸猫
22分钟前
1
0
分布式消息通讯Kafka原理分析(二)

本章重点: 1.消息的存储原理2.Partition的副本机制原理3.副本数据同步原理 消息的文件存储机制 通过如 下命令找到对应partition下的日志内容 [root@localhost ~]# ls /tmp/kafka-logs/f...

须臾之余
27分钟前
1
0
Vue Element表单绑定(四)常用操作整理

一、启用回车提交报单操作 在登录页面,使用回车提交表单操作一般是必要的一个操作。在 Element中如何使用呢,示例如下: 来个注意点: 1.button按钮的native-type设置为submit,而不是绑定c...

tianma3798
31分钟前
1
0
《大话数据结构》读后总结(七)

常见的时间复杂度 执行次数 函数阶 非正式术语 12 O(1) 常数阶 2n+3 O(n) 线性阶 3n^2+2n+1 O(n2) 平方阶 5log2n+20 O(logn) 对数阶 2n+3nlog2n+19 O(nlogn) nlogn阶 6n^3+2n^2+3n+4 O(n3) 立...

徐曙辉
33分钟前
0
0
three.js 事件交互

点击查看交互效果 在three.js中,展示的一切内容都是在canvas中绘制的,所以点击事件点击到物体上是无法获取点击对象的,要获取点击的对象要使用RayCaster,用于在三维空间中进行鼠标拾取,原...

tianyawhl
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部