File: test_vtk.py

package info (click to toggle)
camitk 6.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 389,508 kB
  • sloc: cpp: 103,476; sh: 2,448; python: 1,618; xml: 984; makefile: 128; perl: 84; sed: 20
file content (53 lines) | stat: -rw-r--r-- 2,146 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#
# Script designed to be tested from inside the CamiTK Python interpreter using PythonManager::runScript
# See TestPythonScript.cpp
# 
# The requirements (if any) must defined in the the QRC file
#
# To test from outside the CamiTK interpreter
# - cd build
# - tmpDir=$(mktemp -d)
# - python -m venv $tmpDir/.venv
# - ln -s /usr/lib/python3/dist-packages/vtkmodules $tmpDir/.venv/lib/python3.12/site-packages
# - ln -s /usr/lib/python3/dist-packages/vtk.py $tmpDir/.venv/lib/python3.12/site-packages
# - $tmpDir/.venv/bin/pip install numpy setuptools
# - cp ../sdk/libraries/core/testing/resources/test_vtk.py $tmpDir
# - PYTHONPATH=lib LD_PRELOAD=/lib/x86_64-linux-gnu/libpython3.12.so.1.0 $tmpDir/.venv/bin/python -m $tmpDir/test_vtk.py
#
# To test from ctest:
# - ctest -VV -R test-pythonscript-vtk
#
# WARNING: do NOT call the script just vtk.py, otherwise python will not be able to load the vtk package!
#
import camitk
import vtkmodules.all as vtk
from vtk.util import numpy_support

camitk.info("CamiTK version: " + camitk.__version__)

sphere = vtk.vtkSphereSource()
sphere.SetRadius(50.0)
sphere.SetThetaResolution(32)
sphere.SetPhiResolution(32)
sphere.Update()

polydata = sphere.GetOutput()

points = numpy_support.vtk_to_numpy(polydata.GetPoints().GetData())

# Each row = [3, p0, p1, p2] -> meaning "triangle with 3 points"
# Here no cell type, only count + point ids
polys = numpy_support.vtk_to_numpy(polydata.GetPolys().GetData()).reshape(-1, 4) # (n_triangles, 4)

expected_points_size = 962 # (theta-1)*(phi-1) + 1
actual_points_size = len(points.tolist())
assert actual_points_size == expected_points_size, f"There must be {expected_points_size} points not {actual_points_size}"

expected_polys_size = 1920
actual_polys_size = len(polys.tolist())
assert actual_polys_size == expected_polys_size, f"There must be {expected_polys_size} triangles not {actual_polys_size}"

msh = camitk.newMeshComponentFromNumpy("Sphere from VTK", points, polys)

msh_points_size = len(msh.getPointSetAsNumpy())
assert msh_points_size == expected_points_size, f"The component mesh must have {expected_points_size} points not {msh_points_size}"