skymap 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +133 -1
  3. data/README.md +570 -31
  4. data/data/LICENSE-deep_sky_objects.txt +30 -0
  5. data/data/LICENSE-stars.txt +35 -0
  6. data/data/deep_sky_objects.csv +1742 -0
  7. data/data/stars.bin +0 -0
  8. data/lib/skymap/canvas.rb +12 -3
  9. data/lib/skymap/catalog/deep_sky_objects.rb +60 -0
  10. data/lib/skymap/catalog/star_records.rb +322 -0
  11. data/lib/skymap/catalog/stars.rb +75 -12
  12. data/lib/skymap/chart.rb +18 -4
  13. data/lib/skymap/cone.rb +21 -0
  14. data/lib/skymap/context.rb +326 -8
  15. data/lib/skymap/deep_sky_object.rb +140 -0
  16. data/lib/skymap/eyepiece.rb +22 -0
  17. data/lib/skymap/field.rb +20 -0
  18. data/lib/skymap/geometry.rb +47 -0
  19. data/lib/skymap/horizon.rb +33 -3
  20. data/lib/skymap/label_placement.rb +263 -0
  21. data/lib/skymap/layers/cardinal_directions.rb +2 -0
  22. data/lib/skymap/layers/constellation_lines.rb +6 -1
  23. data/lib/skymap/layers/constellation_names.rb +5 -2
  24. data/lib/skymap/layers/deep_sky_objects.rb +128 -0
  25. data/lib/skymap/layers/ecliptic.rb +1 -7
  26. data/lib/skymap/layers/field_circles.rb +169 -0
  27. data/lib/skymap/layers/grid.rb +153 -0
  28. data/lib/skymap/layers/moon.rb +22 -12
  29. data/lib/skymap/layers/planets.rb +4 -0
  30. data/lib/skymap/layers/scale.rb +75 -0
  31. data/lib/skymap/layers/star_names.rb +21 -4
  32. data/lib/skymap/layers/stars.rb +31 -8
  33. data/lib/skymap/layers/sun.rb +13 -9
  34. data/lib/skymap/magnitude_limit.rb +15 -0
  35. data/lib/skymap/print_size.rb +50 -0
  36. data/lib/skymap/projection/oblique_stereographic.rb +87 -0
  37. data/lib/skymap/projection/stereographic.rb +11 -0
  38. data/lib/skymap/renderer/caption.rb +35 -3
  39. data/lib/skymap/renderer/deep_sky_symbol.rb +67 -0
  40. data/lib/skymap/renderer/field_circle.rb +7 -0
  41. data/lib/skymap/renderer/grid.rb +7 -0
  42. data/lib/skymap/renderer/horizon_line.rb +7 -0
  43. data/lib/skymap/renderer/label.rb +3 -1
  44. data/lib/skymap/renderer/scale_bar.rb +7 -0
  45. data/lib/skymap/renderer/svg.rb +204 -15
  46. data/lib/skymap/setup.rb +48 -0
  47. data/lib/skymap/star.rb +127 -2
  48. data/lib/skymap/star_list.rb +25 -0
  49. data/lib/skymap/telescope.rb +17 -0
  50. data/lib/skymap/theme.rb +54 -20
  51. data/lib/skymap/version.rb +1 -1
  52. data/lib/skymap/view.rb +49 -0
  53. data/lib/skymap.rb +24 -0
  54. metadata +31 -2
  55. data/data/stars.csv +0 -9097
