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.
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/sevgi/sundries/tile.rb', line 28 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 = self.class.send(: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.
43 |
# File 'lib/sevgi/sundries/tile.rb', line 43 def [](i) = rows[i] |
#box ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of the whole tile.
47 |
# File 'lib/sevgi/sundries/tile.rb', line 47 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.
51 |
# File 'lib/sevgi/sundries/tile.rb', line 51 def cell = row.first |
#col(i = 0) ⇒ Array<Sevgi::Geometry::Element>?
Returns a column by index.
65 |
# File 'lib/sevgi/sundries/tile.rb', line 65 def col(i = 0) = cols[i] |
#colbox(i = 0) ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of a column.
56 |
# File 'lib/sevgi/sundries/tile.rb', line 56 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.
60 |
# File 'lib/sevgi/sundries/tile.rb', line 60 def cols = @cols ||= rows.transpose |
#each {|row| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>> Also known as: each_row
Iterates over rows.
72 |
# File 'lib/sevgi/sundries/tile.rb', line 72 def each(...) = rows.each(...) |
#each_col {|column| ... } ⇒ Enumerator, Array<Array<Sevgi::Geometry::Element>>
Iterates over columns.
79 |
# File 'lib/sevgi/sundries/tile.rb', line 79 def each_col(...) = cols.each(...) |
#row(i = 0) ⇒ Array<Sevgi::Geometry::Element>?
Returns a row by index.
84 |
# File 'lib/sevgi/sundries/tile.rb', line 84 def row(i = 0) = rows[i] |
#rowbox(i = 0) ⇒ Sevgi::Geometry::Rect
Returns the bounding rectangle of a row.
89 |
# File 'lib/sevgi/sundries/tile.rb', line 89 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.
93 |
# File 'lib/sevgi/sundries/tile.rb', line 93 def rows = @rows ||= (0...ny).map { |i| (0...nx).map { |j| element.at(coordinate(i, j)) } } |