Class: CTioga2::Graphics::Types::GridLayout

Inherits:
Object
  • Object
show all
Defined in:
lib/ctioga2/graphics/types/grid.rb

Overview

This class provides a grid-like layout through the use of a grid setup command and a grid box specification.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nup = "2x2") ⇒ GridLayout

Returns a new instance of GridLayout.



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/ctioga2/graphics/types/grid.rb', line 128

def initialize(nup = "2x2")
  if nup.respond_to?(:split)
    if nup =~ /,/
      @hscales, @vscales = nup.split(/\s*x\s*/).map { |x| 
        x.split(/\s*,\s*/).map { |y| y.to_f }
      }
      @nup = [@hscales.size, @vscales.size]
    else
      @nup = nup.split(/\s*x\s*/).map { |s| s.to_i }
    end
  else
    @nup = nup.dup
  end

  # Initialize with the given
  @outer_margins = {
    'left' =>  Dimension.new(:dy, 2.5, :x),
    'right' => Dimension.new(:bp, 6, :x),
    'bottom' =>  Dimension.new(:dy, 2.5, :y),
    'top' => Dimension.new(:dy, 2.5, :y)
  }
  @delta_x = Dimension.new(:dy, 2.5, :x)
  @delta_y = Dimension.new(:dy, 2.5, :y)

  @hscales ||= [1] * @nup[0]
  @vscales ||= [1] * @nup[1]
end

Instance Attribute Details

#delta_xObject

The X offset to go from the right-hand side of one element to the left-hand-side of the next



113
114
115
# File 'lib/ctioga2/graphics/types/grid.rb', line 113

def delta_x
  @delta_x
end

#delta_yObject

The Y offset to go from the bottom of one element to the top of the next.



117
118
119
# File 'lib/ctioga2/graphics/types/grid.rb', line 117

def delta_y
  @delta_y
end

#hscalesObject

Horizontal scales



123
124
125
# File 'lib/ctioga2/graphics/types/grid.rb', line 123

def hscales
  @hscales
end

#nupObject

The nup: an array nb horizontal, nb vertical



120
121
122
# File 'lib/ctioga2/graphics/types/grid.rb', line 120

def nup
  @nup
end

#outer_marginsObject

The margins (left, right, top, bottom) around the whole grid



109
110
111
# File 'lib/ctioga2/graphics/types/grid.rb', line 109

def outer_margins
  @outer_margins
end

#vscalesObject

Vertical scales



126
127
128
# File 'lib/ctioga2/graphics/types/grid.rb', line 126

def vscales
  @vscales
end

Class Method Details

.current_gridObject



163
164
165
# File 'lib/ctioga2/graphics/types/grid.rb', line 163

def self.current_grid
  return @current_grid
end

.current_grid=(grid) ⇒ Object



159
160
161
# File 'lib/ctioga2/graphics/types/grid.rb', line 159

def self.current_grid=(grid)
  @current_grid = grid
end

Instance Method Details

#frame_coordinates(t, x, y) ⇒ Object

Compute the frame coordinates fo the x,y element of the grid. They are numbered from the top,left element.



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/ctioga2/graphics/types/grid.rb', line 169

def frame_coordinates(t, x, y)
  compute_lengths(t)
  xo = if x > 0
         @hscales[0..(x-1)].inject(0,:+) * @wbase
       else
         0
       end
  xl = @outer_margins['left'].to_frame(t, :x) + xo + 
    x * @delta_x.to_frame(t, :x)
  yo = if y > 0
         @vscales[0..(y-1)].inject(0,:+) * @hbase
       else
         0
       end
  yt = 1 - (@outer_margins['top'].to_frame(t, :y) + yo +
            y * @delta_y.to_frame(t, :y))
  return [xl, yt, 
          xl + @wbase * @hscales[x], 
          yt - @hbase * @vscales[y]]
end