Class: Geometry::Path
- Inherits:
-
Object
- Object
- Geometry::Path
- Defined in:
- lib/geometry/path.rb
Overview
Instance Attribute Summary collapse
-
#elements ⇒ Object
readonly
Returns the value of attribute elements.
Instance Method Summary collapse
- #initialize(*args) ⇒ Path constructor
-
#last ⇒ Geometry
The last element in the Path.
-
#push(arg) ⇒ Path
Append a new geometry element to the Path.
Constructor Details
#initialize(*args) ⇒ Path
Construct a new Path from Geometry::Points, Edges, and Arcs Successive Geometry::Points will be converted to Edges.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/geometry/path.rb', line 14 def initialize(*args) args.map! {|a| (a.is_a?(Array) or a.is_a?(Vector)) ? Point[a] : a} args.each {|a| raise ArgumentError, "Unknown argument type #{a.class}" unless a.is_a?(Point) or a.is_a?(Edge) or a.is_a?(Arc) } @elements = [] first = args.shift push first if first.is_a?(Edge) or first.is_a?(Arc) args.reduce(first) do |previous, n| case n when Point case previous when Point then push Edge.new(previous, n) when Arc, Edge then push Edge.new(previous.last, n) unless previous.last == n end last when Edge case previous when Point then push Edge.new(previous, n.first) when Arc, Edge then push Edge.new(previous.last, n.first) unless previous.last == n.first end push(n).last when Arc case previous when Point if previous == n.first raise ArgumentError, "Duplicated point before an Arc" else push Edge.new(previous, n.first) end when Arc, Edge push Edge.new(previous.last, n.first) unless previous.last == n.first end push(n).last else raise ArgumentError, "Unsupported argument type: #{n}" end end end |
Instance Attribute Details
#elements ⇒ Object (readonly)
Returns the value of attribute elements.
10 11 12 |
# File 'lib/geometry/path.rb', line 10 def elements @elements end |
Instance Method Details
#last ⇒ Geometry
Returns The last element in the Geometry::Path.
56 57 58 |
# File 'lib/geometry/path.rb', line 56 def last @elements.last end |
#push(arg) ⇒ Path
Append a new geometry element to the Geometry::Path
62 63 64 65 |
# File 'lib/geometry/path.rb', line 62 def push(arg) @elements.push arg self end |