vtk学习笔记 --- 显示坐标系_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > vtk学习笔记 --- 显示坐标系

vtk学习笔记 --- 显示坐标系

 2011/11/10 9:27:36  aswang  http://aswang.iteye.com  我要评论(0)
  • 摘要:有的时候,在显示三维物体时,我们希望知道当前场景对应的坐标系位置或者方向,这样在旋转物体的时候,就能够很清楚地看到当前正对这视野的是什么面xy平面,还是y轴等信息了。在vtk库中有一个vtkAxesActor负责显示坐标系,在查阅了vtk的wiki之后,找到了两个示例,在这里将两者结合起来,放在同一个例子中显示,并用java代码重写。其中,第一个示例:http://vtk
  • 标签:笔记 学习 学习笔记

有的时候,在显示三维物体时,我们希望知道当前场景对应的坐标系位置或者方向,这样在旋转物体的时候,就能够很清楚地看到当前正对这视野的是什么面xy平面,还是y轴等信息了。

在vtk库中有一个vtkAxesActor负责显示坐标系,在查阅了vtk的wiki之后,找到了两个示例,在这里将两者结合起来,放在同一个例子中显示,并用java代码重写。其中,第一个示例:http://vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Axes?是直接将vtkAxesActor加入到renderer中进行显示,而第二个示例:

http://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/DisplayCoordinateAxes?是以Widget的方式在一个独立的视口中显示,比较适合用来放在右下角指示当前的坐标系位置。

最后的效果如下图:

?

?

相应的java代码如下:

/**
 * 显示坐标系
 * 代码参考:
 * http://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/DisplayCoordinateAxes
 * http://vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Axes
 */
public class DisplayCoordinateAxes {
    static {
        System.loadLibrary("vtkCommonJava");
        System.loadLibrary("vtkFilteringJava");
        System.loadLibrary("vtkIOJava");
        System.loadLibrary("vtkImagingJava");
        System.loadLibrary("vtkGraphicsJava");
        System.loadLibrary("vtkRenderingJava");
        System.loadLibrary("vtkChartsJava");
        System.loadLibrary("vtkGenericFilteringJava");
        System.loadLibrary("vtkGeovisJava");
        System.loadLibrary("vtkViewsJava");
        System.loadLibrary("vtkWidgetsJava");
        System.loadLibrary("vtkVolumeRenderingJava");
        System.loadLibrary("vtkInfovisJava");
        System.loadLibrary("vtkHybridJava");
    }
    
    public static void main(String[] args) {
        //创建一个球体
        vtkSphereSource sphereSource = new vtkSphereSource();
        sphereSource.SetCenter(0.0, 0.0, 0.0);
        sphereSource.SetRadius(1.0);
        sphereSource.Update();
        
        vtkPolyDataMapper mapper = new vtkPolyDataMapper();
        mapper.SetInput(sphereSource.GetOutput());
        
        vtkActor actor = new vtkActor();
        actor.SetMapper(mapper);
        //为了能够看清楚vtkAxesActor,特意设置的透明度
        actor.GetProperty().SetOpacity(0.3);
        
        vtkRenderer renderer = new vtkRenderer();
        vtkRenderWindow renderWindow = new vtkRenderWindow();
        renderWindow.AddRenderer(renderer);
        
        vtkRenderWindowInteractor renderWindowInteractor = new vtkRenderWindowInteractor();
        renderWindowInteractor.SetRenderWindow(renderWindow);
        
        renderer.AddActor(actor);
        renderer.SetBackground(.2, .3, .4);
        //使用vtkTransform对vtkAxesActor进行转换,默认位于(0,0,0)
        vtkTransform transform = new vtkTransform();
        transform.Translate(1.0, 0.0, 0.0);
        //1、在同一个视口中显示坐标系,直接添加到renderer中
        vtkAxesActor axes1 = new vtkAxesActor();
        renderer.AddActor(axes1);
        axes1.SetUserTransform(transform);
        
        vtkAxesActor axes = new vtkAxesActor();
        //2、以Widget方式,在左下角的视口中显示坐标系,可进行鼠标交互
        vtkOrientationMarkerWidget widget = new vtkOrientationMarkerWidget();
        widget.SetOutlineColor(0.9300, 0.5700, 0.1300);
        widget.SetOrientationMarker(axes);
        widget.SetInteractor(renderWindowInteractor);
        widget.SetViewport(0.0, 0.0, 0.4, 0.4);
        widget.SetEnabled(1);
        widget.InteractiveOn();
        
        renderer.ResetCamera();
        renderWindow.Render();
        
        // Begin mouse interaction
        renderWindowInteractor.Start();
    }
}
?

?

  • 大小: 40.3 KB
  • 查看图片附件
上一篇: DWR入门 下一篇: Java调用存储过程
发表评论
用户名: 匿名