Class: Sevgi::Sundries::Tile

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/sevgi/sundries/tile.rb

Overview

Repeats a geometry element over a rectangular row and column layout.

Direct Known Subclasses

Grid

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(element, position: Geometry::Origin, nx: 1, ny: 1) ⇒ void

Creates a tile from a source geometry element.

Parameters:

  • element (Sevgi::Geometry::Element)

    geometry element to repeat

  • position (Sevgi::Geometry::Point, Array<Numeric>) (defaults to: Geometry::Origin)

    tile origin

  • nx (Integer) (defaults to: 1)

    number of columns

  • ny (Integer) (defaults to: 1)

    number of rows

Raises:

  • (Sevgi::ArgumentError)

    when element is not a geometry element

  • (Sevgi::ArgumentError)

    when nx or ny is not a positive integer



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/sevgi/sundries/tile.rb', line 27

def initialize(element, position: Geometry::Origin, nx: 1, ny: 1)
  ArgumentError.("Must be an Element object: #{element}") unless element.is_a?(Geometry::Element)
  ArgumentError.("Tile nx must be positive") unless nx.is_a?(::Integer) && nx.positive?
  ArgumentError.("Tile ny must be positive") unless ny.is_a?(::Integer) && ny.positive?

  @element = element
  @position = position

  @nx = nx
  @ny = ny
end

Instance Attribute Details

#elementSevgi::Geometry::Element (readonly)

Returns source element repeated by the tile.

Returns:

  • (Sevgi::Geometry::Element)

    source element repeated by the tile



17
18
19
# File 'lib/sevgi/sundries/tile.rb', line 17

def element
  @element
end

#nxInteger (readonly)

Returns number of columns.

Returns:

  • (Integer)

    number of columns



17
# File 'lib/sevgi/sundries/tile.rb', line 17

attr_reader :element, :position, :nx, :ny

#nyObject (readonly)

Returns the value of attribute ny.



17
# File 'lib/sevgi/sundries/tile.rb', line 17

attr_reader :element, :position, :nx, :ny

#positionSevgi::Geometry::Point (readonly)

Returns tile origin.

Returns:

  • (Sevgi::Geometry::Point)

    tile origin



17
# File 'lib/sevgi/sundries/tile.rb', line 17

attr_reader :element, :position, :nx, :ny

Instance Method Details

#[](i) ⇒ Array<Sevgi::Geometry::Element>?

Returns a row by index.

Parameters:

  • i (Integer)

    row index

Returns:

  • (Array<Sevgi::Geometry::Element>, nil)


42
# File 'lib/sevgi/sundries/tile.rb', line 42

def [](i) = rows[i]

#boxSevgi::Geometry::Rect

Returns the bounding rectangle of the whole tile.

Returns:

  • (Sevgi::Geometry::Rect)


46
# File 'lib/sevgi/sundries/tile.rb', line 46

def box = @box ||= Geometry::Rect[nx * element.box.width, ny * element.box.height, position:]

#cellSevgi::Geometry::Element

Returns the first cell in the tile.

Returns:

  • (Sevgi::Geometry::Element)


50
# File 'lib/sevgi/sundries/tile.rb', line 50

def cell = row.first

#col(i = 0) ⇒ Array<Sevgi::Geometry::Element>?

Returns a column by index.

Parameters:

  • i (Integer) (defaults to: 0)

    column index

Returns:

  • (Array<Sevgi::Geometry::Element>, nil)


64
# File 'lib/sevgi/sundries/tile.rb', line 64

def col(i = 0) = cols[i]

#colbox(i = 0) ⇒ Sevgi::Geometry::Rect

Returns the bounding rectangle of a column.

Parameters:

  • i (Integer) (defaults to: 0)

    column index

Returns:

  • (Sevgi::Geometry::Rect)


55
# File 'lib/sevgi/sundries/tile.rb', line 55

def colbox(i = 0) = Geometry::Rect[element.box.width, box.height, position: coordinate(0, i)]

#colsArray<Array<Sevgi::Geometry::Element>>

Returns cells grouped by column.

Returns:

  • (Array<Array<Sevgi::Geometry::Element>>)


59
# File 'lib/sevgi/sundries/tile.rb', line 59

def cols = @cols ||= rows.transpose

#each {|row| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>> Also known as: each_row

Iterates over rows.

Yields:

  • (row)

    each row

Yield Parameters:

  • row (Array<Sevgi::Geometry::Element>)

    row cells

Yield Returns:

  • (void)

Returns:

  • (Enumerator, Array<Array<Sevgi::Geometry::Element>>)

    enumerator without a block, otherwise rows



71
# File 'lib/sevgi/sundries/tile.rb', line 71

def each(...) = rows.each(...)

#each_col {|column| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>>

Iterates over columns.

Yields:

  • (column)

    each column

Yield Parameters:

  • column (Array<Sevgi::Geometry::Element>)

    column cells

Yield Returns:

  • (void)

Returns:

  • (Enumerator, Array<Array<Sevgi::Geometry::Element>>)

    enumerator without a block, otherwise columns



78
# File 'lib/sevgi/sundries/tile.rb', line 78

def each_col(...) = cols.each(...)

#row(i = 0) ⇒ Array<Sevgi::Geometry::Element>?

Returns a row by index.

Parameters:

  • i (Integer) (defaults to: 0)

    row index

Returns:

  • (Array<Sevgi::Geometry::Element>, nil)


83
# File 'lib/sevgi/sundries/tile.rb', line 83

def row(i = 0) = rows[i]

#rowbox(i = 0) ⇒ Sevgi::Geometry::Rect

Returns the bounding rectangle of a row.

Parameters:

  • i (Integer) (defaults to: 0)

    row index

Returns:

  • (Sevgi::Geometry::Rect)


88
# File 'lib/sevgi/sundries/tile.rb', line 88

def rowbox(i = 0) = Geometry::Rect[box.width, element.box.height, position: coordinate(i)]

#rowsArray<Array<Sevgi::Geometry::Element>>

Returns cells grouped by row.

Returns:

  • (Array<Array<Sevgi::Geometry::Element>>)


92
# File 'lib/sevgi/sundries/tile.rb', line 92

def rows = @rows ||= (0...ny).map { |i| (0...nx).map { |j| element.at(coordinate(i, j)) } }