Class: GeoPattern::MosaicSquaresPattern
- Inherits:
-
BasePattern
- Object
- Struct
- BasePattern
- GeoPattern::MosaicSquaresPattern
- Defined in:
- lib/geo_pattern/pattern/mosaic_squares_pattern.rb
Constant Summary
Constants inherited from BasePattern
BasePattern::FILL_COLOR_DARK, BasePattern::FILL_COLOR_LIGHT, BasePattern::OPACITY_MAX, BasePattern::OPACITY_MIN, BasePattern::STROKE_COLOR, BasePattern::STROKE_OPACITY
Instance Attribute Summary
Attributes inherited from BasePattern
Instance Method Summary collapse
- #build_right_triangle_shape(side_length) ⇒ Object
- #draw_inner_mosaic_tile(x, y, triangle_size, vals) ⇒ Object
- #draw_outer_mosaic_tile(x, y, triangle_size, val) ⇒ Object
- #render_to_svg ⇒ Object
Methods inherited from BasePattern
#fill_color, #hex_val, #map, #opacity
Instance Method Details
#build_right_triangle_shape(side_length) ⇒ Object
72 73 74 |
# File 'lib/geo_pattern/pattern/mosaic_squares_pattern.rb', line 72 def build_right_triangle_shape(side_length) "0, 0, #{side_length}, #{side_length}, 0, #{side_length}, 0, 0" end |
#draw_inner_mosaic_tile(x, y, triangle_size, vals) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/geo_pattern/pattern/mosaic_squares_pattern.rb', line 30 def draw_inner_mosaic_tile(x, y, triangle_size, vals) triangle = build_right_triangle_shape(triangle_size) opacity = opacity(vals[0]) fill = fill_color(vals[0]) styles = { "stroke" => STROKE_COLOR, "stroke-opacity" => STROKE_OPACITY, "fill-opacity" => opacity, "fill" => fill } svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size}, #{y}) scale(-1, 1)"})) svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size}, #{y+triangle_size*2}) scale(1, -1)"})) opacity = opacity(vals[1]) fill = fill_color(vals[1]) styles = { "stroke" => STROKE_COLOR, "stroke-opacity" => STROKE_OPACITY, "fill-opacity" => opacity, "fill" => fill } svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size}, #{y+triangle_size*2}) scale(-1, -1)"})) svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size}, #{y}) scale(1, 1)"})) end |
#draw_outer_mosaic_tile(x, y, triangle_size, val) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/geo_pattern/pattern/mosaic_squares_pattern.rb', line 55 def draw_outer_mosaic_tile(x, y, triangle_size, val) opacity = opacity(val) fill = fill_color(val) triangle = build_right_triangle_shape(triangle_size) styles = { "stroke" => STROKE_COLOR, "stroke-opacity" => STROKE_OPACITY, "fill-opacity" => opacity, "fill" => fill } svg.polyline(triangle, styles.merge({"transform" => "translate(#{x}, #{y+triangle_size}) scale(1, -1)"})) svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size*2}, #{y+triangle_size}) scale(-1, -1)"})) svg.polyline(triangle, styles.merge({"transform" => "translate(#{x}, #{y+triangle_size}) scale(1, 1)"})) svg.polyline(triangle, styles.merge({"transform" => "translate(#{x+triangle_size*2}, #{y+triangle_size}) scale(-1, 1)"})) end |
#render_to_svg ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/geo_pattern/pattern/mosaic_squares_pattern.rb', line 3 def render_to_svg triangle_size = map(hex_val(0, 1), 0, 15, 15, 50) svg.set_width(triangle_size * 8) svg.set_height(triangle_size * 8) i = 0 for y in 0..3 for x in 0..3 if x.even? if y.even? draw_outer_mosaic_tile(x*triangle_size*2, y*triangle_size*2, triangle_size, hex_val(i, 1)) else draw_inner_mosaic_tile(x*triangle_size*2, y*triangle_size*2, triangle_size, [hex_val(i, 1), hex_val(i+1, 1)]) end else if y.even? draw_inner_mosaic_tile(x*triangle_size*2, y*triangle_size*2, triangle_size, [hex_val(i, 1), hex_val(i+1, 1)]) else draw_outer_mosaic_tile(x*triangle_size*2, y*triangle_size*2, triangle_size, hex_val(i, 1)) end end i += 1 end end end |