geomotion 0.14.0 → 0.15.0
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.
- checksums.yaml +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +30 -0
- data/lib/geomotion/ca_transform_3d.rb +9 -0
- data/lib/geomotion/cg_affine_transform.rb +9 -0
- data/lib/geomotion/cg_point.rb +5 -1
- data/lib/geomotion/cg_rect.rb +50 -28
- data/lib/geomotion/cg_size.rb +4 -0
- data/lib/geomotion/version.rb +1 -1
- data/spec/ca_transform_3d_spec.rb +30 -23
- data/spec/cg_affine_transform_spec.rb +7 -0
- data/spec/cg_point_spec.rb +8 -0
- data/spec/cg_rect_spec.rb +17 -0
- data/spec/cg_size_spec.rb +7 -0
- metadata +14 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a59f370cd3dbf8f042b2287527e6126964307b21
|
4
|
+
data.tar.gz: 25963a639b7b2f6176751b734b56453cd3400138
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6918464558d95c7e38b1b99c96ff7a4c7702d4db03c5e4c4254193638a1d160c39d2a4a7142446d612f655807448167abe0a8b56340dd32ea652f25437cb19aa
|
7
|
+
data.tar.gz: 11cac391016820c7eeebdde5bd08129813fdddf3d7df87215e365ed7c546f41cdc42c397b162a3135f6e0dc50550bf5cf50acc250a9639440320443c673e74dc
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -215,6 +215,13 @@ frame.beside(width: 20, down: 10, height: 20)
|
|
215
215
|
|
216
216
|
frame.below(grow_width: 10, grow_up: 5)
|
217
217
|
# => [[0, 15], [40, 25]]
|
218
|
+
|
219
|
+
# convert to NSValue, for use in NSCoding or where an Objective-C object is
|
220
|
+
# needed. CGRect is a "boxed" object in RubyMotion, and in Objective-C it is a
|
221
|
+
# C-struct and so can't be stored in an NSArray, for example.
|
222
|
+
NSValue.valueWithCGRect(CGRect.new([0, 10], [10, 20]))
|
223
|
+
# =>
|
224
|
+
CGRect.new([0, 10], [10, 20]).to_ns_value
|
218
225
|
```
|
219
226
|
|
220
227
|
### CGSize
|
@@ -242,6 +249,12 @@ size + CGPoint.make(x: 10, y: 30)
|
|
242
249
|
# Combine with CGPoint
|
243
250
|
size.rect_at_point CGPoint.make(x: 10, y: 30)
|
244
251
|
=> CGRect(10, 30, 50, 20)
|
252
|
+
|
253
|
+
# convert to NSValue, for use in NSCoding or where an Objective-C object is
|
254
|
+
# needed.
|
255
|
+
NSValue.valueWithCGSize(CGSize.new(0, 10))
|
256
|
+
# =>
|
257
|
+
CGSize.new(0, 10).to_ns_value
|
245
258
|
```
|
246
259
|
|
247
260
|
### CGPoint
|
@@ -283,6 +296,12 @@ point.distance_to(CGPoint.make(x: 13, y:104))
|
|
283
296
|
# (up 10, over 10)
|
284
297
|
point.angle_to(CGPoint.make(x: 20, y:110))
|
285
298
|
=> 0.785398163397 (pi/4)
|
299
|
+
|
300
|
+
# convert to NSValue, for use in NSCoding or where an Objective-C object is
|
301
|
+
# needed.
|
302
|
+
NSValue.valueWithCGPoint(CGPoint.new(0, 10))
|
303
|
+
# =>
|
304
|
+
CGPoint.new(0, 10).to_ns_value
|
286
305
|
```
|
287
306
|
|
288
307
|
### CGAffineTransform
|
@@ -330,6 +349,12 @@ CGAffineTransform.shear(0, 0.5) # in y direction
|
|
330
349
|
|
331
350
|
# or you can chain these methods
|
332
351
|
CGAffineTransform.identity.translate(10, 10).scale(2).rotate(Math::PI / 4)
|
352
|
+
|
353
|
+
# convert to NSValue, for use in NSCoding or where an Objective-C object is
|
354
|
+
# needed.
|
355
|
+
NSValue.valueWithCGAffineTransform(CGAffineTransform.translate(0, 10))
|
356
|
+
# =>
|
357
|
+
CGAffineTransform.translate(0, 10).to_ns_value
|
333
358
|
```
|
334
359
|
|
335
360
|
###### Shearing
|
@@ -383,6 +408,11 @@ CATransform3D.perspective(0, 0.002) # "rotates" around the y-axis
|
|
383
408
|
|
384
409
|
# or you can chain these methods
|
385
410
|
CATransform3D.identity.translate(10, 10, 10).scale(2).rotate(Math::PI / 4)
|
411
|
+
|
412
|
+
# convert to NSValue, for use in NSCoding or CAKeyframeAnimation#values
|
413
|
+
NSValue.valueWithCATransform3D(CATransform3D.translate(0, 10, 0))
|
414
|
+
# =>
|
415
|
+
CATransform3D.translate(0, 10, 0).to_ns_value
|
386
416
|
```
|
387
417
|
|
388
418
|
###### Perspective
|
@@ -216,8 +216,17 @@ class CATransform3D
|
|
216
216
|
self.concat CATransform3D.perspective(x, y)
|
217
217
|
end
|
218
218
|
|
219
|
+
def to_ns_value
|
220
|
+
NSValue.valueWithCATransform3D(self)
|
221
|
+
end
|
222
|
+
|
219
223
|
def to_a
|
220
224
|
[self.m11, self.m12, self.m13, self.m14, self.m21, self.m22, self.m23, self.m24, self.m31, self.m32, self.m33, self.m34, self.m41, self.m42, self.m43, self.m44]
|
221
225
|
end
|
222
226
|
|
227
|
+
private
|
228
|
+
def to_ary
|
229
|
+
to_a
|
230
|
+
end
|
231
|
+
|
223
232
|
end
|
data/lib/geomotion/cg_point.rb
CHANGED
@@ -10,7 +10,7 @@ class CGPoint
|
|
10
10
|
# point.rect_of_size(size) # => CGRect([0, 10], [100, 100])
|
11
11
|
# point.rect_of_size([10, 20]) # => CGRect([10, 20], [100, 100])
|
12
12
|
def rect_of_size(size)
|
13
|
-
CGRect.new(
|
13
|
+
CGRect.new(self, size)
|
14
14
|
end
|
15
15
|
|
16
16
|
# modified points
|
@@ -98,6 +98,10 @@ class CGPoint
|
|
98
98
|
"#{self.class.name}(#{self.x}, #{self.y})"
|
99
99
|
end
|
100
100
|
|
101
|
+
def to_ns_value
|
102
|
+
NSValue.valueWithCGPoint(self)
|
103
|
+
end
|
104
|
+
|
101
105
|
private
|
102
106
|
# this method allows us to do parallel assignment of #x and #y
|
103
107
|
def to_ary
|
data/lib/geomotion/cg_rect.rb
CHANGED
@@ -234,11 +234,12 @@ class CGRect
|
|
234
234
|
NSLog("Using the default value of `0` in `CGRect#left` is deprecated.")
|
235
235
|
dist = 0
|
236
236
|
end
|
237
|
+
raise "You cannot specify `:left` in `CGRect#left`" if options.key?(:left)
|
237
238
|
raise "You must specify an amount in `CGRect#left`" unless dist.is_a?(Numeric)
|
238
239
|
|
239
240
|
self.apply({
|
240
241
|
left: dist
|
241
|
-
}.
|
242
|
+
}).apply(options)
|
242
243
|
end
|
243
244
|
|
244
245
|
def right(dist=nil, options={})
|
@@ -246,11 +247,12 @@ class CGRect
|
|
246
247
|
NSLog("Using the default value of `0` in `CGRect#right` is deprecated.")
|
247
248
|
dist = 0
|
248
249
|
end
|
250
|
+
raise "You cannot specify `:right` in `CGRect#right`" if options.key?(:right)
|
249
251
|
raise "You must specify an amount in `CGRect#right`" unless dist.is_a?(Numeric)
|
250
252
|
|
251
253
|
self.apply({
|
252
254
|
right: dist
|
253
|
-
}.
|
255
|
+
}).apply(options)
|
254
256
|
end
|
255
257
|
|
256
258
|
def up(dist=nil, options={})
|
@@ -258,11 +260,12 @@ class CGRect
|
|
258
260
|
NSLog("Using the default value of `0` in `CGRect#up` is deprecated.")
|
259
261
|
dist = 0
|
260
262
|
end
|
263
|
+
raise "You cannot specify `:up` in `CGRect#up`" if options.key?(:up)
|
261
264
|
raise "You must specify an amount in `CGRect#up`" unless dist.is_a?(Numeric)
|
262
265
|
|
263
266
|
self.apply({
|
264
267
|
up: dist
|
265
|
-
}.
|
268
|
+
}).apply(options)
|
266
269
|
end
|
267
270
|
|
268
271
|
def down(dist=nil, options={})
|
@@ -270,43 +273,48 @@ class CGRect
|
|
270
273
|
NSLog("Using the default value of `0` in `CGRect#down` is deprecated.")
|
271
274
|
dist = 0
|
272
275
|
end
|
276
|
+
raise "You cannot specify `:down` in `CGRect#down`" if options.key?(:down)
|
273
277
|
raise "You must specify an amount in `CGRect#down`" unless dist.is_a?(Numeric)
|
274
278
|
|
275
279
|
self.apply({
|
276
280
|
down: dist
|
277
|
-
}.
|
281
|
+
}).apply(options)
|
278
282
|
end
|
279
283
|
|
280
284
|
def wider(dist, options={})
|
285
|
+
raise "You cannot specify `:width` in `CGRect#width`" if options.key?(:width)
|
281
286
|
raise "You must specify an amount in `CGRect#wider`" unless dist.is_a?(Numeric)
|
282
287
|
|
283
288
|
self.apply({
|
284
289
|
wider: dist
|
285
|
-
}.
|
290
|
+
}).apply(options)
|
286
291
|
end
|
287
292
|
|
288
293
|
def thinner(dist, options={})
|
294
|
+
raise "You cannot specify `:thinner` in `CGRect#thinner`" if options.key?(:thinner)
|
289
295
|
raise "You must specify an amount in `CGRect#thinner`" unless dist.is_a?(Numeric)
|
290
296
|
|
291
297
|
self.apply({
|
292
298
|
thinner: dist
|
293
|
-
}.
|
299
|
+
}).apply(options)
|
294
300
|
end
|
295
301
|
|
296
302
|
def taller(dist, options={})
|
303
|
+
raise "You cannot specify `:taller` in `CGRect#taller`" if options.key?(:taller)
|
297
304
|
raise "You must specify an amount in `CGRect#taller`" unless dist.is_a?(Numeric)
|
298
305
|
|
299
306
|
self.apply({
|
300
307
|
taller: dist
|
301
|
-
}.
|
308
|
+
}).apply(options)
|
302
309
|
end
|
303
310
|
|
304
311
|
def shorter(dist, options={})
|
312
|
+
raise "You cannot specify `:shorter` in `CGRect#shorter`" if options.key?(:shorter)
|
305
313
|
raise "You must specify an amount in `CGRect#shorter`" unless dist.is_a?(Numeric)
|
306
314
|
|
307
315
|
self.apply({
|
308
316
|
shorter: dist
|
309
|
-
}.
|
317
|
+
}).apply(options)
|
310
318
|
end
|
311
319
|
|
312
320
|
# adjacent rects
|
@@ -317,7 +325,7 @@ class CGRect
|
|
317
325
|
height = options[:height] || self.size.height
|
318
326
|
self.apply({
|
319
327
|
up: height + margin
|
320
|
-
}.
|
328
|
+
}).apply(options)
|
321
329
|
end
|
322
330
|
|
323
331
|
def below(margin = 0, options={})
|
@@ -326,7 +334,7 @@ class CGRect
|
|
326
334
|
|
327
335
|
self.apply({
|
328
336
|
down: self.size.height + margin
|
329
|
-
}.
|
337
|
+
}).apply(options)
|
330
338
|
end
|
331
339
|
|
332
340
|
def before(margin = 0, options={})
|
@@ -336,7 +344,7 @@ class CGRect
|
|
336
344
|
width = options[:width] || self.size.width
|
337
345
|
self.apply({
|
338
346
|
left: width + margin
|
339
|
-
}.
|
347
|
+
}).apply(options)
|
340
348
|
end
|
341
349
|
|
342
350
|
def beside(margin = 0, options={})
|
@@ -345,7 +353,7 @@ class CGRect
|
|
345
353
|
|
346
354
|
self.apply({
|
347
355
|
right: self.size.width + margin
|
348
|
-
}.
|
356
|
+
}).apply(options)
|
349
357
|
end
|
350
358
|
alias after beside
|
351
359
|
|
@@ -361,9 +369,9 @@ class CGRect
|
|
361
369
|
self.apply({
|
362
370
|
x: offset.x + margin,
|
363
371
|
y: offset.y,
|
372
|
+
width: width,
|
364
373
|
height: self.size.height,
|
365
|
-
|
366
|
-
}.merge(options))
|
374
|
+
}).apply(options)
|
367
375
|
end
|
368
376
|
|
369
377
|
# Create a rect inside the receiver, on the right side. If `margin` is
|
@@ -376,9 +384,9 @@ class CGRect
|
|
376
384
|
self.apply({
|
377
385
|
x: offset.x + self.size.width - width - margin,
|
378
386
|
y: offset.y,
|
387
|
+
width: width,
|
379
388
|
height: self.size.height,
|
380
|
-
|
381
|
-
}.merge(options))
|
389
|
+
}).apply(options)
|
382
390
|
end
|
383
391
|
|
384
392
|
# Create a rect inside the receiver, on the top side. If `margin` is
|
@@ -392,8 +400,8 @@ class CGRect
|
|
392
400
|
x: offset.x,
|
393
401
|
y: offset.y + margin,
|
394
402
|
width: self.size.width,
|
395
|
-
height: height
|
396
|
-
}.
|
403
|
+
height: height,
|
404
|
+
}).apply(options)
|
397
405
|
end
|
398
406
|
|
399
407
|
# Create a rect inside the receiver, on the bottom side. If `margin` is
|
@@ -407,8 +415,8 @@ class CGRect
|
|
407
415
|
x: offset.x,
|
408
416
|
y: offset.y + self.size.height - height - margin,
|
409
417
|
width: self.size.width,
|
410
|
-
height: height
|
411
|
-
}.
|
418
|
+
height: height,
|
419
|
+
}).apply(options)
|
412
420
|
end
|
413
421
|
|
414
422
|
# positions
|
@@ -421,10 +429,6 @@ private
|
|
421
429
|
end
|
422
430
|
end
|
423
431
|
|
424
|
-
def to_ary
|
425
|
-
[self.origin, self.size]
|
426
|
-
end
|
427
|
-
|
428
432
|
public
|
429
433
|
def center(absolute = false)
|
430
434
|
cgrect_offset(absolute) + CGPoint.new(self.size.width / 2, self.size.height / 2)
|
@@ -467,6 +471,10 @@ public
|
|
467
471
|
CGRect.new([self.origin.x.round, self.origin.y.round], [self.size.width.round, self.size.height.round])
|
468
472
|
end
|
469
473
|
|
474
|
+
def integral
|
475
|
+
CGRectIntegral(self)
|
476
|
+
end
|
477
|
+
|
470
478
|
def centered_in(rect, absolute = false)
|
471
479
|
self.size.centered_in(rect, absolute)
|
472
480
|
end
|
@@ -540,21 +548,23 @@ public
|
|
540
548
|
alias grow_right wider
|
541
549
|
|
542
550
|
def grow_left(amount, options={})
|
551
|
+
raise "You cannot specify `:grow_left` in `CGRect#grow_left`" if options.key?(:grow_left)
|
543
552
|
raise "You must specify an amount in `CGRect#grow_left`" unless amount.is_a?(Numeric)
|
544
553
|
|
545
554
|
self.apply({
|
546
555
|
grow_left: amount
|
547
|
-
}.
|
556
|
+
}).apply(options)
|
548
557
|
end
|
549
558
|
|
550
559
|
alias grow_down taller
|
551
560
|
|
552
561
|
def grow_up(amount, options={})
|
562
|
+
raise "You cannot specify `:grow_up` in `CGRect#grow_up`" if options.key?(:grow_up)
|
553
563
|
raise "You must specify an amount in `CGRect#grow_up`" unless amount.is_a?(Numeric)
|
554
564
|
|
555
565
|
self.apply({
|
556
566
|
grow_up: amount
|
557
|
-
}.
|
567
|
+
}).apply(options)
|
558
568
|
end
|
559
569
|
|
560
570
|
def grow_width(amount, options={})
|
@@ -579,21 +589,23 @@ public
|
|
579
589
|
alias shrink_left thinner
|
580
590
|
|
581
591
|
def shrink_right(amount, options={})
|
592
|
+
raise "You cannot specify `:shrink_right` in `CGRect#shrink_right`" if options.key?(:shrink_right)
|
582
593
|
raise "You must specify an amount in `CGRect#shrink_right`" unless amount.is_a?(Numeric)
|
583
594
|
|
584
595
|
self.apply({
|
585
596
|
shrink_right: amount
|
586
|
-
}.
|
597
|
+
}).apply(options)
|
587
598
|
end
|
588
599
|
|
589
600
|
alias shrink_up shorter
|
590
601
|
|
591
602
|
def shrink_down(amount, options={})
|
603
|
+
raise "You cannot specify `:shrink_down` in `CGRect#shrink_down`" if options.key?(:shrink_down)
|
592
604
|
raise "You must specify an amount in `CGRect#shrink_down`" unless amount.is_a?(Numeric)
|
593
605
|
|
594
606
|
self.apply({
|
595
607
|
shrink_down: amount
|
596
|
-
}.
|
608
|
+
}).apply(options)
|
597
609
|
end
|
598
610
|
|
599
611
|
def shrink_width(amount, options={})
|
@@ -652,4 +664,14 @@ public
|
|
652
664
|
"#{self.class.name}([#{self.origin.x}, #{self.origin.y}], [#{self.size.width}, #{self.size.height}])"
|
653
665
|
end
|
654
666
|
|
667
|
+
def to_ns_value
|
668
|
+
NSValue.valueWithCGRect(self)
|
669
|
+
end
|
670
|
+
|
671
|
+
private
|
672
|
+
|
673
|
+
def to_ary
|
674
|
+
[self.origin, self.size]
|
675
|
+
end
|
676
|
+
|
655
677
|
end
|
data/lib/geomotion/cg_size.rb
CHANGED
data/lib/geomotion/version.rb
CHANGED
@@ -172,25 +172,25 @@ describe "CATransform3D" do
|
|
172
172
|
end
|
173
173
|
|
174
174
|
it "should work with transform options (scale)" do
|
175
|
-
CATransform3D.make(scale: [2, 3, 4]).should == CATransform3D.new(2,0,0,0
|
175
|
+
CATransform3D.make(scale: [2, 3, 4]).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 0,0,0,1)
|
176
176
|
end
|
177
177
|
|
178
178
|
it "should work with transform options (translate)" do
|
179
|
-
CATransform3D.make(translate: [10, 20, 30]).should == CATransform3D.new(1,0,0,0
|
179
|
+
CATransform3D.make(translate: [10, 20, 30]).should == CATransform3D.new(1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,30,1)
|
180
180
|
end
|
181
181
|
|
182
182
|
it "should work with transform options (rotate)" do
|
183
183
|
transform = CATransform3D.make(rotate: Math::PI).to_a.map { |v| v.round(3) }
|
184
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0
|
184
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0, 0,-1,0,0, 0,0,1,0, 0,0,0,1)
|
185
185
|
end
|
186
186
|
|
187
187
|
it "should work with transform options (scale + translate)" do
|
188
|
-
CATransform3D.make(scale: [2, 3, 4], translate: [10, 20, 30]).should == CATransform3D.new(2,0,0,0
|
188
|
+
CATransform3D.make(scale: [2, 3, 4], translate: [10, 20, 30]).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 10,20,30,1)
|
189
189
|
end
|
190
190
|
|
191
191
|
it "should work with transform options (scale + translate + rotation)" do
|
192
192
|
transform = CATransform3D.make(scale: [2, 3, 4], rotate: Math::PI, translate: [10, 20, 30]).to_a.map { |v| v.round(3) }
|
193
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-2,0,0,0
|
193
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-2,0,0,0, 0,-3,0,0, 0,0,4,0, 10,20,30,1)
|
194
194
|
end
|
195
195
|
|
196
196
|
end
|
@@ -225,12 +225,12 @@ describe "CATransform3D" do
|
|
225
225
|
|
226
226
|
it "should work as a factory (z-axis)" do
|
227
227
|
transform = CATransform3D.rotate(Math::PI, 0, 0, 1).to_a.map { |v| v.round(3) }
|
228
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0
|
228
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0, 0,-1,0,0, 0,0,1,0, 0,0,0,1)
|
229
229
|
end
|
230
230
|
|
231
231
|
it "should work as a factory (default)" do
|
232
232
|
transform = CATransform3D.rotate(Math::PI).to_a.map { |v| v.round(3) }
|
233
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0
|
233
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0, 0,-1,0,0, 0,0,1,0, 0,0,0,1)
|
234
234
|
end
|
235
235
|
|
236
236
|
it "should work as an instance method (x-axis)" do
|
@@ -245,12 +245,12 @@ describe "CATransform3D" do
|
|
245
245
|
|
246
246
|
it "should work as an instance method (z-axis)" do
|
247
247
|
transform = CATransform3D.identity.rotate(Math::PI, 0, 0, 1).to_a.map { |v| v.round(3) }
|
248
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0
|
248
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0, 0,-1,0,0, 0,0,1,0, 0,0,0,1)
|
249
249
|
end
|
250
250
|
|
251
251
|
it "should work as an instance method (default)" do
|
252
252
|
transform = CATransform3D.identity.rotate(Math::PI).to_a.map { |v| v.round(3) }
|
253
|
-
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0
|
253
|
+
CATransform3D.new(*transform).should == CATransform3D.new(-1,0,0,0, 0,-1,0,0, 0,0,1,0, 0,0,0,1)
|
254
254
|
end
|
255
255
|
|
256
256
|
end
|
@@ -258,27 +258,27 @@ describe "CATransform3D" do
|
|
258
258
|
describe ".scale" do
|
259
259
|
|
260
260
|
it "should work as a factory with one argument" do
|
261
|
-
CATransform3D.scale(2).should == CATransform3D.new(2,0,0,0
|
261
|
+
CATransform3D.scale(2).should == CATransform3D.new(2,0,0,0, 0,2,0,0, 0,0,1,0, 0,0,0,1)
|
262
262
|
end
|
263
263
|
|
264
264
|
it "should work as a factory with three arguments" do
|
265
|
-
CATransform3D.scale(2, 3, 4).should == CATransform3D.new(2,0,0,0
|
265
|
+
CATransform3D.scale(2, 3, 4).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 0,0,0,1)
|
266
266
|
end
|
267
267
|
|
268
268
|
it "should work as a factory with one array" do
|
269
|
-
CATransform3D.scale([2, 3, 4]).should == CATransform3D.new(2,0,0,0
|
269
|
+
CATransform3D.scale([2, 3, 4]).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 0,0,0,1)
|
270
270
|
end
|
271
271
|
|
272
272
|
it "should work as an instance method with one argument" do
|
273
|
-
CATransform3D.identity.scale(2).should == CATransform3D.new(2,0,0,0
|
273
|
+
CATransform3D.identity.scale(2).should == CATransform3D.new(2,0,0,0, 0,2,0,0, 0,0,1,0, 0,0,0,1)
|
274
274
|
end
|
275
275
|
|
276
276
|
it "should work as an instance method with three arguments" do
|
277
|
-
CATransform3D.identity.scale(2, 3, 4).should == CATransform3D.new(2,0,0,0
|
277
|
+
CATransform3D.identity.scale(2, 3, 4).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 0,0,0,1)
|
278
278
|
end
|
279
279
|
|
280
280
|
it "should work as an instance method with one array" do
|
281
|
-
CATransform3D.identity.scale([2, 3, 4]).should == CATransform3D.new(2,0,0,0
|
281
|
+
CATransform3D.identity.scale([2, 3, 4]).should == CATransform3D.new(2,0,0,0, 0,3,0,0, 0,0,4,0, 0,0,0,1)
|
282
282
|
end
|
283
283
|
|
284
284
|
end
|
@@ -286,19 +286,19 @@ describe "CATransform3D" do
|
|
286
286
|
describe ".translate" do
|
287
287
|
|
288
288
|
it "should work as a factory with three arguments" do
|
289
|
-
CATransform3D.translate(10, 20, 30).should == CATransform3D.new(1,0,0,0
|
289
|
+
CATransform3D.translate(10, 20, 30).should == CATransform3D.new(1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,30,1)
|
290
290
|
end
|
291
291
|
|
292
292
|
it "should work as a factory with one array" do
|
293
|
-
CATransform3D.translate([10, 20, 30]).should == CATransform3D.new(1,0,0,0
|
293
|
+
CATransform3D.translate([10, 20, 30]).should == CATransform3D.new(1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,30,1)
|
294
294
|
end
|
295
295
|
|
296
296
|
it "should work as an instance method with three arguments" do
|
297
|
-
CATransform3D.identity.translate(10, 20, 30).should == CATransform3D.new(1,0,0,0
|
297
|
+
CATransform3D.identity.translate(10, 20, 30).should == CATransform3D.new(1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,30,1)
|
298
298
|
end
|
299
299
|
|
300
300
|
it "should work as an instance method with one array" do
|
301
|
-
CATransform3D.identity.translate([10, 20, 30]).should == CATransform3D.new(1,0,0,0
|
301
|
+
CATransform3D.identity.translate([10, 20, 30]).should == CATransform3D.new(1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,30,1)
|
302
302
|
end
|
303
303
|
|
304
304
|
end
|
@@ -322,24 +322,31 @@ describe "CATransform3D" do
|
|
322
322
|
it "should support concat" do
|
323
323
|
t1 = CATransform3D.translate(10, 20, 30)
|
324
324
|
t2 = CATransform3D.scale(2)
|
325
|
-
t1.concat(t2).should == CATransform3D.new(2,0,0,0
|
325
|
+
t1.concat(t2).should == CATransform3D.new(2,0,0,0, 0,2,0,0, 0,0,1,0, 20,40,30,1)
|
326
326
|
end
|
327
327
|
|
328
328
|
it "should support invert" do
|
329
329
|
t1 = CATransform3D.scale(2)
|
330
|
-
t1.invert.should == CATransform3D.new(0.5,0,0,0
|
330
|
+
t1.invert.should == CATransform3D.new(0.5,0,0,0, 0,0.5,0,0, 0,0,1,0, 0,0,0,1)
|
331
331
|
end
|
332
332
|
|
333
333
|
it "should support to_affine_transform" do
|
334
|
-
t1 = CATransform3D.new(2,0,0,0
|
334
|
+
t1 = CATransform3D.new(2,0,0,0, 0,2,0,0, 0,0,2,0, 0,0,0,1)
|
335
335
|
t1.to_affine_transform.should == CGAffineTransformMake(2, 0, 0, 2, 0, 0)
|
336
336
|
end
|
337
337
|
|
338
338
|
it 'should support to_a' do
|
339
339
|
t1 = CATransform3D.identity
|
340
|
-
t1.to_a.should == [1,0,0,0
|
340
|
+
t1.to_a.should == [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
|
341
341
|
end
|
342
342
|
|
343
343
|
end
|
344
344
|
|
345
|
+
describe '#to_ns_value' do
|
346
|
+
it 'should convert to NSValue' do
|
347
|
+
val = CATransform3D.new(0.5,0,0,0, 0,0.5,0,0, 0,0,1,0, 0,0,0,1).to_ns_value
|
348
|
+
val.should.be.kind_of(NSValue)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
345
352
|
end
|
data/spec/cg_point_spec.rb
CHANGED
@@ -154,6 +154,13 @@ describe "CGPoint" do
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
+
describe '#to_ns_value' do
|
158
|
+
it 'should convert to NSValue' do
|
159
|
+
val = CGPoint.new(0, 0).to_ns_value
|
160
|
+
val.should.be.kind_of(NSValue)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
157
164
|
describe "#to_ary" do
|
158
165
|
it "should allow parallel assigment" do
|
159
166
|
x, y = @point
|
@@ -161,4 +168,5 @@ describe "CGPoint" do
|
|
161
168
|
y.should == 20.0
|
162
169
|
end
|
163
170
|
end
|
171
|
+
|
164
172
|
end
|
data/spec/cg_rect_spec.rb
CHANGED
@@ -667,6 +667,16 @@ describe "CGRect" do
|
|
667
667
|
end
|
668
668
|
end
|
669
669
|
|
670
|
+
describe "#integral" do
|
671
|
+
it "works" do
|
672
|
+
rect = CGRect.make(x: 10.4, y: 20.5, width: 300.4, height: 400.5).integral
|
673
|
+
rect.origin.x.should == 10
|
674
|
+
rect.origin.y.should == 20
|
675
|
+
rect.size.width.should == 301
|
676
|
+
rect.size.height.should == 401
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
670
680
|
describe "#centered_in" do
|
671
681
|
it "works" do
|
672
682
|
outer_rect = CGRect.make(width: 100, height: 100)
|
@@ -1128,6 +1138,13 @@ describe "CGRect" do
|
|
1128
1138
|
end
|
1129
1139
|
end
|
1130
1140
|
|
1141
|
+
describe '#to_ns_value' do
|
1142
|
+
it 'should convert to NSValue' do
|
1143
|
+
val = CGRect.new([0, 0], [0, 0]).to_ns_value
|
1144
|
+
val.should.be.kind_of(NSValue)
|
1145
|
+
end
|
1146
|
+
end
|
1147
|
+
|
1131
1148
|
describe "#to_ary" do
|
1132
1149
|
it "should allow parallel assigment" do
|
1133
1150
|
position, size = @rect
|
data/spec/cg_size_spec.rb
CHANGED
@@ -149,6 +149,13 @@ describe "CGSize" do
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
|
+
describe '#to_ns_value' do
|
153
|
+
it 'should convert to NSValue' do
|
154
|
+
val = CGSize.new(0, 0).to_ns_value
|
155
|
+
val.should.be.kind_of(NSValue)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
152
159
|
describe "#to_ary" do
|
153
160
|
it "should allow parallel assigment" do
|
154
161
|
width, height = @size
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geomotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.15.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Clay Allsopp
|
@@ -10,19 +9,22 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2014-
|
12
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rake
|
17
|
-
requirement:
|
18
|
-
none: false
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
|
-
version_requirements:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
26
28
|
description: A RubyMotion Geometry Wrapper
|
27
29
|
email:
|
28
30
|
- clay@usepropeller.com
|
@@ -60,27 +62,26 @@ files:
|
|
60
62
|
homepage: https://github.com/clayallsopp/geomotion
|
61
63
|
licenses:
|
62
64
|
- MIT
|
65
|
+
metadata: {}
|
63
66
|
post_install_message:
|
64
67
|
rdoc_options: []
|
65
68
|
require_paths:
|
66
69
|
- lib
|
67
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
71
|
requirements:
|
70
|
-
- -
|
72
|
+
- - '>='
|
71
73
|
- !ruby/object:Gem::Version
|
72
74
|
version: '0'
|
73
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
76
|
requirements:
|
76
|
-
- -
|
77
|
+
- - '>='
|
77
78
|
- !ruby/object:Gem::Version
|
78
79
|
version: '0'
|
79
80
|
requirements: []
|
80
81
|
rubyforge_project:
|
81
|
-
rubygems_version:
|
82
|
+
rubygems_version: 2.0.14
|
82
83
|
signing_key:
|
83
|
-
specification_version:
|
84
|
+
specification_version: 4
|
84
85
|
summary: A RubyMotion Geometry Wrapper
|
85
86
|
test_files:
|
86
87
|
- spec/ca_transform_3d_spec.rb
|