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. 33
      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

33
lib/squib/api/shapes.rb

@ -1,10 +1,8 @@
require 'squib/args/box'
require 'squib/args/draw'
require 'squib/args/card_range'
require 'squib/args/tri'
require 'squib/args/bezier'
require 'squib/args/polygon'
require 'squib/args/transform'
require 'squib/args/coords'
module Squib
class Deck
@ -58,11 +56,10 @@ module Squib
# @return [nil] intended to be void
# @api public
def circle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
opts = {radius: 100}.merge(opts) # overriding the non-system default
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)
range.each { |i| @cards[i].circle(box[i], draw[i]) }
range = Args::CardRange.new(opts[:range], deck_size: size)
coords = Args::Coords.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(coords[i], draw[i]) }
end
# Draw an ellipse
@ -115,8 +112,8 @@ module Squib
def triangle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
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)
range.each { |i| @cards[i].triangle(tri[i], draw[i]) }
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].triangle(coords[i], draw[i]) }
end
# Draw a line using the given coordinates
@ -139,8 +136,8 @@ module Squib
def line(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
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)
range.each { |i| @cards[i].line(bezier[i], draw[i]) }
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].line(coords[i], draw[i]) }
end
# Draw a curve using the given coordinates
@ -165,8 +162,8 @@ module Squib
def curve(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
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)
range.each { |i| @cards[i].curve(bezier[i], draw[i]) }
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].curve(coords[i], draw[i]) }
end
# Draw a star at the given x,y
@ -190,9 +187,9 @@ module Squib
def star(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
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)
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
# Draw a regular polygon at the given x,y
@ -216,9 +213,9 @@ module Squib
def polygon(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
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)
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

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

@ -4,14 +4,19 @@ module Squib
# @api private
module Args
class Bezier
class Coords
include ArgLoader
def self.parameters
{ x1: 100, y1: 100,
cx1: 0 , cy1: 0,
{ x: 0, y: 0,
x1: 100, y1: 100,
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
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