三维程序设计中,通常会在控件窗口中设置和显示坐标轴系线,方便操作和使用。VTY库中提供vtkAxesActor类,方便用户快捷实现三维坐标的实现。效果如下:

C#核心代码如下:
vtkAxesActor axesActor = vtkAxesActor.New(); // 创建“坐标”角色
render1.AddActor(axesActor); // 渲染坐标角色
说明:
1.坐标原点位于世界坐标系的(0,0,0)点。
2. 坐标自带箭头和默认颜色、大小。
3.坐标对象自带带告示板效果的“X”,“Y”和“Z”。
4.坐标轴会自动与视点控件联动(不需要另外编程)。
5.可通过vtkTransform类的设定,移动、旋转和缩放坐标轴。
6.可通过设定 vtkAxesActor的属性改变坐标轴颜色等属性。
提供renderWindowControl1的Load事件C#源代码,供大家调试使用。请特别注意坐标轴的旋转和缩放参数的设置,这可能导致坐标轴变形。
 private void renderWindowControl1_Load(object sender, EventArgs e)
        {
            // 1.Create a simple sphere. A pipeline is created.
            // 1.新建球体,创建“管道pipeline”。
            //  --- 1.1 新建数据--“数据源Source”---
            //      (1)球体
            vtkSphereSource sphere = vtkSphereSource.New();      // 新建球
            sphere.SetThetaResolution(8);                        // 设置球纬度参数
            sphere.SetPhiResolution(16);                         // 设置球经度参数
            sphere.SetRadius(0.1);                               // 设置球的半径     
            //      (2)柱体
            vtkCylinderSource cylinder = vtkCylinderSource.New();
            cylinder.SetHeight(1.0);
            cylinder.SetRadius(0.05);
            cylinder.SetResolution(10);
            //      (3)3D文字
            vtkVectorText text3D = new vtkVectorText();
            text3D.SetText("VTK");
            
            //  --- 1.2 数据加工 -- "过滤器Filter" -- 收缩 ---
            vtkShrinkPolyData shrink = vtkShrinkPolyData.New();  // 新建数据收缩操作器
            shrink.SetInputConnection(sphere.GetOutputPort());   // 连接管道
            shrink.SetShrinkFactor(1.0);                         // 收缩“面”操作  
            
            //  --- 1.3 数据制图 -- "制图器Mapper" ---
            //      (1)球体
            vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New();    // 新建制图器
            sphereMapper.SetInputConnection(shrink.GetOutputPort());     // 连接管道
            //      (2)柱体
            vtkPolyDataMapper cylinderMapper = vtkPolyDataMapper.New();   // 新建制图器
            cylinderMapper.SetInputConnection(cylinder.GetOutputPort());  // 连接管道
            //      (3)3D文字
            vtkPolyDataMapper text3DMapper = vtkPolyDataMapper.New();
            text3DMapper.SetInputConnection(text3D.GetOutputPort());
            // 2.The actor links the data pipeline to the rendering subsystem
            // 2.创建“角色Actor”,连接“管道pipeline”和“渲染系统rendering subsystem”
            // --- 2.1 新建角色--“角色Actor”---
            //     (1)球体
            vtkActor sphereActor = vtkActor.New();                    // 新建角色
            sphereActor.SetMapper(sphereMapper);                      // 传递制图器
            sphereActor.GetProperty().SetColor(1, 0, 0);              // 设置“角色”颜色[RGB]
            //     (2)柱体
            vtkActor cylinderActor = vtkActor.New();                    // 新建角色
            cylinderActor.SetMapper(cylinderMapper);                    // 传递制图器
            cylinderActor.GetProperty().SetColor(0, 1, 0);              // 设置“角色”颜色[RGB]
          vtkTransform transform = vtkTransform.New();   // 空间变换对象
            transform.PostMultiply();                                           // 设置右乘变换矩阵
            transform.RotateX(60);                                               // 绕X轴旋转60度
            transform.RotateZ(30);                                               // 绕Z轴旋转30度
            //transform.Scale(2.0, 1.0, 1.0);                                  // 沿X个方向放大2倍
            transform.Translate(2.0, 0.0, 0.0);                               // 沿X轴移动2.0个单位
cylinderActor.SetUserTransform(transform); // 柱体空间变换
            //      (3)3D文字
            vtkFollower text3DActor = new vtkFollower();
            text3DActor.SetMapper(text3DMapper);
            text3DActor.SetScale(0.3, 0.3, 0.5);                      // 大小
            text3DActor.AddPosition(0, 0, 0);                         // 位置(文字左下角坐标)
            text3DActor.GetProperty().SetColor(0.0, 1.0, 0.0);        // 颜色
            //     (4)坐标轴
            vtkAxesActor axesActor = vtkAxesActor.New();     // 创建坐标轴角色
           axesActor.SetUserTransform(transform);                 // 设置 坐标轴移动、旋转和缩放
            
            //      2.2 Create components of the rendering subsystem
            // --- 2.2 创建渲染--“渲染系统rendering subsystem”---
            //          (1)新建“渲染器Renderer”和“渲染窗口RenderWindow”
            //          renderWindowControl1控件提供“渲染窗口” 
            //vtkRenderer ren1 = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
            vtkRenderer render1 = vtkRenderer.New();       // 新建渲染器
            vtkRenderWindow renWin = renderWindowControl1.RenderWindow;
            renWin.AddRenderer(render1);                   // 添加渲染器 
          
            //         Add the actors to the renderer, set the window size
            //         (2)将“角色Actor”添加到“渲染器Renderer”并渲染
            render1.AddActor(cylinderActor);
            render1.AddActor(sphereActor);
            //render1.AddActor(text3DActor);
            text3DActor.SetCamera(render1.GetActiveCamera());
            render1.AddViewProp(text3DActor);
render1.AddActor(axesActor); // 渲染坐标轴角色
render1.SetBackground(0.0, 0.0, 0.0); //设置背景颜色
            renWin.Render();                               // 渲染渲染窗口
            //renWin.Start();
            //         (3)设置"相机Camera"
            vtkCamera camera = render1.GetActiveCamera();   // 新建相机
            camera.Zoom(1.0);                               // 相机缩放
        }
 
  
  
  
 
 
  
 
 
 