def test_star_hidden(self): lot = objects.Animation() sl = lot.add_layer(objects.ShapeLayer()) star = sl.add_shape(objects.Star()) star.hidden = True star.name = "Star" star.rotation.value = 20 star.inner_radius.value = 64 star.outer_radius.value = 128 star.position.value = NVector(256, 256) sl.add_shape(objects.Fill(Color(1, 1, 0))) sif = builder.to_sif(lot) self.assertEqual(len(sif.layers), 1) self.assertIsInstance(sif.layers[0], api.GroupLayer) grp = sif.layers[0] self.assertEqual(len(grp.layers), 1) self.assertIsInstance(grp.layers[0], api.RegionLayer) self.assertTrue(grp.active) rgl = grp.layers[0] self.assertEqual(rgl.desc, "Star") self.assertEqual(len(rgl.bline.points), 10) self.assert_nvector_equal(rgl.origin.value, star.position.value) self.assert_nvector_equal(rgl.color.value, sif.make_color(1, 1, 0, 1)) self.assertFalse(rgl.active)
def test_repeater(self): lot = objects.Animation() sl = lot.add_layer(objects.ShapeLayer()) group = sl.add_shape(objects.Group()) star = group.add_shape(objects.Star()) star.inner_radius.value = 16 star.outer_radius.value = 32 star.position.value = NVector(256, 40) group.add_shape(objects.Fill(Color(1, 1, 0))) group.add_shape(objects.Stroke(Color(0, 0, 0), 3)) group.name = "Star" rep = sl.add_shape(objects.Repeater(4)) rep.name = "Repeater" rep.transform.position.value = NVector(20, 80) rep.transform.end_opacity.value = 20 sif = builder.to_sif(lot) self.assertEqual(len(sif.layers), 1) self.assertIsInstance(sif.layers[0], api.GroupLayer) self.assertEqual(len(sif.layers[0].layers), 1) self.assertIsInstance(sif.layers[0].layers[0], api.GroupLayer) self.assertEqual(sif.layers[0].layers[0].desc, "Repeater") self.assertEqual(len(sif.layers[0].layers[0].layers), 2) duplicate_lay = sif.layers[0].layers[0].layers[1] self.assertIsInstance(duplicate_lay, api.DuplicateLayer) self.assertEqual(duplicate_lay.desc, "Repeater") duplicate = sif.get_object(duplicate_lay.index.id) self.assertIsInstance(duplicate, api.Duplicate) self.assertEqual(duplicate.from_.value, 3) self.assertEqual(duplicate.to.value, 0) self.assertEqual(duplicate.step.value, -1) dup_trans = sif.layers[0].layers[0].layers[0] self.assertIsInstance(dup_trans, api.GroupLayer) self.assertEqual(dup_trans.desc, "Transformation for Repeater") dup_origin = sif.get_object(dup_trans.origin.id) self.assert_nvector_equal(dup_origin.value.value, NVector(0, 0)) trans = dup_trans.transformation self.assertIsInstance(trans.offset, ast.SifAdd) self.assertEqual(trans.offset.rhs.value.id, dup_origin.id) self.assertIsInstance(trans.offset.lhs, ast.SifScale) self.assert_nvector_equal(trans.offset.lhs.link.value, NVector(20, 80)) self.assertEqual(trans.offset.lhs.scalar.value.id, duplicate.id) self.assertIsInstance(trans.angle, ast.SifScale) self.assertEqual(trans.angle.link.value, 0) self.assertEqual(trans.angle.scalar.value.id, duplicate.id) self.assertIsInstance(dup_trans.amount, ast.SifSubtract) self.assertEqual(dup_trans.amount.lhs.value, 1) self.assertIsInstance(dup_trans.amount.rhs, ast.SifScale) self.assertAlmostEqual(dup_trans.amount.rhs.link.value, 0.266666666) self.assertEqual(dup_trans.amount.rhs.scalar.value.id, duplicate.id) self.assertEqual(len(dup_trans.layers), 1) self.assertEqual(dup_trans.layers[0].desc, "Star")
def test_boundingbox(self): sh = objects.Star() sh.outer_radius.value = 20 sh.position.value = [30, 40] bb = sh.bounding_box() c = bb.center() self.assertEqual(bb.x1, 30 - 20) self.assertEqual(bb.y1, 40 - 20) self.assertEqual(bb.x2, 30 + 20) self.assertEqual(bb.y2, 40 + 20) self.assertEqual(c[0], 30) self.assertEqual(c[1], 40)
def test_sized(self): sh = objects.Star() sh.outer_radius.value = 20 sh.position.value = [30, 40] sh.name = "foo" sh.star_type = objects.StarType.Polygon sh.points.value = 6 self.assertDictEqual( sh.to_dict(), { "ty": "sr", "d": 0, "p": { "a": 0, "k": [30, 40] }, "ir": { "a": 0, "k": 0 }, "is": { "a": 0, "k": 0 }, "or": { "a": 0, "k": 20 }, "os": { "a": 0, "k": 0 }, "r": { "a": 0, "k": 0 }, "pt": { "a": 0, "k": 6 }, "sy": 2, "nm": "foo", })
def test_empty(self): sh = objects.Star() self.assertDictEqual( sh.to_dict(), { "ty": "sr", "d": 0, "p": { "a": 0, "k": [0, 0] }, "ir": { "a": 0, "k": 0 }, "is": { "a": 0, "k": 0 }, "or": { "a": 0, "k": 0 }, "os": { "a": 0, "k": 0 }, "r": { "a": 0, "k": 0 }, "pt": { "a": 0, "k": 5 }, "sy": 1, })
import sys import os sys.path.insert( 0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "lib")) from lottie.utils import script from lottie import objects from lottie.parsers.svg import parse_svg_file from lottie import Point, Color an = parse_svg_file( os.path.join(os.path.dirname(os.path.abspath(__file__)), "blep.svg")) maskshape = objects.Star() maskshape.inner_radius.value = 100 maskshape.outer_radius.value = 200 maskshape.rotation.value = 180 maskshape.position.value = Point(256, 256) #maskshape.size.value = Point(256, 256) maskbez = maskshape.to_bezier() mask = objects.Mask(maskbez.shape.value) an.layers[0].masks = [mask] g = an.layers[0].add_shape(objects.Group()) r = g.add_shape(objects.Rect()) r.position.value = Point(256, 256) r.size.value = Point(512, 512) g.add_shape(objects.Fill(Color(1, 1, 1)))
os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "lib")) from lottie.utils import script from lottie import objects from lottie import Point, Color an = objects.Animation(59) layer = objects.ShapeLayer() an.add_layer(layer) circle = layer.add_shape(objects.Ellipse()) circle.size.value = Point(100, 100) circle.position.value = Point(220, 110) star = layer.add_shape(objects.Star()) star.inner_radius.value = 20 star.outer_radius.value = 50 star.position.value = Point(330, 110) rect = layer.add_shape(objects.Rect()) rect.size.value = Point(100, 100) rect.position.value = Point(110, 110) rrect = layer.add_shape(objects.Rect()) rrect.size.value = Point(100, 100) rrect.position.value = Point(110, 220) rrect.rounded.value = 30 fill = layer.add_shape(objects.Fill(Color(1, 1, 0))) stroke = layer.add_shape(objects.Stroke(Color(0, 0, 0), 25))
"lib" )) from lottie.utils import script from lottie import objects from lottie import Point, Color last_frame = 60 an = objects.Animation(last_frame) layer = objects.ShapeLayer() an.add_layer(layer) group = layer.add_shape(objects.Group()) star = objects.Star() star.inner_radius.value = 40 star.outer_radius.value = 100 star.position.value = Point(256, 256) star.name = "big start" group.add_shape(star) star = objects.Star() star.inner_radius.value = 20 star.outer_radius.value = 50 star.position.value = Point(256, 256) star.name = "small start" group.add_shape(star) obj = objects.Path() obj.shape.value.add_point(Point(10, 10))
an = objects.Animation(60) layer = objects.ShapeLayer() an.add_layer(layer) shapes = layer.add_shape(objects.Group()) circle = shapes.add_shape(objects.Ellipse()) circle.size.add_keyframe(0, Point(100, 100)) circle.size.add_keyframe(30, Point(50, 120)) circle.size.add_keyframe(60, Point(100, 100)) circle.position.add_keyframe(0, Point(220, 110)) circle.position.add_keyframe(20, Point(180, 110)) circle.position.add_keyframe(40, Point(220, 110)) star = shapes.add_shape(objects.Star()) star.inner_radius.add_keyframe(0, 20) star.inner_radius.add_keyframe(30, 50) star.inner_radius.add_keyframe(60, 20) star.outer_radius.value = 50 #star.inner_roundness.value = 100 #star.outer_roundness.value = 40 star.rotation.value = 45 star.position.value = Point(330, 110) rect = shapes.add_shape(objects.Rect()) rect.size.add_keyframe(0, Point(100, 100)) rect.size.add_keyframe(30, Point(50, 120)) rect.size.add_keyframe(60, Point(100, 100)) rect.position.add_keyframe(0, Point(110, 110)) rect.position.add_keyframe(20, Point(80, 110))
0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "lib")) from lottie.utils import script from lottie import objects from lottie import Point, Color last_frame = 180 an = objects.Animation(last_frame) layer = objects.ShapeLayer() an.add_layer(layer) group = layer.add_shape(objects.Group()) star = group.add_shape(objects.Star()) star.inner_radius.value = 40 star.outer_radius.value = 100 star.position.value = Point(256, 256) star = group.add_shape(objects.Star()) star.inner_radius.value = 20 star.outer_radius.value = 50 star.position.value = Point(256, 256) round = layer.add_shape(objects.RoundedCorners()) round.radius.add_keyframe(0, 0) round.radius.add_keyframe(last_frame / 2, 30) round.radius.add_keyframe(last_frame, 0) stroke = group.add_shape(objects.Stroke(Color(1, 1, 0), 10))
an = objects.Animation(59) layer = objects.ShapeLayer() an.add_layer(layer) g1 = layer.add_shape(objects.Group()) circle = g1.add_shape(objects.Ellipse()) circle.size.value = Point(100, 100) circle.position.value = Point(200, 100) g1.add_shape(objects.Fill(Color(1, 0, 0))) g1.add_shape(objects.Stroke(Color(0, 0, 0), 5)) g2 = layer.add_shape(objects.Group()) star = g2.add_shape(objects.Star()) star.inner_radius.value = 20 star.outer_radius.value = 50 star.position.value = Point(300, 100) g2.add_shape(objects.Fill(Color(0, 1, 0))) g2.add_shape(objects.Stroke(Color(0, 0, 0), 5)) g3 = layer.add_shape(objects.Group()) rect = g3.add_shape(objects.Rect()) rect.size.value = Point(100, 100) rect.position.value = Point(100, 100) g3.add_shape(objects.Fill(Color(0, 0, 1))) g3.add_shape(objects.Stroke(Color(1, 1, 1), 5)) script.script_main(an)