Ejemplo n.º 1
0
    def test_star_outline(self):
        lot = objects.Animation()
        sl = lot.add_layer(objects.ShapeLayer())

        star = sl.add_shape(objects.Star())
        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.Stroke(Color(1, 1, 0), 10))

        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.OutlineLayer)
        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.assertTrue(rgl.active)
        self.assertTrue(rgl.bline.loop)
        self.assertEqual(rgl.width.value, 5)
Ejemplo n.º 2
0
    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")
Ejemplo n.º 3
0
eye2.position.value = Point3D(256 + 50, 256 - 50, -100)
g.add_shape(objects.Fill(Color(0, 0, 0)))

g = layer.insert_shape(0, objects.Group())
nose = g.add_shape(objects.Ellipse())
nose.size.value = Size(64, 64)
nose.position.value = Point3D(256, 256 + 10, -150)
g.add_shape(objects.Fill(Color(1, 0, 0)))

g = layer.insert_shape(0, objects.Group())
mouth = g.add_shape(objects.Path())
bez = mouth.shape.value
bez.add_smooth_point(Point3D(256 - 80, 256 + 30, -80), Point3D(0, 0, 0))
bez.add_smooth_point(Point3D(256, 256 + 70, -100), -Point3D(50, 0, 0))
bez.add_smooth_point(Point3D(256 + 80, 256 + 30, -80), Point3D(0, 0, 0))
g.add_shape(objects.Stroke(Color(1, 0, 0), 2))

# Animate the circles using depth rotation
dr = anutils.DepthRotationDisplacer(Point3D(256, 256, 0), 0, 30, 10,
                                    Point3D(0, 4, 1), 0, 30)
dr.animate_point(eye1.position)
dr.animate_point(eye2.position)
dr.animate_point(nose.position)
dr.animate_bezier(mouth.shape)

dr = anutils.DepthRotationDisplacer(Point3D(256, 256, 0), 30, 90, 10,
                                    Point3D(0, 4, 1), 0, -60)
dr.animate_point(eye1.position)
dr.animate_point(eye2.position)
dr.animate_point(nose.position)
dr.animate_bezier(mouth.shape)
Ejemplo n.º 4
0
#!/usr/bin/env python3
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 import Color, Point
from lottie.utils.font import FontStyle

an = objects.Animation(120)
layer = objects.ShapeLayer()
an.add_layer(layer)

# The font name "Ubuntu" here, can be detected among the system fonts if fontconfig is available
# Otherwise you can use the full path to the font file
# `emoji_svg` needs to point to a directory with the supported emoji as svg
style = FontStyle("Ubuntu", 128, emoji_svg="twemoji/assets/svg/")
t = layer.add_shape(style.render("Hello\nWorld\nF\U0001F600O\nE🇪🇺U"))
t.transform.position.value.y += t.line_height
layer.add_shape(objects.Fill(Color(0, 0, 0)))
layer.add_shape(objects.Stroke(Color(1, 1, 1), 2))

script.script_main(an)
Ejemplo n.º 5
0
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))

script.script_main(an)
Ejemplo n.º 6
0
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.utils import animation as anutils
from lottie import Point, Color

an = objects.Animation(180)

layer = objects.ShapeLayer()
an.add_layer(layer)

group = layer.add_shape(objects.Group())
bez = group.add_shape(objects.Path())
bez.shape.value.add_point(Point(256, 128), Point(0, 0), Point(64, 64))
bez.shape.value.add_smooth_point(Point(256, 256 + 120), Point(32, -32))
bez.shape.value.add_point(Point(256, 256), Point(-64, -64), Point(-64, 64))
bez.shape.value.add_point(Point(128, 256 + 120), Point(64, 64), Point(0, 0))
group.add_shape(objects.Stroke(Color(1, 0, 0), 10))

group = layer.add_shape(objects.Group())
sh = anutils.generate_path_segment(bez.shape.value, 0, 180, 60, 180, 60, True)
group.add_shape(sh)
group.add_shape(objects.Stroke(Color(0, 1, 0), 20))

script.script_main(an)
Ejemplo n.º 7
0
    p2 = Point(
        math.sin(2 * t * math.pi * 2) / 2 + 1,
        -math.cos(t * math.pi * 2) / 2 + 1) * 256
    b2.position.add_keyframe(i, p2)


def chain_bezier(chain):
    b = objects.Bezier()
    for seg in chain.joints:
        b.add_point(seg)
    return b


g = layer.add_shape(objects.Group())
s = g.add_shape(objects.Path())
g.add_shape(objects.Stroke(Color(1, 0, 0), 5))

chain = ik.Chain(Point(0, 0))
chain.add_joint(Point(50, 0))
chain.add_joint(Point(150, 0))
chain.add_joint(Point(350, 0))
chain.add_joint(Point(400, 0))
#chain.add_joint(Point(500, 0))

octmaster = ik.Chain(Point(512, 512), True)
octmaster.add_joint(Point(450, 450))
octmaster.add_joint(Point(400, 400))
octmaster.add_joint(Point(450, 450))
octmaster.add_joint(Point(512, 512))

oct = ik.Octopus(octmaster)
Ejemplo n.º 8
0
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))
obj.shape.value.add_point(Point(500, 10))
group.add_shape(obj)

trim = layer.add_shape(objects.Trim())
#trim.offset.value = 350
trim.offset.add_keyframe(0, 0)
trim.offset.add_keyframe(last_frame, 360)
trim.start.value = 0
trim.end.value = 50
#trim.multiple = objects.TrimMultipleShapes.Individually

