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