rhex 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hex/ascii_to_grid.rb +18 -0
- data/lib/hex/axial.rb +8 -5
- data/lib/hex/grid.rb +13 -7
- data/lib/hex/grid_to_pic.rb +46 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6deb19b3fa7658e30adc918242cfd55c6c96a831
|
4
|
+
data.tar.gz: e9c1ac59f2faec0c63ba0515d45552964d4eb114
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98ea9582bb07c5312714d37f0e36be129eca200e1c538d8a9a728adafee915dc64209bcc26d708576fd01f0cae17f6a3927e870bf71c1ecde81b9f1500bbb746
|
7
|
+
data.tar.gz: c7a8f7d08d20ab059c16f553b72a0b72784e57d7509f89f9d509518d96455cef935a9877188d8952b0f76416adcb9c4c69b6b98d8463dc38cf2e75609cfe55d7
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module AsciiToGrid
|
2
|
+
|
3
|
+
def read_ascii_file( file_path )
|
4
|
+
File.open( file_path ) do |file|
|
5
|
+
r = 0
|
6
|
+
file.each_line do |line|
|
7
|
+
elements = line.split
|
8
|
+
q = 0
|
9
|
+
elements.each do |element|
|
10
|
+
set( q, r, element )
|
11
|
+
q += 1
|
12
|
+
end
|
13
|
+
r += 1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/hex/axial.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
|
2
|
+
|
3
|
+
require_relative 'cube'
|
3
4
|
|
4
5
|
module Hex
|
5
6
|
class Axial
|
6
7
|
|
7
|
-
attr_reader :q, :r
|
8
|
+
attr_reader :q, :r, :val
|
8
9
|
|
9
10
|
R = 16
|
10
11
|
|
@@ -12,12 +13,13 @@ module Hex
|
|
12
13
|
DIRECTIONS = [ [0,-1], [1,-1], [1,0], [0,1], [-1,+1], [-1,0] ]
|
13
14
|
|
14
15
|
# Create a new flat topped axial represented hexagon object
|
15
|
-
def initialize(q,r)
|
16
|
+
def initialize( q, r, val = nil)
|
16
17
|
@q = q
|
17
18
|
@r = r
|
19
|
+
@val = val.to_sym if val
|
18
20
|
end
|
19
21
|
|
20
|
-
# Equality between two
|
22
|
+
# Equality between two hexagons
|
21
23
|
def ==(h)
|
22
24
|
@q==h.q && @r==h.r
|
23
25
|
end
|
@@ -33,8 +35,9 @@ module Hex
|
|
33
35
|
|
34
36
|
# Give the position of an hexagone object in pixel
|
35
37
|
def to_xy
|
38
|
+
pix_r = r - ( @q/2 )
|
36
39
|
x = R * 3/2 * @q
|
37
|
-
y = ( ( R.to_f * Math.sqrt(3) ).round * (
|
40
|
+
y = ( ( R.to_f * Math.sqrt(3) ).round * (pix_r.to_f + @q.to_f/2.to_f) )
|
38
41
|
[ x, y ]
|
39
42
|
end
|
40
43
|
|
data/lib/hex/grid.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
|
-
|
1
|
+
require_relative 'axial'
|
2
|
+
require_relative 'grid_to_pic'
|
3
|
+
require_relative 'ascii_to_grid'
|
2
4
|
|
3
5
|
module Hex
|
4
6
|
class Grid
|
5
|
-
|
7
|
+
|
8
|
+
include GridToPic
|
9
|
+
include AsciiToGrid
|
10
|
+
|
11
|
+
def initialize( element_to_color_hash = {} )
|
6
12
|
@hexes={}
|
13
|
+
@element_to_color_hash = element_to_color_hash
|
7
14
|
end
|
8
15
|
|
9
16
|
# Position aa value at hexagon coordinate
|
@@ -14,18 +21,17 @@ module Hex
|
|
14
21
|
raise ArgumentError, 'Incorrect number of arguments' if args.length < 1 || args.length > 3
|
15
22
|
fa=args.shift
|
16
23
|
if fa.class == Hex::Axial
|
17
|
-
@hexes[ [ fa.q, fa.r ] ] = args.shift
|
24
|
+
@hexes[ [ fa.q, fa.r ] ] = Hex::Axial.new( fa.q, fa.r, args.shift )
|
18
25
|
else
|
19
26
|
q=fa
|
20
27
|
r=args.shift
|
21
|
-
@hexes[ [ q, r ] ] = args.shift
|
28
|
+
@hexes[ [ q, r ] ] = Hex::Axial.new( q, r, args.shift )
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
25
32
|
# Get the value of stored at hexagon coordinate
|
26
|
-
# You can use the form
|
27
|
-
# Or
|
28
|
-
# In both case value can be nil.
|
33
|
+
# You can use the form get( q, r )
|
34
|
+
# Or get( hex )
|
29
35
|
def get( *args )
|
30
36
|
raise( ArgumentError, 'Incorrect number of arguments' ) if args.length < 1 || args.length > 2
|
31
37
|
fa=args.shift
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# A module to transform hex grid to bitmap
|
2
|
+
|
3
|
+
begin
|
4
|
+
gem 'rmagick'
|
5
|
+
require 'rmagick'
|
6
|
+
rescue Gem::LoadError
|
7
|
+
puts 'Caution : Rmagick is not installed'
|
8
|
+
end
|
9
|
+
|
10
|
+
module GridToPic
|
11
|
+
|
12
|
+
def to_pic( pic_name, exit_on_error = true )
|
13
|
+
unless defined?( Magick::Image ) && defined?( Magick::HatchFill ) && defined?( Magick::Draw )
|
14
|
+
puts 'Rmagick is not installed !!! You can\'t dump hex grid to pic'
|
15
|
+
exit if exit_on_error
|
16
|
+
end
|
17
|
+
|
18
|
+
canvas = Magick::Image.new( 500, 500 )
|
19
|
+
gc = Magick::Draw.new
|
20
|
+
width = Hex::Axial::R * 2
|
21
|
+
quarter_width = width / 4.0
|
22
|
+
height = Math.sqrt(3)/2 * width
|
23
|
+
half_height = height / 2.0
|
24
|
+
|
25
|
+
@hexes.each do |pos, hex|
|
26
|
+
x, y = hex.to_xy
|
27
|
+
|
28
|
+
color = get_color( hex )
|
29
|
+
gc.stroke( 'black' )
|
30
|
+
gc.fill( color.to_s )
|
31
|
+
gc.polygon( x-quarter_width, y-half_height, x+quarter_width, y-half_height, x+quarter_width*2, y,
|
32
|
+
x+quarter_width, y+half_height, x-quarter_width, y+half_height, x-quarter_width*2, y )
|
33
|
+
end
|
34
|
+
|
35
|
+
gc.draw(canvas)
|
36
|
+
canvas.write( pic_name )
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def get_color( hex )
|
42
|
+
color = @element_to_color_hash[ hex.val ]
|
43
|
+
color ? color : :white
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,24 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric ZUGER
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A library designed to provide hexagonal grids for ruby
|
14
|
-
email:
|
14
|
+
email:
|
15
15
|
executables: []
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
+
- lib/hex/ascii_to_grid.rb
|
19
20
|
- lib/hex/axial.rb
|
20
21
|
- lib/hex/cube.rb
|
21
22
|
- lib/hex/grid.rb
|
23
|
+
- lib/hex/grid_to_pic.rb
|
22
24
|
- lib/rhex.rb
|
23
25
|
homepage: http://rubygems.org/gems/rhex
|
24
26
|
licenses:
|
@@ -40,8 +42,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
42
|
version: '0'
|
41
43
|
requirements: []
|
42
44
|
rubyforge_project:
|
43
|
-
rubygems_version: 2.4.
|
45
|
+
rubygems_version: 2.4.8
|
44
46
|
signing_key:
|
45
47
|
specification_version: 4
|
46
48
|
summary: Ruby HEXagonal grid
|
47
49
|
test_files: []
|
50
|
+
has_rdoc:
|