Logo Search packages:      
Sourcecode: octaviz version File versions  Download package

DepthSort.m


%  This example demonstrates the use of vtkDepthSortPolyData. This is a
%  poor man's algorithm to sort polygons for proper transparent
%  blending.  It sorts polygons based on a single point (i.e.,
%  centroid) so the sorting may not work for overlapping or
%  intersection polygons.

vtk_init;

%  Create a bunch of spheres that overlap and cannot be easily arranged
%  so that the blending works without sorting. They are appended into a
%  single vtkPolyData because the filter only sorts within a single
%  vtkPolyData input.
sphere = vtkSphereSource();
sphere.SetThetaResolution(80);
sphere.SetPhiResolution(40);
sphere.SetRadius(1);
sphere.SetCenter(0, 0, 0);
sphere2 = vtkSphereSource();
sphere2.SetThetaResolution(80);
sphere2.SetPhiResolution(40);
sphere2.SetRadius(0.5);
sphere2.SetCenter(1, 0, 0);
sphere3 = vtkSphereSource();
sphere3.SetThetaResolution(80);
sphere3.SetPhiResolution(40);
sphere3.SetRadius(0.5);
sphere3.SetCenter(-1, 0, 0);
sphere4 = vtkSphereSource();
sphere4.SetThetaResolution(80);
sphere4.SetPhiResolution(40);
sphere4.SetRadius(0.5);
sphere4.SetCenter(0, 1, 0);
sphere5 = vtkSphereSource();
sphere5.SetThetaResolution(80);
sphere5.SetPhiResolution(40);
sphere5.SetRadius(0.5);
sphere5.SetCenter(0, -1, 0);
appendData = vtkAppendPolyData();
appendData.AddInput(sphere.GetOutput());
appendData.AddInput(sphere2.GetOutput());
appendData.AddInput(sphere3.GetOutput());
appendData.AddInput(sphere4.GetOutput());
appendData.AddInput(sphere5.GetOutput());

%  The dephSort object is set up to generate scalars representing
%  the sort depth.  A camera is assigned for the sorting. The camera
%  define the sort vector (position and focal point).
camera = vtkCamera();
depthSort = vtkDepthSortPolyData();
depthSort.SetInput(appendData.GetOutput());
depthSort.SetDirectionToBackToFront();
depthSort.SetVector(1, 1, 1);
depthSort.SetCamera(camera);
depthSort.SortScalarsOn();
depthSort.Update();

mapper = vtkPolyDataMapper();
mapper.SetInput(depthSort.GetOutput());
mapper.SetScalarRange(0, depthSort.GetOutput().GetNumberOfCells());
actor = vtkActor();
actor.SetMapper(mapper);
actor.GetProperty().SetOpacity(0.5);
actor.GetProperty().SetColor(1, 0, 0);
actor.RotateX(-72);

%  If an Prop3D is supplied, then its transformation matrix is taken
%  into account during sorting.
depthSort.SetProp3D(actor);

%  Create the RenderWindow, Renderer and both Actors
ren = vtkRenderer();
ren.SetActiveCamera(camera);
renWin = vtkRenderWindow();
renWin.AddRenderer(ren);
iren = vtkRenderWindowInteractor();
iren.SetRenderWindow(renWin);

%  Add the actors to the renderer, set the background and size
ren.AddActor(actor);
ren.SetBackground(1, 1, 1);
renWin.SetSize(300, 200);

ren.ResetCamera();
ren.GetActiveCamera().Zoom(2.2);


% renWin.Render();
vtkInitializeInteractor(iren);

Generated by  Doxygen 1.6.0   Back to index