Salome HOME
Deal with new VTK unstructuredgrid memory storage
[tools/medcoupling.git] / src / MEDCoupling_Swig / vtk2medcoupling.py
1 import vtk
2 from vtk.util import numpy_support
3 import medcoupling as mc
4 import numpy as np
5
6 def mesh_convertor(fileName):
7     reader = vtk.vtkDataSetReader()
8     reader.SetFileName(fileName)
9     reader.Update()
10     ug = reader.GetOutput()
11     return mesh_convertor_mem(ug),ug
12     
13 def mesh_convertor_mem(ug):
14     from distutils.version import LooseVersion
15     #
16     pts = numpy_support.vtk_to_numpy(ug.GetPoints().GetData())
17     #
18     cla = numpy_support.vtk_to_numpy(ug.GetCellLocationsArray())
19     ctvtk = numpy_support.vtk_to_numpy(ug.GetCellTypesArray())
20     conn = numpy_support.vtk_to_numpy(ug.GetCells().GetData())
21     #
22     ct=mc.DataArrayInt(np.array(ctvtk,dtype=np.int32))[:]
23     c=mc.DataArrayInt(conn)[:]
24     ci=mc.DataArrayInt(cla)[:]
25     # for pv580
26     if LooseVersion(vtk.VTK_VERSION) >= LooseVersion("8.90.0"):
27         ci = ci.deltaShiftIndex()+1
28         ci.computeOffsetsFull()
29     #
30     vtk2med = mc.DataArrayInt(mc.vtk2med_cell_types())
31     #
32     ct.transformWithIndArr(vtk2med)
33     c[ci]=ct
34     ci = mc.DataArrayInt.Aggregate([ci,mc.DataArrayInt([len(c)])])
35     #
36
37     m=mc.MEDCouplingUMesh("mesh",2)
38     m.setCoords(mc.DataArrayDouble(np.array(pts,dtype=np.float64)))
39     m.setConnectivity(c,ci,True)
40     m.checkConsistencyLight()
41     #
42     return m