data/lib/skymap/theme.rb CHANGED
@@ -1,25 +1,52 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Skymap
4
- Theme = Data.define(
5
- :background,
6
- :sky,
7
- :horizon,
8
- :star,
9
- :constellation_line,
10
- :boundary,
11
- :ecliptic,
12
- :planet,
13
- :sun,
14
- :moon,
15
- :moon_shadow,
16
- :moon_shadow_opacity,
17
- :constellation_name,
18
- :star_name,
19
- :planet_name,
20
- :label,
21
- :font
22
- ) do
4
+ required_colors = %i[
5
+ background
6
+ sky
7
+ horizon
8
+ star
9
+ constellation_line
10
+ boundary
11
+ ecliptic
12
+ planet
13
+ sun
14
+ moon
15
+ moon_shadow
16
+ moon_shadow_opacity
17
+ constellation_name
18
+ star_name
19
+ planet_name
20
+ label
21
+ font
22
+ ].freeze
23
+ optional_colors = {
24
+ grid: :boundary,
25
+ scale: :star_name,
26
+ field_circle: :planet,
27
+ deep_sky: :constellation_name
28
+ }.freeze
29
+
30
+ Theme = Data.define(*required_colors, *optional_colors.keys) do
31
+ const_set(:OPTIONAL_COLORS, optional_colors)
32
+
33
+ def self.check_fallbacks(optional, required)
34
+ optional.each do |slot, fallback|
35
+ next if required.include?(fallback)
36
+
37
+ raise ArgumentError,
38
+ "#{slot} must fall back to a required slot, not #{fallback.inspect}"
39
+ end
40
+ end
41
+
42
+ check_fallbacks(optional_colors, required_colors)
43
+
44
+ prepend(Module.new {
45
+ optional_colors.each do |slot, fallback|
46
+ define_method(slot) { super() || public_send(fallback) }
47
+ end
48
+ })
49
+
23
50
  def self.dark
