Exemplo n.º 1
0
    def test_boundingbox(self):
        sh = objects.Ellipse()
        sh.position.value = [30, 40]
        sh.size.value = [10, 20]

        bb = sh.bounding_box()
        c = bb.center()
        self.assertEqual(bb.x1, 30 - 5)
        self.assertEqual(bb.y1, 40 - 10)
        self.assertEqual(bb.x2, 30 + 5)
        self.assertEqual(bb.y2, 40 + 10)
        self.assertEqual(c[0], 30)
        self.assertEqual(c[1], 40)
Exemplo n.º 2
0
 def test_empty(self):
     sh = objects.Ellipse()
     self.assertDictEqual(
         sh.to_dict(), {
             "ty": "el",
             "d": 0,
             "p": {
                 "a": 0,
                 "k": [0, 0]
             },
             "s": {
                 "a": 0,
                 "k": [0, 0]
             },
         })
Exemplo n.º 3
0
    def test_circle(self):
        lot = objects.Animation()
        sl = lot.add_layer(objects.ShapeLayer())

        ellipse = sl.add_shape(objects.Ellipse())
        ellipse.position.value = NVector(256, 256)
        ellipse.size.value = NVector(512, 512)
        sl.add_shape(objects.Fill(Color(.25, .25, .25)))

        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(len(rgl.bline.points), 4)
        self.assert_nvector_equal(rgl.origin.value, ellipse.position.value)
        self.assert_nvector_equal(rgl.color.value, sif.make_color(.25, .25, .25))
        self.assertTrue(rgl.active)

        self.assert_nvector_equal(rgl.bline.points[0].point.value, NVector(0, 256))
        self.assert_nvector_equal(rgl.bline.points[1].point.value, NVector(-256, 0))
        self.assert_nvector_equal(rgl.bline.points[2].point.value, NVector(0, -256))
        self.assert_nvector_equal(rgl.bline.points[3].point.value, NVector(256, 0))

        self.assertNotAlmostEqual(rgl.bline.points[0].t1.value.x, 0)
        self.assertAlmostEqual(rgl.bline.points[0].t1.value.y, 0)

        self.assertNotAlmostEqual(rgl.bline.points[1].t1.value.y, 0)
        self.assertAlmostEqual(rgl.bline.points[1].t1.value.x, 0)

        self.assertNotAlmostEqual(rgl.bline.points[2].t1.value.x, 0)
        self.assertAlmostEqual(rgl.bline.points[2].t1.value.y, 0)

        self.assertNotAlmostEqual(rgl.bline.points[3].t1.value.y, 0)
        self.assertAlmostEqual(rgl.bline.points[3].t1.value.x, 0)

        for i in range(4):
            self.assert_nvector_equal(rgl.bline.points[i].t1.value,  rgl.bline.points[i].t2.value)
Exemplo n.º 4
0
 def test_sized(self):
     sh = objects.Ellipse()
     sh.size.value = [10, 20]
     sh.position.value = [30, 40]
     sh.name = "foo"
     self.assertDictEqual(
         sh.to_dict(), {
             "ty": "el",
             "d": 0,
             "p": {
                 "a": 0,
                 "k": [30, 40]
             },
             "s": {
                 "a": 0,
                 "k": [10, 20]
             },
             "nm": "foo",
         })
Exemplo n.º 5
0
def particle():
    g = layer.add_shape(objects.Group())
    b = g.add_shape(objects.Ellipse())
    fill = objects.Fill()
    g.add_shape(fill)
    t = random.random()

    if t < 1/2:
        lf = t * 2
        fill.color.add_keyframe(0, color1.lerp(color2, lf))
        fill.color.add_keyframe(last_frame*t, color2)
        fill.color.add_keyframe((1 - t) * last_frame, color3, easing.Jump())
        fill.color.add_keyframe((1 - t) * last_frame+1, color1)
        fill.color.add_keyframe(last_frame, color1.lerp(color2, lf))
    else:
        lf = (t-0.5) * 2
        tf = (1-lf)/2
        fill.color.add_keyframe(0, color2.lerp(color3, lf))
        fill.color.add_keyframe(last_frame*tf, color3, easing.Jump())
        fill.color.add_keyframe(last_frame*tf+1, color1)
        fill.color.add_keyframe((.5 + tf) * last_frame, color2)
        fill.color.add_keyframe(last_frame, color2.lerp(color3, lf))

    fill.opacity.add_keyframe(0, opacity_start + (opacity_end - opacity_start) * t)
    fill.opacity.add_keyframe((1 - t) * last_frame, opacity_end)
    fill.opacity.add_keyframe((1 - t) * last_frame+1, opacity_start)
    fill.opacity.add_keyframe(last_frame, opacity_start + (opacity_end - opacity_start) * t)

    bezier = objects.Bezier()
    outp = PolarVector(random.uniform(start_len_min, start_len_max), random.random() * math.pi)
    inp = Point(0,  random.random() * (particle_end.y - particle_start.y) / 3)
    bezier.add_point(particle_start, outp=outp)
    bezier.add_point(particle_end, outp)

    b.size.value = particle_size
    anutils.follow_path(b.position, bezier, 0, last_frame, 10, start_t=t)
