vtkPolyDataSilhouette does not account for parallel projection
Seems that vtkPolyDataSilhouette
doesn't account for parallel projection. MWE:
Working
import vtk
# Create sphere
sphereSource = vtk.vtkSphereSource()
sphereSource.SetThetaResolution(100)
sphereSource.SetPhiResolution(100)
sphereSource.Update()
mesh = sphereSource.GetOutput()
# Initialize renderer and render window
renderer = vtk.vtkRenderer()
renderer.SetBackground(1.0, 1.0, 1.0)
# renderer.GetActiveCamera().SetParallelProjection(1)
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
# Initialize render window interactor
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# Create mapper for sphere
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(mesh)
# Create actor for sphere
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(0.6784313725490196, 0.8470588235294118, 0.9019607843137255)
actor.GetProperty().LightingOff()
# Add sphere actor to renderer and reset the camera
renderer.AddActor(actor)
renderer.ResetCamera()
renderer.GetActiveCamera().Dolly(1.3)
# Create silhouette
silhouette = vtk.vtkPolyDataSilhouette()
silhouette.SetInputData(mesh)
silhouette.SetCamera(renderer.GetActiveCamera())
silhouette.BorderEdgesOff()
# Create mapper and actor for silhouette
silhouetteMapper = vtk.vtkPolyDataMapper()
silhouetteMapper.SetInputConnection(silhouette.GetOutputPort())
silhouetteActor = vtk.vtkActor()
silhouetteActor.SetMapper(silhouetteMapper)
silhouetteActor.GetProperty().SetLineWidth(4)
silhouetteActor.GetProperty().SetColor(0, 0, 0) # Black
# Add silhouette actor to renderer
renderer.AddActor(silhouetteActor)
# Start rendering
renderWindow.Render()
renderWindowInteractor.Start()
Not Working
Uncommenting:
renderer.GetActiveCamera().SetParallelProjection(1)
Causes the silhouette to be inside the view of the circle:
Edited by Mathieu Westphal (Kitware)