有的时候,在显示三维物体时,我们希望知道当前场景对应的坐标系位置或者方向,这样在旋转物体的时候,就能够很清楚地看到当前正对这视野的是什么面xy平面,还是y轴等信息了。
在vtk库中有一个vtkAxesActor负责显示坐标系,在查阅了vtk的wiki之后,找到了两个示例,在这里将两者结合起来,放在同一个例子中显示,并用java代码重写。其中,第一个示例:http://vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Axes 是直接将vtkAxesActor加入到renderer中进行显示,而第二个示例:
最后的效果如下图:
相应的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
1
顶
1
踩
分享到:
2011-11-09 19:47
浏览 15823
评论