ruby-grads 1.0.0 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,217 @@
1
+ #
2
+ #
3
+ # draw_xlab_time(dummy, offset: nil, skip: nil)
4
+ #
5
+ #
6
+ #
7
+ #
8
+
9
+ class GrADS::Command
10
+
11
+ def time_skip
12
+ ans = query("dims")
13
+ t1 = subwrd(sublin(ans, 5), 11).to_i
14
+ t2 = subwrd(sublin(ans, 5), 13).to_i
15
+ d1 = Time.parse(subwrd(sublin(ans, 5), 6).sub(/Z/," "))
16
+ d2 = Time.parse(subwrd(sublin(ans, 5), 8).sub(/Z/," "))
17
+ nt = t2 - t1 + 1
18
+ nd = (d2 - d1)/86400.0
19
+ dt = ((d2-d1)/(t2-t1)).round
20
+
21
+ type = nil
22
+ skip = nil
23
+
24
+ if nd <= 1
25
+ type = "day"
26
+ elsif nd <= 3
27
+ type = "3days"
28
+ elsif nd <= 7
29
+ type = "week"
30
+ elsif nd <= 14
31
+ type = "2weeks"
32
+ elsif nd <= 31
33
+ type = "month"
34
+ elsif nd <= 120
35
+ type = "season"
36
+ elsif nd <= 360
37
+ type = "year"
38
+ else
39
+ type = "years"
40
+ end
41
+
42
+ unless skip
43
+ case type
44
+ when "day"
45
+ skip = dt.to_i/3600
46
+ when "3days"
47
+ skip = 3*dt.to_i/3600
48
+ when "week"
49
+ skip = 6*dt.to_i/3600
50
+ when "2weeks"
51
+ skip = 12*dt.to_i/3600
52
+ when "month"
53
+ skip = 24*dt.to_i/3600
54
+ when "season"
55
+ skip = 3*24*dt.to_i/3600
56
+ when "year", "years"
57
+ skip = 10*24*dt.to_i/3600
58
+ end
59
+ end
60
+
61
+ return skip
62
+ end
63
+
64
+
65
+ def axis_xtime (dummy, offset: nil, skip: nil, &block)
66
+ puts ans = query("dims")
67
+ t1 = subwrd(sublin(ans, 5), 11).to_i
68
+ t2 = subwrd(sublin(ans, 5), 13).to_i
69
+ d1 = Time.parse(subwrd(sublin(ans, 5), 6).sub(/Z/," "))
70
+ d2 = Time.parse(subwrd(sublin(ans, 5), 8).sub(/Z/," "))
71
+ nt = t2 - t1 + 1
72
+ nd = (d2 - d1)/86400.0
73
+ dt = ((d2-d1)/(t2-t1)).round
74
+ time = CArray.object(nt).seq(d1,dt)
75
+
76
+ type = nil
77
+ skip = nil
78
+
79
+ if offset
80
+ time = time + offset
81
+ end
82
+
83
+ if nd <= 1
84
+ type = "day"
85
+ elsif nd <= 3
86
+ type = "3days"
87
+ elsif nd <= 7
88
+ type = "week"
89
+ elsif nd <= 14
90
+ type = "2weeks"
91
+ elsif nd <= 31
92
+ type = "month"
93
+ elsif nd <= 120
94
+ type = "season"
95
+ elsif nd <= 360
96
+ type = "year"
97
+ else
98
+ type = "years"
99
+ end
100
+
101
+ unless skip
102
+ case type
103
+ when "day"
104
+ skip = dt.to_i/3600
105
+ when "3days"
106
+ skip = 3*dt.to_i/3600
107
+ when "week"
108
+ skip = 6*dt.to_i/3600
109
+ when "2weeks"
110
+ skip = 12*dt.to_i/3600
111
+ when "month"
112
+ skip = 24*dt.to_i/3600
113
+ when "season"
114
+ skip = 3*24*dt.to_i/3600
115
+ when "year", "years"
116
+ skip = 10*24*dt.to_i/3600
117
+ end
118
+ end
119
+
120
+ xlabs = []
121
+ xlabs2 = []
122
+ flag = false
123
+
124
+ case type
125
+ when "day", "3days", "week"
126
+ hour0 = 0
127
+ time[[nil,skip]].each do |t|
128
+ if not flag
129
+ xlabs << t.strftime("%d%b%Y").upcase
130
+ flag = true
131
+ elsif hour0 > t.hour
132
+ xlabs << t.strftime("%d%b").upcase
133
+ else
134
+ xlabs << t.strftime("")
135
+ end
136
+ hour0 = t.hour
137
+ end
138
+ time[[nil,skip]].each do |t|
139
+ if nt > 73
140
+ if t.hour % 3 == 0
141
+ xlabs2 << t.strftime("%H")
142
+ end
143
+ else
144
+ xlabs2 << t.strftime("%H")
145
+ end
146
+ end
147
+ units = ["hour", "day"]
148
+ when "2weeks"
149
+ hour0 = 0
150
+ time[[nil,skip]].each do |t|
151
+ if not flag
152
+ xlabs << t.strftime("%d%b%Y").upcase
153
+ flag = true
154
+ elsif hour0 > t.hour
155
+ xlabs << t.strftime("%d").upcase
156
+ else
157
+ xlabs << t.strftime("")
158
+ end
159
+ hour0 = t.hour
160
+ end
161
+ time[[nil,skip]].each do |t|
162
+ if nt > 73
163
+ if t.hour % 3 == 0
164
+ xlabs2 << t.strftime("%H")
165
+ end
166
+ else
167
+ xlabs2 << t.strftime("%H")
168
+ end
169
+ end
170
+ units = ["hour", "day"]
171
+ when "month","season", "year"
172
+ day0 = 1
173
+ time[[nil,skip]].each do |t|
174
+ if not flag
175
+ xlabs << t.strftime("%d%b%Y").upcase
176
+ flag = true
177
+ elsif day0 > t.day
178
+ xlabs << t.strftime("%b").upcase
179
+ else
180
+ xlabs << t.strftime("")
181
+ end
182
+ day0 = t.day
183
+ end
184
+ time[[nil,skip]].each do |t|
185
+ if nt > 73
186
+ if t.hour % 3 == 0
187
+ xlabs2 << t.strftime("%d")
188
+ end
189
+ else
190
+ xlabs2 << t.strftime("%d")
191
+ end
192
+ end
193
+ units = ["day", "month"]
194
+ end
195
+
196
+ begin
197
+ axis_off
198
+ set :xlab, :on
199
+ set :xlabs, xlabs2.join(" | ")
200
+ set :xlpos, 0, :b
201
+
202
+ display_nothing(dummy)
203
+
204
+ axis_on
205
+ set :xlab, :on
206
+ set :xlabs, xlabs.join(" | ")
207
+ set :xlpos, -0.3, :b
208
+
209
+ display_nothing(dummy, &block)
210
+ ensure
211
+ set :xlpos, 0, b
212
+ end
213
+
214
+ return units
215
+ end
216
+
217
+ end
@@ -10,12 +10,6 @@ class GrADS::Command
10
10
 
