#!BPY """ Registration info for Blender menus: <- these words are ignored Name: 'Object Name Editor' Blender: 232 Group: 'Object' Tip: 'GUI to select and rename objects.' """ __author__ = "Jean-Michel Soler (jms)" __url__ = ("blender", "elysiun", "Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_renameobjectgui.htm", "Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender") __version__ = "233" __bpydoc__ = """\ This script offers a GUI to rename selected objects according to a given rule. Usage: Open it from the 3d View's "Object->Scripts" menu and select the objects to rename and the rule from the buttons in its GUI. """ # ---------------------------------------------------------- # Name OBJECT changer # (c) 2004 jean-michel soler # ----------------------------------------------------------- #---------------------------------------------- # Page officielle/offcial page du blender python Name OBJECT changer: # http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_renameobjectgui.htm # Communiquer les problemes et erreurs sur: # To Communicate problems and errors on: # http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender #--------------------------------------------- # Blender Artistic License # http://download.blender.org/documentation/html/x21254.html #--------------------------------------------- CVS=0 import Blender from Blender import * from Blender.Draw import * from Blender.BGL import * O = Object.Get() taglist=[] stringlist=[[],[]] def renew(taglist): global O MAJ='ABCDEFGHIJKLMNOPQRSTUVWXYZ' O = Object.Get() if CVS==0: param= [ [p.getName(),O.index(p),str(p.getType())] for p in O ] else: param= [ [p.getName(),O.index(p),str(p.getType()),O[O.index(p)].isSelected()] for p in O ] PARAM={} evt=9 stringlist=[[],[],[]] for p in param: if p[0] in taglist or len(p)>3: if CVS==0: PARAM[p[0]]=[Create(1),evt,p[1],p[2],Create(p[0]),evt+1] elif p[3]==1: PARAM[p[0]]=[Create(1),evt,p[1],p[2],Create(p[0]),evt+1] elif p[3]==0: PARAM[p[0]]=[Create(0),evt,p[1],p[2],Create(p[0]),evt+1] stringlist[0].append(evt+1) stringlist[1].append(p[0]) stringlist[2].append(evt) else: PARAM[p[0]]=[Create(0),evt,p[1],p[2],Create(p[0]),evt+1] stringlist[0].append(evt+1) stringlist[1].append(p[0]) stringlist[2].append(evt) evt+=2 return PARAM,stringlist NEWNAME=Create('Name') alignment={'BEGIN' : [Create(1),5], 'END' : [Create(0),6], 'POINT' : [Create(0),7], 'FULL' : [Create(0),8]} def rename(): global NEWNAME, alignment, O, taglist, PARAM, stringlist taglist=[] for p in PARAM.keys(): if PARAM[p][0].val==1: if alignment['END'][0].val: O[PARAM[p][2]].setName(p+NEWNAME.val) taglist.append(p+NEWNAME.val) elif alignment['BEGIN'][0].val: O[PARAM[p][2]].setName(NEWNAME.val+p) taglist.append(NEWNAME.val+p) elif alignment['FULL'][0].val: O[PARAM[p][2]].setName(NEWNAME.val) taglist.append(O[PARAM[p][2]].getName()) PARAM, stringlist =renew(taglist) PARAM, stringlist = renew(taglist) def EVENT(evt,val): pass def BUTTON(evt): global PARAM , alignment, O, stringlist, CVS if (evt==1): Exit() elif (evt==2): rename() elif (evt==3): PARAM, stringlist = renew(taglist) elif (evt in [5,6,7,8]): for k in alignment.keys(): if alignment[k][1]!=evt: alignment[k][0].val=0 elif (evt in stringlist[0]): O[PARAM[stringlist[1][(evt-9)/2]][2]].setName(PARAM[stringlist[1][(evt-9)/2]][4].val) PARAM, stringlist = renew(taglist) elif (evt in stringlist[2]): try: O[PARAM[stringlist[1][(evt-9)/2]][2]].select(PARAM[stringlist[1][(evt-9)/2]][0].val) except: pass Blender.Redraw() def DRAW(): global PARAM, O, NEWNAME, alignment #glColor3f(0.7, 0.7, 0.7) glClear(GL_COLOR_BUFFER_BIT) glColor3f(0.1, 0.1, 0.15) size=Buffer(GL_FLOAT, 4) glGetFloatv(GL_SCISSOR_BOX, size) size= size.list for s in [0,1,2,3]: size[s]=int(size[s]) ligne=20 Button ("Exit",1,20,1,80,ligne) Button ("Rename",2,102,1,80,ligne) Button ("Renew",3,184,1,80,ligne) glRasterPos2f(20, ligne*2-10) Text("Object Name Editor") NEWNAME=String('Add string : ', 4, 150, ligne*2-16, 150, 18, NEWNAME.val,120 ) key=alignment.keys() key.sort() n=150+150+4 for k in key: alignment[k][0]=Toggle(k,alignment[k][1],n,ligne*2-16, 40, 18, alignment[k][0].val) n+=40+4 max=size[3] / 22 -2 pos = 1 decal = 20 keys=[[PARAM[k][1],k] for k in PARAM.keys()] keys.sort() for p_ in keys: p=p_[1] if pos==max: decal+=152 pos=1 else: pos+=1 PARAM[p][0]=Toggle('S',PARAM[p][1],decal,pos*22+22,20,20, PARAM[p][0].val,"Select this one for a group renaming") PARAM[p][4]=String('> ',PARAM[p][5],decal+20,pos*22+22,90,20, PARAM[p][4].val,200, "string button to rename immediately but only this object") glRasterPos2f(decal+115,pos*22+22) Text(PARAM[p][3][:4]) Register(DRAW,EVENT,BUTTON)