Skip to content

Commit

Permalink
Update 1.5: add-on updater, code refactor
Browse files Browse the repository at this point in the history
- Add-on auto updater
- Strict class naming for 2.8 compatibility
- Split operators module into multiple modules
- Move add-on preferences into it's own module
  • Loading branch information
mrachinskiy committed Sep 9, 2017
1 parent e46270e commit 9181c22
Show file tree
Hide file tree
Showing 12 changed files with 3,130 additions and 932 deletions.
44 changes: 19 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,35 @@
Commotion Blender Add-on
========================

Commotion—is a Blender add-on for motion graphics, made specifically for easy handling Shape Keys, F-Curves, NLA strips, Drivers and object relations between number of objects, in order to easily create awesome motion graphics.

#### Watch:
* [Demo]
* [Tutorial]
* [Overview: Update 1.4]
Watch:

* [Demo][2]
* [Tutorial][3]
* [Update 1.4 Overview][4]


How to install
--------------------------
==========================

1. Blender 2.77 is a minimum required version.
2. [Download][addon] the add-on.
1. Blender 2.74 or newer is required to install the add-on.
2. [Download the add-on.][1]<sup>1</sup>
3. Go to Blender `User Preferences``Add-ons` category.
4. Use `Install from File` to install add-on from downloaded zip archive.
4. Use `Install Add-on from File` to install add-on from downloaded zip archive.

Note for mac users:

* Safari browser will automatically unpack downloaded zip archive, so in order to install the add-on, you have to pack folder with add-on files back into zip archive. Or use a different browser to download add-on.
<sup>1</sup> Note for mac users: Safari browser will automatically unpack downloaded zip archive, so in order to install the add-on, you have to pack folder with add-on files back into zip archive. Or use a different browser to download add-on.


Установка
--------------------------
==========================

1. Blender 2.77 минимально требуемая версия.
2. [Загрузите][addon] аддон.
1. Для установки аддона требуется Blender 2.74 или новее.
2. [Загрузите аддон.][1]<sup>1</sup>
3. Зайдите в настройки Blender `User Preferences``Add-ons`.
4. Воспользуйтесь `Install from File…` чтобы установить аддон из загруженного архива.

Примечание для пользователей mac:
4. Воспользуйтесь `Install Add-on from File` чтобы установить аддон из загруженного архива.

* Браузер Safari автоматически распаковывает скачиваемые zip архивы, поэтому, чтобы установить аддон, необходимо запаковать директорию с файлами аддона обратно в zip архив. Или используйте другой браузер для скачивания аддона.
<sup>1</sup> Примечание для пользователей mac: браузер Safari автоматически распаковывает скачиваемые zip архивы, поэтому, чтобы установить аддон, необходимо запаковать папку с файлами аддона обратно в zip архив. Или используйте другой браузер для скачивания аддона.


