require 'bizzieGeometry' require 'bizzieMath' require 'bizziePath' #region subclasses must implement doRegionLine, doRegionPoint class Region # numLines >= 2 def doRegionPoints(numLines, epsilon) doRegionLines {|line, val| line.doPath } end def doRegionLines(numLines) val = 0 while val <= numLines yield doRegionLine(val, numLines), val val += 1 end end end # represent the region between two lines class TwoLineRegion < Region def initialize(val1, val2, val3 = 0, val4 = 0) @line1 = val1 @line2 = val2 end def doRegionPoint(num, maxNum, epsilon) return doRegionLine(num, maxNum).doPathPoint(epsilon) end def doRegionLine(num, maxNum) newLine1 = Line.new(@line1.p1, @line2.p1) newLine2 = Line.new(@line1.p2, @line2.p2) epsilon = (num/maxNum) return Line2d.new(newLine1.doPathPoint(epsilon), newLine2.doPathPoint(epsilon)) end def doCrossHatchLines(epsilon, initialSkip) val1 = 0 val2 = initialSkip * epsilon while val2 <= 1 + $epsilonVal yield Line2d.new(@line1.doPathPoint(val1), @line2.doPathPoint(val2)), val1 val2 += epsilon val1 += epsilon end val1 = initialSkip * epsilon val2 = 0 while val1 <= 1 + $epsilonVal yield Line2d.new(@line1.doPathPoint(val1), @line2.doPathPoint(val2)), val2 val1 += epsilon val2 += epsilon end end end