[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2695] contrib/py/scripts/addons: SVN maintenance.
gsr b3d
gsr.b3d at infernal-iceberg.com
Thu Dec 1 18:52:14 CET 2011
Revision: 2695
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2695
Author: gsrb3d
Date: 2011-12-01 17:52:14 +0000 (Thu, 01 Dec 2011)
Log Message:
-----------
SVN maintenance.
Modified Paths:
--------------
contrib/py/scripts/addons/animation_motion_trail.py
contrib/py/scripts/addons/io_ms3d/__README__.txt
contrib/py/scripts/addons/io_ms3d/__init__.py
contrib/py/scripts/addons/io_ms3d/ms3d_export.py
contrib/py/scripts/addons/io_ms3d/ms3d_import.py
contrib/py/scripts/addons/io_ms3d/ms3d_spec.py
contrib/py/scripts/addons/io_ms3d/ms3d_utils.py
Property Changed:
----------------
contrib/py/scripts/addons/animation_motion_trail.py
contrib/py/scripts/addons/io_ms3d/__README__.txt
contrib/py/scripts/addons/io_ms3d/__init__.py
contrib/py/scripts/addons/io_ms3d/ms3d_export.py
contrib/py/scripts/addons/io_ms3d/ms3d_import.py
contrib/py/scripts/addons/io_ms3d/ms3d_spec.py
contrib/py/scripts/addons/io_ms3d/ms3d_utils.py
Modified: contrib/py/scripts/addons/animation_motion_trail.py
===================================================================
--- contrib/py/scripts/addons/animation_motion_trail.py 2011-12-01 15:28:57 UTC (rev 2694)
+++ contrib/py/scripts/addons/animation_motion_trail.py 2011-12-01 17:52:14 UTC (rev 2695)
@@ -1,1736 +1,1736 @@
-# ##### 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-
-bl_info = {
- 'name': "Motion Trail",
- 'author': "Bart Crouch",
- 'version': (3, 1, 0),
- 'blender': (2, 6, 0),
- 'api': 42181,
- 'location': "View3D > Toolbar > Motion Trail tab",
- 'warning': "",
- 'description': "Display and edit motion trails in the 3d-view",
- 'wiki_url': "http://wiki.blender.org/index.php/Extensions:2.5/"\
- "Py/Scripts/Animation/Motion_Trail",
- 'tracker_url': "http://projects.blender.org/tracker/index.php?"\
- "func=detail&aid=26374",
- 'category': 'Animation'}
-
-
-import bgl
-import blf
-import bpy
-from bpy_extras import view3d_utils
-import math
-import mathutils
-
-
-# fake fcurve class, used if no fcurve is found for a path
-class fake_fcurve():
- def __init__(self, object, index, rotation=False, scale=False):
- # location
- if not rotation and not scale:
- self.loc = object.location[index]
- # scale
- elif scale:
- self.loc = object.scale[index]
- # rotation
- elif rotation == 'QUATERNION':
- self.loc = object.rotation_quaternion[index]
- elif rotation == 'AXIS_ANGLE':
- self.loc = object.rotation_axis_angle[index]
- else:
- self.loc = object.rotation_euler[index]
- self.keyframe_points = []
-
- def evaluate(self, frame):
- return(self.loc)
-
- def range(self):
- return([])
-
-
-# get location curves of the given object
-def get_curves(object, child=False):
- if object.animation_data and object.animation_data.action:
- action = object.animation_data.action
- if child:
- # posebone
- curves = [fc for fc in action.fcurves if len(fc.data_path)>=14 \
- and fc.data_path[-9:]=='.location' and \
- child.name in fc.data_path.split("\"")]
- else:
- # normal object
- curves = [fc for fc in action.fcurves if \
- fc.data_path == 'location']
- elif object.animation_data and object.animation_data.use_nla:
- curves = []
- strips = []
- for track in object.animation_data.nla_tracks:
- not_handled = [s for s in track.strips]
- while not_handled:
- current_strip = not_handled.pop(-1)
- if current_strip.action:
- strips.append(current_strip)
- if current_strip.strips:
- # meta strip
- not_handled += [s for s in current_strip.strips]
-
- for strip in strips:
- if child:
- # posebone
- curves = [fc for fc in strip.action.fcurves if \
- len(fc.data_path)>=14 and fc.data_path[-9:]=='.location' \
- and child.name in fc.data_path.split("\"")]
- else:
- # normal object
- curves = [fc for fc in strip.action.fcurves if \
- fc.data_path == 'location']
- if curves:
- # use first strip with location fcurves
- break
- else:
- # should not happen?
- curves = []
-
- # ensure we have three curves per object
- fcx = None
- fcy = None
- fcz = None
- for fc in curves:
- if fc.array_index == 0:
- fcx = fc
- elif fc.array_index == 1:
- fcy = fc
- elif fc.array_index == 2:
- fcz = fc
- if fcx == None:
- fcx = fake_fcurve(object, 0)
- if fcy == None:
- fcy = fake_fcurve(object, 1)
- if fcz == None:
- fcz = fake_fcurve(object, 2)
-
- return([fcx, fcy, fcz])
-
-
-# turn screen coordinates (x,y) into world coordinates vector
-def screen_to_world(context, x, y):
- depth_vector = view3d_utils.region_2d_to_vector_3d(\
- context.region, context.region_data, [x,y])
- vector = view3d_utils.region_2d_to_location_3d(\
- context.region, context.region_data, [x,y], depth_vector)
-
- return(vector)
-
-
-# turn 3d world coordinates vector into screen coordinate integers (x,y)
-def world_to_screen(context, vector):
- prj = context.region_data.perspective_matrix * \
- mathutils.Vector((vector[0], vector[1], vector[2], 1.0))
- width_half = context.region.width / 2.0
- height_half = context.region.height / 2.0
-
- x = int(width_half + width_half * (prj.x / prj.w))
- y = int(height_half + height_half * (prj.y / prj.w))
-
- # correction for corner cases in perspective mode
- if prj.w < 0:
- if x < 0:
- x = context.region.width * 2
- else:
- x = context.region.width * -2
- if y < 0:
- y = context.region.height * 2
- else:
- y = context.region.height * -2
-
- return(x, y)
-
-
-# calculate location of display_ob in worldspace
-def get_location(frame, display_ob, offset_ob, curves):
- if offset_ob:
- bpy.context.scene.frame_set(frame)
- display_mat = getattr(display_ob, "matrix", False)
- if not display_mat:
- # posebones have "matrix", objects have "matrix_world"
- display_mat = display_ob.matrix_world
- if offset_ob:
- loc = display_mat.to_translation() + \
- offset_ob.matrix_world.to_translation()
- else:
- loc = display_mat.to_translation()
- else:
- fcx, fcy, fcz = curves
- locx = fcx.evaluate(frame)
- locy = fcy.evaluate(frame)
- locz = fcz.evaluate(frame)
- loc = mathutils.Vector([locx, locy, locz])
-
- return(loc)
-
-
-# get position of keyframes and handles at the start of dragging
-def get_original_animation_data(context, keyframes):
- keyframes_ori = {}
- handles_ori = {}
-
- if context.active_object and context.active_object.mode == 'POSE':
- armature_ob = context.active_object
- objects = [[armature_ob, pb, armature_ob] for pb in \
- context.selected_pose_bones]
- else:
- objects = [[ob, False, False] for ob in context.selected_objects]
-
- for action_ob, child, offset_ob in objects:
- if not action_ob.animation_data:
- continue
- curves = get_curves(action_ob, child)
- if len(curves) == 0:
- continue
- fcx, fcy, fcz = curves
- if child:
- display_ob = child
- else:
- display_ob = action_ob
-
- # get keyframe positions
- frame_old = context.scene.frame_current
- keyframes_ori[display_ob.name] = {}
- for frame in keyframes[display_ob.name]:
- loc = get_location(frame, display_ob, offset_ob, curves)
- keyframes_ori[display_ob.name][frame] = [frame, loc]
-
- # get handle positions
- handles_ori[display_ob.name] = {}
- for frame in keyframes[display_ob.name]:
- handles_ori[display_ob.name][frame] = {}
- left_x = [frame, fcx.evaluate(frame)]
- right_x = [frame, fcx.evaluate(frame)]
- for kf in fcx.keyframe_points:
- if kf.co[0] == frame:
- left_x = kf.handle_left[:]
- right_x = kf.handle_right[:]
- break
- left_y = [frame, fcy.evaluate(frame)]
- right_y = [frame, fcy.evaluate(frame)]
- for kf in fcy.keyframe_points:
- if kf.co[0] == frame:
- left_y = kf.handle_left[:]
- right_y = kf.handle_right[:]
- break
- left_z = [frame, fcz.evaluate(frame)]
- right_z = [frame, fcz.evaluate(frame)]
- for kf in fcz.keyframe_points:
- if kf.co[0] == frame:
- left_z = kf.handle_left[:]
- right_z = kf.handle_right[:]
- break
- handles_ori[display_ob.name][frame]["left"] = [left_x, left_y,
- left_z]
- handles_ori[display_ob.name][frame]["right"] = [right_x, right_y,
- right_z]
-
- if context.scene.frame_current != frame_old:
- context.scene.frame_set(frame_old)
-
- return(keyframes_ori, handles_ori)
-
-
-# callback function that calculates positions of all things that need be drawn
-def calc_callback(self, context):
- if context.active_object and context.active_object.mode == 'POSE':
- armature_ob = context.active_object
- objects = [[armature_ob, pb, armature_ob] for pb in \
- context.selected_pose_bones]
- else:
- objects = [[ob, False, False] for ob in context.selected_objects]
- if objects == self.displayed:
- selection_change = False
- else:
- selection_change = True
-
- if self.lock and not selection_change and \
- context.region_data.perspective_matrix == self.perspective and not \
- context.window_manager.motion_trail.force_update:
- return
-
- # dictionaries with key: objectname
- self.paths = {} # value: list of lists with x, y, colour
- self.keyframes = {} # value: dict with frame as key and [x,y] as value
- self.handles = {} # value: dict of dicts
- self.timebeads = {} # value: dict with frame as key and [x,y] as value
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list