[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13343] trunk/blender/release/scripts/ object_timeofs_follow_act.py: Script to set timeoffset of all selected objects using the animated path of an active object .

Campbell Barton ideasman42 at gmail.com
Tue Jan 22 01:53:11 CET 2008


Revision: 13343
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13343
Author:   campbellbarton
Date:     2008-01-22 01:53:10 +0100 (Tue, 22 Jan 2008)

Log Message:
-----------
Script to set timeoffset of all selected objects using the animated path of an active object.
This means you can have 100's of objects animations run by animating an empty over them, (needs docs to explain really) ... Easy to setup and time a Mexican wave for instance ;)

Added Paths:
-----------
    trunk/blender/release/scripts/object_timeofs_follow_act.py

Added: trunk/blender/release/scripts/object_timeofs_follow_act.py
===================================================================
--- trunk/blender/release/scripts/object_timeofs_follow_act.py	                        (rev 0)
+++ trunk/blender/release/scripts/object_timeofs_follow_act.py	2008-01-22 00:53:10 UTC (rev 13343)
@@ -0,0 +1,107 @@
+#!BPY
+"""
+Name: 'TimeOffset follow Active'
+Blender: 245
+Group: 'Object'
+Tooltip: 'ActObs animated loc sets TimeOffset on other objects at closest frame'
+"""
+__author__= "Campbell Barton"
+__url__= ["blender.org", "blenderartists.org"]
+__version__= "1.0"
+
+__bpydoc__= """
+"""
+
+# --------------------------------------------------------------------------
+# Drop Objects v1.0 by Campbell Barton (AKA Ideasman42)
+# --------------------------------------------------------------------------
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+# --------------------------------------------------------------------------
+
+import Blender
+from Blender import Image, sys, Draw, Window, Scene, Group
+import bpy
+import BPyMessages
+
+
+def main():
+
+	sce = Scene.GetCurrent()
+
+	ob_act = sce.objects.active
+	 
+	if not ob_act:
+		Draw.PupMenu("Error%t|no active object")
+		return
+	
+	objects = list(sce.objects.context)
+	
+	try:	objects.remove(ob_act)
+	except: pass
+	
+	if not objects:
+		Draw.PupMenu("Error%t|no objects selected")
+		return
+	
+	curframe = Blender.Get('curframe')
+	
+	FRAME_START= Draw.Create( Blender.Get('staframe') )
+	FRAME_END= Draw.Create( Blender.Get('endframe') )
+		
+	# Get USER Options
+	pup_block= [\
+	('Start:', FRAME_START, 1, 300000, 'Use the active objects position starting at this frame'),\
+	('End:', FRAME_END, 1, 300000, 'Use the active objects position starting at this frame'),\
+	]
+	
+	if not Draw.PupBlock('Set timeoffset...', pup_block):
+		return
+	
+	FRAME_START = FRAME_START.val
+	FRAME_END = FRAME_END.val
+	
+	if FRAME_START >= FRAME_END:
+		Draw.PupMenu("Error%t|frames are not valid")
+	
+	
+	# Ok - all error checking 
+	locls_act = []
+	for f in xrange((FRAME_END-FRAME_START)):
+		i = FRAME_START+f
+		Blender.Set('curframe', i)
+		locls_act.append(ob_act.matrixWorld.translationPart())
+	
+	for ob in objects:
+		loc = ob.matrixWorld.translationPart()
+		best_frame = -1
+		best_dist = 100000000
+		for i, loc_act in enumerate(locls_act):
+			dist = (loc_act-loc).length
+			if dist < best_dist:
+				best_dist = dist
+				best_frame = i + FRAME_START
+		
+		ob.timeOffset = float(best_frame)
+	
+	# Set the original frame
+	Blender.Set('curframe', curframe)
+
+if __name__ == '__main__':
+	main()
+





More information about the Bf-blender-cvs mailing list