home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2005 November / WNnov2005.iso / Windows / Equipement / Blender / blender-2.37a-windows.exe / $_5_ / .blender / scripts / renameobjectbyblock.py < prev    next >
Text File  |  2004-11-07  |  6KB  |  190 lines

  1. #!BPY
  2.  
  3. """ Registration info for Blender menus: <- these words are ignored
  4. Name: 'Object Name Editor'
  5. Blender: 232
  6. Group: 'Object'
  7. Tip: 'GUI to select and rename objects.'
  8. """
  9.  
  10. __author__ = "Jean-Michel Soler (jms)"
  11. __url__ = ("blender", "elysiun",
  12. "Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_renameobjectgui.htm",
  13. "Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
  14. __version__ = "233"
  15.  
  16. __bpydoc__ = """\
  17. This script offers a GUI to rename selected objects according to a given
  18. rule.
  19.  
  20. Usage:
  21.  
  22. Open it from the 3d View's "Object->Scripts" menu and select the objects to
  23. rename and the rule from the buttons in its GUI.
  24. """
  25.  
  26. # ----------------------------------------------------------
  27. # Name OBJECT changer
  28. # (c) 2004 jean-michel soler
  29. # -----------------------------------------------------------
  30. #----------------------------------------------
  31. # Page officielle/offcial page du blender python Name OBJECT changer:
  32. #   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_renameobjectgui.htm
  33. # Communiquer les problemes et erreurs sur:
  34. # To Communicate problems and errors on:
  35. #   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
  36. #--------------------------------------------- 
  37. # Blender Artistic License
  38. # http://download.blender.org/documentation/html/x21254.html
  39. #---------------------------------------------
  40.  
  41. CVS=0
  42.  
  43. import Blender
  44. from Blender import *
  45. from Blender.Draw import *
  46. from Blender.BGL import *
  47.  
  48.  
  49. O = Object.Get()
  50. taglist=[]
  51. stringlist=[[],[]]
  52.  
  53.  
  54. def renew(taglist):
  55.      global O
  56.      MAJ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  57.      O = Object.Get()
  58.      if CVS==0:
  59.         param= [ [p.getName(),O.index(p),str(p.getType())] for p in O ]
  60.      else:
  61.         param= [ [p.getName(),O.index(p),str(p.getType()),O[O.index(p)].isSelected()] for p in O ]
  62.      PARAM={}
  63.      evt=9
  64.      stringlist=[[],[],[]]
  65.      for p in param:
  66.          if p[0] in taglist or len(p)>3:
  67.             if CVS==0:
  68.                PARAM[p[0]]=[Create(1),evt,p[1],p[2],Create(p[0]),evt+1]
  69.             elif p[3]==1:
  70.                PARAM[p[0]]=[Create(1),evt,p[1],p[2],Create(p[0]),evt+1]
  71.             elif p[3]==0:
  72.                PARAM[p[0]]=[Create(0),evt,p[1],p[2],Create(p[0]),evt+1]
  73.             stringlist[0].append(evt+1)
  74.             stringlist[1].append(p[0])
  75.             stringlist[2].append(evt)
  76.          else:   
  77.             PARAM[p[0]]=[Create(0),evt,p[1],p[2],Create(p[0]),evt+1]
  78.             stringlist[0].append(evt+1)
  79.             stringlist[1].append(p[0])
  80.             stringlist[2].append(evt) 
  81.          evt+=2
  82.      return PARAM,stringlist
  83.  
  84. NEWNAME=Create('Name')
  85.  
  86. alignment={'BEGIN' : [Create(1),5],
  87.            'END'   : [Create(0),6],
  88.            'POINT' : [Create(0),7],
  89.            'FULL'  : [Create(0),8]}
  90.  
  91. def rename():
  92.      global NEWNAME, alignment, O, taglist, PARAM, stringlist
  93.      taglist=[]
  94.      for p in PARAM.keys():
  95.         if PARAM[p][0].val==1:
  96.            if alignment['END'][0].val:  
  97.              O[PARAM[p][2]].setName(p+NEWNAME.val) 
  98.              taglist.append(p+NEWNAME.val)
  99.            elif alignment['BEGIN'][0].val:
  100.              O[PARAM[p][2]].setName(NEWNAME.val+p) 
  101.              taglist.append(NEWNAME.val+p)
  102.            elif alignment['FULL'][0].val:
  103.              O[PARAM[p][2]].setName(NEWNAME.val) 
  104.              taglist.append(O[PARAM[p][2]].getName())
  105.      PARAM, stringlist =renew(taglist)
  106.     
  107. PARAM, stringlist = renew(taglist)
  108.  
  109. def EVENT(evt,val):
  110.    pass
  111.  
  112. def BUTTON(evt):
  113.    global PARAM  , alignment, O, stringlist, CVS
  114.    if (evt==1):
  115.          Exit()
  116.    elif (evt==2):
  117.          rename()
  118.    elif (evt==3):
  119.          PARAM, stringlist = renew(taglist)
  120.  
  121.    elif (evt in [5,6,7,8]):    
  122.          for k in alignment.keys():
  123.              if alignment[k][1]!=evt:
  124.                 alignment[k][0].val=0
  125.  
  126.  
  127.    elif (evt in stringlist[0]):
  128.          O[PARAM[stringlist[1][(evt-9)/2]][2]].setName(PARAM[stringlist[1][(evt-9)/2]][4].val)
  129.          PARAM, stringlist = renew(taglist)
  130.  
  131.    elif (evt in stringlist[2]):
  132.        try:
  133.          O[PARAM[stringlist[1][(evt-9)/2]][2]].select(PARAM[stringlist[1][(evt-9)/2]][0].val)
  134.        except:
  135.         pass
  136.  
  137.    Blender.Redraw()
  138.  
  139. def DRAW():
  140.   global PARAM, O, NEWNAME, alignment
  141.   
  142.  
  143.   #glColor3f(0.7, 0.7, 0.7)
  144.   glClear(GL_COLOR_BUFFER_BIT)
  145.   glColor3f(0.1, 0.1, 0.15)    
  146.  
  147.   size=Buffer(GL_FLOAT, 4)
  148.   glGetFloatv(GL_SCISSOR_BOX, size)
  149.   size= size.list
  150.   for s in [0,1,2,3]: size[s]=int(size[s])
  151.   ligne=20
  152.  
  153.   Button ("Exit",1,20,1,80,ligne)
  154.   Button ("Rename",2,102,1,80,ligne)
  155.   Button ("Renew",3,184,1,80,ligne)
  156.  
  157.   glRasterPos2f(20, ligne*2-10)
  158.   Text("Object Name Editor")
  159.   NEWNAME=String('Add string : ', 4, 150, ligne*2-16, 150, 18, NEWNAME.val,120 )
  160.  
  161.   key=alignment.keys()
  162.   key.sort()
  163.   n=150+150+4
  164.   for k in key:
  165.       alignment[k][0]=Toggle(k,alignment[k][1],n,ligne*2-16, 40, 18, alignment[k][0].val)
  166.       n+=40+4
  167.  
  168.   max=size[3] / 22 -2
  169.   pos   = 1
  170.   decal = 20
  171.  
  172.   keys=[[PARAM[k][1],k] for k in PARAM.keys()]
  173.   keys.sort()
  174.  
  175.   
  176.   for p_ in keys:
  177.      p=p_[1] 
  178.      if  pos==max:
  179.          decal+=152
  180.          pos=1
  181.      else:
  182.          pos+=1       
  183.      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")
  184.      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")
  185.  
  186.      glRasterPos2f(decal+115,pos*22+22)
  187.      Text(PARAM[p][3][:4])
  188. Register(DRAW,EVENT,BUTTON)
  189.  
  190.