使用C#开发VTK笔记(三)-使用VTK创建可视化界面和简单点线面体模型

一.使用VTK创建可视化界面

1.创建C#可视化界面

  1. 使用Visual Studio 2022用.net 8.0创建窗体应用
    )
  2. 放入两个水平分割的Panel左侧演示VTK 右侧放按钮
    在这里插入图片描述
  3. 按照第一章节环境搭建的步骤,加入对应Kitware的dll并导入依赖
    在这里插入图片描述

2.初始化Vtk窗口

  1. 引用Kitware.VTK,Form1_Load中,创建渲染窗口控件renderWindowControl并加入窗口Panel的Controls中。 获取窗口的第一个渲染器到render,设置好背景颜色SetBackground。启动窗体,就显示Vtk窗口了。
    这里背景色可以SetBackground和SetBackground2组合设置一个渐变色。
using Kitware.VTK;
namespace VtkPlatform
{
   
    public partial class Form1 : Form
    {
   
        //初始化并创建静态变量控件renderWindowControl避免被系统进程kill
        public static Kitware.VTK.RenderWindowControl xRenderWindowControl=new RenderWindowControl() ;     
        public Form1()
        {
   
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
   
            this.splitContainer1.Panel1.Controls.Add(xRenderWindowControl);
            vtkRenderer xRenderer = xRenderWindowControl.RenderWindow.GetRenderers().GetFirstRenderer();
            xRenderer.SetBackground(0, 0.5, 0);
        }
        public vtkRenderer GetVtkRenderer()
        {
   
            vtkRenderer Renderer = xRenderWindowControl.RenderWindow.GetRenderers().GetFirstRenderer();
            return Renderer;
        }
        private void button1_退出_Click(object sender, EventArgs e)
        {
   
            this.Dispose();
        }
    }
}

显示窗口:
在这里插入图片描述

  1. 设置坐标系和操作类
    通过vtkAxesActor 创建坐标轴的Actor,并设置长度,形状,位置后加入Renderer,坐标轴就显示了。
 //创建坐标轴
 vtkAxesActor axes = vtkAxesActor.New();      
 axes.SetXAxisLabelText("X");
 axes.SetYAxisLabelText("Y");
 axes.SetZAxisLabelText("Z");
 axes.SetTotalLength(10, 10, 10);  //设置箭头长度
 axes.SetShaftTypeToCylinder();// 设置箭头形状
 //在3维坐标系中设置各轴的长度。
 axes.SetOrigin(0, 0, 0);
 //axes.AxisLabelsOff();
 //禁用绘制轴标签。
 xRenderer.AddActor(axes);
 vtkCamera camera = xRenderer.GetActiveCamera();
 //camera.Zoom(1.5);
 xRenderer.ResetCamera();

并且这个轴系自带了交互功能,生成以后,就可以进行平移,旋转,缩放了。
在这里插入图片描述

二.使用VTK创建简单点线面体模型

2.1 创建一个点

这里需要注意的是,点实际是由一个vtkPoints创建的,然后需要进一步实例化为Polydata也就是VTK的基本对象之一,由点Point,顶点Vert,直线Line,多折线Polyline,面plane,三角带(triangle strip),多边形等显示组成,具体规范的分类可以查看手册及OpenGL定义。
创建一个点,就需要vtkPoints对象增加一个点,同时新建一个vtkCellArray队列,每增加一个点,vtkCellArray要步进1格,并将PointId放进去。
创建PolyData后,设置点集合SetPoints,设置顶点集合SetVerts。这里只有一个点就比较简单了。
vMapper.SetInputData(polyData); Mapper这里输入的是PolyData,是因为我们构建了PolyData类型的数据进行输入,下面可以看到还可以用其它形式。
创建PolyData流程:
在这里插入图片描述

  private void btn_创建一个点_Click(object sender, EventArgs e)
  {
   
      vtkRenderer xRenderer = GetVtkRenderer();
      vtkPoints vPoints = new vtkPoints();
      vtkCellArray vCellArray = new vtkCellArray();

      //插入点,1是序号,后面是xyz
      //vtkPoints可以放很多点,不管是一个还是多个,都要转换为PolyData的Vert顶点才能显示
      long PointId1 = vPoints.InsertNextPoint(0, 0, 20);
      //顶点序列以1步进
      vCellArray.InsertNextCell(1);
      vCellArray.InsertCellPoint(PointId1);
    
      vtkPolyData polyData = new vtkPolyData();
      polyData.SetPoints(vPoints);
      polyData.SetVerts(vCellArray);

      vtkPolyDataMapper vMapper = new vtkPolyDataMapper();
      vMapper.SetInputData(polyData);
      vtkActor vptActor = new vtkActor();

      vptActor.GetProperty().SetColor((float)255 / 255, (float)255 / 255, (float)0 / 255);
      vptActor.GetProperty().SetPointSize(10);
      vptActor.SetMapper(vMapper);
      xRenderer.AddActor(vptActor);
      xRenderer.ResetCamera();
      xRenderer.GetRenderWindow().Render();
      MessageBox.Show("创建完成!");
  }

创建完成后,显示效果如下:
在这里插入图片描述

2.2 创建多个点

了解了怎么创建一个点,就很容易创建多个点,也就是多增加几个点就行了。
这里为提现多个点的可扩充性,使用坐标数列为输入,这样一次性输入n个点也是一样显示的。

  private void btn_创建多个点_Click(object sender, EventArgs e)
  {
   
      vtkRenderer xRenderer = GetVtkRenderer();
      vtkPoints vPoints = new vtkPoints();
      vtkCel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zeng31403

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

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

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

打赏作者

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

抵扣说明:

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

余额充值