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
# 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?
  # distance in pixels
  options[:x_axis_min_distance] ||= 30
  # distance in pixels
  options[:y_axis_min_distance] ||= 50

  # 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.



152
153
154
# File 'lib/technical_graph/graph_data_processor.rb', line 152

def zoom_x
  @zoom_x
end

#zoom_yObject (readonly)

Returns the value of attribute zoom_y.



152
153
154
# File 'lib/technical_graph/graph_data_processor.rb', line 152

def zoom_y
  @zoom_y
end

Instance Method Details

#calc_x_zoomed(old_xes) ⇒ Object

Calculate zoomed X position for Array of X’es



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/technical_graph/graph_data_processor.rb', line 155

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



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

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

#fixed?Boolean

Ranges are fixed

Returns:

  • (Boolean)


65
66
67
# File 'lib/technical_graph/graph_data_processor.rb', line 65

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



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/technical_graph/graph_data_processor.rb', line 124

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



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

def raw_x_max
  options[:x_max]
end

#raw_x_minObject

Ranges without zoom



70
71
72
# File 'lib/technical_graph/graph_data_processor.rb', line 70

def raw_x_min
  options[:x_min]
end

#raw_y_maxObject



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

def raw_y_max
  options[:y_max]
end

#raw_y_minObject



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

def raw_y_min
  options[:y_min]
end

#x_maxObject



91
92
93
# File 'lib/technical_graph/graph_data_processor.rb', line 91

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

#x_minObject

Ranges with zoom



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

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

#x_zoom=(z = 1.0) ⇒ Object

Change X axis zoom



143
144
145
# File 'lib/technical_graph/graph_data_processor.rb', line 143

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

#y_maxObject



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

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

#y_minObject



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

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

#y_zoom=(z = 1.0) ⇒ Object

Change X axis zoom



148
149
150
# File 'lib/technical_graph/graph_data_processor.rb', line 148

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

#zoom=(z = 1.0) ⇒ Object

Change overall image zoom



137
138
139
140
# File 'lib/technical_graph/graph_data_processor.rb', line 137

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