diff options
Diffstat (limited to 'release/scripts/obdatacopier.py')
-rw-r--r-- | release/scripts/obdatacopier.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/release/scripts/obdatacopier.py b/release/scripts/obdatacopier.py new file mode 100644 index 00000000000..82cabdb8b36 --- /dev/null +++ b/release/scripts/obdatacopier.py @@ -0,0 +1,142 @@ +#!BPY + +""" Registration info for Blender menus: <- these words are ignored +Name: 'Data Copier' +Blender: 232 +Group: 'Object' +Tip: 'Copy data from active object to other selected ones.' +""" + +# ---------------------------------------------------------- +# Object DATA copier 0.1.1 +# (c) 2004 jean-michel soler +# ----------------------------------------------------------- +#---------------------------------------------- +# Page officielle/official page du blender python Object DATA copier: +# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_lampdatacopier.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 +#--------------------------------------------- + +import Blender +from Blender import * +from Blender.Draw import * +from Blender.BGL import * + + +O = Object.GetSelected() + +def renew(): + global O + MAJ='ABCDEFGHIJKLMNOPQRSTUVWXYZ' + O = Object.GetSelected() + param= [ p for p in dir(O[0].getData()) if (p.find('set')!=0 and p.find('get')!=0 and (MAJ.find(p[0])==-1 or (p in ['R','G','B']))) ] + PARAM={} + evt=4 + doc='doc' + for p in param: + try: + if p=='mode': + try: + exec "doc=str(%s.Modes)+' ; value : %s'"%( O[0].getType(), str(O[0].getData().mode) ) + except: + exec """doc= '%s'+' value = '+ str(O[0].getData().%s)"""%(p,p) + elif p=='type': + try: + exec "doc=str(%s.Types)+' ; value : %s'"%( O[0].getType(), str(O[0].getData().type) ) + except: + exec """doc= '%s'+' value = '+ str(O[0].getData().%s)"""%(p,p) + else: + exec """doc= '%s'+' value = '+ str(O[0].getData().%s)"""%(p,p) + if doc.find('built-in')!=-1: + exec """doc= 'This is a function ! Doc = '+ str(O[0].getData().%s.__doc__)"""%(p) + except: + doc='Doc...' + PARAM[p]=[Create(0),evt,doc] + evt+=1 + return PARAM + +def copy(): + global PARAM + OBJECT=None + TYPE=None + + for O in Blender.Object.GetSelected(): + if O.getType()!='Mesh' and O.getType()!='Empty' : + if OBJECT==None and TYPE==None: + OBJECT=O.getData() + TYPE= O.getType() + + elif O.getType()==TYPE: + for p in PARAM.keys(): + if PARAM[p][0].val==1: + try: + exec "O.getData().%s=OBJECT.%s"%(p,p) + except: + errormsg = "Type Error|It's not possible to copy %s to %s types." % (p,TYPE) + Blender.Draw.PupMenu(errormsg) + +PARAM= renew() + +def EVENT(evt,val): + pass + +def BUTTON(evt): + global PARAM + if (evt==1): + Exit() + + if (evt==2): + + copy() + Blender.Redraw() + + if (evt==3): + PARAM= renew() + Blender.Redraw() + +def DRAW(): + global PARAM, O + 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,4,80,ligne) + Button ("Copy",2,102,4,80,ligne) + Button ("renew",3,184,4,80,ligne) + + glRasterPos2f(20, ligne*2-8) + Text(O[0].getType()+" DATA copier") + + + max=size[3] / 22 -2 + pos = 1 + decal = 20 + key=PARAM.keys() + key.sort() + for p in key: + if pos==max: + decal+=102 + pos=1 + else: + pos+=1 + PARAM[p][0]=Toggle(p, + PARAM[p][1], + decal, + pos*22+22, + 100, + 20, + PARAM[p][0].val,str(PARAM[p][2])) + + +Register(DRAW,EVENT,BUTTON) |