class Laser::Cutter::Aggregator
Attributes
lines[RW]
Public Class Methods
new(array_of_lines = [])
click to toggle source
# File lib/laser-cutter/aggregator.rb, line 6 def initialize(array_of_lines = []) self.lines = array_of_lines.sort end
Public Instance Methods
dedup!()
click to toggle source
This method finds lines that are identical (same p1/p2)
# File lib/laser-cutter/aggregator.rb, line 11 def dedup! lines_to_delete = [] count = lines.size for i in 0..(count - 1) do for j in (i + 1)..(count - 1) do l1 = lines[i] l2 = lines[j] if l1.eql?(l2) lines_to_delete << l1 lines_to_delete << l2 end end end self.lines = self.lines - lines_to_delete self end
deoverlap!()
click to toggle source
Find overlapping (intersecting) sections of lines and remove them.
# File lib/laser-cutter/aggregator.rb, line 30 def deoverlap! lines_to_delete = [] lines_to_add = [] count = lines.size for i in 0..(count - 1) do for j in (i + 1)..(count - 1) do l1 = lines[i] l2 = lines[j] if l1.overlaps?(l2) lines_to_delete << l1 lines_to_delete << l2 lines_to_add << l1.xor(l2) end end end lines_to_delete.uniq! lines_to_delete.flatten! lines_to_add.uniq! lines_to_add.flatten! self.lines = (self.lines - lines_to_delete + lines_to_add).flatten self.lines.sort! self end