123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- import numpy as np
- from vedo import Cone, Sphere, merge, Volume, dataurl, Assembly
- import vtk
- print('\n\n---------------------------------')
- print('vtkVersion', vtk.vtkVersion().GetVTKVersion())
- print('---------------------------------')
- #####################################
- cone = Cone(res=48)
- sphere = Sphere(res=24)
- carr = cone.cell_centers().coordinates[:, 2]
- parr = cone.vertices[:, 0]
- cone.pointdata["parr"] = parr
- cone.celldata["carr"] = carr
- carr = sphere.cell_centers().coordinates[:, 2]
- parr = sphere.vertices[:, 0]
- sphere.pointdata["parr"] = parr
- sphere.celldata["carr"] = carr
- sphere.pointdata["pvectors"] = np.sin(sphere.vertices)
- sphere.compute_elevation()
- cone.compute_normals()
- sphere.compute_normals()
- ###################################### test clone()
- c2 = cone.clone()
- print('clone()', cone.npoints, c2.npoints)
- assert cone.npoints == c2.npoints
- print('clone()', cone.ncells, c2.ncells)
- assert cone.ncells == c2.ncells
- ###################################### test merge()
- m = merge(sphere, cone)
- print('merge()', m.npoints, cone.npoints + sphere.npoints)
- assert m.npoints == cone.npoints + sphere.npoints
- print('merge()', m.ncells, cone.ncells + sphere.ncells)
- assert m.ncells == cone.ncells + sphere.ncells
- ###################################### inputdata
- print('dataset', [cone.dataset], "vtk.vtkPolyData")
- assert isinstance(cone.dataset, vtk.vtkPolyData)
- ###################################### mapper
- print('mapper', [cone.mapper], "vtk.vtkPolyDataMapper")
- assert isinstance(cone.mapper, vtk.vtkPolyDataMapper)
- ###################################### pickable
- cone.pickable(False)
- cone.pickable(True)
- print('pickable', cone.pickable(), True)
- assert cone.pickable()
- ###################################### pos
- cone.pos(1,2,3)
- print('pos', [1,2,3], cone.pos())
- assert np.allclose([1,2,3], cone.pos())
- cone.pos(5,6)
- print('pos',[5,6,0], cone.pos())
- assert np.allclose([5,6,0], cone.pos())
- ###################################### shift
- cone.pos(5,6,7).shift(3,0,0)
- print('shift',[8,6,7], cone.pos())
- assert np.allclose([8,6,7], cone.pos(), atol=0.001)
- ###################################### x y z
- cone.pos(10,11,12)
- cone.x(1.1)
- print('x y z',[1.1,11,12], cone.pos())
- assert np.allclose([1.1,11,12], cone.pos(), atol=0.001)
- cone.y(1.2)
- print('x y z',[1.1,1.2,12], cone.pos())
- assert np.allclose([1.1,1.2,12], cone.pos(), atol=0.001)
- cone.z(1.3)
- print('x y z',[1.1,1.2,1.3], cone.pos())
- assert np.allclose([1.1,1.2,1.3], cone.pos(), atol=0.001)
- ###################################### rotate
- cr = cone.pos(0,0,0).clone().rotate(90, axis=(0, 1, 0))
- print('rotate', np.max(cr.vertices[:,2]) ,'<', 1.01)
- assert np.max(cr.vertices[:,2]) < 1.01
- ###################################### orientation
- cr = cone.pos(0,0,0).clone().reorient([0,0,1], (1, 1, 0))
- print('orientation',np.max(cr.vertices[:,2]) ,'<', 1.01)
- assert np.max(cr.vertices[:,2]) < 1.01
- ####################################### scale
- cr.scale(5)
- print('scale',np.max(cr.vertices[:,2]) ,'>', 4.98)
- assert np.max(cr.vertices[:,2]) > 4.98
- ###################################### box
- bx = cone.box()
- print('box',bx.npoints, 24)
- assert bx.npoints == 24
- print('box',bx.clean().npoints , 8)
- assert bx.clean().npoints == 8
- ###################################### transform
- ct = cone.clone().rotate_x(10).rotate_y(10).rotate_z(10)
- print('transform', [ct.transform.T], [vtk.vtkTransform])
- assert isinstance(ct.transform.T, vtk.vtkTransform)
- print('ntransforms',ct.transform.T.GetNumberOfConcatenatedTransforms())
- assert ct.transform.T.GetNumberOfConcatenatedTransforms()
- ###################################### pointdata and celldata
- arrnames = cone.pointdata.keys()
- print('pointdata', arrnames, 'parr')
- assert 'parr' in arrnames
- arrnames = cone.celldata.keys()
- print('celldata.keys', arrnames, 'carr')
- assert 'carr' in arrnames
- ###################################### Get Point Data
- arr = sphere.pointdata['parr']
- print('pointdata',len(arr))
- assert len(arr)
- print('pointdata',np.max(arr) ,'>', .99)
- assert np.max(arr) > .99
- arr = sphere.celldata['carr']
- print('celldata',[arr])
- assert len(arr)
- print('celldata',np.max(arr) ,'>', .99)
- assert np.max(arr) > .99
- ######################################__add__
- print('__add__', [cone+sphere])
- assert isinstance(cone+sphere, Assembly)
- ###################################### vertices
- s2 = sphere.clone()
- pts = sphere.vertices
- pts2 = pts + [1,2,3]
- s2.vertices = pts2
- pts3 = s2.vertices
- print('vertices',sum(pts3-pts2))
- assert np.allclose(pts2, pts3, atol=0.001)
- ###################################### cells
- print('cells')
- assert np.array(sphere.cells).shape == (2112, 3)
- ###################################### texture
- st = sphere.clone().texture(dataurl+'textures/wood2.jpg')
- print('texture test')
- assert isinstance(st.actor.GetTexture(), vtk.vtkTexture)
- ###################################### delete_cells_by_point_index
- sd = sphere.clone().delete_cells_by_point_index(range(100))
- print('delete_cells_by_point_index',sd.npoints , sphere.npoints)
- assert sd.npoints == sphere.npoints
- print('delete_cells_by_point_index',sd.ncells ,'<', sphere.ncells)
- assert sd.ncells < sphere.ncells
- ###################################### reverse
- # this fails on some archs (see issue #185)
- # lets comment it out temporarily
- # sr = sphere.clone().reverse().cut_with_plane()
- # print('DISABLED: reverse test', sr.npoints, 576)
- # rev = vtk.vtkReverseSense()
- # rev.SetInputData(sr.polydata())
- # rev.Update()
- # print('DISABLED: reverse vtk nr.pts, nr.cells')
- # print(rev.GetOutput().GetNumberOfPoints(),sr.polydata().GetNumberOfPoints(),
- # rev.GetOutput().GetNumberOfCells(), sr.polydata().GetNumberOfCells())
- # assert sr.npoints == 576
- ###################################### quantize
- sq = sphere.clone().quantize(0.1)
- print('quantize',sq.npoints , 834)
- assert sq.npoints == 834
- ###################################### bounds
- ss = sphere.clone().scale([1,2,3])
- print('bounds',ss.xbounds())
- assert np.allclose(ss.xbounds(), [-1,1], atol=0.01)
- print('bounds',ss.ybounds())
- assert np.allclose(ss.ybounds(), [-2,2], atol=0.01)
- print('bounds',ss.zbounds())
- assert np.allclose(ss.zbounds(), [-3,3], atol=0.01)
- ###################################### average_size
- print('average_size', Sphere().scale(10).pos(1,3,7).average_size())
- assert 9.9 < Sphere().scale(10).pos(1,3,7).average_size() < 10.1
- print('diagonal_size',sphere.diagonal_size())
- assert 3.3 < sphere.diagonal_size() < 3.5
- print('center_of_mass',sphere.center_of_mass())
- assert np.allclose(sphere.center_of_mass(), [0,0,0], atol=0.001)
- print('volume',sphere.volume())
- assert 4.1 < sphere.volume() < 4.2
- print('area',sphere.area())
- assert 12.5 < sphere.area() < 12.6
- ###################################### closest_point
- pt = [12,34,52]
- print('closest_point',sphere.closest_point(pt), [0.19883616, 0.48003298, 0.85441941])
- assert np.allclose(sphere.closest_point(pt),
- [0.19883616, 0.48003298, 0.85441941], atol=0.001)
- ###################################### find_cells_in_bounds
- ics = sphere.find_cells_in_bounds(xbounds=(-0.5, 0.5))
- print('find_cells_in',len(ics) , 1404)
- assert len(ics) == 1576
- ######################################transformMesh
- T = cone.clone().pos(35,67,87).transform
- s3 = Sphere().apply_transform(T)
- print('transformMesh',s3.center_of_mass(), (35,67,87))
- assert np.allclose(s3.center_of_mass(), (35,67,87), atol=0.001)
- ######################################normalize
- s3 = sphere.clone().pos(10,20,30).scale([7,8,9]).normalize()
- print('normalize',s3.center_of_mass(), (10,20,30))
- assert np.allclose(s3.center_of_mass(), (10,20,30), atol=0.001)
- print('normalize',s3.average_size())
- assert 0.9 < s3.average_size() < 1.1
- ###################################### crop
- c2 = cone.clone().crop(left=0.5)
- print('crop',np.min(c2.vertices[:,0]), '>', -0.001)
- assert np.min(c2.vertices[:,0]) > -0.001
- ###################################### subdivide
- s2 = sphere.clone().subdivide(4)
- print('subdivide',s2.npoints , 270338)
- assert s2.npoints == 270338
- ###################################### decimate
- s2 = sphere.clone().decimate(0.2)
- print('decimate',s2.npoints , 213)
- assert s2.npoints == 213
- ###################################### vertex_normals
- print('vertex_normals',sphere.vertex_normals[12], [9.97668684e-01, 1.01513637e-04, 6.82437494e-02])
- assert np.allclose(sphere.vertex_normals[12], [9.97668684e-01, 1.01513637e-04, 6.82437494e-02], atol=0.001)
- ###################################### contains
- print('is_inside',sphere.contains([0.1,0.2,0.3]))
- assert Sphere().contains([0.1,0.2,0.3])
- ###################################### intersectWithLine (fails vtk7..)
- # pts = sphere.intersectWithLine([-2,-2,-2], [2,3,4])
- # print('intersectWithLine',pts[0])
- # assert np.allclose(pts[0], [-0.8179885149002075, -0.522485613822937, -0.2269827425479889], atol=0.001)
- # print('intersectWithLine',pts[1])
- # assert np.allclose(pts[1], [-0.06572723388671875, 0.41784095764160156, 0.9014091491699219], atol=0.001)
- ############################################################################
- ############################################################################ Assembly
- asse = cone+sphere
- ######################################
- print('unpack',len(asse.unpack()) , 2)
- assert len(asse.unpack()) ==2
- print('unpack', asse.unpack(0).name)
- assert asse.unpack(0) == cone
- print('unpack',asse.unpack(1).name)
- assert asse.unpack(1) == sphere
- print('unpack',asse.diagonal_size(), 4.15)
- assert 4.1 < asse.diagonal_size() < 4.2
- ############################################################################ Volume
- X, Y, Z = np.mgrid[:30, :30, :30]
- scalar_field = ((X-15)**2 + (Y-15)**2 + (Z-15)**2)/225
- print('Test Volume, scalar min, max =', np.min(scalar_field), np.max(scalar_field))
- vol = Volume(scalar_field)
- volarr = vol.pointdata[0]
- print('Volume',volarr.shape[0] , 27000)
- assert volarr.shape[0] == 27000
- print('Volume',np.max(volarr) , 3)
- assert np.max(volarr) == 3
- print('Volume',np.min(volarr) , 0)
- assert np.min(volarr) == 0
- ###################################### isosurface
- iso = vol.isosurface(1.0)
- print('isosurface', iso.area())
- assert 2540 < iso.area() < 3000
- ###################################### utils change of coords
- from vedo import transformations
- q = [5,2,3]
- q = transformations.cart2spher(*q)
- q = transformations.spher2cart(*q)
- print("cart2spher spher2cart", q)
- assert np.allclose(q, [5,2,3], atol=0.001)
- q = transformations.cart2cyl(*q)
- q = transformations.cyl2cart(*q)
- print("cart2cyl cyl2cart", q)
- assert np.allclose(q, [5,2,3], atol=0.001)
- q = transformations.cart2cyl(*q)
- q = transformations.cyl2spher(*q)
- q = transformations.spher2cart(*q)
- print("cart2cyl cyl2spher spher2cart", q)
- assert np.allclose(q, [5,2,3], atol=0.001)
- q = transformations.cart2spher(*q)
- q = transformations.spher2cyl(*q)
- q = transformations.cyl2cart(*q)
- print("cart2spher spher2cyl cyl2cart", q)
- assert np.allclose(q, [5,2,3], atol=0.001)
- ######################################
- print("OK with test_actors")
|