24
51
  new(
25
52
  background: "none",
@@ -29,6 +56,7 @@ module Skymap
29
56
  constellation_line: "#46689c",
30
57
  boundary: "#2b3f5e",
31
58
  ecliptic: "#8c7a3a",
59
+ grid: "#22324a",
32
60
  planet: "#ffe6b3",
33
61
  sun: "#ffd34d",
34
62
  moon: "#f1ecd6",
@@ -51,6 +79,7 @@ module Skymap
51
79
  constellation_line: "#5b7bb0",
52
80
  boundary: "#b8c4d9",
53
81
  ecliptic: "#b08d1f",
82
+ grid: "#d5ddea",
54
83
  planet: "#c2570c",
55
84
  sun: "#f0a500",
56
85
  moon: "#e8d27a",
@@ -73,6 +102,7 @@ module Skymap
73
102
  constellation_line: "#8a2020",
74
103
  boundary: "#4a1212",
75
104
  ecliptic: "#a33a1a",
105
+ grid: "#3a0e0e",
76
106
  planet: "#ff9a7a",
77
107
  sun: "#ff8a3d",
78
108
  moon: "#ffb3a0",
@@ -87,14 +117,18 @@ module Skymap
87
117
  end
88
118
 
89
119
  def initialize(**slots)
120
+ optional = self.class::OPTIONAL_COLORS
121
+
90
122
  slots.except(:moon_shadow_opacity).each do |slot, value|
123
+ next if value.nil? && optional.key?(slot)
124
+
91
125
  check_text(slot, value)
92
126
  end
93
127
  if slots.key?(:moon_shadow_opacity)
94
128
  check_opacity(slots[:moon_shadow_opacity])
95
129
  end
96
130
 
97
- super
131
+ super(**optional.transform_values { nil }, **slots)
98
132
  end
99
133
 
100
134
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Skymap
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Skymap
4
+ View = Data.define(
5
+ :center,
6
+ :field_of_view,
7
+ :orientation,
8
+ :rotation,
9
+ :mirrored
10
+ ) do
11
+ def initialize(
12
+ center:,
13
+ field_of_view:,
14
+ orientation: :zenith_up,
15
+ rotation: Astronoby::Angle.zero,
16
+ mirrored: false
17
+ )
18
+ unless center.is_a?(Astronoby::Coordinates::Equatorial) ||
19
+ center.is_a?(Astronoby::Coordinates::Horizontal)
20
+ raise ArgumentError,
21
+ "center must be equatorial or horizontal coordinates"
22
+ end
23
+
24
+ unless field_of_view.is_a?(Astronoby::Angle) &&
25
+ field_of_view.positive? && field_of_view.radians <= Math::PI
26
+ raise ArgumentError,
27
+ "field_of_view must be an Astronoby::Angle " \
28
+ "above 0 and up to 180 degrees"
29
+ end
30
+
31
+ unless View::ORIENTATIONS.include?(orientation)
32
+ raise ArgumentError,
33
+ "orientation must be one of #{View::ORIENTATIONS.join(", ")}"
34
+ end
35
+
36
+ unless rotation.is_a?(Astronoby::Angle) && rotation.radians.finite?
37
+ raise ArgumentError, "rotation must be an Astronoby::Angle"
38
+ end
39
+
40
+ unless [true, false].include?(mirrored)
41
+ raise ArgumentError, "mirrored must be true or false"
42
+ end
43
+
44
+ super
45
+ end
46
+ end
47
+
48
+ View::ORIENTATIONS = %i[zenith_up equatorial].freeze
49
+ end
data/lib/skymap.rb CHANGED
@@ -6,39 +6,63 @@ require_relative "skymap/canvas"
6
6
  require_relative "skymap/catalog/constellation_boundaries"
7
7
  require_relative "skymap/catalog/constellation_lines"
8
8
  require_relative "skymap/catalog/constellation_names"
9
+ require_relative "skymap/catalog/deep_sky_objects"
9
10
  require_relative "skymap/catalog/star_names"
11
+ require_relative "skymap/catalog/star_records"
10
12
  require_relative "skymap/catalog/stars"
11
13
  require_relative "skymap/chart"
14
+ require_relative "skymap/cone"
12
15
  require_relative "skymap/constellation_boundary"
13
16
  require_relative "skymap/constellation_line"
14
17
  require_relative "skymap/context"
18
+ require_relative "skymap/deep_sky_object"
19
+ require_relative "skymap/eyepiece"
20
+ require_relative "skymap/field"
21
+ require_relative "skymap/geometry"
15
22
  require_relative "skymap/horizon"
23
+ require_relative "skymap/label_placement"
24
+ require_relative "skymap/magnitude_limit"
16
25
  require_relative "skymap/layers/cardinal_directions"
17
26
  require_relative "skymap/layers/constellation_boundaries"
18
27
  require_relative "skymap/layers/constellation_lines"
19
28
  require_relative "skymap/layers/constellation_names"
29
+ require_relative "skymap/layers/deep_sky_objects"
20
30
  require_relative "skymap/layers/ecliptic"
31
+ require_relative "skymap/layers/field_circles"
32
+ require_relative "skymap/layers/grid"
21
33
  require_relative "skymap/layers/moon"
22
34
  require_relative "skymap/layers/planets"
35
+ require_relative "skymap/layers/scale"
23
36
  require_relative "skymap/layers/star_names"
24
37
  require_relative "skymap/layers/stars"
25
38
  require_relative "skymap/layers/sun"
26
39
  require_relative "skymap/point"
40
+ require_relative "skymap/print_size"
41
+ require_relative "skymap/projection/oblique_stereographic"
27
42
  require_relative "skymap/projection/stereographic"
28
43
  require_relative "skymap/renderer/boundary"
29
44
  require_relative "skymap/renderer/caption"
45
+ require_relative "skymap/renderer/deep_sky_symbol"
30
46
  require_relative "skymap/renderer/dot"
31
47
  require_relative "skymap/renderer/ecliptic"
48
+ require_relative "skymap/renderer/field_circle"
49
+ require_relative "skymap/renderer/grid"
50
+ require_relative "skymap/renderer/horizon_line"
32
51
  require_relative "skymap/renderer/label"
33
52
  require_relative "skymap/renderer/line"
34
53
  require_relative "skymap/renderer/moon"
35
54
  require_relative "skymap/renderer/planet"
55
+ require_relative "skymap/renderer/scale_bar"
36
56
  require_relative "skymap/renderer/sun"
37
57
  require_relative "skymap/renderer/svg"
58
+ require_relative "skymap/setup"
38
59
  require_relative "skymap/star"
60
+ require_relative "skymap/star_list"
39
61
  require_relative "skymap/star_size"
62
+ require_relative "skymap/telescope"
40
63
  require_relative "skymap/theme"
41
64
  require_relative "skymap/version"
65
+ require_relative "skymap/view"
42
66
 
43
67
  module Skymap
44
68
  class Error < StandardError; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skymap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rémy Hannequin
@@ -145,52 +145,81 @@ files:
145
145
  - CHANGELOG.md
146
146
  - LICENSE.txt
147
147
  - README.md
148
+ - data/LICENSE-deep_sky_objects.txt
149
+ - data/LICENSE-stars.txt
148
150
  - data/constellations/iau/boundaries.csv
149
151
  - data/constellations/iau/lines.csv
150
152
  - data/constellations/iau/names.csv
153
+ - data/deep_sky_objects.csv
151
154
  - data/star_names.csv
152
- - data/stars.csv
155
+ - data/stars.bin
153
156
  - lib/skymap.rb
154
157
  - lib/skymap/canvas.rb
155
158
  - lib/skymap/catalog/constellation_boundaries.rb
156
159
  - lib/skymap/catalog/constellation_lines.rb
157
160
  - lib/skymap/catalog/constellation_names.rb
161
+ - lib/skymap/catalog/deep_sky_objects.rb
158
162
  - lib/skymap/catalog/star_names.rb
163
+ - lib/skymap/catalog/star_records.rb
159
164
  - lib/skymap/catalog/stars.rb
160
165
  - lib/skymap/chart.rb
166
+ - lib/skymap/cone.rb
161
167
  - lib/skymap/constellation_boundary.rb
162
168
  - lib/skymap/constellation_line.rb
163
169
  - lib/skymap/context.rb
170
+ - lib/skymap/deep_sky_object.rb
171
+ - lib/skymap/eyepiece.rb
172
+ - lib/skymap/field.rb
173
+ - lib/skymap/geometry.rb
164
174
  - lib/skymap/horizon.rb
175
+ - lib/skymap/label_placement.rb
165
176
  - lib/skymap/layers/cardinal_directions.rb
166
177
  - lib/skymap/layers/constellation_boundaries.rb
167
178
  - lib/skymap/layers/constellation_lines.rb
168
179
  - lib/skymap/layers/constellation_names.rb
180
+ - lib/skymap/layers/deep_sky_objects.rb
169
181
  - lib/skymap/layers/ecliptic.rb
182
+ - lib/skymap/layers/field_circles.rb
183
+ - lib/skymap/layers/grid.rb
170
184
  - lib/skymap/layers/moon.rb
171
185
  - lib/skymap/layers/planets.rb
186
+ - lib/skymap/layers/scale.rb
172
187
  - lib/skymap/layers/star_names.rb
173
188
  - lib/skymap/layers/stars.rb
174
189
  - lib/skymap/layers/sun.rb
190
+ - lib/skymap/magnitude_limit.rb
175
191
  - lib/skymap/point.rb
192
+ - lib/skymap/print_size.rb
193
+ - lib/skymap/projection/oblique_stereographic.rb
176
194
  - lib/skymap/projection/stereographic.rb
177
195
  - lib/skymap/renderer/boundary.rb
178
196
  - lib/skymap/renderer/caption.rb
197
+ - lib/skymap/renderer/deep_sky_symbol.rb
179
198
  - lib/skymap/renderer/dot.rb
180
199
  - lib/skymap/renderer/ecliptic.rb
200
+ - lib/skymap/renderer/field_circle.rb
201
+ - lib/skymap/renderer/grid.rb
202
+ - lib/skymap/renderer/horizon_line.rb
181
203
  - lib/skymap/renderer/label.rb
182
204
  - lib/skymap/renderer/line.rb
183
205
  - lib/skymap/renderer/moon.rb
184
206
  - lib/skymap/renderer/planet.rb
207
+ - lib/skymap/renderer/scale_bar.rb
185
208
  - lib/skymap/renderer/sun.rb
186
209
  - lib/skymap/renderer/svg.rb
210
+ - lib/skymap/setup.rb
187
211
  - lib/skymap/star.rb
212
+ - lib/skymap/star_list.rb
188
213
  - lib/skymap/star_size.rb
214
+ - lib/skymap/telescope.rb
189
215
  - lib/skymap/theme.rb
190
216
  - lib/skymap/version.rb
217
+ - lib/skymap/view.rb
191
218
  homepage: https://github.com/rhannequin/skymap
192
219
  licenses:
193
220
  - MIT
221
+ - CC-BY-SA-4.0
222
+ - LicenseRef-CC-BY-NC-3.0-IGO
194
223
  metadata:
195
224
  allowed_push_host: https://rubygems.org
196
225
  source_code_uri: https://github.com/rhannequin/skymap