stroke = group.add_shape(objects.Stroke(Color(1, 1, 0), 10))

script.script_main(an)
Ejemplo n.º 9
0
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))
rect.position.add_keyframe(40, Point(110, 110))

rrect = shapes.add_shape(objects.Rect())
rrect.size.value = Point(100, 100)
rrect.position.value = Point(440, 110)
rrect.rounded.add_keyframe(0, 0)
rrect.rounded.add_keyframe(30, 30)
rrect.rounded.add_keyframe(60, 0)

fill = shapes.add_shape(objects.Fill(Color(1, 1, 0)))
stroke = shapes.add_shape(objects.Stroke(Color(0, 0, 0), 5))

beziers = layer.add_shape(objects.Group())
beziers.transform.position.value = Point(0, 130)
beziers.add_shape(rect.to_bezier())
beziers.add_shape(rrect.to_bezier())
beziers.add_shape(circle.to_bezier())
beziers.add_shape(star.to_bezier())

fill = beziers.add_shape(objects.Fill(Color(0, 0, 1)))
stroke = beziers.add_shape(objects.Stroke(Color(1, 1, 1), 5))

script.script_main(an)
Ejemplo n.º 10
0
    (easing.Sigmoid(1 / 10), Color(0, 0, 1 / 10)),
]
height = 512 / len(easings)
width = height

for i in range(len(easings)):
    group = layer.add_shape(objects.Group())

    rectgroup = group.add_shape(objects.Group())
    rect = rectgroup.add_shape(objects.Rect())
    rect.size.value = Size(width, height)
    y = i * height + height / 2
    group.transform.position.add_keyframe(0, Point(width / 2, y),
                                          easings[i][0])
    group.transform.position.add_keyframe(90, Point(512 - width / 2, y),
                                          easings[i][0])
    group.transform.position.add_keyframe(180, Point(width / 2, y),
                                          easings[i][0])
    rectgroup.add_shape(objects.Fill(easings[i][1]))

    bezgroup = group.insert_shape(0, objects.Group())
    bez = group.transform.position.keyframes[0].bezier()
    bezgroup.transform.scale.value = Size(100 * width, -100 * height)
    bezgroup.transform.position.value = Point(-width / 2, width / 2)
    bezgroup.add_shape(objects.Path()).shape.value = bez
    sc = Color(0, 0, 0) if easings[i][1].length == math.sqrt(3) else Color(
        1, 1, 1)
    bezgroup.add_shape(objects.Stroke(sc, 0.1))

script.script_main(an)
Ejemplo n.º 11
0
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)


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))
Ejemplo n.º 12
0

base = an.add_layer(objects.NullLayer())
base.transform.anchor_point.value = base.transform.position.value = Point(256, 256)
base.transform.rotation.add_keyframe(0, 0)
base.transform.rotation.add_keyframe(last_frame, 360)


star_layer = objects.ShapeLayer()
base.add_child(star_layer)
star = star_layer.add_shape(objects.Star())
star.inner_radius.value = 20
star.outer_radius.value = 50
star.position.value = Point(50, 50)
star_layer.add_shape(objects.Fill(Color(1, 1, 0)))
star_layer.add_shape(objects.Stroke(Color(0, 0, 0), 5))
star_layer.transform.anchor_point = star.position
star_layer.transform.position.value = Point(50, 256)
star_layer.transform.rotation.add_keyframe(0, 0)
star_layer.transform.rotation.add_keyframe(last_frame, -360)


circle_layer = objects.ShapeLayer()
an.add_layer(circle_layer)
circle_layer.parent = base
circle = circle_layer.add_shape(objects.Ellipse())
circle.size.value = NVector(100, 100)
circle_layer.add_shape(objects.Fill(Color(1, 0, 0)))
circle_layer.add_shape(objects.Stroke(Color(0, 0, 0), 5))
circle_layer.transform.position.add_keyframe(0, Point(256, 512-50))
circle_layer.transform.position.add_keyframe(last_frame/2, Point(256, 50))
Ejemplo n.º 13
0
                                      in_tan=NVector(0, -tl))
layer.transform.position.add_keyframe(last_frame / 4 * 2,
                                      Point(462, 256),
                                      out_tan=NVector(0, +tl),
                                      in_tan=NVector(+tl, 0))
layer.transform.position.add_keyframe(last_frame / 4 * 3,
                                      Point(256, 462),
                                      out_tan=NVector(-tl, 0),
                                      in_tan=NVector(0, +tl))
layer.transform.position.add_keyframe(last_frame / 4 * 4,
                                      Point(+50, 256),
                                      out_tan=NVector(0, -tl),
                                      in_tan=NVector(-tl, 0))

layer1 = objects.ShapeLayer()
an.add_layer(layer1)
layer1.add_shape(group)
layer1.add_shape(objects.Fill(Color(1, 0, 0)))
layer1.transform = layer.transform

bg = an.add_layer(objects.ShapeLayer())
track = bg.add_shape(objects.Path()).shape.value
track.closed = True
track.add_point(Point(+50, 256), NVector(0, +tl), NVector(0, -tl))
track.add_point(Point(256, +50), NVector(-tl, 0), NVector(+tl, 0))
track.add_point(Point(462, 256), NVector(0, -tl), NVector(0, +tl))
track.add_point(Point(256, 462), NVector(+tl, 0), NVector(-tl, 0))
bg.add_shape(objects.Stroke(Color(0, 0, 1), 50))

script.script_main(an)