def writeHeader(self): bfile = sys.expandpath(Blender.Get('filename')) self.file.write("#VRML V2.0 utf8\n\n") self.file.write("# This file was authored with Blender " \ "(http://www.blender.org/)\n") self.file.write("# Blender version %s\n" % Blender.Get('version')) self.file.write("# Blender file %s\n" % sys.basename(bfile)) self.file.write("# Exported using VRML97 exporter " \ "v1.55 (2006/01/17)\n\n")
def writeHeader(self): #bfile = sys.expandpath( Blender.Get('filename') ).replace('<', '<').replace('>', '>') bfile = self.filename.replace('<', '<').replace('>', '>') # use outfile name self.file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") self.file.write("<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.0//EN\" \"http://www.web3d.org/specifications/x3d-3.0.dtd\">\n") self.file.write("<X3D version=\"3.0\" profile=\"Immersive\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema-instance\" xsd:noNamespaceSchemaLocation=\"http://www.web3d.org/specifications/x3d-3.0.xsd\">\n") self.file.write("<head>\n") self.file.write("\t<meta name=\"filename\" content=\"%s\" />\n" % sys.basename(bfile)) self.file.write("\t<meta name=\"generator\" content=\"Blender %s\" />\n" % Blender.Get('version')) self.file.write("\t<meta name=\"translator\" content=\"X3D exporter v1.55 (2006/01/17)\" />\n") self.file.write("</head>\n") self.file.write("<Scene>\n")
def texture(self, faces): tex = "" for f in faces: if f.image: tex = f.image.name break if tex: image = Image.Get(tex) texfname = image.filename if SET_TEX_DIR: texfname = bsys.basename(texfname) if TEX_DIR: texfname = bsys.join(TEX_DIR, texfname) buf = 'texture "%s"\n' % texfname xrep = image.xrep yrep = image.yrep buf += 'texrep %s %s\n' % (xrep, yrep) self.file.write(buf)
def texture(self, faces): tex = "" for f in faces: if f.image: tex = f.image.name break if tex: image = Image.Get(tex) texfname = image.filename if SET_TEX_DIR: texfname = bsys.basename(texfname) if TEX_DIR: texfname = bsys.join(TEX_DIR, texfname) buf = 'texture "%s"\n' % texfname xrep = image.xrep yrep = image.yrep # buf += 'texrep %s %s\n' % (xrep, yrep) self.file.write(buf)
def writeHeader(self): #bfile = sys.expandpath( Blender.Get('filename') ).replace('<', '<').replace('>', '>') bfile = self.filename.replace('<', '<').replace('>', '>') # use outfile name self.file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") self.file.write( "<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.0//EN\" \"http://www.web3d.org/specifications/x3d-3.0.dtd\">\n" ) self.file.write( "<X3D version=\"3.0\" profile=\"Immersive\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema-instance\" xsd:noNamespaceSchemaLocation=\"http://www.web3d.org/specifications/x3d-3.0.xsd\">\n" ) self.file.write("<head>\n") self.file.write("\t<meta name=\"filename\" content=\"%s\" />\n" % sys.basename(bfile)) self.file.write( "\t<meta name=\"generator\" content=\"Blender %s\" />\n" % Blender.Get('version')) self.file.write( "\t<meta name=\"translator\" content=\"X3D exporter v1.55 (2006/01/17)\" />\n" ) self.file.write("</head>\n") self.file.write("<Scene>\n")
test = AC3DExport(OBJS, file) except: file.close() raise else: file.close() endtime = bsys.time() - starttime REPORT_DATA['main'].append("Done. Saved to: %s" % filename) REPORT_DATA['main'].append("Data exported in %.3f seconds." % endtime) if VERBOSE: report_data() Blender.Window.WaitCursor(0) # -- End of definitions scn = Blender.Scene.GetCurrent() if ONLY_SELECTED: OBJS = list(scn.objects.context) else: OBJS = list(scn.objects) if not OBJS: Blender.Draw.PupMenu('ERROR: no objects selected') else: fname = bsys.makename(ext=".ac") if EXPORT_DIR: fname = bsys.join(EXPORT_DIR, bsys.basename(fname)) FileSelector(fs_callback, "Export AC3D", fname)
def texture(self, faces, mesh): uvlayer0 = "" uvlayer1 = "" uvlayer2 = "" uvlayer3 = "" uvlayers = mesh.getUVLayerNames() numlayer = len(uvlayers) if numlayer > 0: uvlayer0 = uvlayers[0] if numlayer > 1: uvlayer1 = uvlayers[1] if numlayer > 2: uvlayer2 = uvlayers[2] if numlayer > 3: uvlayer3 = uvlayers[3] mmat = mesh.materials tex = "" for f in faces: if f.image: tex = f.image.name break if tex: image = Image.Get(tex) texfname = image.filename if SET_TEX_DIR: texfname = bsys.basename(texfname) if TEX_DIR: texfname = bsys.join(TEX_DIR, texfname) buf = 'texture "%s" base\n' % texfname #TODO support multi textures #lookup second texture value fmat = mmat[f.mat] tex1 = "" tex2 = "" mtextures = fmat.getTextures() for mtex in mtextures: if not (mtex == None): if mtex.uvlayer == uvlayer1: img1 = mtex.tex.getImage() tex1 = img1.getFilename() tex1 = bsys.basename(tex1) if mtex.uvlayer == uvlayer2: img2 = mtex.tex.getImage() tex2 = img2.getFilename() tex2 = bsys.basename(tex2) if tex1 != "": buf += 'texture "' buf += tex1 buf += '" tiled\n' else: buf += 'texture empty_texture_no_mapping skids\n' if tex2 != "": buf += 'texture "' buf += tex2 buf += '" tiled\n' else: buf += 'texture empty_texture_no_mapping skids\n' buf += 'texture empty_texture_no_mapping shad\n' xrep = image.xrep yrep = image.yrep # buf += 'texrep %s %s\n' % (xrep, yrep) self.file.write(buf)
def testAC3DImport(self): FACE_TWOSIDE = Mesh.FaceModes['TWOSIDE'] FACE_TEX = Mesh.FaceModes['TILES'] #FACE_TEX = Mesh.FaceModes['TEX'] MESH_AUTOSMOOTH = Mesh.Modes['AUTOSMOOTH'] MAT_MODE_ZTRANSP = Material.Modes['ZTRANSP'] MAT_MODE_TRANSPSHADOW = Material.Modes['TRANSPSHADOW'] scene = self.scene bl_images = {} # loaded texture images missing_textures = [] # textures we couldn't find bl_textures = {} # loaded textures objlist = self.objlist[1:] # skip 'world' #bmat = [] bmat = {} m = None has_transp_mats = False for mat in self.mlist: name = mat[0] # if name=='': name = 'BaseMaterial' if m== None: m = Material.New(name) m.rgbCol = (mat[1][0], mat[1][1], mat[1][2]) m.amb = mat[2] m.emit = mat[3] m.specCol = (mat[4][0], mat[4][1], mat[4][2]) m.spec = mat[5] m.alpha = mat[6] #force it to zero because that is how Speed Dreams / Torcs work m.alpha = 0.0 if m.alpha < 1.0: m.mode |= MAT_MODE_ZTRANSP has_transp_mats = True # bmat[name]=m # if has_transp_mats: # for mat in bmat: # mat.mode |= MAT_MODE_TRANSPSHADOW obj_idx = 0 # index of current obj in loop for obj in objlist: if obj.type == AC_GROUP: continue elif obj.type == AC_LIGHT: light = Lamp.New('Lamp') object = scene.objects.new(light, obj.name) #object.select(True) obj.bl_obj = object if obj.data: light.name = obj.data continue # type AC_POLY: # old .ac files used empty meshes as groups, convert to a real ac group if not obj.vlist and obj.kids: obj.type = AC_GROUP continue mesh = Mesh.New() object = scene.objects.new(mesh, obj.name) #object.select(True) obj.bl_obj = object if obj.data: mesh.name = obj.data mesh.degr = obj.crease # will auto clamp to [1, 80] if not obj.vlist: # no vertices? nothing more to do continue #Setup UV Layers mesh.addUVLayer("ImageUV") mesh.addUVLayer("ShadowUV") mesh.activeUVLayer ="ImageUV" mesh.verts.extend(obj.vlist) objmat_indices = [] for e in obj.elist: mesh.edges.extend(e) if obj.flist_v: mesh.faces.extend(obj.flist_v) facesnum = len(mesh.faces) if facesnum == 0: # shouldn't happen, of course continue mesh.faceUV = True # checking if the .ac file had duplicate faces (Blender ignores them) if facesnum != len(obj.flist_v): # it has, ugh. Let's clean the uv list: lenfl = len(obj.flist_v) flist = obj.flist_v uvlist = obj.flist_uv uvlist2 = obj.flist_uv2 cfglist = obj.flist_cfg for f in flist: f.sort() fi = lenfl while fi > 0: # remove data related to duplicates fi -= 1 if flist[fi] in flist[:fi]: uvlist.pop(fi) cfglist.pop(fi) if len(uvlist2)>0: uvlist2.pop(fi) img = None img2 = None if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] elif obj.tex not in missing_textures: texfname = None objtex = obj.tex baseimgname = bsys.basename(objtex) if bsys.exists(objtex) == 1: texfname = objtex else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename(objtex.replace('\\','/')) objtex = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex else: objtex = bsys.join(TEXTURES_DIR2, baseimgname) if bsys.exists(objtex): texfname = objtex else: inform("Couldn't find texture in alt path %s" % TEXTURES_DIR2) if texfname: try: img = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img: bl_images[obj.tex] = img except: inform("THROW: Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex) inform("Couldn't find texture: %s" % baseimgname) if obj.tex2 != '': if obj.tex2 in bl_images.keys(): img2 = bl_images[obj.tex2] elif obj.tex2 not in missing_textures: texfname = None objtex2 = obj.tex2 baseimgname = bsys.basename(objtex2) if bsys.exists(objtex2) == 1: texfname = objtex2 else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename(objtex2.replace('\\','/')) objtex2 = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex2 else: objtex2 = bsys.join(TEXTURES_DIR2, baseimgname) if bsys.exists(objtex2): texfname = objtex2 else: inform("Couldn't find texture in alt path %s" % objtex2) if texfname: try: img2 = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img2: bl_images[obj.tex2] = img2 except: inform("THROW: Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex2) inform("Couldn't find texture: %s" % baseimgname) if obj.tex not in bmat.keys(): if img: #Create a new material with a texture attached to it m1 = Material.New(obj.tex) m1.rgbCol = m.rgbCol m1.amb = m.amb m1.emit = m.emit m1.specCol = m.specCol m1.spec = m.spec m1.alpha = m.alpha texname = 'Tex%s' %obj.tex texname2 = 'Tex2%s' %obj.tex if img: iname = img.getName() if iname not in bl_textures.keys(): basetex = Texture.New(iname) basetex.setType('Image') map1=Texture.MapTo.COL|Texture.MapTo.ALPHA basetex.image = img bl_textures[iname] = basetex basetex = bl_textures[iname] m1.setTexture(0,basetex,Texture.TexCo.UV,map1) if img2: iname2 = img2.getName() if iname2 not in bl_textures.keys(): basetex2 = Texture.New(iname2) basetex2.setType('Image') map2=Texture.MapTo.COL basetex2.image = img2 bl_textures[iname2] = basetex2 else: map2=Texture.MapTo.COL basetex2 = bl_textures[iname2] m1.setTexture(1,basetex2,Texture.TexCo.UV,map2) if m1.alpha < 1.0: m1.mode |= MAT_MODE_ZTRANSP has_transp_mats = True mtextures = m1.getTextures() tunit = 0 for mtex in mtextures: if not ( mtex == None ): if tunit == 1: mtex.uvlayer ="ShadowUV" mtex.colfac=0.3 tunit = tunit+1 if tunit ==0: mtex.uvlayer ="ImageUV" tunit = tunit+1 bmat[obj.tex]=m1 if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] #TODO attach correct materials to objects if obj.tex in bmat.keys(): mat1 = bmat[obj.tex] if len(mesh.materials)==0: mesh.materials+= [mat1] else: inform('Material %s not found\n' % obj.tex) for i in range(facesnum): f = obj.flist_cfg[i] fmat = f[0] is_smooth = f[1] twoside = f[2] bface = mesh.faces[i] bface.smooth = is_smooth if twoside: bface.mode |= FACE_TWOSIDE if img: bface.mode |= FACE_TEX bface.image = img #TODO handle material properly #bface.mat = objmat_indices.index(fmat) bface.mat = 0 fuv = obj.flist_uv[i] if len(obj.flist_uv2)>0: fuv2 = obj.flist_uv2[i] if obj.texoff: uoff = obj.texoff[0] voff = obj.texoff[1] urep = obj.texrep[0] vrep = obj.texrep[1] for uv in fuv: uv[0] *= urep uv[1] *= vrep uv[0] += uoff uv[1] += voff if len(fuv2)>0: for uv2 in fuv2: uv2[0] *= urep uv2[1] *= vrep uv2[0] += uoff uv2[1] += voff mesh.activeUVLayer ="ImageUV" mesh.faces[i].uv = fuv if len(fuv2)>0: mesh.activeUVLayer ="ShadowUV" mesh.faces[i].uv = fuv2 # for uv2 in fuv2: # inform('UV2 coords %.5f %.5f\n' % (uv2[0],uv2[1])) mesh.activeUVLayer ="ImageUV" # finally, delete the 1st vertex we added to prevent vindices == 0 mesh.verts.delete(0) mesh.calcNormals() mesh.mode = MESH_AUTOSMOOTH obj_idx += 1 self.build_hierarchy() scene.update()
def trace(): #voici mes variables pouvant etre modifie #my variables global nbr_phoneme, mon_fichier_dico global let01, let02, let03, let04, let05, let06, let07, let08, let09, let10 global let11, let12, let13, let14, let15, let16, let17, let18, let19, let20 global let21, let22, let23, let24 global let01selectkey, let02selectkey, let03selectkey, let04selectkey, let05selectkey global let06selectkey, let07selectkey, let08selectkey, let09selectkey, let10selectkey, let11selectkey global let12selectkey, let13selectkey, let14selectkey, let15selectkey, let16selectkey, let17selectkey global let18selectkey, let19selectkey, let20selectkey, let21selectkey, let22selectkey, let23selectkey global let24selectkey glClearColor(0.4, 0.5, 0.6, 0.0) glClear(GL_COLOR_BUFFER_BIT) glColor3d(1, 1, 1) glRasterPos2i(87, 375) Text("Blendersynchro V 2.0") glColor3d(1, 1, 1) glRasterPos2i(84, 360) Text("Programming: Dienben") glColor3d(0, 0, 0) glRasterPos2i(13, 342) Text("Lip Synchronization Tool") glColor3d(0, 0, 0) glRasterPos2i(13, 326) Text("Thanks to Chris Clawson and Liubomir Kovatchev") glColor3d(1, 1, 1) glRasterPos2i(5, 320) Text("_______________________________________________________") glColor3d(0, 0, 0) glRasterPos2i(6, 318) Text("_______________________________________________________") if (etape == 1): #cette etape permet de choisi la correspondance entre les phonemes et les cles #this stage offer the possibility to choose the mapping between phonems and shapes glColor3d(1, 1, 1) glRasterPos2i(140, 300) Text("Objet: " + Blender.Object.GetSelected()[0].getName()) glColor3d(1, 1, 1) glRasterPos2i(5, 215) Text("Assign phonems to shapes:") #on mesure la taille de la liste de phonemes #this is the lenght of the phonem list nbr_phoneme = len(liste_phoneme) #on dessine les listes de choix #we draw the choice list # if (nbr_phoneme > 0): let01 = String(" ", 4, 5, 185, 30, 16, liste_phoneme[0], 3) glColor3d(0, 0, 0) glRasterPos2i(40, 188) Text("=") let01selectkey = Menu(key_menu, 50, 50, 185, 70, 16, let01selectkey.val) # if (nbr_phoneme > 1): let02 = String(" ", 4, 150, 185, 30, 16, liste_phoneme[1], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 188) Text("=") let02selectkey = Menu(key_menu, 51, 195, 185, 70, 16, let02selectkey.val) # if (nbr_phoneme > 2): let03 = String(" ", 4, 5, 165, 30, 16, liste_phoneme[2], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 168) Text("=") let03selectkey = Menu(key_menu, 52, 50, 165, 70, 16, let03selectkey.val) # if (nbr_phoneme > 3): let04 = String(" ", 4, 150, 165, 30, 16, liste_phoneme[3], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 168) Text("=") let04selectkey = Menu(key_menu, 53, 195, 165, 70, 16, let04selectkey.val) # if (nbr_phoneme > 4): let05 = String(" ", 4, 5, 145, 30, 16, liste_phoneme[4], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 148) Text("=") let05selectkey = Menu(key_menu, 54, 50, 145, 70, 16, let05selectkey.val) # if (nbr_phoneme > 5): let06 = String(" ", 4, 150, 145, 30, 16, liste_phoneme[5], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 148) Text("=") let06selectkey = Menu(key_menu, 55, 195, 145, 70, 16, let06selectkey.val) # if (nbr_phoneme > 6): let07 = String(" ", 4, 5, 125, 30, 16, liste_phoneme[6], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 128) Text("=") let07selectkey = Menu(key_menu, 56, 50, 125, 70, 16, let07selectkey.val) # if (nbr_phoneme > 7): let08 = String(" ", 4, 150, 125, 30, 16, liste_phoneme[7], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 128) Text("=") let08selectkey = Menu(key_menu, 57, 195, 125, 70, 16, let08selectkey.val) # if (nbr_phoneme > 8): let09 = String(" ", 4, 5, 105, 30, 16, liste_phoneme[8], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 108) Text("=") let09selectkey = Menu(key_menu, 58, 50, 105, 70, 16, let09selectkey.val) # if (nbr_phoneme > 9): let10 = String(" ", 4, 150, 105, 30, 16, liste_phoneme[9], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 108) Text("=") let10selectkey = Menu(key_menu, 59, 195, 105, 70, 16, let10selectkey.val) # if (nbr_phoneme > 10): let11 = String(" ", 4, 5, 85, 30, 16, liste_phoneme[10], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 88) Text("=") let11selectkey = Menu(key_menu, 60, 50, 85, 70, 16, let11selectkey.val) # if (nbr_phoneme > 11): let12 = String(" ", 4, 150, 85, 30, 16, liste_phoneme[11], 2) glColor3d(0, 0, 0) Text("=") let12selectkey = Menu(key_menu, 61, 195, 85, 70, 16, let12selectkey.val) # if (nbr_phoneme > 12): let13 = String(" ", 4, 5, 65, 30, 16, liste_phoneme[12], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 68) Text("=") let13selectkey = Menu(key_menu, 62, 50, 65, 70, 16, let13selectkey.val) # if (nbr_phoneme > 13): let14 = String(" ", 4, 150, 65, 30, 16, liste_phoneme[13], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 68) Text("=") let14selectkey = Menu(key_menu, 63, 195, 65, 70, 16, let14selectkey.val) # if (nbr_phoneme > 14): let15 = String(" ", 4, 5, 45, 30, 16, liste_phoneme[14], 2) glColor3d(0, 0, 0) glRasterPos2i(40, 48) Text("=") let15selectkey = Menu(key_menu, 64, 50, 45, 70, 16, let15selectkey.val) # if (nbr_phoneme > 15): let16 = String(" ", 4, 150, 45, 30, 16, liste_phoneme[15], 2) glColor3d(0, 0, 0) glRasterPos2i(185, 48) Text("=") let16selectkey = Menu(key_menu, 65, 195, 45, 70, 16, let16selectkey.val) # if (nbr_phoneme > 16): let17 = String(" ", 4, 295, 185, 30, 16, liste_phoneme[16], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 188) Text("=") let17selectkey = Menu(key_menu, 66, 340, 185, 70, 16, let17selectkey.val) # if (nbr_phoneme > 17): let18 = String(" ", 4, 440, 185, 70, 16, liste_phoneme[17], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 188) Text("=") let18selectkey = Menu(key_menu, 67, 525, 185, 70, 16, let18selectkey.val) # if (nbr_phoneme > 18): let19 = String(" ", 4, 295, 165, 30, 16, liste_phoneme[18], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 168) Text("=") let19selectkey = Menu(key_menu, 68, 340, 165, 70, 16, let19selectkey.val) # if (nbr_phoneme > 19): let20 = String(" ", 4, 440, 165, 70, 16, liste_phoneme[19], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 168) Text("=") let20selectkey = Menu(key_menu, 69, 525, 165, 70, 16, let20selectkey.val) # if (nbr_phoneme > 20): let21 = String(" ", 4, 295, 145, 30, 16, liste_phoneme[20], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 148) Text("=") let21selectkey = Menu(key_menu, 70, 340, 145, 70, 16, let21selectkey.val) # if (nbr_phoneme > 21): let22 = String(" ", 4, 440, 145, 70, 16, liste_phoneme[21], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 148) Text("=") let22selectkey = Menu(key_menu, 71, 525, 145, 70, 16, let22selectkey.val) # if (nbr_phoneme > 22): let23 = String(" ", 4, 295, 125, 30, 16, liste_phoneme[22], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 128) Text("=") let23selectkey = Menu(key_menu, 72, 340, 125, 70, 16, let23selectkey.val) # if (nbr_phoneme > 23): let24 = String(" ", 4, 440, 125, 70, 16, liste_phoneme[23], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 128) Text("=") let24selectkey = Menu(key_menu, 73, 525, 125, 70, 16, let24selectkey.val) # if (nbr_phoneme > 24): let25 = String(" ", 4, 295, 105, 30, 16, liste_phoneme[24], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 108) Text("=") let25selectkey = Menu(key_menu, 74, 340, 105, 70, 16, let25selectkey.val) # if (nbr_phoneme > 25): let26 = String(" ", 4, 440, 105, 70, 16, liste_phoneme[25], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 108) Text("=") let26selectkey = Menu(key_menu, 75, 525, 105, 70, 16, let26selectkey.val) # if (nbr_phoneme > 26): let27 = String(" ", 4, 295, 85, 30, 16, liste_phoneme[26], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 88) Text("=") let27selectkey = Menu(key_menu, 76, 340, 85, 70, 16, let27selectkey.val) # if (nbr_phoneme > 27): let28 = String(" ", 4, 440, 85, 70, 16, liste_phoneme[27], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 88) Text("=") let28selectkey = Menu(key_menu, 77, 525, 85, 70, 16, let28selectkey.val) # if (nbr_phoneme > 28): let29 = String(" ", 4, 295, 65, 30, 16, liste_phoneme[28], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 68) Text("=") let29selectkey = Menu(key_menu, 78, 340, 65, 70, 16, let29selectkey.val) # if (nbr_phoneme > 29): let30 = String(" ", 4, 440, 65, 70, 16, liste_phoneme[29], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 68) Text("=") let30selectkey = Menu(key_menu, 79, 525, 65, 70, 16, let30selectkey.val) # if (nbr_phoneme > 30): let31 = String(" ", 4, 295, 45, 30, 16, liste_phoneme[30], 2) glColor3d(0, 0, 0) glRasterPos2i(330, 48) Text("=") let31selectkey = Menu(key_menu, 80, 340, 45, 70, 16, let31selectkey.val) # if (nbr_phoneme > 31): let32 = String(" ", 4, 440, 45, 70, 16, liste_phoneme[31], 8) glColor3d(0, 0, 0) glRasterPos2i(515, 48) Text("=") let32selectkey = Menu(key_menu, 81, 525, 45, 70, 16, let32selectkey.val) Button("Go", 3, 155, 5, 145, 22) if (etape == 2): glColor3d(1, 1, 1) glRasterPos2i(125, 200) Text("Operation Completed") if (etape == 0): glColor3d(1, 1, 1) glRasterPos2i(125, 200) Text( "Please select a Mesh'Object and Create all the IPO Curves for your Shapes" ) if (etape == 3): #this stage permits to load a custom dictionnary load_file_text = "Load File" if mon_fichier_dico: Button("Import Loaded File", 2, 5, 5, 145, 22) glColor3d(1, 1, 1) glRasterPos2i(6, 50) Text("loaded file: %s" % basename(mon_fichier_dico)) load_file_text = "Choose Another File" Button(load_file_text, 8, 125, 180, 145, 22) glRasterPos2i(6, 40) Text("_______________________________________________________") glColor3d(0, 0, 0) glRasterPos2i(6, 38) Text("_______________________________________________________") Button("Exit", 1, 305, 5, 80, 22)
def texture(self, faces,mesh): uvlayer0="" uvlayer1="" uvlayer2="" uvlayer3="" uvlayers = mesh.getUVLayerNames() numlayer = len(uvlayers) if numlayer>0: uvlayer0 = uvlayers[0] if numlayer>1: uvlayer1 = uvlayers[1] if numlayer>2: uvlayer2 = uvlayers[2] if numlayer>3: uvlayer3 = uvlayers[3] mmat = mesh.materials; tex = "" for f in faces: if f.image: tex = f.image.name break if tex: image = Image.Get(tex) texfname = image.filename if SET_TEX_DIR: texfname = bsys.basename(texfname) if TEX_DIR: texfname = bsys.join(TEX_DIR, texfname) buf = 'texture "%s" base\n' % texfname #TODO support multi textures #lookup second texture value fmat = mmat[f.mat] tex1 ="" tex2="" mtextures = fmat.getTextures() for mtex in mtextures: if not ( mtex == None ): if mtex.uvlayer==uvlayer1: img1 = mtex.tex.getImage() tex1=img1.getFilename() tex1=bsys.basename(tex1) if mtex.uvlayer==uvlayer2: img2 = mtex.tex.getImage() tex2 = img2.getFilename() tex2=bsys.basename(tex2) if tex1!="": buf +='texture "' buf +=tex1 buf+='" tiled\n' else: buf+='texture empty_texture_no_mapping skids\n' if tex2!="": buf+='texture "' buf+=tex2 buf+='" tiled\n' else: buf +='texture empty_texture_no_mapping skids\n' buf +='texture empty_texture_no_mapping shad\n' xrep = image.xrep yrep = image.yrep # buf += 'texrep %s %s\n' % (xrep, yrep) self.file.write(buf)
def trace(): #voici mes variables pouvant etre modifie #my variables global nbr_phoneme, mon_fichier_dico global let01, let02, let03, let04,let05, let06, let07, let08, let09, let10 global let11, let12, let13, let14,let15, let16, let17, let18, let19, let20 global let21, let22, let23, let24 global let01selectkey,let02selectkey,let03selectkey,let04selectkey,let05selectkey global let06selectkey,let07selectkey,let08selectkey,let09selectkey,let10selectkey,let11selectkey global let12selectkey,let13selectkey,let14selectkey,let15selectkey,let16selectkey,let17selectkey global let18selectkey,let19selectkey,let20selectkey,let21selectkey,let22selectkey,let23selectkey global let24selectkey glClearColor(0.4,0.5,0.6 ,0.0) glClear(GL_COLOR_BUFFER_BIT) glColor3d(1,1,1) glRasterPos2i(87, 375) Text("Blendersynchro V 2.0") glColor3d(1,1,1) glRasterPos2i(84, 360) Text("Programming: Dienben") glColor3d(0,0,0) glRasterPos2i(13, 342) Text("Lip Synchronization Tool") glColor3d(0,0,0) glRasterPos2i(13, 326) Text("Thanks to Chris Clawson and Liubomir Kovatchev") glColor3d(1,1,1) glRasterPos2i(5, 320) Text("_______________________________________________________") glColor3d(0,0,0) glRasterPos2i(6, 318) Text("_______________________________________________________") if (etape==1): #cette etape permet de choisi la correspondance entre les phonemes et les cles #this stage offer the possibility to choose the mapping between phonems and shapes glColor3d(1,1,1) glRasterPos2i(140, 300) Text("Objet: "+Blender.Object.GetSelected()[0].getName() ) glColor3d(1,1,1) glRasterPos2i(5, 215) Text("Assign phonems to shapes:") #on mesure la taille de la liste de phonemes #this is the lenght of the phonem list nbr_phoneme=len(liste_phoneme) #on dessine les listes de choix #we draw the choice list # if (nbr_phoneme > 0): let01 = String(" ", 4, 5, 185, 30, 16, liste_phoneme[0], 3) glColor3d(0,0,0) glRasterPos2i(40, 188) Text("=") let01selectkey = Menu(key_menu, 50, 50, 185, 70, 16, let01selectkey.val) # if (nbr_phoneme > 1): let02 = String(" ", 4, 150, 185, 30, 16, liste_phoneme[1], 2) glColor3d(0,0,0) glRasterPos2i(185, 188) Text("=") let02selectkey = Menu(key_menu, 51, 195, 185, 70, 16, let02selectkey.val) # if (nbr_phoneme > 2): let03 = String(" ", 4, 5, 165, 30, 16, liste_phoneme[2], 2) glColor3d(0,0,0) glRasterPos2i(40, 168) Text("=") let03selectkey = Menu(key_menu, 52, 50, 165, 70, 16, let03selectkey.val) # if (nbr_phoneme > 3): let04 = String(" ", 4, 150, 165, 30, 16, liste_phoneme[3], 2) glColor3d(0,0,0) glRasterPos2i(185, 168) Text("=") let04selectkey = Menu(key_menu, 53, 195, 165, 70, 16, let04selectkey.val) # if (nbr_phoneme > 4): let05 = String(" ", 4, 5, 145, 30, 16, liste_phoneme[4], 2) glColor3d(0,0,0) glRasterPos2i(40, 148) Text("=") let05selectkey = Menu(key_menu, 54, 50, 145, 70, 16, let05selectkey.val) # if (nbr_phoneme > 5): let06 = String(" ", 4, 150, 145, 30, 16, liste_phoneme[5], 2) glColor3d(0,0,0) glRasterPos2i(185, 148) Text("=") let06selectkey = Menu(key_menu, 55, 195, 145, 70, 16, let06selectkey.val) # if (nbr_phoneme > 6): let07 = String(" ", 4, 5, 125, 30, 16, liste_phoneme[6], 2) glColor3d(0,0,0) glRasterPos2i(40, 128) Text("=") let07selectkey = Menu(key_menu, 56, 50, 125, 70, 16, let07selectkey.val) # if (nbr_phoneme > 7): let08 = String(" ", 4, 150, 125, 30, 16, liste_phoneme[7], 2) glColor3d(0,0,0) glRasterPos2i(185, 128) Text("=") let08selectkey = Menu(key_menu, 57, 195, 125, 70, 16,let08selectkey.val) # if (nbr_phoneme > 8): let09 = String(" ", 4, 5, 105, 30, 16, liste_phoneme[8], 2) glColor3d(0,0,0) glRasterPos2i(40, 108) Text("=") let09selectkey = Menu(key_menu, 58, 50, 105, 70, 16,let09selectkey.val) # if (nbr_phoneme > 9): let10 = String(" ", 4, 150, 105, 30, 16, liste_phoneme[9], 2) glColor3d(0,0,0) glRasterPos2i(185, 108) Text("=") let10selectkey = Menu(key_menu, 59, 195, 105, 70, 16, let10selectkey.val) # if (nbr_phoneme > 10): let11 = String(" ", 4, 5, 85, 30, 16, liste_phoneme[10], 2) glColor3d(0,0,0) glRasterPos2i(40, 88) Text("=") let11selectkey = Menu(key_menu, 60, 50, 85, 70, 16, let11selectkey.val) # if (nbr_phoneme > 11): let12 = String(" ", 4, 150, 85, 30, 16, liste_phoneme[11], 2) glColor3d(0,0,0) Text("=") let12selectkey = Menu(key_menu, 61, 195, 85, 70, 16, let12selectkey.val) # if (nbr_phoneme > 12): let13 = String(" ", 4, 5, 65, 30, 16, liste_phoneme[12], 2) glColor3d(0,0,0) glRasterPos2i(40, 68) Text("=") let13selectkey = Menu(key_menu, 62, 50, 65, 70, 16, let13selectkey.val) # if (nbr_phoneme > 13): let14 = String(" ", 4, 150, 65, 30, 16, liste_phoneme[13], 2) glColor3d(0,0,0) glRasterPos2i(185, 68) Text("=") let14selectkey = Menu(key_menu, 63, 195, 65, 70, 16, let14selectkey.val) # if (nbr_phoneme > 14): let15 = String(" ", 4, 5, 45, 30, 16, liste_phoneme[14], 2) glColor3d(0,0,0) glRasterPos2i(40, 48) Text("=") let15selectkey = Menu(key_menu, 64, 50, 45, 70, 16, let15selectkey.val) # if (nbr_phoneme > 15): let16 = String(" ", 4, 150, 45, 30, 16, liste_phoneme[15], 2) glColor3d(0,0,0) glRasterPos2i(185, 48) Text("=") let16selectkey = Menu(key_menu, 65, 195, 45, 70, 16, let16selectkey.val) # if (nbr_phoneme > 16): let17 = String(" ", 4, 295, 185, 30, 16, liste_phoneme[16], 2) glColor3d(0,0,0) glRasterPos2i(330, 188) Text("=") let17selectkey = Menu(key_menu, 66, 340, 185, 70, 16, let17selectkey.val) # if (nbr_phoneme > 17): let18 = String(" ", 4, 440, 185, 70, 16, liste_phoneme[17], 8) glColor3d(0,0,0) glRasterPos2i(515, 188) Text("=") let18selectkey = Menu(key_menu, 67, 525, 185, 70, 16, let18selectkey.val) # if (nbr_phoneme > 18): let19 = String(" ", 4, 295, 165, 30, 16, liste_phoneme[18], 2) glColor3d(0,0,0) glRasterPos2i(330, 168) Text("=") let19selectkey = Menu(key_menu, 68, 340, 165, 70, 16, let19selectkey.val) # if (nbr_phoneme > 19): let20 = String(" ", 4, 440, 165, 70, 16, liste_phoneme[19], 8) glColor3d(0,0,0) glRasterPos2i(515, 168) Text("=") let20selectkey = Menu(key_menu, 69, 525, 165, 70, 16, let20selectkey.val) # if (nbr_phoneme > 20): let21 = String(" ", 4, 295, 145, 30, 16, liste_phoneme[20], 2) glColor3d(0,0,0) glRasterPos2i(330, 148) Text("=") let21selectkey = Menu(key_menu, 70, 340, 145, 70, 16, let21selectkey.val) # if (nbr_phoneme > 21): let22 = String(" ", 4, 440, 145, 70, 16, liste_phoneme[21], 8) glColor3d(0,0,0) glRasterPos2i(515, 148) Text("=") let22selectkey = Menu(key_menu, 71, 525, 145, 70, 16, let22selectkey.val) # if (nbr_phoneme > 22): let23 = String(" ", 4, 295, 125, 30, 16, liste_phoneme[22], 2) glColor3d(0,0,0) glRasterPos2i(330, 128) Text("=") let23selectkey = Menu(key_menu, 72, 340, 125, 70, 16,let23selectkey.val) # if (nbr_phoneme > 23): let24 = String(" ", 4, 440, 125, 70, 16, liste_phoneme[23], 8) glColor3d(0,0,0) glRasterPos2i(515, 128) Text("=") let24selectkey = Menu(key_menu, 73, 525, 125, 70, 16, let24selectkey.val) # if (nbr_phoneme > 24): let25 = String(" ", 4, 295, 105, 30, 16, liste_phoneme[24], 2) glColor3d(0,0,0) glRasterPos2i(330, 108) Text("=") let25selectkey = Menu(key_menu, 74, 340, 105, 70, 16, let25selectkey.val) # if (nbr_phoneme > 25): let26 = String(" ", 4, 440, 105, 70, 16, liste_phoneme[25], 8) glColor3d(0,0,0) glRasterPos2i(515, 108) Text("=") let26selectkey = Menu(key_menu, 75, 525, 105, 70, 16,let26selectkey.val) # if (nbr_phoneme > 26): let27 = String(" ", 4, 295, 85, 30, 16, liste_phoneme[26], 2) glColor3d(0,0,0) glRasterPos2i(330, 88) Text("=") let27selectkey = Menu(key_menu, 76, 340, 85, 70, 16, let27selectkey.val) # if (nbr_phoneme > 27): let28 = String(" ", 4, 440, 85, 70, 16, liste_phoneme[27], 8) glColor3d(0,0,0) glRasterPos2i(515, 88) Text("=") let28selectkey = Menu(key_menu, 77, 525, 85, 70, 16,let28selectkey.val) # if (nbr_phoneme > 28): let29 = String(" ", 4, 295, 65, 30, 16, liste_phoneme[28], 2) glColor3d(0,0,0) glRasterPos2i(330, 68) Text("=") let29selectkey = Menu(key_menu, 78, 340, 65, 70, 16, let29selectkey.val) # if (nbr_phoneme > 29): let30 = String(" ", 4, 440, 65, 70, 16, liste_phoneme[29], 8) glColor3d(0,0,0) glRasterPos2i(515, 68) Text("=") let30selectkey = Menu(key_menu, 79, 525, 65, 70, 16, let30selectkey.val) # if (nbr_phoneme > 30): let31 = String(" ", 4, 295, 45, 30, 16, liste_phoneme[30], 2) glColor3d(0,0,0) glRasterPos2i(330, 48) Text("=") let31selectkey = Menu(key_menu, 80, 340, 45, 70, 16, let31selectkey.val) # if (nbr_phoneme > 31): let32 = String(" ", 4, 440, 45, 70, 16, liste_phoneme[31], 8) glColor3d(0,0,0) glRasterPos2i(515, 48) Text("=") let32selectkey = Menu(key_menu, 81, 525, 45, 70, 16, let32selectkey.val) Button("Go", 3, 155, 5, 145, 22) if (etape==2): glColor3d(1,1,1) glRasterPos2i(125, 200) Text("Operation Completed") if (etape==0): glColor3d(1,1,1) glRasterPos2i(125, 200) Text("Please select a Mesh'Object and Create all the IPO Curves for your Shapes") if (etape==3): #this stage permits to load a custom dictionnary load_file_text = "Load File" if mon_fichier_dico: Button("Import Loaded File", 2, 5, 5, 145, 22) glColor3d(1,1,1) glRasterPos2i(6, 50) Text("loaded file: %s" % basename(mon_fichier_dico)) load_file_text = "Choose Another File" Button(load_file_text, 8, 125, 180, 145, 22) glRasterPos2i(6, 40) Text("_______________________________________________________") glColor3d(0,0,0) glRasterPos2i(6, 38) Text("_______________________________________________________") Button("Exit", 1, 305, 5, 80, 22)
def testAC3DImport(self): FACE_TWOSIDE = Mesh.FaceModes['TWOSIDE'] FACE_TEX = Mesh.FaceModes['TEX'] MESH_AUTOSMOOTH = Mesh.Modes['AUTOSMOOTH'] MAT_MODE_ZTRANSP = Material.Modes['ZTRANSP'] MAT_MODE_TRANSPSHADOW = Material.Modes['TRANSPSHADOW'] scene = self.scene bl_images = {} # loaded texture images missing_textures = [] # textures we couldn't find objlist = self.objlist[1:] # skip 'world' bmat = [] has_transp_mats = False for mat in self.mlist: name = mat[0] m = Material.New(name) m.rgbCol = (mat[1][0], mat[1][1], mat[1][2]) m.amb = mat[2] m.emit = mat[3] m.specCol = (mat[4][0], mat[4][1], mat[4][2]) m.spec = mat[5] m.alpha = mat[6] if m.alpha < 1.0: m.mode |= MAT_MODE_ZTRANSP has_transp_mats = True bmat.append(m) if has_transp_mats: for mat in bmat: mat.mode |= MAT_MODE_TRANSPSHADOW obj_idx = 0 # index of current obj in loop for obj in objlist: if obj.type == AC_GROUP: continue elif obj.type == AC_LIGHT: light = Lamp.New('Lamp') object = scene.objects.new(light, obj.name) #object.select(True) obj.bl_obj = object if obj.data: light.name = obj.data continue # type AC_POLY: # old .ac files used empty meshes as groups, convert to a real ac group if not obj.vlist and obj.kids: obj.type = AC_GROUP continue mesh = Mesh.New() object = scene.objects.new(mesh, obj.name) #object.select(True) obj.bl_obj = object if obj.data: mesh.name = obj.data mesh.degr = obj.crease # will auto clamp to [1, 80] if not obj.vlist: # no vertices? nothing more to do continue mesh.verts.extend(obj.vlist) objmat_indices = [] for mat in bmat: if bmat.index(mat) in obj.matlist: objmat_indices.append(bmat.index(mat)) mesh.materials += [mat] if DISPLAY_TRANSP and mat.alpha < 1.0: object.transp = True for e in obj.elist: mesh.edges.extend(e) if obj.flist_v: mesh.faces.extend(obj.flist_v) facesnum = len(mesh.faces) if facesnum == 0: # shouldn't happen, of course continue mesh.faceUV = True # checking if the .ac file had duplicate faces (Blender ignores them) if facesnum != len(obj.flist_v): # it has, ugh. Let's clean the uv list: lenfl = len(obj.flist_v) flist = obj.flist_v uvlist = obj.flist_uv cfglist = obj.flist_cfg for f in flist: f.sort() fi = lenfl while fi > 0: # remove data related to duplicates fi -= 1 if flist[fi] in flist[:fi]: uvlist.pop(fi) cfglist.pop(fi) img = None if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] elif obj.tex not in missing_textures: texfname = None objtex = obj.tex baseimgname = bsys.basename(objtex) if bsys.exists(objtex) == 1: texfname = objtex elif bsys.exists(bsys.join(self.importdir, objtex)): texfname = bsys.join(self.importdir, objtex) else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename(objtex.replace('\\','/')) objtex = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex else: objtex = bsys.join(TEXTURES_DIR, baseimgname) if bsys.exists(objtex): texfname = objtex if texfname: try: img = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img: bl_images[obj.tex] = img except: inform("Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex) inform("Couldn't find texture: %s" % baseimgname) for i in range(facesnum): f = obj.flist_cfg[i] fmat = f[0] is_smooth = f[1] twoside = f[2] bface = mesh.faces[i] bface.smooth = is_smooth if twoside: bface.mode |= FACE_TWOSIDE if img: bface.mode |= FACE_TEX bface.image = img bface.mat = objmat_indices.index(fmat) fuv = obj.flist_uv[i] if obj.texoff: uoff = obj.texoff[0] voff = obj.texoff[1] urep = obj.texrep[0] vrep = obj.texrep[1] for uv in fuv: uv[0] *= urep uv[1] *= vrep uv[0] += uoff uv[1] += voff mesh.faces[i].uv = fuv # finally, delete the 1st vertex we added to prevent vindices == 0 mesh.verts.delete(0) mesh.calcNormals() mesh.mode = MESH_AUTOSMOOTH # subdiv: create SUBSURF modifier in Blender if SUBDIV and obj.subdiv > 0: subdiv = obj.subdiv subdiv_render = subdiv # just to be safe: if subdiv_render > 6: subdiv_render = 6 if subdiv > 3: subdiv = 3 modif = object.modifiers.append(Modifier.Types.SUBSURF) modif[Modifier.Settings.LEVELS] = subdiv modif[Modifier.Settings.RENDLEVELS] = subdiv_render obj_idx += 1 self.build_hierarchy() scene.update()
def testAC3DImport(self): FACE_TWOSIDE = Mesh.FaceModes['TWOSIDE'] FACE_TEX = Mesh.FaceModes['TEX'] MESH_AUTOSMOOTH = Mesh.Modes['AUTOSMOOTH'] MAT_MODE_ZTRANSP = Material.Modes['ZTRANSP'] MAT_MODE_TRANSPSHADOW = Material.Modes['TRANSPSHADOW'] scene = self.scene bl_images = {} # loaded texture images missing_textures = [] # textures we couldn't find objlist = self.objlist[1:] # skip 'world' bmat = [] has_transp_mats = False for mat in self.mlist: name = mat[0] m = Material.New(name) m.rgbCol = (mat[1][0], mat[1][1], mat[1][2]) m.amb = mat[2] m.emit = mat[3] m.specCol = (mat[4][0], mat[4][1], mat[4][2]) m.spec = mat[5] m.mirCol = (mat[6][0], mat[6][1], mat[6][2]) m.alpha = mat[7] if m.alpha < 1.0: m.mode |= MAT_MODE_ZTRANSP has_transp_mats = True bmat.append(m) if has_transp_mats: for mat in bmat: mat.mode |= MAT_MODE_TRANSPSHADOW obj_idx = 0 # index of current obj in loop for obj in objlist: if obj.type == AC_GROUP: continue elif obj.type == AC_LIGHT: light = Lamp.New('Lamp') object = scene.objects.new(light, obj.name) #object.select(True) obj.bl_obj = object if obj.data: light.name = obj.data continue # type AC_POLY: # old .ac files used empty meshes as groups, convert to a real ac group if not obj.vlist and obj.kids: obj.type = AC_GROUP continue mesh = Mesh.New() object = scene.objects.new(mesh, obj.name) #object.select(True) obj.bl_obj = object if obj.data: mesh.name = obj.data mesh.degr = obj.crease # will auto clamp to [1, 80] if not obj.vlist: # no vertices? nothing more to do continue mesh.verts.extend(obj.vlist) objmat_indices = [] for mat in bmat: if bmat.index(mat) in obj.matlist: objmat_indices.append(bmat.index(mat)) mesh.materials += [mat] if DISPLAY_TRANSP and mat.alpha < 1.0: object.transp = True for e in obj.elist: mesh.edges.extend(e) if obj.flist_v: mesh.faces.extend(obj.flist_v) facesnum = len(mesh.faces) if facesnum == 0: # shouldn't happen, of course continue mesh.faceUV = True # checking if the .ac file had duplicate faces (Blender ignores them) if facesnum != len(obj.flist_v): # it has, ugh. Let's clean the uv list: lenfl = len(obj.flist_v) flist = obj.flist_v uvlist = obj.flist_uv cfglist = obj.flist_cfg for f in flist: f.sort() fi = lenfl while fi > 0: # remove data related to duplicates fi -= 1 if flist[fi] in flist[:fi]: uvlist.pop(fi) cfglist.pop(fi) img = None if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] elif obj.tex not in missing_textures: texfname = None objtex = obj.tex baseimgname = bsys.basename(objtex) if bsys.exists(objtex) == 1: texfname = objtex elif bsys.exists(bsys.join(self.importdir, objtex)): texfname = bsys.join(self.importdir, objtex) else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename(objtex.replace('\\','/')) objtex = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex else: objtex = bsys.join(TEXTURES_DIR, baseimgname) if bsys.exists(objtex): texfname = objtex if texfname: try: img = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img: bl_images[obj.tex] = img except: inform("Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex) inform("Couldn't find texture: %s" % baseimgname) for i in range(facesnum): f = obj.flist_cfg[i] fmat = f[0] is_smooth = f[1] twoside = f[2] bface = mesh.faces[i] bface.smooth = is_smooth if twoside: bface.mode |= FACE_TWOSIDE if img: bface.mode |= FACE_TEX bface.image = img bface.mat = objmat_indices.index(fmat) fuv = obj.flist_uv[i] if obj.texoff: uoff = obj.texoff[0] voff = obj.texoff[1] urep = obj.texrep[0] vrep = obj.texrep[1] for uv in fuv: uv[0] *= urep uv[1] *= vrep uv[0] += uoff uv[1] += voff mesh.faces[i].uv = fuv # finally, delete the 1st vertex we added to prevent vindices == 0 mesh.verts.delete(0) mesh.calcNormals() mesh.mode = MESH_AUTOSMOOTH # subdiv: create SUBSURF modifier in Blender if SUBDIV and obj.subdiv > 0: subdiv = obj.subdiv subdiv_render = subdiv # just to be safe: if subdiv_render > 6: subdiv_render = 6 if subdiv > 3: subdiv = 3 modif = object.modifiers.append(Modifier.Types.SUBSURF) modif[Modifier.Settings.LEVELS] = subdiv modif[Modifier.Settings.RENDLEVELS] = subdiv_render obj_idx += 1 self.build_hierarchy() scene.update()
def testAC3DImport(self): FACE_TWOSIDE = Mesh.FaceModes['TWOSIDE'] FACE_TEX = Mesh.FaceModes['TILES'] #FACE_TEX = Mesh.FaceModes['TEX'] MESH_AUTOSMOOTH = Mesh.Modes['AUTOSMOOTH'] MAT_MODE_ZTRANSP = Material.Modes['ZTRANSP'] MAT_MODE_TRANSPSHADOW = Material.Modes['TRANSPSHADOW'] scene = self.scene bl_images = {} # loaded texture images missing_textures = [] # textures we couldn't find bl_textures = {} # loaded textures objlist = self.objlist[1:] # skip 'world' #bmat = [] bmat = {} m = None has_transp_mats = False for mat in self.mlist: name = mat[0] # if name=='': name = 'BaseMaterial' if m == None: m = Material.New(name) m.rgbCol = (mat[1][0], mat[1][1], mat[1][2]) m.amb = mat[2] m.emit = mat[3] m.specCol = (mat[4][0], mat[4][1], mat[4][2]) m.spec = mat[5] m.alpha = mat[6] #force it to zero because that is how Speed Dreams / Torcs work m.alpha = 0.0 if m.alpha < 1.0: m.mode |= MAT_MODE_ZTRANSP has_transp_mats = True # bmat[name]=m # if has_transp_mats: # for mat in bmat: # mat.mode |= MAT_MODE_TRANSPSHADOW obj_idx = 0 # index of current obj in loop for obj in objlist: if obj.type == AC_GROUP: continue elif obj.type == AC_LIGHT: light = Lamp.New('Lamp') object = scene.objects.new(light, obj.name) #object.select(True) obj.bl_obj = object if obj.data: light.name = obj.data continue # type AC_POLY: # old .ac files used empty meshes as groups, convert to a real ac group if not obj.vlist and obj.kids: obj.type = AC_GROUP continue mesh = Mesh.New() object = scene.objects.new(mesh, obj.name) #object.select(True) obj.bl_obj = object if obj.data: mesh.name = obj.data mesh.degr = obj.crease # will auto clamp to [1, 80] if not obj.vlist: # no vertices? nothing more to do continue #Setup UV Layers mesh.addUVLayer("ImageUV") mesh.addUVLayer("ShadowUV") mesh.activeUVLayer = "ImageUV" mesh.verts.extend(obj.vlist) objmat_indices = [] for e in obj.elist: mesh.edges.extend(e) if obj.flist_v: mesh.faces.extend(obj.flist_v) facesnum = len(mesh.faces) if facesnum == 0: # shouldn't happen, of course continue mesh.faceUV = True # checking if the .ac file had duplicate faces (Blender ignores them) if facesnum != len(obj.flist_v): # it has, ugh. Let's clean the uv list: lenfl = len(obj.flist_v) flist = obj.flist_v uvlist = obj.flist_uv uvlist2 = obj.flist_uv2 cfglist = obj.flist_cfg for f in flist: f.sort() fi = lenfl while fi > 0: # remove data related to duplicates fi -= 1 if flist[fi] in flist[:fi]: uvlist.pop(fi) cfglist.pop(fi) if len(uvlist2) > 0: uvlist2.pop(fi) img = None img2 = None if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] elif obj.tex not in missing_textures: texfname = None objtex = obj.tex baseimgname = bsys.basename(objtex) if bsys.exists(objtex) == 1: texfname = objtex else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename( objtex.replace('\\', '/')) objtex = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex else: objtex = bsys.join(TEXTURES_DIR2, baseimgname) if bsys.exists(objtex): texfname = objtex else: inform( "Couldn't find texture in alt path %s" % TEXTURES_DIR2) if texfname: try: img = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img: bl_images[obj.tex] = img except: inform("THROW: Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex) inform("Couldn't find texture: %s" % baseimgname) if obj.tex2 != '': if obj.tex2 in bl_images.keys(): img2 = bl_images[obj.tex2] elif obj.tex2 not in missing_textures: texfname = None objtex2 = obj.tex2 baseimgname = bsys.basename(objtex2) if bsys.exists(objtex2) == 1: texfname = objtex2 else: if baseimgname.find('\\') > 0: baseimgname = bsys.basename( objtex2.replace('\\', '/')) objtex2 = bsys.join(self.importdir, baseimgname) if bsys.exists(objtex) == 1: texfname = objtex2 else: objtex2 = bsys.join(TEXTURES_DIR2, baseimgname) if bsys.exists(objtex2): texfname = objtex2 else: inform( "Couldn't find texture in alt path %s" % objtex2) if texfname: try: img2 = Image.Load(texfname) # Commented because it's unnecessary: #img.xrep = int(obj.texrep[0]) #img.yrep = int(obj.texrep[1]) if img2: bl_images[obj.tex2] = img2 except: inform("THROW: Couldn't load texture: %s" % baseimgname) else: missing_textures.append(obj.tex2) inform("Couldn't find texture: %s" % baseimgname) if obj.tex not in bmat.keys(): if img: #Create a new material with a texture attached to it m1 = Material.New(obj.tex) m1.rgbCol = m.rgbCol m1.amb = m.amb m1.emit = m.emit m1.specCol = m.specCol m1.spec = m.spec m1.alpha = m.alpha texname = 'Tex%s' % obj.tex texname2 = 'Tex2%s' % obj.tex if img: iname = img.getName() if iname not in bl_textures.keys(): basetex = Texture.New(iname) basetex.setType('Image') map1 = Texture.MapTo.COL | Texture.MapTo.ALPHA basetex.image = img bl_textures[iname] = basetex basetex = bl_textures[iname] m1.setTexture(0, basetex, Texture.TexCo.UV, map1) if img2: iname2 = img2.getName() if iname2 not in bl_textures.keys(): basetex2 = Texture.New(iname2) basetex2.setType('Image') map2 = Texture.MapTo.COL basetex2.image = img2 bl_textures[iname2] = basetex2 else: map2 = Texture.MapTo.COL basetex2 = bl_textures[iname2] m1.setTexture(1, basetex2, Texture.TexCo.UV, map2) if m1.alpha < 1.0: m1.mode |= MAT_MODE_ZTRANSP has_transp_mats = True mtextures = m1.getTextures() tunit = 0 for mtex in mtextures: if not (mtex == None): if tunit == 1: mtex.uvlayer = "ShadowUV" mtex.colfac = 0.3 tunit = tunit + 1 if tunit == 0: mtex.uvlayer = "ImageUV" tunit = tunit + 1 bmat[obj.tex] = m1 if obj.tex != '': if obj.tex in bl_images.keys(): img = bl_images[obj.tex] #TODO attach correct materials to objects if obj.tex in bmat.keys(): mat1 = bmat[obj.tex] if len(mesh.materials) == 0: mesh.materials += [mat1] else: inform('Material %s not found\n' % obj.tex) for i in range(facesnum): f = obj.flist_cfg[i] fmat = f[0] is_smooth = f[1] twoside = f[2] bface = mesh.faces[i] bface.smooth = is_smooth if twoside: bface.mode |= FACE_TWOSIDE if img: bface.mode |= FACE_TEX bface.image = img #TODO handle material properly #bface.mat = objmat_indices.index(fmat) bface.mat = 0 fuv = obj.flist_uv[i] if len(obj.flist_uv2) > 0: fuv2 = obj.flist_uv2[i] if obj.texoff: uoff = obj.texoff[0] voff = obj.texoff[1] urep = obj.texrep[0] vrep = obj.texrep[1] for uv in fuv: uv[0] *= urep uv[1] *= vrep uv[0] += uoff uv[1] += voff if len(fuv2) > 0: for uv2 in fuv2: uv2[0] *= urep uv2[1] *= vrep uv2[0] += uoff uv2[1] += voff mesh.activeUVLayer = "ImageUV" mesh.faces[i].uv = fuv if len(fuv2) > 0: mesh.activeUVLayer = "ShadowUV" mesh.faces[i].uv = fuv2 # for uv2 in fuv2: # inform('UV2 coords %.5f %.5f\n' % (uv2[0],uv2[1])) mesh.activeUVLayer = "ImageUV" # finally, delete the 1st vertex we added to prevent vindices == 0 mesh.verts.delete(0) mesh.calcNormals() mesh.mode = MESH_AUTOSMOOTH obj_idx += 1 self.build_hierarchy() scene.update()