2020-10-19 activiz(VTK c#包)自定义鼠标交互(二)

  1. 相机回到原点
    通过单击右键使相机回到初始的平面图位置。
style.RightButtonPressEvt += new vtkObject.vtkObjectEventHandler(OriginMoveEvt);
void OriginMoveEvt(vtkObject sender, vtkObjectEventArgs e)
{
    m_camera.SetPosition(0, 0, 0);
    m_camera.SetFocalPoint(0, 0, -1); //z-
    m_camera.SetViewUp(-1, 0, 0);
    //设置窗口中点 只有平移后回到原点需要该函数 其余视角转换可不需要
    m_camera.SetWindowCenter(0, 0); 
    render1.ResetCamera();
    renWin.Render();
}
  1. 左键拖动平移物体
    下面采用移动窗口中点的方法来实现。分为三个部分,点击左键、鼠标移动和放开左键。
style.LeftButtonPressEvt += new vtkObject.vtkObjectEventHandler(interactor_LeftButtonDownEvt);
style.LeftButtonReleaseEvt += new vtkObject.vtkObjectEventHandler(interactor_LeftButtonRealeaseEvt);
style.MouseMoveEvt += new vtkObject.vtkObjectEventHandler(interactor_MouseMoveEvt);

点击左键需要记录当前的鼠标位置、窗口大小和窗口中点位置。还设置了一个布尔数来判断左键是否正在按下,避免其他时候运行该事件。(此处最开始把记录窗口位置放在鼠标移动事件里了,结果出现了类似于加速运动的效果,原因是随鼠标移动窗口中点在移动,形成了一种二次方程)

 public int[] clickPos;
 public int[] clickPos2;
 public int[] winSize;
 bool isDown;
 public double[] curWindowCenter;
 void interactor_LeftButtonDownEvt(vtkObject sender, vtkObjectEventArgs e)
 {
     clickPos = renWin.GetInteractor().GetEventPosition();
     winSize = renWin.GetSize();
     isDown = true;
     curWindowCenter = m_camera.GetWindowCenter();
     return;  //退出 也可不用加
  }

鼠标移动。窗口中心范围是[-1,1],因此归一化之后需要×2才能随鼠标移动。

void interactor_MouseMoveEvt(vtkObject sender, vtkObjectEventArgs e)
{
     if (isDown == true) 
     {
         clickPos2 = renWin.GetInteractor().GetEventPosition();    
         //归一化 缺了数据转换的话全是0
         double[] disMove = new double[] { Convert.ToDouble(clickPos2[0] - clickPos[0]) / winSize[0], Convert.ToDouble(clickPos2[1] - clickPos[1]) / winSize[1] };
         m_camera.SetWindowCenter(curWindowCenter[0] - disMove[0]*2, curWindowCenter[1] - disMove[1]*2);
        renWin.Render();
     }
}

左键放开,将isDown归0。

void interactor_LeftButtonRealeaseEvt(vtkObject sender, vtkObjectEventArgs e)
{
    isDown = false;
}
Activiz是一个用于VTK(Visualization Toolkit)的C#封装库,它提供了一种更简单、更直观的方式来使用VTK进行数据可视化和图形渲染。 Activiz的主要特点之一是它提供了一个面向对象的编程风格,使得使用VTK更加容易和灵活。通过Activiz,我们可以方便地创建和操纵VTK中的各种对象,如点、线、面、体等,以及进行相应的属性设置和变换操作。同时,Activiz还提供了丰富的渲染和交互功能,例如窗口显示、相机控制、光照效果等,可以帮助用户快速构建出高质量的可视化效果。 使用Activiz进行VTK编程,首先需要引入Activiz库,并创建一个VTK场景对象。然后,可以根据需求创建各种几何体,并设置它们的属性,如颜色、透明度、纹理等。接下来,可以将这些几何体添加到场景中,通过渲染窗口进行可视化展示。此外,Activiz还提供了许多其他的功能,如体积渲染、动画效果、剖面显示等,可以满足不同的可视化需求。 通过Activiz,我们可以更加方便地利用VTK进行科学可视化和图像处理,尤其适用于需要快速开发原型和迭代设计的情况。同时,Activiz还具有跨平台的特性,可以在Windows、Linux和Mac等操作系统上运行,使得代码的可移植性更高。 总之,Activiz是一个非常有用的工具,可以帮助用户更加高效地使用VTK进行数据可视化和图形渲染。无论是科学研究、工程分析还是教育培训,都可以从中受益。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值