Elia
Elia

Reputation: 822

Python vtkInterface0.9.3 library examples not working

I found out about vtkInterface, a python vtk wrapper that facilitates vtk plotting.

Trying to run their first example, under Initialize from Numpy Arrays in this page: vtkInterface.PolyData, by simply running the code as is, and it results in a gray render window with nothing in it.
Some of the other examples do work but this is exactly the thing that I need at the moment and was wondering if anybody has tried it and knows what might be wrong.

Example Code:

import numpy as np
import vtkInterface

# mesh points
vertices = np.array([[0, 0, 0],
                     [1, 0, 0],
                     [1, 1, 0],
                     [0, 1, 0]])

# mesh faces
faces = np.hstack([[4, 0, 1, 2, 3],  # square
                   [3, 0, 1, 4],     # triangle
                   [3, 1, 2, 4]])    # triangle

surf = vtkInterface.PolyData(vertices, faces)

# plot each face with a different color
surf.Plot(scalars=np.arange(3))

Upvotes: 1

Views: 104

Answers (1)

normanius
normanius

Reputation: 9762

The example is wrong. It lacks a fifth point. For example this will work.

vertices = np.array([[0, 0, 0],
                    [1, 0, 0],
                    [1, 1, 0],
                    [0, 1, 0],
                    [0.5, 0.5, -1]])

Explanation: In VTK, faces are encoded in the following way:

face_j = [ n, i_0, i_1, ..., i_n ]

Here, n is the number of points per face, and i_k are the indices of the points in the vertex-array. The face is formed by connecting the points vertices[i_k] with k in range(0,n). A list of faces is created by simply concatenating the single face specifications:

np.hstack([face_0, face_1, ..., face_j, ...])

The advantage of this encoding is that the number of points used per face, n, can vary. So a mesh can consist of lines, triangles, quads, etc.

In the example, the vertex with id 4 is used in the second and third face. So vertices is required to consist of at least five entries. Surprisingly, the sample doesn't crash, as VTK almost certainly would if some faces were accessing non-existing points.

Upvotes: 2

Related Questions