179 lines
4.7 KiB
Python
179 lines
4.7 KiB
Python
#!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 = list(Scene.GetCurrent().objects)
|
|
stringlist=[[],[]]
|
|
|
|
|
|
def renew():
|
|
global O
|
|
|
|
#O = Object.Get()
|
|
O = list(Scene.GetCurrent().objects)
|
|
#param= [ [p.name, i, p.getType()] for i, p in enumerate(O) ]
|
|
|
|
PARAM={}
|
|
evt=9
|
|
stringlist=[[],[],[]]
|
|
for i, ob in enumerate(O):
|
|
obname= ob.name
|
|
PARAM[obname] = [Create(ob.sel), evt, i, ob.getType(), Create(obname), evt+1, ob]
|
|
|
|
stringlist[0].append(evt+1)
|
|
stringlist[1].append(obname)
|
|
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, PARAM, stringlist
|
|
newname= NEWNAME.val
|
|
for obname, value in PARAM.iteritems():
|
|
if value[0].val: # Selected
|
|
if alignment['END'][0].val:
|
|
value[6].setName(obname+newname)
|
|
elif alignment['BEGIN'][0].val:
|
|
value[6].setName(newname+obname)
|
|
elif alignment['FULL'][0].val:
|
|
value[6].setName(newname)
|
|
PARAM, stringlist = renew()
|
|
|
|
PARAM, stringlist = renew()
|
|
|
|
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()
|
|
|
|
elif (evt in [5,6,7,8]):
|
|
for k in alignment.iterkeys():
|
|
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()
|
|
|
|
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 = 0
|
|
decal = 20
|
|
|
|
keys=[[PARAM[k][1],k] for k in PARAM.iterkeys()]
|
|
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+24)
|
|
Text(PARAM[p][3][:4])
|
|
|
|
if __name__=='__main__':
|
|
Register(DRAW,EVENT,BUTTON)
|
|
|