Class: GraphDataProcessor

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

Overview

Calculate every aspect of graph, but not directly image oriented variables

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(technical_graph) ⇒ GraphDataProcessor

Returns a new instance of GraphDataProcessor.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/technical_graph/graph_data_processor.rb', line 24

def initialize(technical_graph)
  @technical_graph = technical_graph

  # axis label
  options[:x_axis_label] ||= ''
  options[:y_axis_label] ||= ''

  options[:x_min] ||= 0.0 #(Time.now - 24 * 3600).to_f
  options[:x_max] ||= 1.0 #Time.now.to_f
  options[:y_min] ||= 0.0
  options[:y_max] ||= 1.0
  # :default - coords are default
  # :fixed or whatever else - min/max coords are fixed
  options[:xy_behaviour] ||= :default

  # number of axis
  options[:y_axis_count] ||= 10
  options[:x_axis_count] ||= 10
  # interval
  options[:y_axis_interval] ||= 1.0
  options[:x_axis_interval] ||= 1.0
  # when false then axis are generated to meet 'count'
  # when true then axis are generated every X from lowest
  options[:x_axis_fixed_interval] = true if options[:x_axis_fixed_interval].nil?
  options[:y_axis_fixed_interval] = true if options[:y_axis_fixed_interval].nil?

  # when set enlarge image so axis are located in sensible distance between themselves
  options[:axis_density_enlarge_image] = false if options[:axis_density_enlarge_image].nil?
  options[:x_axis_density_enlarge_image] = false if options[:x_axis_density_enlarge_image].nil?
  options[:y_axis_density_enlarge_image] = false if options[:y_axis_density_enlarge_image].nil?
  # distance in pixels
  options[:x_axis_min_distance] ||= 30
  # distance in pixels
  options[:y_axis_min_distance] ||= 30

  # default truncate string used for rendering numbers
  options[:truncate_string] ||= "%.2f"

  @zoom_x = 1.0
  @zoom_y = 1.0
end

Instance Attribute Details

#technical_graphObject (readonly)

Returns the value of attribute technical_graph.



8
9
10
# File 'lib/technical_graph/graph_data_processor.rb', line 8

def technical_graph
  @technical_graph
end

#zoom_xObject (readonly)

Returns the value of attribute zoom_x.



172
173
174
# File 'lib/technical_graph/graph_data_processor.rb', line 172

def zoom_x
  @zoom_x
end

#zoom_yObject (readonly)

Returns the value of attribute zoom_y.



172
173
174
# File 'lib/technical_graph/graph_data_processor.rb', line 172

def zoom_y
  @zoom_y
end

Instance Method Details

#calc_x_zoomed(old_xes) ⇒ Object

Calculate zoomed X position for Array of X’es



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/technical_graph/graph_data_processor.rb', line 175

def calc_x_zoomed(old_xes)
  t = Time.now

  # default zoom
  if self.zoom_x == 1.0
    return old_xes
  end

  a = (raw_x_max.to_f + raw_x_min.to_f) / 2.0
  new_xes = Array.new

  old_xes.each do |x|
    d = x - a
    new_xes << (a + d * self.zoom_x)
  end

  logger.debug "calc_x_zoomed for #{old_xes.size}"
  logger.debug " TIME COST #{Time.now - t}"
  return new_xes
end

#calc_y_zoomed(old_yes) ⇒ Object

Calculate zoomed Y position for Array of Y’es



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/technical_graph/graph_data_processor.rb', line 197

def calc_y_zoomed(old_yes)
  t = Time.now

  # default zoom
  if self.zoom_y == 1.0
    return old_yes
  end

  a = (raw_y_max.to_f + raw_y_min.to_f) / 2.0
  new_yes = Array.new

  old_yes.each do |y|
    d = y - a
    new_yes << (a + d * self.zoom_y)
  end

  logger.debug "calc_y_zoomed for #{old_yes.size}"
  logger.debug " TIME COST #{Time.now - t}"
  return new_yes
end

#enforce_x_axis_rangeObject



92
93
94
95
96
97
# File 'lib/technical_graph/graph_data_processor.rb', line 92

def enforce_x_axis_range
  if options[:x_min] == options[:x_max]
    options[:x_min] -= 0.01
    options[:x_max] += 0.01
  end