Exemplo n.º 6
0
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 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.add_keyframe(0, Point(0, 256))
circle.position.add_keyframe(20, Point(256, 256))
circle.position.add_keyframe(40, Point(256, 0))
circle.position.add_keyframe(60, Point(0, 256))


fill = layer.add_shape(objects.Fill(Color(1, 1, 0)))
fill.opacity.add_keyframe(0, 100)
fill.opacity.add_keyframe(30, 10)
fill.opacity.add_keyframe(60, 100)


script.script_main(an)
Exemplo n.º 7
0
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 Size, Point3D, Point, Color

an = objects.Animation(120)

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

g = layer.add_shape(objects.Group())
b = g.add_shape(objects.Ellipse())
b.size.value = Size(256, 256)
b.position.value = Point(256, 256)
g.add_shape(objects.Fill(Color(1, 1, 0)))

g = layer.insert_shape(0, objects.Group())
eye1 = g.add_shape(objects.Ellipse())
eye1.size.value = Size(20, 20)
eye1.position.value = Point3D(256 - 50, 256 - 50, -100)
g.add_shape(objects.Fill(Color(0, 0, 0)))

g = layer.insert_shape(0, objects.Group())
eye2 = g.add_shape(objects.Ellipse())
eye2.size.value = Size(20, 20)
eye2.position.value = Point3D(256 + 50, 256 - 50, -100)
g.add_shape(objects.Fill(Color(0, 0, 0)))
Exemplo n.º 8
0
an = objects.Animation(120)

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

# Build a sphere out of circles
balls = []
axes = [
    Point(1, 0),
    Point(0, 1),
]
for i in range(20):
    a = i / 20 * math.pi * 2
    for axis in axes:
        g = layer.add_shape(objects.Group())
        b = g.add_shape(objects.Ellipse())
        b.size.value = Size(20, 20)
        xz = axis * math.sin(a) * 128
        pos = Point3D(256 + xz[0], 256 + math.cos(a) * 128, xz[1])
        b.position.value = pos
        balls.append(b)
        g.add_shape(objects.Fill(Color(0, 1, 0)))

# Animate the circles using depth rotation
dr = anutils.DepthRotationDisplacer(Point3D(256, 256, 0), 0, 120, 10,
                                    Point3D(0, 2, -1))
for b in balls:
    dr.animate_point(b.position)

script.script_main(an)
Exemplo n.º 9
0
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.animation import follow_path
from lottie import Point, Color

an = objects.Animation(180)

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

group = layer.add_shape(objects.Group())
ball = group.add_shape(objects.Ellipse())
ball.size.value = Point(10, 10)

r1 = group.add_shape(objects.Rect())
r1.size.value = Point(50, 10)

r2 = group.add_shape(objects.Group())
r2.add_shape(objects.Rect()).size.value = Point(50, 10)
r2 = r2.transform

group.add_shape(objects.Fill(Color(0, 1, 0)))

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_point(Point(256, 256), Point(-64, -64), Point(-64, 64))
Exemplo n.º 10
0
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 Point, Color

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
Exemplo n.º 11
0
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 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())
Exemplo n.º 12
0
rot_time = 45
an = objects.Animation(rot_time*4)


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


def add_shape(shape, color, parent):
    g = parent.add_shape(objects.Group())
    s = g.add_shape(shape)
    g.add_shape(objects.Fill(color))
    return s


face1 = add_shape(objects.Ellipse(), Color(1, 1, 0), layer)
face2 = add_shape(objects.Ellipse(), Color(0, 1, 0), layer)

side = layer.add_shape(objects.Group())
side1 = add_shape(objects.Ellipse(), Color(1, 0, 0), side)
side2 = add_shape(objects.Ellipse(), Color(1, 0, 0), side)
sider = add_shape(objects.Rect(), Color(1, 0, 0), side)


width = 10

face1.size.add_keyframe(rot_time*0, Point(256, 256), easing.EaseIn())
face1.size.add_keyframe(rot_time*1, Point(0, 256))
face1.size.add_keyframe(rot_time*2, Point(0, 256))
face1.size.add_keyframe(rot_time*3, Point(0, 256), easing.EaseOut())
face1.size.add_keyframe(rot_time*4, Point(256, 256))
Exemplo n.º 13
0
last_frame = 180
an = objects.Animation(last_frame)

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

group = layer.add_shape(objects.Group())
star = objects.Star()
star.inner_radius.value = 20
star.outer_radius.value = 50
star.position.value = Point(0, 0)
group.add_shape(star)

group.add_shape(objects.Ellipse(NVector(0, 35), NVector(16, 16)))

layer.add_shape(objects.Fill(Color(1, 1, 0)))

tl = 120
layer.transform.position.add_keyframe(last_frame / 4 * 0,
                                      Point(+50, 256),
                                      out_tan=NVector(0, -tl),
                                      in_tan=NVector(-tl, 0))
layer.transform.position.add_keyframe(last_frame / 4 * 1,
                                      Point(256, +50),
                                      out_tan=NVector(+tl, 0),
                                      in_tan=NVector(0, -tl))
layer.transform.position.add_keyframe(last_frame / 4 * 2,
                                      Point(462, 256),
                                      out_tan=NVector(0, +tl),