geomotion 0.10.0 → 0.12.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.
- data/.travis.yml +2 -0
- data/Gemfile.lock +1 -1
- data/README.md +104 -0
- data/app/app_delegate.rb +5 -0
- data/app/next_controller.rb +19 -0
- data/app/perspective_controller.rb +76 -0
- data/app/shearing_controller.rb +77 -0
- data/lib/geomotion/ca_transform_3d.rb +223 -0
- data/lib/geomotion/cg_affine_transform.rb +181 -0
- data/lib/geomotion/cg_rect.rb +4 -4
- data/lib/geomotion/version.rb +1 -1
- data/resources/perspective.png +0 -0
- data/resources/shearing.png +0 -0
- data/spec/ca_transform_3d_spec.rb +345 -0
- data/spec/cg_affine_transform_spec.rb +247 -0
- data/spec/cg_rect_spec.rb +8 -1
- metadata +14 -3
@@ -0,0 +1,247 @@
|
|
1
|
+
describe "CGAffineTransform" do
|
2
|
+
|
3
|
+
describe "operations" do
|
4
|
+
|
5
|
+
it "should support ==" do
|
6
|
+
CGAffineTransformMake(2, 0, 0, 2, 0, 0).should == CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should support +" do
|
10
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
11
|
+
t2 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
12
|
+
(t1 + t2).should == CGAffineTransformMake(2, 0, 0, 2, 10, 10)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should support <<" do
|
16
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
17
|
+
t2 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
18
|
+
(t1 << t2).should == CGAffineTransformMake(2, 0, 0, 2, 10, 10)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should support -" do
|
22
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
23
|
+
t2 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
24
|
+
(t1 - t2).should == CGAffineTransformMake(2, 0, 0, 2, -10, -10)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "subtracting itself should return identity (scale)" do
|
28
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
29
|
+
(t1 - t1).should == CGAffineTransformMake(1, 0, 0, 1, 0, 0)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "subtracting itself should return identity (translate)" do
|
33
|
+
t1 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
34
|
+
(t1 - t1).should == CGAffineTransformMake(1, 0, 0, 1, 0, 0)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "subtracting itself should return identity (rotate)" do
|
38
|
+
t1 = CGAffineTransformMake(-1, 0, 0, -1, 0, 0)
|
39
|
+
(t1 - t1).should == CGAffineTransformMake(1, 0, 0, 1, 0, 0)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should support unary -" do
|
43
|
+
(- CGAffineTransformMake(2, 0, 0, 2, 0, 0)).should == CGAffineTransformMake(0.5, 0, 0, 0.5, 0, 0)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should support unary +" do
|
47
|
+
(+ CGAffineTransformMake(1, 0, 0, 1, 0, 0)).should == CGAffineTransformMake(1, 0, 0, 1, 0, 0)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe ".make" do
|
53
|
+
|
54
|
+
it "should work with no arguments" do
|
55
|
+
transform = CGAffineTransform.make
|
56
|
+
transform.should == CGAffineTransformMake(1, 0, 0, 1, 0, 0)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should work with options" do
|
60
|
+
transform = CGAffineTransform.make(a: 2, b: 0, c: 0, d: 2, tx: 0, ty: 0)
|
61
|
+
transform.should == CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should work with transform options (scale)" do
|
65
|
+
CGAffineTransform.make(scale: [2, 3]).should == CGAffineTransformMake(2, 0, 0, 3, 0, 0)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should work with transform options (translate)" do
|
69
|
+
CGAffineTransform.make(translate: [10, 20]).should == CGAffineTransformMake(1, 0, 0, 1, 10, 20)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should work with transform options (rotate)" do
|
73
|
+
transform = CGAffineTransform.make(rotate: Math::PI).to_a.map { |v| v.round(3) }
|
74
|
+
CGAffineTransform.new(*transform).should == CGAffineTransformMake(-1, 0, 0, -1, 0, 0)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should work with transform options (scale + translate)" do
|
78
|
+
CGAffineTransform.make(scale: [2, 3], translate: [10, 20]).should == CGAffineTransformMake(2, 0, 0, 3, 10, 20)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should work with transform options (scale + translate + rotation)" do
|
82
|
+
transform = CGAffineTransform.make(scale: [2, 3], rotate: Math::PI, translate: [10, 10]).to_a.map { |v| v.round(3) }
|
83
|
+
CGAffineTransform.new(*transform).should == CGAffineTransformMake(-2, 0, 0, -3, 10, 10)
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "identity" do
|
89
|
+
|
90
|
+
it "should return the identity matrix" do
|
91
|
+
CGAffineTransformIsIdentity(CGAffineTransform.identity).should == true
|
92
|
+
end
|
93
|
+
|
94
|
+
it "identity? should return true for identity matrix" do
|
95
|
+
CGAffineTransform.identity.identity?.should == true
|
96
|
+
end
|
97
|
+
|
98
|
+
it "identity? should return false other matrices" do
|
99
|
+
CGAffineTransform.new(2, 0, 0, 2, 0, 0).identity?.should == false
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
describe ".rotate" do
|
105
|
+
|
106
|
+
it "should work as a factory" do
|
107
|
+
transform = CGAffineTransform.rotate(Math::PI).to_a.map { |v| v.round(3) }
|
108
|
+
CGAffineTransform.new(*transform).should == CGAffineTransformMake(-1, 0, 0, -1, 0, 0)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should work as an instance method" do
|
112
|
+
transform = CGAffineTransform.identity.rotate(Math::PI).to_a.map { |v| v.round(3) }
|
113
|
+
CGAffineTransform.new(*transform).should == CGAffineTransformMake(-1, 0, 0, -1, 0, 0)
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
describe ".scale" do
|
119
|
+
|
120
|
+
it "should work as a factory with one argument" do
|
121
|
+
CGAffineTransform.scale(2).should == CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should work as a factory with two arguments" do
|
125
|
+
CGAffineTransform.scale(2, 3).should == CGAffineTransformMake(2, 0, 0, 3, 0, 0)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should work as a factory with one array" do
|
129
|
+
CGAffineTransform.scale([2, 3]).should == CGAffineTransformMake(2, 0, 0, 3, 0, 0)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should work as an instance method with one argument" do
|
133
|
+
CGAffineTransform.identity.scale(2).should == CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should work as an instance method with two arguments" do
|
137
|
+
CGAffineTransform.identity.scale(2, 3).should == CGAffineTransformMake(2, 0, 0, 3, 0, 0)
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should work as an instance method with one array" do
|
141
|
+
CGAffineTransform.identity.scale([2, 3]).should == CGAffineTransformMake(2, 0, 0, 3, 0, 0)
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
describe ".translate" do
|
147
|
+
|
148
|
+
it "should work as a factory with two arguments" do
|
149
|
+
CGAffineTransform.translate(10, 20).should == CGAffineTransformMake(1, 0, 0, 1, 10, 20)
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should work as a factory with one array" do
|
153
|
+
CGAffineTransform.translate([10, 20]).should == CGAffineTransformMake(1, 0, 0, 1, 10, 20)
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should work as an instance method with two arguments" do
|
157
|
+
CGAffineTransform.identity.translate(10, 20).should == CGAffineTransformMake(1, 0, 0, 1, 10, 20)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should work as an instance method with one array" do
|
161
|
+
CGAffineTransform.identity.translate([10, 20]).should == CGAffineTransformMake(1, 0, 0, 1, 10, 20)
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
describe ".shear" do
|
167
|
+
|
168
|
+
it "should work as a factory with proportion in x direction" do
|
169
|
+
CGAffineTransform.shear(1.5, 0).should == CGAffineTransformMake(1, 0, 1.5, 1, 0, 0)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should work as a factory with proportion and y direction" do
|
173
|
+
CGAffineTransform.shear(0, 1.5).should == CGAffineTransformMake(1, 1.5, 0, 1, 0, 0)
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should work as a factory with proportion and both directions" do
|
177
|
+
CGAffineTransform.shear(1.5, 1.5).should == CGAffineTransformMake(1, 1.5, 1.5, 1, 0, 0)
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should work as an instance method with proportion and x direction" do
|
181
|
+
CGAffineTransform.identity.shear(1.5, 0).should == CGAffineTransformMake(1, 0, 1.5, 1, 0, 0)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should work as an instance method with proportion and y direction" do
|
185
|
+
CGAffineTransform.identity.shear(0, 1.5).should == CGAffineTransformMake(1, 1.5, 0, 1, 0, 0)
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
describe "apply_to" do
|
191
|
+
|
192
|
+
before do
|
193
|
+
@transform = CGAffineTransformMake(2, 0, 0, 3, 10, 20)
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should work on a point" do
|
197
|
+
thing = CGPoint.new(0, 0)
|
198
|
+
@transform.apply_to(thing).should == CGPoint.new(10, 20)
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should work on a size" do
|
202
|
+
thing = CGSize.new(10, 10)
|
203
|
+
@transform.apply_to(thing).should == CGSize.new(20, 30)
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should work on a rect" do
|
207
|
+
thing = CGRect.new([0, 0], [10, 10])
|
208
|
+
@transform.apply_to(thing).should == CGRect.new([10, 20], [20, 30])
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should not work on anything else" do
|
212
|
+
->{ @transform.apply_to(1) }.should.raise
|
213
|
+
->{ @transform.apply_to([0, 0]) }.should.raise
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
describe "other methods" do
|
219
|
+
|
220
|
+
it "should support concat" do
|
221
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
222
|
+
t2 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
223
|
+
t1.concat(t2).should == CGAffineTransformMake(2, 0, 0, 2, 10, 10)
|
224
|
+
|
225
|
+
t1 = CGAffineTransformMake(1, 0, 0, 1, 10, 10)
|
226
|
+
t2 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
227
|
+
t1.concat(t2).should == CGAffineTransformMake(2, 0, 0, 2, 20, 20)
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should support invert" do
|
231
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
232
|
+
t1.invert.should == CGAffineTransformMake(0.5, 0, 0, 0.5, 0, 0)
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should support to_transform3d" do
|
236
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
237
|
+
t1.to_transform3d.should == CATransform3D.new(2,0,0,0 ,0,2,0,0 ,0,0,1,0 ,0,0,0,1)
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'should support to_a' do
|
241
|
+
t1 = CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
242
|
+
t1.to_a.should == [2, 0, 0, 2, 0, 0]
|
243
|
+
end
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
end
|
data/spec/cg_rect_spec.rb
CHANGED
@@ -8,13 +8,20 @@ describe "CGRect" do
|
|
8
8
|
CGRectEqualToRect(@rect, CGRectMake(10, 100, 50, 20)).should == true
|
9
9
|
end
|
10
10
|
|
11
|
-
it "should work with nested options" do
|
11
|
+
it "should work with nested options (CGPoint, CGSize)" do
|
12
12
|
CGRectEqualToRect(
|
13
13
|
CGRect.make(origin: CGPointMake(10, 100), size: CGSizeMake(50,20)),
|
14
14
|
CGRectMake(10, 100, 50, 20)
|
15
15
|
).should == true
|
16
16
|
end
|
17
17
|
|
18
|
+
it "should work with nested options (Arrays)" do
|
19
|
+
CGRectEqualToRect(
|
20
|
+
CGRect.make(origin: [10, 100], size: [50,20]),
|
21
|
+
CGRectMake(10, 100, 50, 20)
|
22
|
+
).should == true
|
23
|
+
end
|
24
|
+
|
18
25
|
it "should work with no options" do
|
19
26
|
CGRectEqualToRect(CGRect.make, CGRectMake(0, 0, 0, 0)).should == true
|
20
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geomotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -37,17 +37,27 @@ extensions: []
|
|
37
37
|
extra_rdoc_files: []
|
38
38
|
files:
|
39
39
|
- .gitignore
|
40
|
+
- .travis.yml
|
40
41
|
- Gemfile
|
41
42
|
- Gemfile.lock
|
42
43
|
- Geomotion.gemspec
|
43
44
|
- README.md
|
44
45
|
- Rakefile
|
45
46
|
- app/app_delegate.rb
|
47
|
+
- app/next_controller.rb
|
48
|
+
- app/perspective_controller.rb
|
49
|
+
- app/shearing_controller.rb
|
46
50
|
- lib/geomotion.rb
|
51
|
+
- lib/geomotion/ca_transform_3d.rb
|
52
|
+
- lib/geomotion/cg_affine_transform.rb
|
47
53
|
- lib/geomotion/cg_point.rb
|
48
54
|
- lib/geomotion/cg_rect.rb
|
49
55
|
- lib/geomotion/cg_size.rb
|
50
56
|
- lib/geomotion/version.rb
|
57
|
+
- resources/perspective.png
|
58
|
+
- resources/shearing.png
|
59
|
+
- spec/ca_transform_3d_spec.rb
|
60
|
+
- spec/cg_affine_transform_spec.rb
|
51
61
|
- spec/cg_point_spec.rb
|
52
62
|
- spec/cg_rect_spec.rb
|
53
63
|
- spec/cg_size_spec.rb
|
@@ -76,7 +86,8 @@ signing_key:
|
|
76
86
|
specification_version: 3
|
77
87
|
summary: A RubyMotion Geometry Wrapper
|
78
88
|
test_files:
|
89
|
+
- spec/ca_transform_3d_spec.rb
|
90
|
+
- spec/cg_affine_transform_spec.rb
|
79
91
|
- spec/cg_point_spec.rb
|
80
92
|
- spec/cg_rect_spec.rb
|
81
93
|
- spec/cg_size_spec.rb
|
82
|
-
has_rdoc:
|