From 034bbe3184cf9660cdb02f70a3035f1a4bfa61b5 Mon Sep 17 00:00:00 2001 From: AnishGulati Date: Jul 24 2019 19:35:57 +0000 Subject: MOre progress on class Param and Layer --- diff --git a/synfig-studio/plugins/lottie-exporter/common/Layer.py b/synfig-studio/plugins/lottie-exporter/common/Layer.py index c3168ba..4dc2276 100644 --- a/synfig-studio/plugins/lottie-exporter/common/Layer.py +++ b/synfig-studio/plugins/lottie-exporter/common/Layer.py @@ -118,3 +118,25 @@ class Layer: return type: common.Canvas.Canvas """ return self.parent_canvas + + def add_offset(self): + """ + Inserts necassary offset in the positions of the layers if they lie inside + another composition of Lottie + """ + # This if condition is not applicable for group, rotate, precomp... layers + if not settings.INSIDE_PRECOMP: + return + + update_dict = [] + compare = {"center", "origin", "point1", "point2", "tl", "br"} + for key in compare: + param = self.get_param(key) + if param.get() is not None: + update_dict.append(param) + + for param in update_dict: + param.add_offset() + + + diff --git a/synfig-studio/plugins/lottie-exporter/common/Param.py b/synfig-studio/plugins/lottie-exporter/common/Param.py index 870598d..cf58d75 100644 --- a/synfig-studio/plugins/lottie-exporter/common/Param.py +++ b/synfig-studio/plugins/lottie-exporter/common/Param.py @@ -8,7 +8,8 @@ import copy from lxml import etree import settings import common -from synfig.animation import get_bool_at_frame, get_vector_at_frame, print_animation +import synfig.group +from synfig.animation import is_animated, get_bool_at_frame, get_vector_at_frame, print_animation from properties.multiDimensionalKeyframed import gen_properties_multi_dimensional_keyframed from properties.valueKeyframed import gen_value_Keyframed sys.path.append("..") @@ -171,3 +172,31 @@ class Param: if not self.PATH_GENERATED and not self.TRANSFORM_PATH_GENERATED: raise KeyError("Please calculate the path of this parameter before getting value at a frame") return get_vector_at_frame(self.path, frame) + + def add_offset(self): + """ + Updates the position parameter of Synfig format which has offset due to + increase in widht and height of pre-comp layer(group layer) + """ + # Only for 2-D animations + offset = synfig.group.get_offset() + is_animate = is_animated(self.param[0]) + if is_animate == 0: + self.add(self.param[0], offset) + else: + for waypoint in self.param[0]: + self.add(waypoint[0], offset) + + def add(self, vector, offset): + """ + Helper function to modify Synfig xml + + Args: + vector (lxml.etree._Element) : Position in Synfig format + offset (common.Vector.Vector) : offset to be added to that position + + Returns: + (None) + """ + vector[0].text = str(float(vector[0].text) + offset[0]) + vector[1].text = str(float(vector[1].text) + offset[1]) diff --git a/synfig-studio/plugins/lottie-exporter/layers/group.py b/synfig-studio/plugins/lottie-exporter/layers/group.py index 23837ee..299d19a 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/group.py +++ b/synfig-studio/plugins/lottie-exporter/layers/group.py @@ -14,7 +14,6 @@ from sources.precomp import add_precomp_asset from helpers.transform import gen_helpers_transform from helpers.blendMode import get_blend from synfig.animation import print_animation, insert_waypoint_at_frame, to_Synfig_axis -import synfig.group as group from properties.shapePropKeyframe.helper import append_path from properties.valueKeyframed import gen_value_Keyframed sys.path.append("..") @@ -66,13 +65,13 @@ def gen_layer_group(lottie, layer, idx): origin.animate("vector") anchor = origin - group.update_pos(anchor.get()) + anchor.add_offset() angle.animate("rotate_layer_angle") pos.animate("vector") if settings.INSIDE_PRECOMP: - group.update_pos(pos.get()) + pos.add_offset() scale.animate("group_layer_scale") diff --git a/synfig-studio/plugins/lottie-exporter/layers/image.py b/synfig-studio/plugins/lottie-exporter/layers/image.py index 4333bd1..45aafcf 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/image.py +++ b/synfig-studio/plugins/lottie-exporter/layers/image.py @@ -15,7 +15,6 @@ from common.Param import Param from sources.image import add_image_asset from shapes.rectangle import to_Synfig_axis from properties.multiDimensionalKeyframed import gen_properties_multi_dimensional_keyframed -import synfig.group as group sys.path.append("..") @@ -31,7 +30,7 @@ def gen_layer_image(lottie, layer, idx): Returns: (None) """ - group.update_layer(layer) + layer.add_offset() lottie["ddd"] = settings.DEFAULT_3D lottie["ind"] = idx diff --git a/synfig-studio/plugins/lottie-exporter/layers/rotate_layer.py b/synfig-studio/plugins/lottie-exporter/layers/rotate_layer.py index 3ccc5f2..9e22a10 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/rotate_layer.py +++ b/synfig-studio/plugins/lottie-exporter/layers/rotate_layer.py @@ -24,14 +24,14 @@ def gen_layer_rotate(lottie, layer): scale = settings.DEFAULT_SCALE origin = layer.get_param("origin") origin.animate("vector") - anchor = origin.get() - pos = anchor + anchor = origin + pos = origin amount = layer.get_param("amount") # This is rotation amount amount.animate("rotate_layer_angle") anchor = copy.deepcopy(anchor) - group.update_pos(anchor) + anchor.add_offset() if settings.INSIDE_PRECOMP: - group.update_pos(pos) + pos.add_offset() gen_helpers_transform(lottie, pos[0], anchor[0], scale, amount[0]) diff --git a/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py b/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py index e5290e2..475c789 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py +++ b/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py @@ -6,7 +6,6 @@ import sys import copy import settings from helpers.transform import gen_helpers_transform -import synfig.group as group sys.path.append("..") @@ -23,14 +22,14 @@ def gen_layer_scale(lottie, layer): """ center = layer.get_param("center") center.animate("vector") - anchor = center.get() - pos = anchor + anchor = center + pos = center scale = layer.get_param("amount") # This is scale amount scale.animate("scale_layer_zoom") anchor = copy.deepcopy(anchor) - group.update_pos(anchor) + anchor.add_offset() if settings.INSIDE_PRECOMP: - group.update_pos(pos) + pos.add_offset() gen_helpers_transform(lottie, pos[0], anchor[0], scale[0]) diff --git a/synfig-studio/plugins/lottie-exporter/layers/shape.py b/synfig-studio/plugins/lottie-exporter/layers/shape.py index eab5495..e5a7014 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/shape.py +++ b/synfig-studio/plugins/lottie-exporter/layers/shape.py @@ -12,7 +12,6 @@ from shapes.fill import gen_shapes_fill from shapes.rectangle import gen_shapes_rectangle from helpers.blendMode import get_blend from helpers.transform import gen_helpers_transform -import synfig.group as group sys.path.append("..") @@ -28,7 +27,7 @@ def gen_layer_shape(lottie, layer, idx): Returns: (None) """ - group.update_layer(layer) + layer.add_offset() index = Count() lottie["ddd"] = settings.DEFAULT_3D diff --git a/synfig-studio/plugins/lottie-exporter/layers/shape_solid.py b/synfig-studio/plugins/lottie-exporter/layers/shape_solid.py index 6df3798..a55ea53 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/shape_solid.py +++ b/synfig-studio/plugins/lottie-exporter/layers/shape_solid.py @@ -12,7 +12,7 @@ from common.misc import get_color_hex, is_animated from common.Count import Count from common.Layer import Layer from effects.fill import gen_effects_fill -from synfig.group import update_layer, get_additional_width, get_additional_height +from synfig.group import get_additional_width, get_additional_height sys.path.append("..") @@ -28,7 +28,7 @@ def gen_layer_shape_solid(lottie, layer, idx): Returns: (None) """ - update_layer(layer) + layer.add_offset() # Setting the solid layer which will be masked index = Count() diff --git a/synfig-studio/plugins/lottie-exporter/layers/translate_layer.py b/synfig-studio/plugins/lottie-exporter/layers/translate_layer.py index c88c7d6..850ae04 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/translate_layer.py +++ b/synfig-studio/plugins/lottie-exporter/layers/translate_layer.py @@ -24,16 +24,16 @@ def gen_layer_translate(lottie, layer): origin = layer.get_param("origin") origin.animate("vector") - anchor = origin.get() - pos = anchor + anchor = origin + pos = origin anchor = copy.deepcopy(anchor) for waypoint in anchor[0]: waypoint[0][0].text = str(0) waypoint[0][1].text = str(0) - group.update_pos(anchor) + anchor.add_offset() if settings.INSIDE_PRECOMP: - group.update_pos(pos) + pos.add_offset() gen_helpers_transform(lottie, pos[0], anchor[0]) diff --git a/synfig-studio/plugins/lottie-exporter/synfig/group.py b/synfig-studio/plugins/lottie-exporter/synfig/group.py index 5384762..6ac4c3f 100644 --- a/synfig-studio/plugins/lottie-exporter/synfig/group.py +++ b/synfig-studio/plugins/lottie-exporter/synfig/group.py @@ -8,7 +8,7 @@ import sys import settings from common.misc import is_animated from common.Vector import Vector -from common.Layer import Layer +import common from synfig.animation import print_animation sys.path.append("..") @@ -45,7 +45,7 @@ def update_layer(node): return update_dict = [] - if isinstance(node, Layer): + if isinstance(node, common.Layer.Layer): compare = {"center", "origin", "point1", "point2", "tl", "br"} for param in compare: get = node.get_param(param).get()