In this slightly modified version of this example:
import vtk
points = vtk.vtkPoints()
points.InsertNextPoint(0, 0, 0)
points.InsertNextPoint(1, 0, 0)
points.InsertNextPoint(1, 1, 0)
points.InsertNextPoint(0, 1, 1)
points.InsertNextPoint(2, 2, 2)
points.InsertNextPoint(3, 2, 2)
points.InsertNextPoint(3, 3, 2)
points.InsertNextPoint(2, 3, 3)
# The first tetrahedron
data1 = vtk.vtkUnstructuredGrid()
data1.SetPoints(points)
tetra = vtk.vtkTetra()
tetra.GetPointIds().SetId(0, 0)
tetra.GetPointIds().SetId(1, 1)
tetra.GetPointIds().SetId(2, 2)
tetra.GetPointIds().SetId(3, 3)
cellArray = vtk.vtkCellArray()
cellArray.InsertNextCell(tetra)
data1.SetCells(vtk.VTK_TETRA, cellArray)
# The second tetrahedron
#data2 = vtk.vtkUnstructuredGrid() ########## <---
data2 = vtk.vtkPolyData()
data2.SetPoints(points)
tetra = vtk.vtkTetra()
tetra.GetPointIds().SetId(0, 4)
tetra.GetPointIds().SetId(1, 5)
tetra.GetPointIds().SetId(2, 6)
tetra.GetPointIds().SetId(3, 7)
cellArray = vtk.vtkCellArray()
cellArray.InsertNextCell(tetra)
#data2.SetCells(vtk.VTK_TETRA, cellArray) ########## <---
data2.SetPolys(cellArray)
# Create a mapper and actor
mapper1 = vtk.vtkDataSetMapper()
mapper1.SetInputData(data1)
actor1 = vtk.vtkActor()
actor1.SetMapper(mapper1)
# Create a mapper and actor
mapper2 = vtk.vtkDataSetMapper()
mapper2.SetInputData(data2)
actor2 = vtk.vtkActor()
actor2.SetMapper(mapper2)
# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# Add the actor to the scene
renderer.AddActor(actor1)
renderer.AddActor(actor2)
renderer.SetBackground(.3, .6, .3) # Background color green
# Render and interact
renderWindow.Render()
renderWindowInteractor.Start()
No nerror message but the tetrahedron is not visualized correctly (it’s like one face is missing in the lower tetrahedron) whereas using vtkUnstructuredGrid
instead of vtkPolyData
it looks ok.
Shouldn’t the two behave the same in this example?
Thanks a lot