#!BPY """ Registration info for Blender menus: <- these words are ignored Name: 'Copy RVK' Blender: 233 Group: 'Misc' Tip: 'Form a RVK position by copying vertex from a mesh to another.' """ import Blender from Blender import * BaseObject = Draw.Create('') TargetObjet = Draw.Create('') RVKFrame = Draw.Create(20) EXIT_EVT = 1 NOOP_EVT = 2 SET_REF_EVT = 3 SET_RVK_EVT = 4 SELECT_BASE_EVT = 5 SELECT_TARGET_EVT = 6 REDRAW_EVT = 7 def setRefererenceKey(baseObjectName): try: obj = Object.Get(baseObjectName) meshName = obj.data.name mesh = NMesh.GetRaw(meshName) mesh.update() mesh.removeAllKeys() mesh.insertKey(0, 'relative') except: print "Copy-RVK Error: could not set reference Key" def setRelativeKey(baseObjectName, targetObjectName, frameNumber): try: obj = Object.Get(baseObjectName) meshName = obj.data.name baseMesh = NMesh.GetRaw(meshName) except: print "Copy-RVK Error: could not get base mesh" return try: obj = Object.Get(targetObjectName) meshName = obj.data.name targetMesh = NMesh.GetRaw(meshName) except: print "Copy-RVK Error: could not get target mesh" return try: n = 0 for v in baseMesh.verts: v.co[0] = targetMesh.verts[n].co[0] v.co[1] = targetMesh.verts[n].co[1] v.co[2] = targetMesh.verts[n].co[2] n = n+1 except: print "Copy-RVK Warning: base and target mesh have not the same number of vertex" return try: baseMesh.update(1) baseMesh.insertKey(frameNumber, 'relative') except: print "Copy-RVK Error: could not insert the RVK for base mesh" def draw(): global BaseObject, TargetObjet, RVKFrame global EXIT_EVT, NOOP_EVT, SET_REF_EVT, SET_RVK_EVT, SELECT_BASE_EVT, SELECT_TARGET_EVT, REDRAW_EVT GUITop = 100 BGL.glColor3f(0, 0, 0) BGL.glRasterPos2d(10, GUITop) Draw.Text("Base object:") BaseObject = Draw.String("", NOOP_EVT, 110, GUITop-3, 100, 18, BaseObject.val, 128, "Name of the object to use as base") Draw.Button("Get selected", SELECT_BASE_EVT, 214, GUITop-3, 80, 18) GUITop -= 23 BGL.glRasterPos2d(10, GUITop) Draw.Text("Target object:") TargetObjet = Draw.String("", NOOP_EVT, 110, GUITop-3, 100, 18, TargetObjet.val, 128, "Name of the object to use as target") Draw.Button("Get selected", SELECT_TARGET_EVT, 214, GUITop-3, 80, 18) GUITop -= 23 BGL.glRasterPos2d(10, GUITop) Draw.Text("RVK frame:") RVKFrame = Draw.Number("", NOOP_EVT, 110, GUITop-3, 100, 18, RVKFrame.val, 1, 100, "Frame at which the RVK is inserted") GUITop -= 35 Draw.Button("Set Reference Key", SET_REF_EVT, 10, GUITop-3, 140, 20, "Remove all RVKs and insert reference key") Draw.Button("Set Relative Key", SET_RVK_EVT, 154, GUITop-3, 140, 20, "Insert relative key. Warning: select reference key IPO curve first") def event(evt, val): if (evt== Draw.QKEY and not val): Draw.Exit() def bevent(evt): global BaseObject, TargetObjet, RVKFrame global EXIT_EVT, NOOP_EVT, SET_REF_EVT, SET_RVK_EVT, SELECT_BASE_EVT, SELECT_TARGET_EVT, REDRAW_EVT if (evt == EXIT_EVT): Draw.Exit() elif (evt == SELECT_BASE_EVT): objects = Blender.Object.GetSelected() try: BaseObject.val = objects[0].name Draw.Redraw() except: print "Copy-RVK Warning: No object selected" elif (evt == SELECT_TARGET_EVT): objects = Blender.Object.GetSelected() try: TargetObjet.val = objects[0].name Draw.Redraw() except: print "Copy-RVK Warning: No object selected" elif (evt == SET_REF_EVT): if (BaseObject.val != ''): setRefererenceKey(BaseObject.val) Window.RedrawAll() elif (evt == SET_RVK_EVT): if (BaseObject.val != ''): if (TargetObjet.val != ''): setRelativeKey(BaseObject.val, TargetObjet.val, RVKFrame.val) Window.RedrawAll() else: print "Copy-RVK Warning: target object not set" else: print "Copy-RVK Warning: base object not set" Draw.Register(draw, event, bevent)