读书人

vtk学习札记 - 显示坐标系

发布时间: 2012-10-06 17:34:01 作者: rapoo

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的方式在一个独立的视口中显示,比较适合用来放在右下角指示当前的坐标系位置。

最后的效果如下图:

?

vtk学习札记 - 显示坐标系

?

相应的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();    }}
?

?

读书人网 >编程

热点推荐