class GraphImageDrawerRmagick
Public Instance Methods
axis(x_array, y_array, _options = { :color => 'black', :width => 1 }, render_labels = false, x_labels = [], y_labels = [])
click to toggle source
Draw both array axis
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 86 def axis(x_array, y_array, _options = { :color => 'black', :width => 1 }, render_labels = false, x_labels = [], y_labels = []) # for single axis x_array = [x_array] if not x_array.kind_of? Array y_array = [y_array] if not y_array.kind_of? Array plot_axis = axis_draw_object plot_axis.stroke(_options[:color]) plot_axis.stroke_width(_options[:width]) plot_axis_text = layer_no_stroke(plot_axis) plot_axis_text.fill(_options[:color]) x_array.each_with_index do |x, i| plot_axis.line(x, 0, x, height) # labels label = x_labels[i] if render_labels and not label.nil? label = "#{truncate_string % label}" plot_axis_text.text(x + 15, height - 15, label) end end y_array.each_with_index do |y, i| plot_axis.line(0, y, width, y) # labels label = y_labels[i] if render_labels and not label.nil? label = "#{truncate_string % label}" plot_axis_text.text(15, y + 15, label) end end plot_axis.draw(@image) plot_axis_text.draw(@image) end
axis_draw_object()
click to toggle source
Layer used for drawing axis
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 23 def axis_draw_object plot_axis = Magick::Draw.new plot_axis.stroke_antialias(options[:antialias]) plot_axis.text_antialias(options[:antialias]) plot_axis.fill_opacity(1.0) plot_axis.stroke(options[:axis_color]) plot_axis.stroke_opacity(1.0) plot_axis.stroke_width(1.0) plot_axis.stroke_linecap('square') plot_axis.stroke_linejoin('miter') plot_axis.pointsize(options[:axis_font_size]) plot_axis.font_family('helvetica') plot_axis.font_style(Magick::NormalStyle) plot_axis.text_align(Magick::LeftAlign) plot_axis.text_undercolor(options[:background_color]) return plot_axis end
axis_labels(parameter_label, value_label, _options = { :color => 'black', :width => 1, :size => 20 })
click to toggle source
Label for parameters and values
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 124 def axis_labels(parameter_label, value_label, _options = { :color => 'black', :width => 1, :size => 20 }) if options[:x_axis_label].to_s.size > 0 plot = axis_labels_draw_object plot.stroke(_options[:color]) plot.stroke_width(0.0) plot.fill_opacity(1.0) plot.stroke_opacity(0.0) plot.text( (width / 2).to_i, height - 40, options[:x_axis_label].to_s ) plot.draw(@image) end if options[:y_axis_label].to_s.size > 0 plot = axis_labels_draw_object plot.stroke(_options[:color]) plot.stroke_width(0.0) plot.fill_opacity(1.0) plot.stroke_opacity(0.0) plot = plot.rotate(90) plot.text( (height / 2).to_i, -40, options[:y_axis_label].to_s ) plot.draw(@image) end end
axis_labels_draw_object()
click to toggle source
Layer used for drawing main labels (parameter, value)
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 45 def axis_labels_draw_object draw = axis_draw_object draw.pointsize(options[:axis_label_font_size]) draw.font_style(Magick::NormalStyle) draw.text_align(Magick::CenterAlign) return draw end
close()
click to toggle source
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 212 def close # only for compatibility @closed = true end
closed?()
click to toggle source
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 217 def closed? @closed end
create_blank_image()
click to toggle source
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 8 def create_blank_image @image = Magick::ImageList.new @image.new_image( width, height, Magick::HatchFill.new( options[:background_color], options[:background_hatch_color] ) ) return @image end
layer_draw_object(layer)
click to toggle source
Layer used for drawing chart, lines and dots
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 62 def layer_draw_object(layer) draw = axis_draw_object draw.fill(layer.color) draw.stroke(layer.color) return draw end
layer_no_fill(_draw)
click to toggle source
Create no-fill draw object
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 78 def layer_no_fill(_draw) draw = _draw.clone draw.fill_opacity(0.0) return draw end
layer_no_stroke(_draw)
click to toggle source
Create no-stroke draw object
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 70 def layer_no_stroke(_draw) draw = _draw.clone draw.stroke_opacity(0.0) draw.stroke_width(0.0) return draw end
layer_value_labels_draw_object(layer)
click to toggle source
Layer used for drawing value labels
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 55 def layer_value_labels_draw_object(layer) draw = axis_draw_object draw.pointsize(options[:layers_font_size]) return draw end
legend(legend_data)
click to toggle source
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 192 def legend(legend_data) legend_text_offset = (options[:legend_font_size] / 2.0).round - 4 legend_data.each do |l| plot = axis_draw_object plot_text = layer_no_stroke(plot) plot.fill(l[:color]) plot.stroke(l[:color]) plot_text.fill(l[:color]) plot_text.pointsize(options[:legend_font_size]) plot.circle(l[:x], l[:y], l[:x] + 2, l[:y]) plot_text.text(l[:x] + 5, l[:y] + legend_text_offset, l[:label]) plot.draw(@image) plot_text.draw(@image) end end
render_data_layer(l, coords)
click to toggle source
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 158 def render_data_layer(l, coords) # value labels if l.value_labels plot = layer_no_stroke(layer_value_labels_draw_object(l)) coords.each do |c| string_label = "#{truncate_string % c[:dy]}" plot.text( c[:ax] + 5, c[:ay], string_label ) end plot.draw(@image) end # lines and dots plot = layer_draw_object(l) coords.each do |c| # additional circle plot.circle(c[:ax], c[:ay], c[:ax] + 2, c[:ay]) plot.circle(c[:bx], c[:by], c[:bx] + 2, c[:by]) # line plot.line( c[:ax], c[:ay], c[:bx], c[:by] ) drawer.post_dot_drawn(c[:ax], c[:ay]) drawer.post_dot_drawn(c[:bx], c[:by]) end plot.draw(@image) end
save(file)
click to toggle source
Save output to file
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 222 def save(file) t = Time.now @image.write(file) logger.debug "saving image" logger.debug " TIME COST #{Time.now - t}" end
to_format(format)
click to toggle source
Export image
# File lib/technical_graph/graph_image_drawer_rmagick.rb, line 232 def to_format(format) t = Time.now i = @image.flatten_images i.format = format blob = i.to_blob logger.debug "exporting image as string" logger.debug " TIME COST #{Time.now - t}" return blob end