astromapper 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/astromapper/svg.rb +24 -111
- data/lib/astromapper/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a9cfe24acc8a2bc95bdd68bb086bea417e6a88f
|
4
|
+
data.tar.gz: 8112420708e36c7b322d75fe396e8c70739db970
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32fc9e5f9f16656b4bcf83803136dd4b1ecbdd3a2cd9c1eabf93fe57b1cfd5e745c271d575c1417f34735cad5ab6469e578511c8b13234c7369b7cdb55d8491a
|
7
|
+
data.tar.gz: 37f9179db14c9c620c3b1f9b73b1733679df91a424232b15d92299863e1cdcee3ca9db9bb7006a415bb334d19cb7df063156d6582b8b69159510744c9739cb5f
|
data/lib/astromapper/svg.rb
CHANGED
@@ -17,53 +17,7 @@ module Astromapper
|
|
17
17
|
@zones = []
|
18
18
|
@volumes = []
|
19
19
|
@name = config['name']
|
20
|
-
# puts "Height: #{@height}; Width: #{@width}"
|
21
20
|
|
22
|
-
base03 = config['colors']['base03'] || '#002b36'
|
23
|
-
base02 = config['colors']['base02'] || '#073642'
|
24
|
-
base01 = config['colors']['base01'] || '#586e75'
|
25
|
-
base00 = config['colors']['base03'] || '#657b83'
|
26
|
-
base0 = config['colors']['base0'] || '#839496'
|
27
|
-
base1 = config['colors']['base1'] || '#93a1a1'
|
28
|
-
base2 = config['colors']['base2'] || '#eee8d5'
|
29
|
-
base3 = config['colors']['base3'] || '#fdf6e3'
|
30
|
-
yellow = config['colors']['yellow'] || '#b58900'
|
31
|
-
orange = config['colors']['orange'] || '#cb4b16'
|
32
|
-
red = config['colors']['red'] || '#dc322f'
|
33
|
-
magenta = config['colors']['magenta'] || '#d33682'
|
34
|
-
violet = config['colors']['violet'] || '#6c71c4'
|
35
|
-
blue = config['colors']['blue'] || '#268bd2'
|
36
|
-
cyan = config['colors']['cyan'] || '#2aa198'
|
37
|
-
green = config['colors']['green'] || '#859900'
|
38
|
-
white = config['colors']['white'] || '#FFFFFF'
|
39
|
-
black = config['colors']['black'] || '#222222'
|
40
|
-
|
41
|
-
@theme = {
|
42
|
-
'dark' => {
|
43
|
-
:background => base03,
|
44
|
-
:zone => {'AZ' => yellow, 'RZ' => red},
|
45
|
-
:hex => base1,
|
46
|
-
:hex_id => base2,
|
47
|
-
:world_text => base2,
|
48
|
-
:black => base3,
|
49
|
-
:base02 => base2,
|
50
|
-
:base1 => base01,
|
51
|
-
:white => white,
|
52
|
-
:tract_id => base01
|
53
|
-
},
|
54
|
-
'lite' => {
|
55
|
-
:background => white,
|
56
|
-
:zone => {'AZ' => yellow, 'RZ' => red},
|
57
|
-
:hex => base1,
|
58
|
-
:hex_id => base01,
|
59
|
-
:world_text => base01,
|
60
|
-
:black => black,
|
61
|
-
:base02 => base02,
|
62
|
-
:base1 => base1,
|
63
|
-
:white => white,
|
64
|
-
:tract_id => base2
|
65
|
-
}
|
66
|
-
}
|
67
21
|
theme = (%w{lite dark}.include?(config['svg_theme'])) ? config['svg_theme'] : 'lite'
|
68
22
|
@color = @theme[theme]
|
69
23
|
@hex = {
|
@@ -71,47 +25,6 @@ module Astromapper
|
|
71
25
|
:side_w => (@side / 2).tweak,
|
72
26
|
:width => @side
|
73
27
|
}
|
74
|
-
# @style = {
|
75
|
-
# :circle => "fill='#{@color[:black]}' stroke='#{@color[:white]}' stroke-width='1'",
|
76
|
-
# :polyline => "fill='none'",
|
77
|
-
# :polygon => "fill='#{@color[:black]}' stroke='none' stroke-width='1'",
|
78
|
-
# :ellipse => "fill='none' stroke='#{@color[:base02]}' stroke-width='1'",
|
79
|
-
# :Belt => "stroke='#{@color[:white]}' stroke-width='1'",
|
80
|
-
# :AZ_zone => "fill='none' stroke='#{@color[:zone]['AZ']}' stroke-width='3' stroke-dasharray='5%,5%'",
|
81
|
-
# :RZ_zone => "fill='none' stroke='#{@color[:zone]['RZ']}' stroke-width='3'",
|
82
|
-
# :Planet => "fill='#{@color[:black]}' stroke='#{@color[:black]}' stroke-width='1'",
|
83
|
-
# :Desert => "fill='none' stroke='#{@color[:black]}' stroke-width='2'",
|
84
|
-
# :Frame => "fill='none' stroke='#{@color[:black]}' stroke-width='4'",
|
85
|
-
# :Tract => "fill='none' stroke='#{@color[:hex]}' stroke-width='1'",
|
86
|
-
# :Hexgrid => "fill='none' stroke='#{@color[:hex]}' stroke-width='1'",
|
87
|
-
# :Name => "text-anchor='middle' font-size='#{@side/5}px' fill='#{@color[:world_text]}' font-family='Verdana'",
|
88
|
-
# :symbol => "text-anchor='middle' font-size='#{@side/2.5}px' fill='#{@color[:black]}' font-family='Verdana'",
|
89
|
-
# :Spaceport => "text-anchor='middle' font-size='#{@side/3}px' fill='#{@color[:world_text]}' font-family='Verdana'",
|
90
|
-
# :TractID => "text-anchor='middle' font-size='#{@side*3}px' fill='#{@color[:tract_id]}' font-family='Verdana'",
|
91
|
-
# :VolumeId => "text-anchor='middle' font-size='#{@side/5}px' fill='#{@color[:hex_id]}' font-family='Verdana'",
|
92
|
-
# :rect => "fill='#{@color[:background]}'"
|
93
|
-
# }
|
94
|
-
@style = {
|
95
|
-
:circle => "fill='#{@color[:black]}' stroke='#{@color[:white]}' stroke-width='1'",
|
96
|
-
:polyline => "fill='none'",
|
97
|
-
:polygon => "fill='#{@color[:black]}' stroke='none' stroke-width='1'",
|
98
|
-
:ellipse => "fill='none' stroke='#{@color[:base02]}' stroke-width='1'",
|
99
|
-
:Belt => "stroke='#{@color[:white]}' stroke-width='1'",
|
100
|
-
:AZ_zone => "class='lowsec'",
|
101
|
-
:RZ_zone => "class='lowsec'",
|
102
|
-
:Planet => "",
|
103
|
-
:Desert => "",
|
104
|
-
:Frame => "",
|
105
|
-
:Tract => "",
|
106
|
-
:Hexgrid => "",
|
107
|
-
:Name => "",
|
108
|
-
:symbol => "",
|
109
|
-
:Spaceport => "",
|
110
|
-
:TractID => "",
|
111
|
-
:VolumeId => "",
|
112
|
-
:rect => "fill='#{@color[:background]}'"
|
113
|
-
}
|
114
|
-
@style[:UWP] = @style[:Name]
|
115
28
|
end
|
116
29
|
def from_file
|
117
30
|
File.open(@source_filename,'r').readlines.each { |line| @volumes << line if /^\d{4}/.match(line) }
|
@@ -150,10 +63,10 @@ module Astromapper
|
|
150
63
|
fill: #eed;
|
151
64
|
font: 120px sans-serif;
|
152
65
|
}
|
153
|
-
text.
|
66
|
+
text.namestamp {
|
154
67
|
font-size: 13px;
|
155
68
|
}
|
156
|
-
text.
|
69
|
+
text.symbol {
|
157
70
|
font-size: 14px;
|
158
71
|
fill: #222;
|
159
72
|
}
|
@@ -191,7 +104,7 @@ module Astromapper
|
|
191
104
|
stroke-dasharray: 3,6;
|
192
105
|
}
|
193
106
|
</style>
|
194
|
-
<rect
|
107
|
+
<rect width='#{@width}' height='#{@height}' />
|
195
108
|
EOS
|
196
109
|
end
|
197
110
|
def center_of(locx)
|
@@ -234,12 +147,12 @@ module Astromapper
|
|
234
147
|
|
235
148
|
output = "<!-- Volume: #{volume.strip.gsub(/\t/,' // ')} -->\n"
|
236
149
|
output += (size == '0') ? draw_belt(c) : draw_planet(c,uwp)
|
237
|
-
output += " <text
|
238
|
-
output += " <text
|
239
|
-
output += " <text
|
150
|
+
output += " <text class='spaceport' x='#{c[0]}' y='#{(c[1] + @side / 2).tweak}'>#{spaceport.strip}</text>\n"
|
151
|
+
output += " <text x='#{c[0]}' y='#{(c[1]+(@side/1.3)).tweak}'>#{uwp.strip}</text>\n"
|
152
|
+
output += " <text x='#{c[0]}' y='#{(c[1]-(@side/2.1)).tweak}'>#{name.strip}</text>\n"
|
240
153
|
unless zone == '..'
|
241
154
|
style = zone + '_zone'
|
242
|
-
output += " <path
|
155
|
+
output += " <path d='M #{c[0] - curve/2;} #{c[1] - (curve/1.4)} a #{curve} #{curve} 0 1 0 20 0' />\n"
|
243
156
|
end
|
244
157
|
output += navy_base(c) if nsg.include?('N')
|
245
158
|
output += scout_base(c) if nsg.include?('S')
|
@@ -256,7 +169,7 @@ module Astromapper
|
|
256
169
|
x = (c[0]+(@side/1.8)).tweak + 2
|
257
170
|
y = (c[1]-(@side/3)).tweak + 3
|
258
171
|
stars.split('/').each do |star|
|
259
|
-
output += " <text
|
172
|
+
output += " <text x='#{x}' y='#{y}'>#{star[0..1].strip}</text>\n"
|
260
173
|
x += 3
|
261
174
|
y += 7
|
262
175
|
end
|
@@ -264,21 +177,21 @@ module Astromapper
|
|
264
177
|
end
|
265
178
|
def draw_planet(c,w)
|
266
179
|
k = (w[3] == '0') ? 'Desert' : 'Planet'
|
267
|
-
" <circle
|
180
|
+
" <circle class='planet' cx='#{c[0]}' cy='#{c[1]}' r='#{@side/7}' />\n"
|
268
181
|
end
|
269
182
|
def draw_belt(c)
|
270
183
|
output = " <g stroke='none' fill='none'>\n"
|
271
184
|
7.times do
|
272
185
|
x = c[0] + Random.rand(@side/3) - @side/6
|
273
186
|
y = c[1] + Random.rand(@side/3) - @side/6
|
274
|
-
output += " <circle
|
187
|
+
output += " <circle class='belt' cx='#{x.tweak}' cy='#{y.tweak}' r='#{(@side/15).tweak}' />\n"
|
275
188
|
end
|
276
189
|
output + " </g>\n"
|
277
190
|
end
|
278
191
|
def frame(k='Frame')
|
279
192
|
style = k.to_sym
|
280
193
|
z = 0; w = @width - 0; h = @height - z;
|
281
|
-
" <polyline
|
194
|
+
" <polyline class='frame' points='#{z},#{z} #{w},#{z} #{w},#{h} #{z},#{h} #{z},#{z}' />"
|
282
195
|
end
|
283
196
|
def tract_marks
|
284
197
|
height = (@height / 4).floor
|
@@ -292,8 +205,8 @@ module Astromapper
|
|
292
205
|
w2 = 0
|
293
206
|
4.times do |c|
|
294
207
|
w1 = w2; w2 += (width - [-4,4,5,-4][c])
|
295
|
-
output += " <text
|
296
|
-
output += " <polyline
|
208
|
+
output += " <text class='tract' x='#{w1 + 70}' y='#{h1 + 110}'>#{letters.shift}</text>\n"
|
209
|
+
output += " <polyline class='tract' points='#{w1},#{h1} #{w2},#{h1} #{w2},#{h2} #{w1},#{h2} #{w1},#{h1}' />\n"
|
297
210
|
# raise output
|
298
211
|
end
|
299
212
|
end
|
@@ -306,42 +219,42 @@ module Astromapper
|
|
306
219
|
(@columns+1).times do |c|
|
307
220
|
x = @side + ((c-1) * @side * 1.5)
|
308
221
|
y = (c % 2 == 1) ? (r-1) * @side * @factor + (0.2 * @side) : (r-1) * @side * @factor + @hex[:side_h]+ (0.2 * @side)
|
309
|
-
output += "<text
|
222
|
+
output += "<text class='volume-id' x='#{x.tweak}' y='#{y.tweak}'>%02d%02d</text>\n" % [c,r]
|
310
223
|
end
|
311
224
|
end
|
312
225
|
output
|
313
226
|
end
|
314
227
|
def polygon(x, y, sx, sy, sides=4)
|
315
228
|
polygon = star_coords(sx, sy, sides).map { |c| "#{x + c[0]},#{y.tweak+c[1]}" }
|
316
|
-
" <polygon
|
229
|
+
" <polygon points='#{polygon.join(' ')}' />\n"
|
317
230
|
end
|
318
231
|
def gas_giant(c)
|
319
232
|
x = (c[0]+(@side/1.8)).tweak; y = (c[1]+(@side/3)).tweak;
|
320
233
|
return<<-GIANT
|
321
|
-
<g><!-- Has Gas Giant -->
|
322
|
-
<ellipse
|
323
|
-
<circle
|
234
|
+
<g class='gas-giant'><!-- Has Gas Giant -->
|
235
|
+
<ellipse cx='#{x}' cy='#{y}' rx='#{(@side/(@mark * 0.5)).tweak}' ry='#{(@side/@mark * 0.3).tweak}' />
|
236
|
+
<circle cx='#{x}' cy='#{y}' r='#{(@side/(@mark * 1.2)).tweak}' />
|
324
237
|
</g>
|
325
238
|
GIANT
|
326
239
|
end
|
327
240
|
def pirates(c);
|
328
|
-
return "<!-- Pirates --><text
|
241
|
+
return "<!-- Pirates --><text class='symbol' x='#{c[0]-(@side/3.1)}' y='#{c[1]+(@side/7)}'>\u2620</text>\n"
|
329
242
|
end
|
330
243
|
def consulate(c);
|
331
|
-
return "<!-- Consulate --><text
|
244
|
+
return "<!-- Consulate --><text class='symbol' x='#{c[0]-(@side/1.5)}' y='#{c[1]+(@side/7)}'>\u2691</text>\n"
|
332
245
|
end
|
333
246
|
def scout_base(c);
|
334
|
-
return "<!-- Scout Base --><text
|
247
|
+
return "<!-- Scout Base --><text class='symbol' x='#{c[0]-(@side/1.8)}' y='#{c[1]+(@side/2.4)}'>\u269C</text>\n"
|
335
248
|
'<!-- SB -->' + polygon(c[0]-(@side/1.8),c[1]+(@side/3.7), @side/(@mark/2), @side/@mark, 3);
|
336
249
|
end
|
337
250
|
def navy_base(c);
|
338
|
-
return "<!-- Navy Base --><text
|
251
|
+
return "<!-- Navy Base --><text class='symbol' x='#{c[0]-(@side/1.8)}' y='#{c[1]-(@side/6)}'>\u2693</text>\n"
|
339
252
|
'<!-- NB -->' +polygon(c[0]-(@side/1.8), c[1]-(@side/3.7), @side/(@mark/2), @side/@mark, 5);
|
340
253
|
end
|
341
254
|
def hex_grid; (@rows * 3 + 2).times.map { |j| hex_row((j/2).floor, (j % 2 != 0)) };
|
342
255
|
end
|
343
256
|
def namestamp
|
344
|
-
return "<text
|
257
|
+
return "<text class='namestamp' x='30' y='2800'>#{@name}</text>"
|
345
258
|
end
|
346
259
|
def hex_row(row, top=false)
|
347
260
|
ly = (row * 2 * @hex[:side_h]) + @hex[:side_h]
|
@@ -369,7 +282,7 @@ module Astromapper
|
|
369
282
|
x += @hex[:side_w]
|
370
283
|
y = (top) ? y - @hex[:side_h] : y + @hex[:side_h]
|
371
284
|
points << "#{x.tweak},#{y.tweak}"
|
372
|
-
" <polyline
|
285
|
+
" <polyline points='#{points.join(' ')}' />"
|
373
286
|
end
|
374
287
|
end
|
375
288
|
end
|
data/lib/astromapper/version.rb
CHANGED