8350f82d84b20d36547c2e7163494ea903074044
[blender.git] / release / scripts / rvk1_torvk2.py
1 #!BPY
2
3 """ Registration info for Blender menus: <- these words are ignored
4 Name: 'Rvk1 to Rvk2'
5 Blender: 232
6 Group: 'Mesh'
7 Tip: 'Copy deform data (not surf. subdiv) of active obj to rvk of the 2nd selected obj.'
8 """
9
10 # $Id$
11 #
12 #----------------------------------------------
13 # jm soler (c) 05/2004 : 'Rvk1toRvk2'  release under blender artistic licence
14 #----------------------------------------------
15 # Blender Artistic License
16 # http://download.blender.org/documentation/html/x21254.html 
17 #----------------------------------------------------
18 # Copy the rvk (1, or armature, lattice, or
19 # any mesh deformation except surface
20 # sbdivision) of the active object to rvk (2) of
21 # the second selected object. Create rvk or modify
22 # absolute key if needed.
23 #----------------------------------------------
24 # official Page :
25 # http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_rvk1versrvk2.htm
26 # download the script :
27 # http://jmsoler.free.fr/util/blenderfile/py/rvk1_torvk2.py
28 # Communicate upon problems or errors:
29 # http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender 
30 #----------------------------------------------
31 # Page officielle :
32 #   http://jmsoler.free.fr/util/blenderfile/py/rvk1_torvk2.py
33 # Communiquer les problemes et erreurs sur:
34 #   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
35 #---------------------------------------------
36 #  changelog : 
37 #        - a test on mesh parity between getraw and getrawfromobject  
38 #          when there is active subsurf division. 
39 #        - can copy, or not, vertex groups from the original mesh.    
40 #---------------------------------------------
41
42 import Blender
43 from Blender import NMesh,Draw,Object
44
45 def rvk2rvk():
46   try:
47     SUBMODIF=0
48     RVK2=Object.GetSelected()[0]
49     RVK1=Object.GetSelected()[1]
50     
51     FRAME=Blender.Get('curframe')
52   
53     DATA2=RVK2.getData()
54     
55     if DATA2.getMode() & NMesh.Modes['SUBSURF'] :
56       SUBSURF2=DATA2.getSubDivLevels()
57       if SUBSURF2[0]!=0:
58          name = "The active object has a subsurf level different from 0 ... %t| Let script do the the modification for you ? %x1| you prefer do it yourself ? %x2 " 
59          result = Draw.PupMenu(name)
60          if result==1:      
61              DATA2.mode=DATA2.mode-NMesh.Modes['SUBSURF']
62              SUBMODIF=1 
63              DATA2.update()
64              RVK2.makeDisplayList() 
65              Blender.Redraw()
66          else:
67              return
68               
69     RVK2NAME=Object.GetSelected()[0].getName()
70     mesh=RVK1.getData()
71     meshrvk2=NMesh.GetRawFromObject(RVK2NAME)
72     
73     name = "Do you want to replace or add vertex groups ? %t| YES %x1| NO ? %x2 " 
74     result = Draw.PupMenu(name)
75
76     if result==1:
77        GROUPNAME1=mesh.getVertGroupNames() 
78        if len(GROUPNAME1)!=0:
79           for GROUP1 in GROUPNAME1:
80               mesh.removeVertGroup(GROUP1)
81
82        GROUPNAME2=DATA2.getVertGroupNames()
83        if len(GROUPNAME2)!=0:
84           for GROUP2 in GROUPNAME2:
85               mesh.addVertGroup(GROUP2)
86               mesh.assignVertsToGroup(GROUP2,DATA2.getVertsFromGroup(GROUP2),1.0,'replace')
87
88     for v in meshrvk2.verts:
89        i= meshrvk2.verts.index(v)
90        v1=mesh.verts[i]
91        for n in range(len(v.co)):
92             v1.co[n]=v.co[n]
93     
94     mesh.update() 
95     mesh.insertKey(FRAME,'relative')
96     mesh.update()
97     RVK1.makeDisplayList() 
98
99     if SUBMODIF==1:
100          DATA2.mode=DATA2.mode+NMesh.Modes['SUBSURF']
101          SUBMODIF=0
102          DATA2.update()
103          RVK2.makeDisplayList() 
104
105     Blender.Redraw()
106   except:
107     Draw.PupMenu('Error| You need to select two meshes.') 
108   
109
110 Blender.Window.EditMode(0)
111 rvk2rvk()