vector_salad 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.yardopts +1 -0
- data/README.md +6 -5
- data/examples/birthday.png +0 -0
- data/examples/birthday.svg +604 -604
- data/examples/bunny_card.png +0 -0
- data/examples/bunny_card.svg +110 -110
- data/examples/circles.png +0 -0
- data/examples/circles.svg +2 -2
- data/examples/rects.rb +4 -4
- data/examples/squares.png +0 -0
- data/examples/squares.rb +4 -4
- data/examples/squares.svg +6 -6
- data/lib/contracts_contracts.rb +4 -4
- data/lib/vector_salad/canvas.rb +17 -0
- data/lib/vector_salad/dsl.rb +29 -28
- data/lib/vector_salad/export_with_magic.rb +1 -0
- data/lib/vector_salad/exporters/base_exporter.rb +1 -0
- data/lib/vector_salad/exporters/svg_exporter.rb +30 -22
- data/lib/vector_salad/interpolate.rb +13 -12
- data/lib/vector_salad/magic.rb +4 -3
- data/lib/vector_salad/mixins/at.rb +1 -0
- data/lib/vector_salad/mixins/mixins.rb +5 -0
- data/lib/vector_salad/monkeypatches.rb +4 -0
- data/lib/vector_salad/shape_proxy.rb +1 -0
- data/lib/vector_salad/standard_shapes/basic_shape.rb +25 -17
- data/lib/vector_salad/standard_shapes/circle.rb +9 -3
- data/lib/vector_salad/standard_shapes/clip.rb +10 -9
- data/lib/vector_salad/standard_shapes/custom.rb +23 -4
- data/lib/vector_salad/standard_shapes/difference.rb +5 -6
- data/lib/vector_salad/standard_shapes/exclusion.rb +5 -6
- data/lib/vector_salad/standard_shapes/flip.rb +8 -2
- data/lib/vector_salad/standard_shapes/heart.rb +3 -1
- data/lib/vector_salad/standard_shapes/hexagon.rb +3 -2
- data/lib/vector_salad/standard_shapes/intersection.rb +5 -6
- data/lib/vector_salad/standard_shapes/iso_tri.rb +3 -2
- data/lib/vector_salad/standard_shapes/jitter.rb +10 -7
- data/lib/vector_salad/standard_shapes/move.rb +7 -1
- data/lib/vector_salad/standard_shapes/multi_path.rb +17 -6
- data/lib/vector_salad/standard_shapes/n.rb +6 -3
- data/lib/vector_salad/standard_shapes/oval.rb +3 -1
- data/lib/vector_salad/standard_shapes/path.rb +28 -14
- data/lib/vector_salad/standard_shapes/pentagon.rb +2 -1
- data/lib/vector_salad/standard_shapes/polygon.rb +3 -1
- data/lib/vector_salad/standard_shapes/rect.rb +3 -1
- data/lib/vector_salad/standard_shapes/rotate.rb +3 -5
- data/lib/vector_salad/standard_shapes/scale.rb +8 -7
- data/lib/vector_salad/standard_shapes/square.rb +6 -21
- data/lib/vector_salad/standard_shapes/standard_shapes.rb +6 -0
- data/lib/vector_salad/standard_shapes/transform.rb +6 -5
- data/lib/vector_salad/standard_shapes/triangle.rb +3 -2
- data/lib/vector_salad/standard_shapes/union.rb +5 -6
- data/lib/vector_salad/version.rb +1 -1
- data/lib/vector_salad.rb +1 -1
- metadata +4 -2
@@ -2,10 +2,11 @@ require "vector_salad/standard_shapes/polygon"
|
|
2
2
|
|
3
3
|
module VectorSalad
|
4
4
|
module StandardShapes
|
5
|
+
# Regular pentagon shape.
|
5
6
|
class Pentagon < Polygon
|
6
7
|
# Create a regular pentagon.
|
7
8
|
#
|
8
|
-
#
|
9
|
+
# @example
|
9
10
|
# new(100)
|
10
11
|
def initialize(radius, **options)
|
11
12
|
super(5, radius, **options)
|
@@ -4,13 +4,14 @@ require "vector_salad/mixins/at"
|
|
4
4
|
|
5
5
|
module VectorSalad
|
6
6
|
module StandardShapes
|
7
|
+
# Regular polygon shape.
|
7
8
|
class Polygon < BasicShape
|
8
9
|
include VectorSalad::Mixins::At
|
9
10
|
attr_reader :sides
|
10
11
|
|
11
12
|
# Create a regular polygon with a specified number of sides.
|
12
13
|
#
|
13
|
-
#
|
14
|
+
# @example
|
14
15
|
# new(6, 100)
|
15
16
|
Contract PolySides, Pos, {} => Polygon
|
16
17
|
def initialize(sides, radius, **options)
|
@@ -20,6 +21,7 @@ module VectorSalad
|
|
20
21
|
self
|
21
22
|
end
|
22
23
|
|
24
|
+
# Convert the shape to a path
|
23
25
|
def to_path
|
24
26
|
nodes = []
|
25
27
|
angle = 2 * Math::PI / @sides
|
@@ -4,13 +4,14 @@ require "vector_salad/mixins/at"
|
|
4
4
|
|
5
5
|
module VectorSalad
|
6
6
|
module StandardShapes
|
7
|
+
# Rectangle shape.
|
7
8
|
class Rect < BasicShape
|
8
9
|
include VectorSalad::Mixins::At
|
9
10
|
attr_reader :width, :height
|
10
11
|
|
11
12
|
# Create a rectangle with specified width and height.
|
12
13
|
#
|
13
|
-
#
|
14
|
+
# @example
|
14
15
|
# new(100, 200)
|
15
16
|
Contract Pos, Pos, {} => Rect
|
16
17
|
def initialize(width, height, **options)
|
@@ -20,6 +21,7 @@ module VectorSalad
|
|
20
21
|
self
|
21
22
|
end
|
22
23
|
|
24
|
+
# Convert the shape to a path
|
23
25
|
def to_path
|
24
26
|
Path.new(
|
25
27
|
N.n(@x, @y),
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "vector_salad/standard_shapes/transform"
|
2
2
|
|
3
3
|
module VectorSalad
|
4
4
|
module StandardShapes
|
5
|
+
# Rotates the contained shapes by the specified angle about the origin.
|
5
6
|
class Rotate < Transform
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# Examples:
|
9
|
-
#
|
7
|
+
# @example
|
10
8
|
# rotate(45) do
|
11
9
|
# triangle(30, at: [50, -50])
|
12
10
|
# pentagon(40, at: [50, -100])
|
@@ -1,24 +1,25 @@
|
|
1
|
-
require
|
1
|
+
require "vector_salad/standard_shapes/transform"
|
2
2
|
|
3
3
|
module VectorSalad
|
4
4
|
module StandardShapes
|
5
|
+
# Scale the contained shapes by multiplier about the origin.
|
5
6
|
class Scale < Transform
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# to stretch or squash the axies.
|
9
|
-
# @param x_multiplier 1 is no change, 2 is double size, 0.5 is half, etc.
|
10
|
-
#
|
11
|
-
# Examples:
|
7
|
+
# Supply just 1 multiplier to scale evenly,
|
8
|
+
# or x and y multipliers to stretch or squash the axies.
|
12
9
|
#
|
10
|
+
# @example
|
13
11
|
# scale(2) do
|
14
12
|
# triangle(30, at: [50, -50])
|
15
13
|
# pentagon(40, at: [50, -100])
|
16
14
|
# end
|
17
15
|
#
|
16
|
+
# @example Uneven scaling
|
18
17
|
# scale(2, 0.5) do
|
19
18
|
# triangle(30, at: [50, -50])
|
20
19
|
# pentagon(40, at: [50, -100])
|
21
20
|
# end
|
21
|
+
#
|
22
|
+
# @param x_multiplier 1 is no change, 2 is double size, 0.5 is half, etc.
|
22
23
|
Contract Coord, Coord, { canvas: VectorSalad::Canvas }, Proc => Any
|
23
24
|
def initialize(x_multiplier,
|
24
25
|
y_multiplier = x_multiplier,
|
@@ -1,34 +1,19 @@
|
|
1
|
-
require "vector_salad/standard_shapes/
|
2
|
-
require "vector_salad/standard_shapes/n"
|
1
|
+
require "vector_salad/standard_shapes/rect"
|
3
2
|
require "vector_salad/mixins/at"
|
4
3
|
|
5
4
|
module VectorSalad
|
6
5
|
module StandardShapes
|
7
|
-
|
8
|
-
|
9
|
-
attr_reader :size
|
10
|
-
|
6
|
+
# Square shape with equal width and height.
|
7
|
+
class Square < Rect
|
11
8
|
# Create a square with equal width and height.
|
12
9
|
#
|
13
|
-
#
|
14
|
-
# new(100)
|
10
|
+
# @example Square with sides 100x100
|
11
|
+
# new(100)
|
15
12
|
Contract Pos, {} => Square
|
16
13
|
def initialize(size, **options)
|
17
|
-
|
18
|
-
@options = options
|
19
|
-
@x, @y = 0, 0
|
14
|
+
super(size, size, **options)
|
20
15
|
self
|
21
16
|
end
|
22
|
-
|
23
|
-
def to_path
|
24
|
-
Path.new(
|
25
|
-
N.n(@x, @y),
|
26
|
-
N.n(@x, @y + @size),
|
27
|
-
N.n(@x + @size, @y + @size),
|
28
|
-
N.n(@x + @size, @y),
|
29
|
-
**@options
|
30
|
-
)
|
31
|
-
end
|
32
17
|
end
|
33
18
|
end
|
34
19
|
end
|
@@ -1,12 +1,13 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "contracts"
|
2
|
+
require "contracts_contracts"
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require "vector_salad/dsl"
|
5
|
+
require "vector_salad/canvas"
|
6
|
+
require "vector_salad/standard_shapes/path"
|
7
7
|
|
8
8
|
module VectorSalad
|
9
9
|
module StandardShapes
|
10
|
+
# @api private
|
10
11
|
class Transform
|
11
12
|
include VectorSalad::DSL
|
12
13
|
include VectorSalad::StandardShapes
|
@@ -2,10 +2,11 @@ require "vector_salad/standard_shapes/polygon"
|
|
2
2
|
|
3
3
|
module VectorSalad
|
4
4
|
module StandardShapes
|
5
|
+
# Equilateral triangle shape.
|
5
6
|
class Triangle < Polygon
|
6
|
-
# Create
|
7
|
+
# Create a new equilateral triangle.
|
7
8
|
#
|
8
|
-
#
|
9
|
+
# @example
|
9
10
|
# new(100)
|
10
11
|
def initialize(radius, **options)
|
11
12
|
super(3, radius, **options)
|
@@ -1,21 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "vector_salad/standard_shapes/clip"
|
2
|
+
require "vector_salad/standard_shapes/multi_path"
|
3
3
|
|
4
4
|
module VectorSalad
|
5
5
|
module StandardShapes
|
6
|
+
# Unite the contained shapes.
|
6
7
|
class Union < Clip
|
7
|
-
# Unite paths.
|
8
8
|
# The first path is used as the subject, subsequent paths are united
|
9
9
|
# with the first.
|
10
10
|
#
|
11
|
-
#
|
12
|
-
#
|
11
|
+
# @example
|
13
12
|
# Union.new do
|
14
13
|
# canvas << Path.new([0,0], [90,90], [0,90])
|
15
14
|
# canvas << Path.new([50,0], [95,0], [50, 70])
|
16
15
|
# end
|
17
16
|
#
|
18
|
-
#
|
17
|
+
# @example Using DSL:
|
19
18
|
# union do
|
20
19
|
# path([0,0], [90,90], [0,90])
|
21
20
|
# path([50,0], [95,0], [50, 70])
|
data/lib/vector_salad/version.rb
CHANGED
data/lib/vector_salad.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vector_salad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon George
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pretty_backtrace
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- lib/vector_salad/interpolate.rb
|
209
209
|
- lib/vector_salad/magic.rb
|
210
210
|
- lib/vector_salad/mixins/at.rb
|
211
|
+
- lib/vector_salad/mixins/mixins.rb
|
211
212
|
- lib/vector_salad/monkeypatches.rb
|
212
213
|
- lib/vector_salad/shape_proxy.rb
|
213
214
|
- lib/vector_salad/standard_shapes/basic_shape.rb
|
@@ -233,6 +234,7 @@ files:
|
|
233
234
|
- lib/vector_salad/standard_shapes/rotate.rb
|
234
235
|
- lib/vector_salad/standard_shapes/scale.rb
|
235
236
|
- lib/vector_salad/standard_shapes/square.rb
|
237
|
+
- lib/vector_salad/standard_shapes/standard_shapes.rb
|
236
238
|
- lib/vector_salad/standard_shapes/transform.rb
|
237
239
|
- lib/vector_salad/standard_shapes/triangle.rb
|
238
240
|
- lib/vector_salad/standard_shapes/union.rb
|