2.5: Top Menu
[blender.git] / release / scripts / camera_changer.py
1 #!BPY
2
3 """ Registration info for Blender menus: <- these words are ignored
4 Name: 'Camera Changer'
5 Blender: 234
6 Group: 'Animation'
7 Tip: 'Create script link to change cameras (based on their names) during an animation'
8 """
9
10 __author__ = '3R - R3gis'
11 __version__ = '1.2'
12 __url__ = ["Author's site , http://cybercreator.free.fr", "French Blender support forum, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender"]
13 __email__=["3R, r3gis@free.fr"]
14
15
16 __bpydoc__ = """\
17 This script creates an script link to change cameras during an animation.
18
19 The created script link (a Blender Text) is linked to Scene Frame Changed events.
20
21 Usage:
22
23 Run the script, then name the camera Object with the number of the frame(s)
24 where you want this camera to become active.
25
26 For example:<br>
27   - a camera called "10" will become active at frame 10.<br>
28   - a camera called "10,25,185" will become active at frames 10, 25 and 185.  
29
30 Notes:<br>
31   - This script creates another script named camera.py, which is linked to the current scene.<br>
32   - If there is already a text called "camera.py", but it's from an old version or is not recognized,
33 you can choose if you want to rename or overwrite it.
34   - Script inspired by Jean-Michel (jms) Soler's:<br>
35     http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_changerdecamera.htm
36 """
37
38
39 # $Id$
40 #
41 # --------------------------------------------------------------------------
42 # ***** BEGIN GPL LICENSE BLOCK *****
43 #
44 # Copyright (C) 2004-2005: Regis Montoya
45 #
46 # This program is free software; you can redistribute it and/or
47 # modify it under the terms of the GNU General Public License
48 # as published by the Free Software Foundation; either version 2
49 # of the License, or (at your option) any later version.
50 #
51 # This program is distributed in the hope that it will be useful,
52 # but WITHOUT ANY WARRANTY; without even the implied warranty of
53 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
54 # GNU General Public License for more details.
55 #
56 # You should have received a copy of the GNU General Public License
57 # along with this program; if not, write to the Free Software Foundation,
58 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
59 #
60 # ***** END GPL LICENCE BLOCK *****
61 # --------------------------------------------------------------------------
62
63 #Script inspired of the idea of this one :
64 #http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_changerdecamera.htm
65 #
66 #----------------------------------------------
67 # R3gis Montoya (3R)
68 #
69 # Pout tout probleme a:
70 # cybercreator@free.fr
71 # ---------------------------------------------
72
73 import Blender
74 from Blender import *
75 import string
76
77 header = '# camera.py 1.3 scriptlink'
78
79 camera_change_scriptlink = header + \
80 '''
81 import Blender
82 def main():
83         scn = Blender.Scene.GetCurrent()
84         frame = str(Blender.Get('curframe'))
85
86         # change the camera if it has the current frame
87         for ob_cam in [ob for ob in scn.objects if ob.type == 'Camera']:
88                 for number in ob_cam.name.split(','):
89                         if number == frame:
90                                 scn.setCurrentCamera(ob_cam)
91                                 return
92 main()
93 '''
94
95 def main():
96         
97         # Get the text
98         try:    cam_text = Blender.Text.Get('camera.py')
99         except: cam_text = None
100         
101         if cam_text:
102                 if cam_text.asLines()[0] != header:
103                         ret = Blender.Draw.PupMenu("WARNING: An old camera.py exists%t|Overwrite|Rename old version text")
104                         if ret == -1:                   return # EXIT DO NOTHING
105                         elif ret == 1:          Text.unlink(cam_text)
106                         elif ret == 2:          cam_text.name = 'old_camera.txt'
107                         cam_text = None
108
109         if not cam_text:
110                 scripting=Blender.Text.New('camera.py')
111                 scripting.write(camera_change_scriptlink)
112         
113         scn=Scene.GetCurrent()
114         scriptlinks = scn.getScriptLinks('FrameChanged')
115         if not scriptlinks or ('camera.py' not in scriptlinks):
116                 scn.addScriptLink('camera.py','FrameChanged')
117                 Blender.Draw.PupMenu('FrameChange Scriptlink Added%t|Name camera objects to their activation frame numbers(s) seperated by commas|valid names are "1,10,46" or "1,10,200" or "200" (without quotation marks)')
118                 Blender.Window.RedrawAll()
119
120 if __name__ == '__main__':
121         main()