Class: Sevgi::Sundries::Tile
- Inherits:
-
Object
- Object
- Sevgi::Sundries::Tile
- Includes:
- Enumerable
- Defined in:
- lib/sevgi/sundries/tile.rb
Overview
Repeats a geometry element over a rectangular row and column layout.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#element ⇒ Sevgi::Geometry::Element
readonly
Source element repeated by the tile.
-
#nx ⇒ Integer
readonly
Number of columns.
-
#ny ⇒ Object
readonly
Returns the value of attribute ny.
-
#position ⇒ Sevgi::Geometry::Point
readonly
Tile origin.
Instance Method Summary collapse
-
#[](i) ⇒ Array<Sevgi::Geometry::Element>?
Returns a row by index.
-
#box ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of the whole tile.
-
#cell ⇒ Sevgi::Geometry::Element
Returns the first cell in the tile.
-
#col(i = 0) ⇒ Array<Sevgi::Geometry::Element>?
Returns a column by index.
-
#colbox(i = 0) ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of a column.
-
#cols ⇒ Array<Array<Sevgi::Geometry::Element>>
Returns cells grouped by column.
-
#each {|row| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>>
(also: #each_row)
Iterates over rows.
-
#each_col {|column| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>>
Iterates over columns.
-
#initialize(element, position: Geometry::Origin, nx: 1, ny: 1) ⇒ void
constructor
Creates a tile from a source geometry element.
-
#row(i = 0) ⇒ Array<Sevgi::Geometry::Element>?
Returns a row by index.
-
#rowbox(i = 0) ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of a row.
-
#rows ⇒ Array<Array<Sevgi::Geometry::Element>>
Returns cells grouped by row.
Constructor Details
#initialize(element, position: Geometry::Origin, nx: 1, ny: 1) ⇒ void
Creates a tile from a source geometry element.
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
#element ⇒ Sevgi::Geometry::Element (readonly)
Returns source element repeated by the tile.
17 18 19 |
# File 'lib/sevgi/sundries/tile.rb', line 17 def element @element end |
#nx ⇒ Integer (readonly)
Returns number of columns.
17 |
# File 'lib/sevgi/sundries/tile.rb', line 17 attr_reader :element, :position, :nx, :ny |
#ny ⇒ Object (readonly)
Returns the value of attribute ny.
17 |
# File 'lib/sevgi/sundries/tile.rb', line 17 attr_reader :element, :position, :nx, :ny |
#position ⇒ Sevgi::Geometry::Point (readonly)
Returns 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.
42 |
# File 'lib/sevgi/sundries/tile.rb', line 42 def [](i) = rows[i] |
#box ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of the whole tile.
46 |
# File 'lib/sevgi/sundries/tile.rb', line 46 def box = @box ||= Geometry::Rect[nx * element.box.width, ny * element.box.height, position:] |
#cell ⇒ Sevgi::Geometry::Element
Returns the first cell in the tile.
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.
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.
55 |
# File 'lib/sevgi/sundries/tile.rb', line 55 def colbox(i = 0) = Geometry::Rect[element.box.width, box.height, position: coordinate(0, i)] |
#cols ⇒ Array<Array<Sevgi::Geometry::Element>>
Returns cells grouped by column.
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.
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.
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.
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.
88 |
# File 'lib/sevgi/sundries/tile.rb', line 88 def rowbox(i = 0) = Geometry::Rect[box.width, element.box.height, position: coordinate(i)] |
#rows ⇒ Array<Array<Sevgi::Geometry::Element>>
Returns cells grouped by row.
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)) } } |