Class: SequenceLogo::CanvasFactory
- Inherits:
-
Object
- Object
- SequenceLogo::CanvasFactory
- Defined in:
- lib/sequence_logo/canvas_factory.rb
Instance Attribute Summary collapse
-
#background_fill ⇒ Object
readonly
Returns the value of attribute background_fill.
-
#letter_images ⇒ Object
readonly
Returns the value of attribute letter_images.
-
#logo_shift ⇒ Object
readonly
Returns the value of attribute logo_shift.
-
#text_size ⇒ Object
readonly
Returns the value of attribute text_size.
-
#x_unit ⇒ Object
readonly
Returns the value of attribute x_unit.
-
#y_unit ⇒ Object
readonly
Returns the value of attribute y_unit.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(letter_images, options = {}) ⇒ CanvasFactory
constructor
A new instance of CanvasFactory.
- #letter_image(letter, x_size = x_unit, y_size = y_unit) ⇒ Object
- #letter_index(letter) ⇒ Object
- #logo_canvas ⇒ Object
-
#logo_for_ordered_letters(letters_with_heights) ⇒ Object
Takes an enumerable with relative (0 to 1) heights of letters and draws them scaled appropriately.
- #logo_with_name(image, name) ⇒ Object
- #shifted_logo(image, shift) ⇒ Object
- #text_image(text, img_height = y_unit) ⇒ Object
Constructor Details
#initialize(letter_images, options = {}) ⇒ CanvasFactory
Returns a new instance of CanvasFactory.
9 10 11 12 13 14 15 16 |
# File 'lib/sequence_logo/canvas_factory.rb', line 9 def initialize(letter_images, = {}) @letter_images = letter_images # .map{|letter_image| letter_image.dup.resize(x_size, y_size) } @logo_shift = [:logo_shift] || 300 @x_unit = [:x_unit] || 30 @y_unit = [:y_unit] || 60 @text_size = [:text_size] || 24 @background_fill = [:background_fill] || Magick::SolidFill.new('transparent') end |
Instance Attribute Details
#background_fill ⇒ Object (readonly)
Returns the value of attribute background_fill.
6 7 8 |
# File 'lib/sequence_logo/canvas_factory.rb', line 6 def background_fill @background_fill end |
#letter_images ⇒ Object (readonly)
Returns the value of attribute letter_images.
7 8 9 |
# File 'lib/sequence_logo/canvas_factory.rb', line 7 def letter_images @letter_images end |
#logo_shift ⇒ Object (readonly)
Returns the value of attribute logo_shift.
6 7 8 |
# File 'lib/sequence_logo/canvas_factory.rb', line 6 def logo_shift @logo_shift end |
#text_size ⇒ Object (readonly)
Returns the value of attribute text_size.
6 7 8 |
# File 'lib/sequence_logo/canvas_factory.rb', line 6 def text_size @text_size end |
#x_unit ⇒ Object (readonly)
Returns the value of attribute x_unit.
6 7 8 |
# File 'lib/sequence_logo/canvas_factory.rb', line 6 def x_unit @x_unit end |
#y_unit ⇒ Object (readonly)
Returns the value of attribute y_unit.
6 7 8 |
# File 'lib/sequence_logo/canvas_factory.rb', line 6 def y_unit @y_unit end |
Class Method Details
.letter_images(scheme_dir) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/sequence_logo/canvas_factory.rb', line 84 def self.letter_images(scheme_dir) if File.exist?(File.join(scheme_dir,'a.png')) extension = 'png' elsif File.exist?(File.join(scheme_dir,'a.gif')) extension = 'gif' else raise "Scheme not exists in folder #{scheme_dir}" end letter_files = %w[a c g t].collect{|letter| File.join(scheme_dir, "#{letter}.#{extension}") } Magick::ImageList.new(*letter_files) end |
Instance Method Details
#letter_image(letter, x_size = x_unit, y_size = y_unit) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/sequence_logo/canvas_factory.rb', line 70 def letter_image(letter, x_size = x_unit, y_size = y_unit) case letter when Numeric index = letter else index = letter_index(letter) end letter_images[index].dup.resize(x_size, y_size) end |
#letter_index(letter) ⇒ Object
80 81 82 |
# File 'lib/sequence_logo/canvas_factory.rb', line 80 def letter_index(letter) {'A' => 0 ,'C' => 1,'G' => 2 ,'T' => 3}[letter.to_s.upcase] end |
#logo_canvas ⇒ Object
41 42 43 |
# File 'lib/sequence_logo/canvas_factory.rb', line 41 def logo_canvas LogoCanvas.new(letter_images, x_unit: x_unit, y_unit: y_unit) end |
#logo_for_ordered_letters(letters_with_heights) ⇒ Object
Takes an enumerable with relative (0 to 1) heights of letters and draws them scaled appropriately
46 47 48 |
# File 'lib/sequence_logo/canvas_factory.rb', line 46 def logo_for_ordered_letters(letters_with_heights) logo_for_ordered_letters_nonscaling(rescale_letters(letters_with_heights)) end |
#logo_with_name(image, name) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/sequence_logo/canvas_factory.rb', line 34 def logo_with_name(image, name) canvas = HorizontalGluingCanvas.new canvas.add_image text_image(name, image.rows) canvas.add_image image canvas.image end |
#shifted_logo(image, shift) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/sequence_logo/canvas_factory.rb', line 27 def shifted_logo(image, shift) canvas = HorizontalGluingCanvas.new canvas.add_image Magick::Image.new(shift * x_unit, image.rows){ self.background_color = 'transparent' } canvas.add_image image canvas.image end |
#text_image(text, img_height = y_unit) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/sequence_logo/canvas_factory.rb', line 18 def text_image(text, img_height = y_unit) text_img = Magick::Image.new(logo_shift, img_height){ self.background_color = 'transparent' } annotation = Magick::Draw.new annotation.pointsize(text_size) annotation.text(10, img_height / 2, text) annotation.draw(text_img) text_img end |