class StraightSkeleton::Split

Attributes

source[R]

Public Class Methods

new(nodes, point, travel, source, node) click to toggle source
# File lib/nswtopo/geometry/straight_skeleton/split.rb, line 5
def initialize(nodes, point, travel, source, node)
  @original, @nodes, @point, @travel, @source, @normal = self, nodes, point, travel, source, node.normals[1]
end

Public Instance Methods

replace!(&block) click to toggle source
# File lib/nswtopo/geometry/straight_skeleton/split.rb, line 27
def replace!(&block)
  dup.split!(0, &block)
  dup.split!(1, &block)
  block.call @source
end
split!(index, &block) click to toggle source
# File lib/nswtopo/geometry/straight_skeleton/split.rb, line 22
def split!(index, &block)
  @neighbours = [@source.neighbours[index], @edge[1-index]].rotate index
  @neighbours.inject(&:equal?) ? block.call(prev, prev.is_a?(Collapse) ? 1 : 0) : insert! if @neighbours.any?
end
viable?() click to toggle source
# File lib/nswtopo/geometry/straight_skeleton/split.rb, line 11
def viable?
  return false unless @source.active?
  @edge = @nodes.track(@normal).find do |edge|
    (n00, n01), (n10, n11) = edge.map(&:normals)
    p0, p1 = edge.map(&:point)
    next if point.minus(p0).cross(n00 ? n00.plus(n01) : n01) < 0
    next if point.minus(p1).cross(n11 ? n11.plus(n10) : n10) > 0
    true
  end
end