tickly 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,19 @@
1
+ set cut_paste_input [stack 0]
2
+ version 6.3 v4
3
+ Group {
4
+ inputs 0
5
+ name Group1
6
+ selected true
7
+ }
8
+ CheckerBoard2 {
9
+ inputs 0
10
+ name CheckerBoard1
11
+ }
12
+ Blur {
13
+ size 42.5
14
+ name Blur1
15
+ }
16
+ Output {
17
+ name Output1
18
+ }
19
+ end_group
data/test/nukenode.txt ADDED
@@ -0,0 +1,11 @@
1
+ set cut_paste_input [stack 0]
2
+ version 6.3 v4
3
+ push $cut_paste_input
4
+ Blur {
5
+ size {{curve x1 0 x20 1.7 x33 3.9}}
6
+ name Blur1
7
+ label "With \"Escapes\""
8
+ selected true
9
+ xpos -353
10
+ ypos -33
11
+ }
@@ -0,0 +1,71 @@
1
+ #! /Applications/Nuke5.1v2/Nuke5.1v2.app/Contents/MacOS/Nuke5.1v2 -nx
2
+ version 5.1200
3
+ define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
4
+ <layout version="1.0">
5
+ <window x="214" y="133" w="1680" h="1024" screen="0">
6
+ <splitter orientation="1">
7
+ <split size="1062"></split>
8
+ <splitter orientation="1">
9
+ <split size="40"></split>
10
+ <dock id="" hideTitles="1" activePageId="Toolbar.1">
11
+ <page id="Toolbar.1"></page>
12
+ </dock>
13
+ <split size="1018"></split>
14
+ <splitter orientation="2">
15
+ <split size="499"></split>
16
+ <dock id="" activePageId="Viewer.1">
17
+ <page id="Viewer.1"></page>
18
+ </dock>
19
+ <split size="499"></split>
20
+ <dock id="" activePageId="Curve Editor.1">
21
+ <page id="DAG.1"></page>
22
+ <page id="Curve Editor.1"></page>
23
+ </dock>
24
+ </splitter>
25
+ </splitter>
26
+ <split size="614"></split>
27
+ <dock id="" activePageId="Properties.1">
28
+ <page id="Properties.1"></page>
29
+ </dock>
30
+ </splitter>
31
+ </window>
32
+ </layout>
33
+ }
34
+ Root {
35
+ inputs 0
36
+ name /Code/apps/tracksperanto/test/samples/one_tracker_with_break.nk
37
+ frame 763
38
+ last_frame 1580
39
+ lock_range true
40
+ format "640 480 0 0 640 480 1 PC_Video"
41
+ proxy_type scale
42
+ proxy_format "640 480 0 0 640 480 1 PC_Video"
43
+ }
44
+ Read {
45
+ inputs 0
46
+ file /Users/julik/Desktop/Storm/E036/E036_L005.%04d.dpx
47
+ format "2048 1176 0 0 2048 1176 1 "
48
+ last 1580
49
+ timecode 03:38:32:07
50
+ edge_code "02 05 17 3388 6703 60"
51
+ name Read1
52
+ xpos -271
53
+ ypos -90
54
+ }
55
+ Tracker3 {
56
+ track1 {{curve i x742 888 890.2463989 891.6602783 893.5056763 895.6155396 s95 897.2791748 899.1762695 901.6463623 903.6976318 905.1331177 907.3597412 909.7727051 912.0731812 913.7190552 916.0959473 918.1025391 920.0751953 922.1898804 924.6269531 926.2683716 928.2131348 930.7736206} {curve i x742 406 405.3980103 404.867981 404.1585083 403.6867065 403.1013489 402.463623 401.933136 401.3148499 400.4875183 399.8830566 399.3424377 398.5214233 398.1871033 397.5262756 396.8475647 396.2599182 395.5371399 395.1407166 394.3450928 393.7192078 392.8123474}}
57
+ enable2 true
58
+ track2 {{curve x742 1105 1107.277466 1108.645996 1110.494629 1112.658691 1114.258179 1116.237061 1118.607788 1120.709717 1122.134155 1124.373779 1126.885132 1129.21936 1130.868164 1133.252686 1135.243896 1137.268188 1139.385376 1141.824097 1143.422974 1145.289551 1147.972412} {curve x742 524 523.3273926 522.723999 521.8934326 521.4053955 520.6884766 520.0819092 519.5550537 518.897644 518.0953369 517.442688 516.8226929 516.0817871 515.673584 515.0698853 514.3513184 513.664917 512.9036865 512.5012817 511.5973511 510.9969482 510.1079407}}
59
+ translate {{curve i x742 0 2.246398926 3.66027832 5.50567627 7.615539551 9.279174805 11.17626953 13.6463623 15.69763184 17.13311768 19.35974121 21.77270508 24.07318115 25.71905518 28.09594727 30.10253906 32.07519531 34.18988037 36.62695312 38.26837158 40.21313477 42.77362061} {curve i x742 0 -0.6019897461 -1.132019043 -1.841491699 -2.313293457 -2.898651123 -3.536376953 -4.066864014 -4.685150146 -5.512481689 -6.116943359 -6.657562256 -7.47857666 -7.812896729 -8.473724365 -9.152435303 -9.740081787 -10.46286011 -10.85928345 -11.65490723 -12.28079224 -13.18765259}}
60
+ center {{curve i x742 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888} {curve i x742 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406}}
61
+ name Tracker1
62
+ selected true
63
+ xpos -271
64
+ ypos -4
65
+ }
66
+ Viewer {
67
+ frame 763
68
+ name Viewer1
69
+ xpos 10
70
+ ypos -10
71
+ }
@@ -0,0 +1,91 @@
1
+ #! /Applications/Nuke5.1v2/Nuke5.1v2.app/Contents/MacOS/Nuke5.1v2 -nx
2
+ version 5.1200
3
+ define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
4
+ <layout version="1.0">
5
+ <window x="214" y="133" w="1680" h="1024" screen="0">
6
+ <splitter orientation="1">
7
+ <split size="1062"></split>
8
+ <splitter orientation="1">
9
+ <split size="40"></split>
10
+ <dock id="" hideTitles="1" activePageId="Toolbar.1">
11
+ <page id="Toolbar.1"></page>
12
+ </dock>
13
+ <split size="1018"></split>
14
+ <splitter orientation="2">
15
+ <split size="499"></split>
16
+ <dock id="" activePageId="Viewer.1">
17
+ <page id="Viewer.1"></page>
18
+ </dock>
19
+ <split size="499"></split>
20
+ <dock id="" activePageId="DAG.1">
21
+ <page id="DAG.1"></page>
22
+ <page id="Curve Editor.1"></page>
23
+ <page id="DAG.2"></page>
24
+ </dock>
25
+ </splitter>
26
+ </splitter>
27
+ <split size="614"></split>
28
+ <dock id="" activePageId="Properties.1">
29
+ <page id="Properties.1"></page>
30
+ </dock>
31
+ </splitter>
32
+ </window>
33
+ </layout>
34
+ }
35
+ Root {
36
+ inputs 0
37
+ name /Code/apps/tracksperanto/test/samples/one_tracker_with_break_in_grp.nk
38
+ frame 763
39
+ last_frame 1580
40
+ lock_range true
41
+ format "640 480 0 0 640 480 1 PC_Video"
42
+ proxy_type scale
43
+ proxy_format "640 480 0 0 640 480 1 PC_Video"
44
+ }
45
+ Read {
46
+ inputs 0
47
+ file /Users/julik/Desktop/Storm/E036/E036_L005.%04d.dpx
48
+ format "2048 1176 0 0 2048 1176 1 "
49
+ last 1580
50
+ timecode 03:38:32:07
51
+ edge_code "02 05 17 3388 6703 60"
52
+ name Read1
53
+ xpos -271
54
+ ypos -195
55
+ }
56
+ Group {
57
+ name Group1
58
+ selected true
59
+ xpos -171
60
+ ypos -93
61
+ }
62
+ Input {
63
+ inputs 0
64
+ name Input1
65
+ xpos -227
66
+ ypos -113
67
+ }
68
+ Tracker3 {
69
+ track1 {{curve x742 888 890.2463989 891.6602783 893.5056763 895.6155396 s95 897.2791748 899.1762695 901.6463623 903.6976318 905.1331177 907.3597412 909.7727051 912.0731812 913.7190552 916.0959473 918.1025391 920.0751953 922.1898804 924.6269531 926.2683716 928.2131348 930.7736206} {curve x742 406 405.3980103 404.867981 404.1585083 403.6867065 403.1013489 402.463623 401.933136 401.3148499 400.4875183 399.8830566 399.3424377 398.5214233 398.1871033 397.5262756 396.8475647 396.2599182 395.5371399 395.1407166 394.3450928 393.7192078 392.8123474}}
70
+ enable2 true
71
+ track2 {{curve i x742 1105 1107.277466 1108.645996 1110.494629 1112.658691 1114.258179 1116.237061 1118.607788 1120.709717 1122.134155 1124.373779 1126.885132 1129.21936 1130.868164 1133.252686 1135.243896 1137.268188 1139.385376 1141.824097 1143.422974 1145.289551 1147.972412} {curve i x742 524 523.3273926 522.723999 521.8934326 521.4053955 520.6884766 520.0819092 519.5550537 518.897644 518.0953369 517.442688 516.8226929 516.0817871 515.673584 515.0698853 514.3513184 513.664917 512.9036865 512.5012817 511.5973511 510.9969482 510.1079407}}
72
+ translate {{curve i x742 0 2.246398926 3.66027832 5.50567627 7.615539551 9.279174805 11.17626953 13.6463623 15.69763184 17.13311768 19.35974121 21.77270508 24.07318115 25.71905518 28.09594727 30.10253906 32.07519531 34.18988037 36.62695312 38.26837158 40.21313477 42.77362061} {curve i x742 0 -0.6019897461 -1.132019043 -1.841491699 -2.313293457 -2.898651123 -3.536376953 -4.066864014 -4.685150146 -5.512481689 -6.116943359 -6.657562256 -7.47857666 -7.812896729 -8.473724365 -9.152435303 -9.740081787 -10.46286011 -10.85928345 -11.65490723 -12.28079224 -13.18765259}}
73
+ center {{curve i x742 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888} {curve i x742 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406}}
74
+ name Tracker1
75
+ xpos -227
76
+ ypos -73
77
+ }
78
+ Output {
79
+ name Output1
80
+ xpos -227
81
+ ypos 27
82
+ }
83
+ end_group
84
+ push 0
85
+ Viewer {
86
+ inputs 2
87
+ frame 763
88
+ name Viewer1
89
+ xpos -271
90
+ ypos -6
91
+ }
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ class TestEvaluator < Test::Unit::TestCase
4
+ include Tickly::Emitter
5
+
6
+ should "not do anything without handlers" do
7
+ stack = le("Tracker4", le(le("enabled", "true")))
8
+ e = Tickly::Evaluator.new
9
+ e.evaluate(stack)
10
+ end
11
+
12
+ class ShouldNotBeInstantiated
13
+ def initialize
14
+ raise "You failed"
15
+ end
16
+ end
17
+
18
+ should "not send anything to the handler when the expr does not conform to the standard" do
19
+ stack = le("ShouldNotBeInstantiated")
20
+ e = Tickly::Evaluator.new
21
+ e.add_node_handler_class(ShouldNotBeInstantiated)
22
+ assert_nothing_raised { e.evaluate(stack) }
23
+ end
24
+
25
+ class SomeNode
26
+ attr_reader :options
27
+ def initialize(options_hash)
28
+ @options = options_hash
29
+ end
30
+ end
31
+
32
+ should "instantiate the handler class" do
33
+ stack = le("SomeNode", le(le("foo", "bar"), le("baz", "bad")))
34
+ e = Tickly::Evaluator.new
35
+ e.add_node_handler_class(SomeNode)
36
+ node = e.evaluate(stack)
37
+
38
+ assert_kind_of SomeNode, node
39
+ ref_o = {"foo" => "bar", "baz" => "bad"}
40
+ assert_equal ref_o, node.options
41
+ end
42
+
43
+ end
@@ -0,0 +1,133 @@
1
+ require 'helper'
2
+
3
+ class TestParser < Test::Unit::TestCase
4
+ P = Tickly::Parser.new
5
+ include Tickly::Emitter
6
+
7
+ should "parse a single int as a stack with a string" do
8
+ assert_kind_of Tickly::LiteralExpr, P.parse('2')
9
+ assert_equal le("2"), P.parse('2')
10
+ end
11
+
12
+ should "parse a single int and discard whitespace" do
13
+ p = P.parse(' 2 ')
14
+ assert_kind_of Tickly::LiteralExpr, p
15
+ assert_equal le("2"), p
16
+ assert_equal "{2}", Tickly.to_tcl(p)
17
+ end
18
+
19
+ should "parse multiple ints and strings as a stack of subexpressions" do
20
+ assert_kind_of Tickly::LiteralExpr, P.parse('2 foo bar baz')
21
+ assert_equal le("2", "foo", "bar", "baz"), P.parse('2 foo bar baz')
22
+ end
23
+
24
+ should "parse and expand a string in double quotes" do
25
+ p = P.parse('"This is a string literal with spaces"')
26
+ assert_equal le("This is a string literal with spaces"), p
27
+
28
+ p = P.parse('"This is a string literal \"escaped\" with spaces"')
29
+ assert_equal le("This is a string literal \"escaped\" with spaces"), p
30
+ end
31
+
32
+ should "parse a string expression" do
33
+ p = P.parse("[1 2 3]")
34
+ assert_kind_of Tickly::LiteralExpr, p
35
+ assert_equal 1, p.length
36
+ assert_kind_of Tickly::StringExpr, p[0]
37
+ end
38
+
39
+ should "parse multiple string expressions" do
40
+ p = P.parse("[1 2 3] [3 4 5 foo]")
41
+ assert_equal le(se("1", "2", "3"), se("3", "4", "5", "foo")), p
42
+ end
43
+
44
+ should "parse multiline statements as literal expressions" do
45
+ p = P.parse("2\n2")
46
+ assert_equal "{{2} {2}}", Tickly.to_tcl(p)
47
+ end
48
+
49
+ should 'parse expression' do
50
+ expr = '{4 + 5}'
51
+ p = P.parse(expr)
52
+ assert_equal le(le("4", "+", "5")), p
53
+ end
54
+
55
+ should 'parse a Nuke node' do
56
+ f = File.open(File.dirname(__FILE__) + "/nukenode.txt")
57
+ p = P.parse(f)
58
+ script = le(
59
+ le("set", "cut_paste_input", se("stack", "0")),
60
+ le("version", "6.3", "v4"),
61
+ le("push", "$cut_paste_input"),
62
+ le("Blur",
63
+ le(
64
+ le("size",
65
+ le(
66
+ le("curve", "x1", "0", "x20", "1.7", "x33", "3.9")
67
+ )
68
+ ),
69
+ le("name", "Blur1"),
70
+ le("label", "With \"Escapes\""),
71
+ le("selected", "true"),
72
+ le("xpos", "-353"),
73
+ le("ypos", "-33")
74
+ )
75
+ )
76
+ )
77
+ assert_equal script, p
78
+ end
79
+
80
+ should 'parse a simple Nuke script and internalize the RotoPaint in it' do
81
+ f = File.open(File.dirname(__FILE__) + "/three_nodes_and_roto.txt")
82
+ p = P.parse(f)
83
+ # Should pass through the rotopaint node and get to the blur properly
84
+ blur = le("Blur",
85
+ le(
86
+ le("size",
87
+ le(
88
+ le("curve", "i", "x1", "0", "x20", "1.7", "x33", "3.9")
89
+ )
90
+ ),
91
+ le("name", "Blur1"),
92
+ le("label", "With \"Escapes\""),
93
+ le("selected", "true"),
94
+ le("xpos", "-212"),
95
+ le("ypos", "-24")
96
+ )
97
+ )
98
+ assert_equal blur, p[4]
99
+ end
100
+
101
+ should 'parse a Nuke script with indentations' do
102
+ f = File.open(File.dirname(__FILE__) + "/nuke_group.txt")
103
+ p = P.parse(f)
104
+ grp = le(
105
+ le("set", "cut_paste_input", se("stack", "0")),
106
+ le("version", "6.3", "v4"),
107
+ le("Group",
108
+ le(
109
+ le("inputs", "0"),
110
+ le("name", "Group1"),
111
+ le("selected", "true")
112
+ )
113
+ ),
114
+ le("CheckerBoard2",
115
+ le(
116
+ le("inputs", "0"),
117
+ le("name", "CheckerBoard1")
118
+ )
119
+ ),
120
+ le("Blur",
121
+ le(
122
+ le("size", "42.5"),
123
+ le("name", "Blur1")
124
+ )
125
+ ),
126
+ le("Output",
127
+ le("name", "Output1")
128
+ ),
129
+ le("end_group")
130
+ )
131
+ assert_equal grp, p
132
+ end
133
+ end
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ class TestSplitArray < Test::Unit::TestCase
4
+ should "return a standard array unscathed" do
5
+ assert_equal [1, 2, 3, 4], Tickly.split_array([1,2,3,4])
6
+ end
7
+
8
+ should "return a split array on nil" do
9
+ assert_equal [[1, 2], [3, 4]], Tickly.split_array([1, 2, nil, 3, 4])
10
+ end
11
+
12
+ class Jock < Array; end
13
+
14
+ should "properly use subclasses" do
15
+ s = Tickly.split_array(Jock.new([1, 2, nil, 3, 4]))
16
+ assert_kind_of Jock, s
17
+ assert_kind_of Jock, s[0]
18
+ end
19
+
20
+ end
@@ -0,0 +1,137 @@
1
+ set cut_paste_input [stack 0]
2
+ version 6.3 v4
3
+ CheckerBoard2 {
4
+ inputs 0
5
+ name CheckerBoard1
6
+ selected true
7
+ xpos -212
8
+ ypos -120
9
+ }
10
+ RotoPaint {
11
+ curves {AnimTree: "" {
12
+ Version: 1.2
13
+ Flag: 0
14
+ RootNode: 1
15
+ Node: {
16
+ NodeName: "Root" {
17
+ Flag: 512
18
+ NodeType: 1
19
+ Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 1024 S 0 778
20
+ NumOfAttributes: 11
21
+ "vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
22
+ }
23
+ NumOfChildren: 4
24
+ Node: {
25
+ NodeName: "Bezier1" {
26
+ Flag: 576
27
+ NodeType: 3
28
+ CurveGroup: "" {
29
+ Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 826.667 S 1 33 984.667
30
+ Flag: 0
31
+ NumOfCubicCurves: 2
32
+ CubicCurve: "" {
33
+ Type: 0 Flag: 8192 Dim: 2
34
+ NumOfPoints: 9
35
+ 0 S 1 33 0 S 1 33 320 0 0 S 1 33 620 S 1 33 1152 0 0 S 1 33 0 S 1 33 -320 0 0 S 1 33 -168 S 1 33 -128 0 0 S 1 33 812 S 1 33 730 0 0 S 1 33 168 S 1 33 128 0 0 S 1 33 34 S 1 33 -2 0 0 S 1 33 1048 S 1 33 1072 0 0 S 1 33 -34 S 1 33 2 0
36
+ }
37
+ CubicCurve: "" {
38
+ Type: 0 Flag: 8192 Dim: 2
39
+ NumOfPoints: 9
40
+ 0 S 1 33 0 S 1 33 320 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 0 S 1 33 -320 0 0 S 1 33 -168 S 1 33 -128 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 168 S 1 33 128 0 0 S 1 33 34 S 1 33 -2 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 -34 S 1 33 2 0
41
+ }
42
+ NumOfAttributes: 44
43
+ "vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 0 "go" S 0 0 "bo" S 0 0 "ao" S 0 0 "opc" S 0 1 "bm" S 0 0 "inv" S 0 0 "mbo" S 0 0 "mb" S 0 1 "mbs" S 0 0.5 "mbsot" S 0 0 "mbso" S 0 0 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "nv" S 0 1 "view1" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 0 "tt" S 0 4 "pt" S 0 0
44
+ }
45
+ }
46
+ NumOfChildren: 0
47
+ }
48
+ Node: {
49
+ NodeName: "Brush3" {
50
+ Flag: 512
51
+ NodeType: 5
52
+ CubicCurve: "" {
53
+ Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 882.24 S 1 33 789.92
54
+ Type: 3 Flag: 2080 Dim: 3
55
+ NumOfPoints: 25
56
+ 0 S 1 33 332 S 1 33 1018 S 1 33 1 0 0 S 1 33 342 S 1 33 1018 S 1 33 1 0 0 S 1 33 386 S 1 33 1018 S 1 33 1 0 0 S 1 33 482 S 1 33 984 S 1 33 1 0 0 S 1 33 602 S 1 33 936 S 1 33 1 0 0 S 1 33 716 S 1 33 896 S 1 33 1 0 0 S 1 33 798 S 1 33 868 S 1 33 1 0 0 S 1 33 894 S 1 33 840 S 1 33 1 0 0 S 1 33 930 S 1 33 838 S 1 33 1 0 0 S 1 33 966 S 1 33 834 S 1 33 1 0 0 S 1 33 980 S 1 33 834 S 1 33 1 0 0 S 1 33 998 S 1 33 834 S 1 33 1 0 0 S 1 33 1014 S 1 33 834 S 1 33 1 0 0 S 1 33 1038 S 1 33 834 S 1 33 1 0 0 S 1 33 1048 S 1 33 828 S 1 33 1 0 0 S 1 33 1060 S 1 33 822 S 1 33 1 0 0 S 1 33 1068 S 1 33 816 S 1 33 1 0 0 S 1 33 1080 S 1 33 802 S 1 33 1 0 0 S 1 33 1092 S 1 33 778 S 1 33 1 0 0 S 1 33 1098 S 1 33 748 S 1 33 1 0 0 S 1 33 1108 S 1 33 678 S 1 33 1 0 0 S 1 33 1092 S 1 33 570 S 1 33 1 0 0 S 1 33 1028 S 1 33 448 S 1 33 1 0 0 S 1 33 978 S 1 33 376 S 1 33 1 0 0 S 1 33 926 S 1 33 296 S 1 33 1 0
57
+ NumOfAttributes: 46
58
+ "vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
59
+ }
60
+ }
61
+ NumOfChildren: 0
62
+ }
63
+ Node: {
64
+ NodeName: "Brush2" {
65
+ Flag: 512
66
+ NodeType: 5
67
+ CubicCurve: "" {
68
+ Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 664.487 S 1 33 404.973
69
+ Type: 3 Flag: 2080 Dim: 3
70
+ NumOfPoints: 37
71
+ 0 S 1 33 968 S 1 33 454 S 1 33 1 0 0 S 1 33 956 S 1 33 454 S 1 33 1 0 0 S 1 33 894 S 1 33 454 S 1 33 1 0 0 S 1 33 762 S 1 33 454 S 1 33 1 0 0 S 1 33 540 S 1 33 476 S 1 33 1 0 0 S 1 33 354 S 1 33 510 S 1 33 1 0 0 S 1 33 252 S 1 33 532 S 1 33 1 0 0 S 1 33 204 S 1 33 540 S 1 33 1 0 0 S 1 33 168 S 1 33 546 S 1 33 1 0 0 S 1 33 152 S 1 33 546 S 1 33 1 0 0 S 1 33 152 S 1 33 540 S 1 33 1 0 0 S 1 33 170 S 1 33 526 S 1 33 1 0 0 S 1 33 210 S 1 33 516 S 1 33 1 0 0 S 1 33 260 S 1 33 512 S 1 33 1 0 0 S 1 33 312 S 1 33 516 S 1 33 1 0 0 S 1 33 372 S 1 33 562 S 1 33 1 0 0 S 1 33 438 S 1 33 600 S 1 33 1 0 0 S 1 33 518 S 1 33 648 S 1 33 1 0 0 S 1 33 600 S 1 33 688 S 1 33 1 0 0 S 1 33 710 S 1 33 732 S 1 33 1 0 0 S 1 33 800 S 1 33 754 S 1 33 1 0 0 S 1 33 842 S 1 33 760 S 1 33 1 0 0 S 1 33 888 S 1 33 760 S 1 33 1 0 0 S 1 33 918 S 1 33 760 S 1 33 1 0 0 S 1 33 954 S 1 33 696 S 1 33 1 0 0 S 1 33 996 S 1 33 498 S 1 33 1 0 0 S 1 33 1002 S 1 33 300 S 1 33 1 0 0 S 1 33 1002 S 1 33 36 S 1 33 1 0 0 S 1 33 960 S 1 33 -132 S 1 33 1 0 0 S 1 33 932 S 1 33 -208 S 1 33 1 0 0 S 1 33 914 S 1 33 -252 S 1 33 1 0 0 S 1 33 908 S 1 33 -260 S 1 33 1 0 0 S 1 33 902 S 1 33 -246 S 1 33 1 0 0 S 1 33 896 S 1 33 -150 S 1 33 1 0 0 S 1 33 890 S 1 33 64 S 1 33 1 0 0 S 1 33 890 S 1 33 300 S 1 33 1 0 0 S 1 33 900 S 1 33 498 S 1 33 1 0
72
+ NumOfAttributes: 46
73
+ "vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
74
+ }
75
+ }
76
+ NumOfChildren: 0
77
+ }
78
+ Node: {
79
+ NodeName: "Brush1" {
80
+ Flag: 512
81
+ NodeType: 5
82
+ CubicCurve: "" {
83
+ Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 730.692 S 1 33 712.038
84
+ Type: 3 Flag: 2080 Dim: 3
85
+ NumOfPoints: 52
86
+ 0 S 1 33 446 S 1 33 1062 S 1 33 1 0 0 S 1 33 456 S 1 33 1068 S 1 33 1 0 0 S 1 33 480 S 1 33 1080 S 1 33 1 0 0 S 1 33 542 S 1 33 1116 S 1 33 1 0 0 S 1 33 632 S 1 33 1152 S 1 33 1 0 0 S 1 33 684 S 1 33 1170 S 1 33 1 0 0 S 1 33 714 S 1 33 1180 S 1 33 1 0 0 S 1 33 738 S 1 33 1186 S 1 33 1 0 0 S 1 33 744 S 1 33 1186 S 1 33 1 0 0 S 1 33 746 S 1 33 1186 S 1 33 1 0 0 S 1 33 746 S 1 33 1176 S 1 33 1 0 0 S 1 33 746 S 1 33 1104 S 1 33 1 0 0 S 1 33 728 S 1 33 960 S 1 33 1 0 0 S 1 33 666 S 1 33 808 S 1 33 1 0 0 S 1 33 620 S 1 33 690 S 1 33 1 0 0 S 1 33 600 S 1 33 640 S 1 33 1 0 0 S 1 33 582 S 1 33 600 S 1 33 1 0 0 S 1 33 572 S 1 33 588 S 1 33 1 0 0 S 1 33 584 S 1 33 606 S 1 33 1 0 0 S 1 33 666 S 1 33 702 S 1 33 1 0 0 S 1 33 744 S 1 33 796 S 1 33 1 0 0 S 1 33 810 S 1 33 874 S 1 33 1 0 0 S 1 33 842 S 1 33 916 S 1 33 1 0 0 S 1 33 866 S 1 33 942 S 1 33 1 0 0 S 1 33 872 S 1 33 948 S 1 33 1 0 0 S 1 33 876 S 1 33 948 S 1 33 1 0 0 S 1 33 876 S 1 33 892 S 1 33 1 0 0 S 1 33 800 S 1 33 714 S 1 33 1 0 0 S 1 33 684 S 1 33 476 S 1 33 1 0 0 S 1 33 648 S 1 33 408 S 1 33 1 0 0 S 1 33 618 S 1 33 346 S 1 33 1 0 0 S 1 33 606 S 1 33 320 S 1 33 1 0 0 S 1 33 636 S 1 33 366 S 1 33 1 0 0 S 1 33 656 S 1 33 394 S 1 33 1 0 0 S 1 33 746 S 1 33 528 S 1 33 1 0 0 S 1 33 824 S 1 33 630 S 1 33 1 0 0 S 1 33 872 S 1 33 690 S 1 33 1 0 0 S 1 33 902 S 1 33 724 S 1 33 1 0 0 S 1 33 914 S 1 33 730 S 1 33 1 0 0 S 1 33 918 S 1 33 726 S 1 33 1 0 0 S 1 33 918 S 1 33 654 S 1 33 1 0 0 S 1 33 848 S 1 33 476 S 1 33 1 0 0 S 1 33 788 S 1 33 378 S 1 33 1 0 0 S 1 33 762 S 1 33 330 S 1 33 1 0 0 S 1 33 750 S 1 33 306 S 1 33 1 0 0 S 1 33 746 S 1 33 300 S 1 33 1 0 0 S 1 33 750 S 1 33 300 S 1 33 1 0 0 S 1 33 770 S 1 33 316 S 1 33 1 0 0 S 1 33 798 S 1 33 328 S 1 33 1 0 0 S 1 33 812 S 1 33 334 S 1 33 1 0 0 S 1 33 824 S 1 33 336 S 1 33 1 0 0 S 1 33 828 S 1 33 340 S 1 33 1 0
87
+ NumOfAttributes: 46
88
+ "vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
89
+ }
90
+ }
91
+ NumOfChildren: 0
92
+ }
93
+ }
94
+ }
95
+ }
96
+ toolbox {selectAll {
97
+ { selectAll ssx 1 ssy 1 sf 1 }
98
+ { createBezier ssx 1 ssy 1 sf 1 sb 1 tt 4 }
99
+ { createBSpline ssx 1 ssy 1 sf 1 sb 1 }
100
+ { createEllipse ssx 1 ssy 1 sf 1 sb 1 }
101
+ { createRectangle ssx 1 ssy 1 sf 1 sb 1 }
102
+ { brush ssx 1 ssy 1 sf 1 sb 1 ltn 33 ltm 33 tt 14 }
103
+ { eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
104
+ { clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
105
+ { reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
106
+ { dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
107
+ { burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
108
+ { blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
109
+ { sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
110
+ { smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
111
+ } }
112
+ toolbar_brush_hardness 0.200000003
113
+ toolbar_lifetime_type all
114
+ toolbar_source_transform_scale {1 1}
115
+ toolbar_source_transform_center {320 240}
116
+ colorOverlay 0
117
+ lifetime_type "all frames"
118
+ lifetime_start 33
119
+ lifetime_end 33
120
+ motionblur_shutter_offset_type centred
121
+ brush_spacing 0.05000000075
122
+ brush_hardness 0.200000003
123
+ source_black_outside true
124
+ createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
125
+ name RotoPaint1
126
+ selected true
127
+ xpos -212
128
+ ypos -48
129
+ }
130
+ Blur {
131
+ size {{curve i x1 0 x20 1.7 x33 3.9}}
132
+ name Blur1
133
+ label "With \"Escapes\""
134
+ selected true
135
+ xpos -212
136
+ ypos -24
137
+ }