Class: Macrocosm::Links

Inherits:
Object
  • Object
show all
Defined in:
lib/macrocosm.rb

Constant Summary collapse

MaxCurveness =
0.7
CurvenessRange =
MaxCurveness - 0.1

Instance Method Summary collapse

Constructor Details

#initializeLinks

Returns a new instance of Links.



13
14
15
16
17
# File 'lib/macrocosm.rb', line 13

def initialize
  @links = []
  @links_on_same_ends = Hash.new{ |h, k| h[k] = 0 }
  @last_curveness = Hash.new{ |h, k| h[k] = MaxCurveness.dup }
end

Instance Method Details



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/macrocosm.rb', line 19

def add_link(source, target, relation_in_list: nil, relation_in_graph: nil, line_style: {})
  ends = [source, target].sort!.join

  link = {
    ends: ends,
    lineStyle: line_style,
    source: source,
    target: target
  }
  link[:relation_in_list] = relation_in_list if relation_in_list
  link[:relation_in_graph] = relation_in_graph if relation_in_graph
  @links << link

  @links_on_same_ends[ends] += 1
end

#calc_curveness(link) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/macrocosm.rb', line 43

def calc_curveness(link)
  ends = link[:ends]
  count = @links_on_same_ends[ends]
  return 0 if count == 0
  step = (CurvenessRange / count).round(2)
  @last_curveness[ends] -= step
end


35
36
37
38
39
40
41
# File 'lib/macrocosm.rb', line 35

def links
  @links.map do |link|
    link[:lineStyle][:curveness] = calc_curveness(link)
    link.delete(:ends)
    link
  end
end