[addon]: https://github.com/mrachinskiy/commotion/archive/master.zip
[Demo]: http://youtu.be/gLj4PvHbm4s
[Tutorial]: http://youtu.be/qbJMTOUdxRY
[Overview: Update 1.4]: https://youtu.be/YNtaR00sA40
[1]: https://github.com/mrachinskiy/commotion/archive/master.zip
[2]: http://youtu.be/gLj4PvHbm4s
[3]: http://youtu.be/qbJMTOUdxRY
[4]: https://youtu.be/YNtaR00sA40
157 changes: 57 additions & 100 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
bl_info = {
'name': 'Commotion',
'author': 'Mikhail Rachinskiy (@_rachinskiy)',
'version': (1, 4),
'author': 'Mikhail Rachinskiy',
'version': (1, 5, 0),
'blender': (2, 77, 0),
'location': '3D View > Tool Shelf',
'description': 'Animation offset tools for motion graphics.',
Expand All @@ -13,124 +13,81 @@

if 'bpy' in locals():
import importlib
importlib.reload(preferences)
importlib.reload(ui)
importlib.reload(operators)
importlib.reload(ops_anim)
importlib.reload(ops_driver)
importlib.reload(ops_shapekey)
importlib.reload(ops_slow_parent)
importlib.reload(ops_utils)
else:
import bpy
from bpy.types import PropertyGroup
from bpy.props import (
StringProperty,
BoolProperty,
IntProperty,
FloatProperty,
EnumProperty,
PointerProperty,
CollectionProperty,
)
from bpy.props import PointerProperty, CollectionProperty
from . import (
preferences,
ui,
operators,
)


def sk_value_update(self, context):
scene = context.scene
props = scene.commotion
sk = context.active_object.data.shape_keys

for kb in scene.commotion_skcoll:
if kb.selected:
sk.key_blocks[kb.index].value = props.sk_value


def generateprops(self):
offset = FloatProperty(name='Frame Offset', description='Frame step for animation offset', default=1, min=0, step=10, precision=3)
threshold = FloatProperty(name='Threshold', description='Number of objects to animate per frame step', default=1, min=1, step=100, precision=0)
reverse = BoolProperty(name='Reverse', description='Reverse animation offset')
sort_options = EnumProperty(
items=(('CURSOR', 'Cursor', ''),
('MULTITARGET', 'Multi-target', ''),
('NAME', 'Name', '')),
default='CURSOR',
description='Animation offset by',
ops_anim,
ops_driver,
ops_shapekey,
ops_slow_parent,
ops_utils,
)
group_objects = StringProperty(name='Objects', description='Object group for animation offset')
group_targets = StringProperty(name='Targets', description='Object group for targets, from which animation would be offseted')

for prefix in ('sk_fcurves', 'sk_nla', 'ob_fcurves', 'ob_nla'):
setattr(self, prefix, BoolProperty())
setattr(self, prefix + '_offset', offset)
setattr(self, prefix + '_threshold', threshold)
setattr(self, prefix + '_reverse', reverse)
setattr(self, prefix + '_sort_options', sort_options)
setattr(self, prefix + '_group_objects', group_objects)
setattr(self, prefix + '_group_targets', group_targets)

return self


@generateprops
class Properties(PropertyGroup):
sk_shapekeys = BoolProperty(default=True)
sk_value = FloatProperty(name='Value', min=0.0, max=1.0, update=sk_value_update)
sk_drivers = BoolProperty()
sk_drivers_dist_trigger = BoolProperty()
sk_drivers_expression_func = StringProperty(description='Distance trigger expression')
ob_transforms = BoolProperty()
ob_slow_parent_offset = FloatProperty(name='Offset Factor', description='Offset step for slow parent offset', default=1, min=0, step=10, precision=1)


class ShapeKeysCollection(PropertyGroup):
selected = BoolProperty(description='Affect referenced shape key')
index = IntProperty()
name = StringProperty()
# Extern
from . import addon_updater_ops


classes = (
Properties,
ShapeKeysCollection,

ui.ShapeKeyTools,
ui.ObjectTools,

operators.SK_COLL_REFRESH,
operators.SK_INTERPOLATION_SET,
operators.SK_AUTO_KEYFRAMES,

operators.ANIMATION_LINK,
operators.ANIMATION_COPY,
operators.NLA_TO_STRIPS,
operators.NLA_TO_FCURVES,
operators.NLA_SYNC_LENGTH,
operators.ANIMATION_OFFSET_CURSOR,
operators.ANIMATION_OFFSET_MULTITARGET,
operators.ANIMATION_OFFSET_NAME,
operators.OB_SLOW_PARENT_OFFSET,

operators.SK_DRIVERS_DISTANCE_SET,
operators.SK_DRIVERS_EXPRESSION_COPY,
operators.SK_DRIVERS_TARGET_REMAP,
operators.SK_DRIVERS_FUNCTION_REGISTER,
operators.SK_DRIVERS_EVAL_TIME_RESET,
operators.SK_DRIVERS_FUNC_EXPRESSION_GET,
operators.SK_DRIVERS_FUNC_EXPRESSION_SET,

operators.PRESET_APPLY,
operators.ADD_TO_GROUP_OBJECTS,
operators.ADD_TO_GROUP_TARGETS,
operators.OB_SLOW_PARENT_TOGGLE,
preferences.Commotion_Preferences,
preferences.Commotion_Scene_Props,
preferences.Commotion_SK_Collection,

ui.VIEW3D_PT_Commotion_Shape_Key_Tools,
ui.VIEW3D_PT_Commotion_Object_Tools,

ops_shapekey.OBJECT_OT_Commotion_SK_Coll_Refresh,
ops_shapekey.OBJECT_OT_Commotion_SK_Interpolation_Set,
ops_shapekey.ANIM_OT_Commotion_SK_Auto_Keyframes,
ops_shapekey.OBJECT_OT_Commotion_SK_Reset_Eval_Time,

ops_anim.ANIM_OT_Commotion_Animation_Link,
ops_anim.ANIM_OT_Commotion_Animation_Copy,
ops_anim.ANIM_OT_Commotion_FCurves_To_NLA,
ops_anim.ANIM_OT_Commotion_NLA_To_FCurves,
ops_anim.NLA_OT_Commotion_Sync_Length,
ops_anim.ANIM_OT_Commotion_Offset_Cursor,
ops_anim.ANIM_OT_Commotion_Offset_Multitarget,
ops_anim.ANIM_OT_Commotion_Offset_Name,

ops_driver.ANIM_OT_Commotion_SK_Driver_Distance_Set,
ops_driver.ANIM_OT_Commotion_SK_Driver_Expression_Copy,
ops_driver.ANIM_OT_Commotion_SK_Driver_Target_Remap,
ops_driver.ANIM_OT_Commotion_SK_Driver_Function_Register,
ops_driver.ANIM_OT_Commotion_SK_Driver_Func_Expression_Get,
ops_driver.ANIM_OT_Commotion_SK_Driver_Func_Expression_SET,

ops_slow_parent.OBJECT_OT_Commotion_Slow_Parent_Offset,
ops_slow_parent.OBJECT_OT_Commotion_Slow_Parent_Toggle,

ops_utils.VIEW3D_OT_Commotion_Preset_Apply,
ops_utils.OBJECT_OT_Commotion_Add_To_Group_Objects,
ops_utils.OBJECT_OT_Commotion_Add_To_Group_Targets,
)


def register():
addon_updater_ops.register(bl_info)

for cls in classes:
bpy.utils.register_class(cls)

bpy.types.Scene.commotion = PointerProperty(type=Properties)
bpy.types.Scene.commotion_skcoll = CollectionProperty(type=ShapeKeysCollection)
bpy.types.Scene.commotion = PointerProperty(type=preferences.Commotion_Scene_Props)
bpy.types.Scene.commotion_skcoll = CollectionProperty(type=preferences.Commotion_SK_Collection)


def unregister():
addon_updater_ops.unregister()

for cls in classes:
bpy.utils.unregister_class(cls)

Expand Down
Loading

0 comments on commit 9181c22

Please sign in to comment.