Merge branch 'master' of ssh://swordfish/srv/www/htdocs/git/engrid
[engrid.git] / src / scripts / gmsh2_export.py
blobfbc72042e180c73f93fe5ba4f3ed87f9bcaedbff
1 #!BPY
3 """
4 Name: 'Gmsh2 (*.msh)'
5 Blender: 249
6 Group: 'Export'
7 Tooltip: 'Export to Gmsh 2 ASCII format'
8 """
10 import Blender
11 import bpy
13 def writeGmsh2(filename):
14 if not filename.lower().endswith('.msh'):
15 filename += '.msh'
16 out = file(filename, "w")
17 scn = bpy.data.scenes.active
18 object = scn.objects.active
19 if not object:
20 Blender.Draw.PupMenu('Error%t|Select 1 active object')
21 return
22 if object.type != 'Mesh':
23 Blender.Draw.PupMenu('Error%t|Select a mesh object')
24 return
26 mesh = object.getData(0,1)
27 faces = mesh.faces
28 nodes = mesh.verts
30 out.write('$MeshFormat\n2 0 8\n$EndMeshFormat\n')
31 out.write('$Nodes\n%d\n' % len(nodes))
33 i = 1
34 for n in nodes:
35 out.write("%d " % i)
36 out.write("%e " % n.co[0])
37 out.write("%e " % n.co[1])
38 out.write("%e\n" % n.co[2])
39 i = i + 1
41 out.write('$EndNodes\n')
42 out.write('$Elements\n%d\n' % len(faces))
43 i = 1
44 for f in faces:
45 out.write("%d " % i)
46 N = len(f.verts)
47 if N < 3 and N > 4:
48 Blender.Draw.PupMenu('Error%t|Only triangles and quads allowed')
49 return
50 if N == 3:
51 out.write('2 ')
52 if N == 4:
53 out.write('3 ')
54 out.write('1 %d' % (f.mat + 1))
55 for v in f.verts:
56 out.write(' %d' % (v.index + 1))
57 out.write('\n')
58 i = i + 1
60 out.write('$EndElements\n')
62 Blender.Window.FileSelector(writeGmsh2, "Export", Blender.sys.makename(ext='.msh'))