end

#enforce_y_axis_rangeObject



99
100
101
102
103
104
# File 'lib/technical_graph/graph_data_processor.rb', line 99

def enforce_y_axis_range
  if options[:y_min] == options[:y_max]
    options[:y_min] -= 0.01
    options[:y_max] += 0.01
  end
end

#fixed?Boolean

Ranges are fixed

Returns:

  • (Boolean)


67
68
69
# File 'lib/technical_graph/graph_data_processor.rb', line 67

def fixed?
  options[:xy_behaviour] == :fixed
end

#layersObject

Accessor for DataLayer Array



16
17
18
# File 'lib/technical_graph/graph_data_processor.rb', line 16

def layers
  @technical_graph.layers
end

#loggerObject



20
21
22
# File 'lib/technical_graph/graph_data_processor.rb', line 20

def logger
  @technical_graph.logger
end

#optionsObject

Accessor for options Hash



11
12
13
# File 'lib/technical_graph/graph_data_processor.rb', line 11

def options
  @technical_graph.options
end

#process_data_layer(data_layer) ⇒ Object

Consider changing ranges if needed



144
145
146
147
148
149
150
151
152
153
154
# File 'lib/technical_graph/graph_data_processor.rb', line 144

def process_data_layer(data_layer)
  # ranges are set, can't change
  return if fixed?

  # updating ranges, enlarging
  self.raw_y_max = data_layer.y_max if not data_layer.y_max.nil? and data_layer.y_max > self.raw_y_max
  self.raw_x_max = data_layer.x_max if not data_layer.x_max.nil? and data_layer.x_max > self.raw_x_max

  self.raw_y_min = data_layer.y_min if not data_layer.y_min.nil? and data_layer.y_min < self.raw_y_min
  self.raw_x_min = data_layer.x_min if not data_layer.x_min.nil? and data_layer.x_min < self.raw_x_min
end

#raw_x_maxObject



77
78
79
80
# File 'lib/technical_graph/graph_data_processor.rb', line 77

def raw_x_max
  enforce_x_axis_range
  options[:x_max]
end

#raw_x_minObject

Ranges without zoom



72
73
74
75
# File 'lib/technical_graph/graph_data_processor.rb', line 72

def raw_x_min
  enforce_x_axis_range
  options[:x_min]
end

#raw_y_maxObject



87
88
89
90
# File 'lib/technical_graph/graph_data_processor.rb', line 87

def raw_y_max
  enforce_y_axis_range
  options[:y_max]
end

#raw_y_minObject



82
83
84
85
# File 'lib/technical_graph/graph_data_processor.rb', line 82

def raw_y_min
  enforce_y_axis_range
  options[:y_min]
end

#x_maxObject



111
112
113
# File 'lib/technical_graph/graph_data_processor.rb', line 111

def x_max
  calc_x_zoomed([self.raw_x_max]).first
end

#x_minObject

Ranges with zoom



107
108
109
# File 'lib/technical_graph/graph_data_processor.rb', line 107

def x_min
  calc_x_zoomed([self.raw_x_min]).first
end

#x_zoom=(z = 1.0) ⇒ Object

Change X axis zoom



163
164
165
# File 'lib/technical_graph/graph_data_processor.rb', line 163

def x_zoom=(z = 1.0)
  @zoom_x = z
end

#y_maxObject



119
120
121
# File 'lib/technical_graph/graph_data_processor.rb', line 119

def y_max
  calc_y_zoomed([self.raw_y_max]).first
end

#y_minObject



115
116
117
# File 'lib/technical_graph/graph_data_processor.rb', line 115

def y_min
  calc_y_zoomed([self.raw_y_min]).first
end

#y_zoom=(z = 1.0) ⇒ Object

Change X axis zoom



168
169
170
# File 'lib/technical_graph/graph_data_processor.rb', line 168

def y_zoom=(z = 1.0)
  @zoom_y = z
end

#zoom=(z = 1.0) ⇒ Object

Change overall image zoom



157
158
159
160
# File 'lib/technical_graph/graph_data_processor.rb', line 157

def zoom=(z = 1.0)
  self.x_zoom = z
  self.y_zoom = z
end