Browse Source

Args refactoring: combine polygon, tri, and bezier args into coords

As a rule, I think it's better to group args classes together have some extra overhead of extracting unused parameters. For example, we don't *need* to extract "n" for the circle, but the ease of having logically grouped classes is better than having tons of different classes tailored to each command.
dev
Andy Meneely 11 years ago
parent
commit
c931a860a1
  1. 29
      lib/squib/api/shapes.rb
  2. 13
      lib/squib/args/coords.rb
  3. 26
      lib/squib/args/polygon.rb
  4. 27
      lib/squib/args/tri.rb

29
lib/squib/api/shapes.rb

@ -1,10 +1,8 @@
require 'squib/args/box' require 'squib/args/box'
require 'squib/args/draw' require 'squib/args/draw'
require 'squib/args/card_range' require 'squib/args/card_range'
require 'squib/args/tri'
require 'squib/args/bezier'
require 'squib/args/polygon'
require 'squib/args/transform' require 'squib/args/transform'
require 'squib/args/coords'
module Squib module Squib
class Deck class Deck
@ -59,10 +57,9 @@ module Squib
# @api public # @api public
def circle(opts = {}) def circle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
opts = {radius: 100}.merge(opts) # overriding the non-system default coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].circle(box[i], draw[i]) } range.each { |i| @cards[i].circle(coords[i], draw[i]) }
end end
# Draw an ellipse # Draw an ellipse
@ -115,8 +112,8 @@ module Squib
def triangle(opts = {}) def triangle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
tri = Args::Tri.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].triangle(tri[i], draw[i]) } range.each { |i| @cards[i].triangle(coords[i], draw[i]) }
end end
# Draw a line using the given coordinates # Draw a line using the given coordinates
@ -139,8 +136,8 @@ module Squib
def line(opts = {}) def line(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
bezier = Args::Bezier.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].line(bezier[i], draw[i]) } range.each { |i| @cards[i].line(coords[i], draw[i]) }
end end
# Draw a curve using the given coordinates # Draw a curve using the given coordinates
@ -165,8 +162,8 @@ module Squib
def curve(opts = {}) def curve(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
bezier = Args::Bezier.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].curve(bezier[i], draw[i]) } range.each { |i| @cards[i].curve(coords[i], draw[i]) }
end end
# Draw a star at the given x,y # Draw a star at the given x,y
@ -190,9 +187,9 @@ module Squib
def star(opts = {}) def star(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
poly = Args::Polygon.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].star(poly[i], trans[i], draw[i]) } range.each { |i| @cards[i].star(coords[i], trans[i], draw[i]) }
end end
# Draw a regular polygon at the given x,y # Draw a regular polygon at the given x,y
@ -216,9 +213,9 @@ module Squib
def polygon(opts = {}) def polygon(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
poly = Args::Polygon.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].polygon(poly[i], trans[i], draw[i]) } range.each { |i| @cards[i].polygon(coords[i], trans[i], draw[i]) }
end end
end end

13
lib/squib/args/bezier.rb → lib/squib/args/coords.rb

@ -4,14 +4,19 @@ module Squib
# @api private # @api private
module Args module Args
class Bezier class Coords
include ArgLoader include ArgLoader
def self.parameters def self.parameters
{ x1: 100, y1: 100, { x: 0, y: 0,
cx1: 0 , cy1: 0, x1: 100, y1: 100,
x2: 150, y2: 150, x2: 150, y2: 150,
cx2: 0 , cy2: 0} x3: 100, y3: 150,
cx1: 0 , cy1: 0,
cx2: 0 , cy2: 0,
inner_radius: 50, outer_radius: 100,
radius: 100,
n: 5, }
end end
def self.expanding_parameters def self.expanding_parameters

26
lib/squib/args/polygon.rb

@ -1,26 +0,0 @@
require 'squib/args/arg_loader'
module Squib
# @api private
module Args
class Polygon
include ArgLoader
def self.parameters
{ x: 0, y: 0, n: 5,
radius: 100, inner_radius: 50, outer_radius: 100}
end
def self.expanding_parameters
parameters.keys # all of them
end
def self.params_with_units
parameters.keys # all of them
end
end
end
end

27
lib/squib/args/tri.rb

@ -1,27 +0,0 @@
require 'squib/args/arg_loader'
module Squib
# @api private
module Args
class Tri
include ArgLoader
def self.parameters
{ x1: 100, y1: 100,
x2: 150, y2: 150,
x3: 100, y3: 150 }
end
def self.expanding_parameters
parameters.keys # all of them
end
def self.params_with_units
parameters.keys # all of them
end
end
end
end
Loading…
Cancel
Save