mesh cleanup optimized with some LC's

renameobjectbyblock - made more readable, only operate on objects in the current scene. optimized dict usage.
This commit is contained in:
Campbell Barton 2006-07-10 10:46:53 +00:00
parent 309fb2ec26
commit 5f761a4707
2 changed files with 45 additions and 56 deletions

@ -55,10 +55,7 @@ def rem_free_verts(me):
for v in e: # loop on edge verts for v in e: # loop on edge verts
vert_users[v.index]+=1 vert_users[v.index]+=1
verts_free= [] verts_free= [i for i, users in enumerate(vert_users) if not users]
for i, users in enumerate(vert_users):
if not users:
verts_free.append(i)
if verts_free: if verts_free:
pass pass
@ -68,14 +65,17 @@ def rem_free_verts(me):
def rem_free_edges(me, limit=None): def rem_free_edges(me, limit=None):
''' Only remove based on limit if a limit is set, else remove all ''' ''' Only remove based on limit if a limit is set, else remove all '''
def sortPair(a,b): def sortPair(a,b):
return min(a,b), max(a,b) if a>b:
return b,a
else:
return a,b
edgeDict= {} # will use a set when python 2.4 is standard. edgeDict= {} # will use a set when python 2.4 is standard.
for f in me.faces: for f in me.faces:
v= f.v fidxs= [v.index for v in f.v]
for i in xrange(len(v)): for i in xrange(len(fidxs)):
edgeDict[sortPair(v[i].index, v[i-1].index)]= None edgeDict[sortPair(fidxs[i], fidxs[i-1])]= None
edges_free= [] edges_free= []
for e in me.edges: for e in me.edges:

@ -46,37 +46,27 @@ from Blender.Draw import *
from Blender.BGL import * from Blender.BGL import *
O = Object.Get()
taglist=[] O = Scene.GetCurrent().getChildren()
stringlist=[[],[]] stringlist=[[],[]]
def renew(taglist): def renew():
global O global O
MAJ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
O = Object.Get() #O = Object.Get()
if CVS==0: O= Scene.GetCurrent().getChildren()
param= [ [p.getName(),O.index(p),str(p.getType())] for p in O ] #param= [ [p.name, i, p.getType()] for i, p in enumerate(O) ]
else:
param= [ [p.getName(),O.index(p),str(p.getType()),O[O.index(p)].isSelected()] for p in O ]
PARAM={} PARAM={}
evt=9 evt=9
stringlist=[[],[],[]] stringlist=[[],[],[]]
for p in param: for i, ob in enumerate(O):
if p[0] in taglist or len(p)>3: obname= ob.name
if CVS==0: PARAM[obname] = [Create(ob.sel), evt, i, ob.getType(), Create(obname), evt+1, ob]
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[0].append(evt+1)
stringlist[1].append(p[0]) stringlist[1].append(obname)
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) stringlist[2].append(evt)
evt+=2 evt+=2
return PARAM,stringlist return PARAM,stringlist
@ -89,22 +79,19 @@ alignment={'BEGIN' : [Create(1),5],
'FULL' : [Create(0),8]} 'FULL' : [Create(0),8]}
def rename(): def rename():
global NEWNAME, alignment, O, taglist, PARAM, stringlist global NEWNAME, alignment, O, PARAM, stringlist
taglist=[] newname= NEWNAME.val
for p in PARAM.keys(): for obname, value in PARAM.iteritems():
if PARAM[p][0].val==1: if value[0].val: # Selected
if alignment['END'][0].val: if alignment['END'][0].val:
O[PARAM[p][2]].setName(p+NEWNAME.val) value[6].setName(obname+newname)
taglist.append(p+NEWNAME.val)
elif alignment['BEGIN'][0].val: elif alignment['BEGIN'][0].val:
O[PARAM[p][2]].setName(NEWNAME.val+p) value[6].setName(newname+obname)
taglist.append(NEWNAME.val+p)
elif alignment['FULL'][0].val: elif alignment['FULL'][0].val:
O[PARAM[p][2]].setName(NEWNAME.val) value[6].setName(newname)
taglist.append(O[PARAM[p][2]].getName()) PARAM, stringlist = renew()
PARAM, stringlist =renew(taglist)
PARAM, stringlist = renew(taglist) PARAM, stringlist = renew()
def EVENT(evt,val): def EVENT(evt,val):
pass pass
@ -116,17 +103,17 @@ def BUTTON(evt):
elif (evt==2): elif (evt==2):
rename() rename()
elif (evt==3): elif (evt==3):
PARAM, stringlist = renew(taglist) PARAM, stringlist = renew()
elif (evt in [5,6,7,8]): elif (evt in [5,6,7,8]):
for k in alignment.keys(): for k in alignment.iterkeys():
if alignment[k][1]!=evt: if alignment[k][1]!=evt:
alignment[k][0].val=0 alignment[k][0].val=0
elif (evt in stringlist[0]): elif (evt in stringlist[0]):
O[PARAM[stringlist[1][(evt-9)/2]][2]].setName(PARAM[stringlist[1][(evt-9)/2]][4].val) O[PARAM[stringlist[1][(evt-9)/2]][2]].setName(PARAM[stringlist[1][(evt-9)/2]][4].val)
PARAM, stringlist = renew(taglist) PARAM, stringlist = renew()
elif (evt in stringlist[2]): elif (evt in stringlist[2]):
try: try:
@ -156,20 +143,20 @@ def DRAW():
glRasterPos2f(20, ligne*2-10) glRasterPos2f(20, ligne*2-10)
Text("Object Name Editor") Text("Object Name Editor")
NEWNAME=String('Add string : ', 4, 150, ligne*2-16, 150, 18, NEWNAME.val,120 ) NEWNAME=String('Add String: ', 4, 150, ligne*2-16, 150, 18, NEWNAME.val,120 )
key=alignment.keys() key= alignment.keys()
key.sort() key.sort()
n=150+150+4 n=150+150+4
for k in key: for k in key:
alignment[k][0]=Toggle(k,alignment[k][1],n,ligne*2-16, 40, 18, alignment[k][0].val) alignment[k][0]= Toggle(k,alignment[k][1],n,ligne*2-16, 40, 18, alignment[k][0].val)
n+=40+4 n+=40+4
max=size[3] / 22 -2 max=size[3] / 22 -2
pos = 1 pos = 0
decal = 20 decal = 20
keys=[[PARAM[k][1],k] for k in PARAM.keys()] keys=[[PARAM[k][1],k] for k in PARAM.iterkeys()]
keys.sort() keys.sort()
@ -181,9 +168,11 @@ def DRAW():
else: else:
pos+=1 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][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") 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) glRasterPos2f(decal+115,pos*22+24)
Text(PARAM[p][3][:4]) Text(PARAM[p][3][:4])
Register(DRAW,EVENT,BUTTON)
if __name__=='__main__':
Register(DRAW,EVENT,BUTTON)