11
11
  def setcpt (file)
12
12
  io = Kernel::open(file)
13
- while line = io.gets
14
- if line =~ /COLOR_MODEL\s*=\s*\+?(HSV|RGB)/
15
- model = $1
16
- break
17
- end
18
- end
19
13
  bgrb = nil
20
14
  frgb = nil
21
15
  list = []
@@ -24,12 +18,12 @@ class GrADS::Command
24
18
  when /\A[\#N]/
25
19
  next
26
20
  when /\AB\s/
27
- brgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
21
+ brgb = line.split(/[\s\/]+/)[1..3].map(&:to_f)
28
22
  when /\AF\s/
29
- frgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
23
+ frgb = line.split(/[\s\/]+/)[1..3].map(&:to_f)
30
24
  else
31
- list << line.lstrip.split(/\s+/)[0..3].map{|v| v.to_f}
32
- last = line.lstrip.split(/\s+/)[4..7].map{|v| v.to_f}
25
+ list << line.split(/[\s\/]+/)[0..3].map(&:to_f)
26
+ last = line.split(/[\s\/]+/)[4..7].map(&:to_f)
33
27
  end
34
28
  end
35
29
  list << last
@@ -38,48 +32,35 @@ class GrADS::Command
38
32
  ccols = []
39
33
  ic = 16
40
34
  if brgb
41
- if model == "HSV"
42
- set :rgb, ic, *_hsv2rgb(*brgb)
43
- else
44
- set :rgb, ic, *brgb
45
- end
35
+ set :rgb, ic, *brgb.map(&:round)
46
36
  ccols << ic
47
37
  else
48
- ccols << 0
38
+ ccols << -1
49
39
  end
50
40
  ic += 1
51
41
  list.each_with_index do |(v,r,g,b),i|
52
- if model == "HSV"
53
- set :rgb, i+ic, *_hsv2rgb(r, g, b)
54
- else
55
- set :rgb, i+ic, r, g, b
56
- end
42
+ set :rgb, i+ic, r.round, g.round, b.round
57
43
  clevs << v
58
44
  if ! frgb and i == list.size - 1
59
- ccols << 0
45
+ ccols << -1
60
46
  else
61
47
  ccols << i+ic
62
48
  end
63
49
  end
64
50
  ic += list.size - 1
65
51
  if frgb
66
- if model == "HSV"
67
- set :rgb, ic, *_hsv2rgb(*frgb)
68
- else
69
- set :rgb, ic, *frgb
70
- end
52
+ set :rgb, ic, *frgb.map(&:round)
71
53
  end
72
54
  set_clevs *clevs
73
55
  set_ccols *ccols
56
+ return clevs, ccols
74
57
  end
75
58
 
76
59
  def makecpt (*args)
77
- io = IO::popen("makecpt #{args.join(' ')}", "r")
78
- while line = io.gets
79
- if line =~ /COLOR_MODEL\s*=\s*\+?(HSV|RGB)/
80
- model = $1
81
- break
82
- end
60
+ begin
61
+ io = IO::popen("makecpt -Fr #{args.join(' ')}", "r")
62
+ rescue Errno::ENOENT
63
+ io = IO::popen("gmt makecpt -Fr #{args.join(' ')}", "r")
83
64
  end
84
65
  bgrb = nil
85
66
  frgb = nil
@@ -89,12 +70,12 @@ class GrADS::Command
89
70
  when /\A[\#N]/
90
71
  next
91
72
  when /\AB\s/
92
- brgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
73
+ brgb = line.split(/[\s\/]/)[1..3].map(&:to_f)
93
74
  when /\AF\s/
94
- frgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
75
+ frgb = line.split(/[\s\/]/)[1..3].map(&:to_f)
95
76
  else
96
- list << line.split(/\s+/)[0..3].map{|v| v.to_f}
97
- last = line.split(/\s+/)[4..7].map{|v| v.to_f}
77
+ list << line.split(/[\s\/]/)[0..3].map(&:to_f)
78
+ last = line.split(/[\s\/]/)[4..7].map(&:to_f)
98
79
  end
99
80
  end
100
81
  list << last
@@ -103,39 +84,28 @@ class GrADS::Command
103
84
  ccols = []
104
85
  ic = 16
105
86
  if brgb
106
- if model == "HSV"
107
- set :rgb, ic, *_hsv2rgb(*brgb)
108
- else
109
- set :rgb, ic, *brgb
110
- end
87
+ set :rgb, ic, *brgb.map(&:round)
111
88
  ccols << ic
112
89
  else
113
- ccols << 0
90
+ ccols << -1
114
91
  end
115
92
  ic += 1
116
93
  list.each_with_index do |(v,r,g,b),i|
117
- if model == "HSV"
118
- set :rgb, i+ic, *_hsv2rgb(r, g, b)
119
- else
120
- set :rgb, i+ic, r, g, b
121
- end
94
+ set :rgb, i+ic, r.round, g.round, b.round
122
95
  clevs << v
123
96
  if ! frgb and i == list.size - 1
124
- ccols << 0
97
+ ccols << -1
125
98
  else
126
99
  ccols << i+ic
127
100
  end
128
101
  end
129
102
  ic += list.size - 1
130
103
  if frgb
131
- if model == "HSV"
132
- set :rgb, ic, *_hsv2rgb(*frgb)
133
- else
134
- set :rgb, ic, *frgb
135
- end
104
+ set :rgb, ic, *frgb.map(&:round)
136
105
  end
137
106
  set_clevs *clevs
138
107
  set_ccols *ccols
108
+ return clevs, ccols
139
109
  end
140
110
 
141
111
  def _hsv2rgb(h, s, v)
data/lib/grads.rb CHANGED
@@ -9,3 +9,4 @@ require "grads/command"
9
9
  require "grads/lib/makecpt"
10
10
  require "grads/lib/colorbar"
11
11
  require "grads/lib/save_image"
12
+ require "grads/lib/axis_xtime"
data/ruby-grads.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
 
2
2
  Gem::Specification::new do |s|
3
- version = "1.0.0"
3
+ version = "1.0.7"
4
4
 
5
5
  files = Dir.glob("**/*") - [
6
- Dir.glob("carray*.gem"),
6
+ Dir.glob("ruby-grads*.gem"),
7
7
  ].flatten
8
8
 
9
9
  s.platform = Gem::Platform::RUBY
@@ -18,6 +18,6 @@ Gem::Specification::new do |s|
18
18
  s.homepage = 'https://github.com/himotoyoshi/ruby-grads'
19
19
  s.files = files
20
20
  # s.extensions = [ "extconf.rb" ]
21
- s.has_rdoc = false
21
+ s.executables << 'ncdef2ctl'
22
22
  s.required_ruby_version = ">= 1.8.1"
23
23
  end
@@ -0,0 +1,23 @@
1
+
2
+ Gem::Specification::new do |s|
3
+ version = "1.0.5"
4
+
5
+ files = Dir.glob("**/*") - [
6
+ Dir.glob("ruby-grads*.gem"),
7
+ ].flatten
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.name = "ruby-grads"
11
+ s.summary = "Library for driving GrADS from Ruby"
12
+ s.description = <<-HERE
13
+ Library for driving GrADS from Ruby
14
+ HERE
15
+ s.version = version
16
+ s.author = "Hiroki Motoyoshi"
17
+ s.email = ""
18
+ s.homepage = 'https://github.com/himotoyoshi/ruby-grads'
19
+ s.files = files
20
+ # s.extensions = [ "extconf.rb" ]
21
+ s.executables << 'ncdef2ctl'
22
+ s.required_ruby_version = ">= 1.8.1"
23
+ end
metadata CHANGED
@@ -1,31 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-grads
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroki Motoyoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: " Library for driving GrADS from Ruby\n"
14
14
  email: ''
15
- executables: []
15
+ executables:
16
+ - ncdef2ctl
16
17
  extensions: []
17
18
  extra_rdoc_files: []
18
19
  files:
19
20
  - README.md
21
+ - Rakefile
22
+ - bin/ncdef2ctl
20
23
  - extconf.rb
21
24
  - lib/grads.rb
25
+ - lib/grads/binary.rb
22
26
  - lib/grads/command.rb
23
27
  - lib/grads/gridded.rb
28
+ - lib/grads/lib/axis_xtime.rb
24
29
  - lib/grads/lib/colorbar.rb
25
30
  - lib/grads/lib/makecpt.rb
26
31
  - lib/grads/lib/save_image.rb
27
32
  - lib/grads/lib/xcbar_with_ccols.rb
28
33
  - ruby-grads.gemspec
34
+ - ruby-grads.gemspec~
29
35
  - test/gradsdraw.rb
30
36
  - test/test.rb
31
37
  homepage: https://github.com/himotoyoshi/ruby-grads
@@ -46,8 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  requirements: []
49
- rubyforge_project:
50
- rubygems_version: 2.7.7
55
+ rubygems_version: 3.1.2
51
56
  signing_key:
52
57
  specification_version: 4
53
58
  summary: Library for driving GrADS from Ruby