#!BPY """ Name: 'Triangle import' Blender: 232 Group: 'Import' Tooltip: 'Import TRI Triangle File Format (*.tri)' """ ##################################################################### # # # Triangle TRI file import # # as found on http://astronomy.swin.edu/~pbourke/geomformats/tri/ # # # # (C) Februari 2004 Wim Van Hoydonck # # email: tuinbels@hotmail.com # # # # Released under the Blender Artistic Licence (BAL) # # see www.blender.org # # # # Works in Blender 2.32 and higher # # # # this script can be found online at: # # http://users.telenet.be/tuinbels/scripts/tri_import.py # # # ##################################################################### import Blender from Blender import * import string#, time def read(filename): #start = time.clock() Window.DrawProgressBar(0, "start reading file") file = open(filename, "rb") lines = file.readlines() try: vert, face = lines[0].split() ve, fa = int(vert), int(face) except: print "not a valid tri-file" vertcoords, vertnormals, vertcolors, fac = [], [], [], [] for line in lines[1:]: try: # vertexcoordinates, vertexnormals and vertexcolors x, y, z, nx, ny, nz, r, g, b = map(float, line.split()) vertcoords.append([x,y,z]) vertnormals.append([nx, ny, nz]) vertcolors.append([r, g, b, 1]) except: # face-indices v0, v1, v2 = map(int, line.split()) fac.append([v0, v1, v2]) file.close() Window.DrawProgressBar(0.4, "done reading file") # convert vertcolors to good format: 0.0-1.0 to 0-255 for i in range(len(vertcolors)): for j in range(len(vertcolors[i])): vertcolors[i][j] = int(vertcolors[i][j]*255) objname = Blender.sys.splitext(Blender.sys.basename(filename))[0] m = NMesh.GetRaw() # add vertices to mesh for i in range(0,len(vertcoords)): v = NMesh.Vert(vertcoords[i][0], vertcoords[i][1], vertcoords[i][2]) m.verts.append(v) Window.DrawProgressBar(0.5, "verts created") # make faces from verts for i in range(0, len(fac)): f = NMesh.Face() for j in range(0, len(fac[i])): f.append(m.verts[fac[i][j]]) f.smooth = 1 m.faces.append(f) Window.DrawProgressBar(0.7, "faces created") m.hasVertexColours(1) obj = NMesh.PutRaw(m, objname, 1) m = Object.GetSelected()[0].getData() # give verts a normal for i in range(len(m.verts)): m.verts[i].no[0] = vertnormals[i][0] m.verts[i].no[1] = vertnormals[i][1] m.verts[i].no[2] = vertnormals[i][2] Window.DrawProgressBar(0.8, "vertexnormals added") # give verts a color, seems to work only after NMesh.PutRaw of that mesh for i in range(len(m.faces)): for j in range(len(m.faces[i])): m.faces[i].col[j] = NMesh.Col(vertcolors[fac[i][j]][0],vertcolors[fac[i][j]][1],vertcolors[fac[i][j]][2], vertcolors[fac[i][j]][3] ) Window.DrawProgressBar(0.9, "vertexcolors added") m.update() # end = time.clock() print "" print objname ,"with", face,"faces and", vert, "verts successfully imported"# in", end-start, "seconds" print "" Window.DrawProgressBar(1, "import done") def fs_callback(filename): read(filename) Blender.Window.FileSelector(fs_callback, "Tri import")