ruby-gr 0.0.25 → 0.0.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -14
- data/lib/gr.rb +104 -11
- data/lib/gr/ffi.rb +3 -0
- data/lib/gr/plot.rb +40 -14
- data/lib/gr3.rb +6 -0
- data/lib/gr3/ffi.rb +2 -0
- data/lib/gr_commons/define_methods.rb +2 -2
- data/lib/gr_commons/jupyter_support.rb +2 -2
- data/lib/gr_commons/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd24ca7e167933c74ba77c3185be37e322665f41c4e94d547789d28f7b282d7a
|
4
|
+
data.tar.gz: a3f53215287be5208e2217bc83fc033030aa2067cb438e46343b85b33357adab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f661c8aa91cb27046f66590643a372391c5d9fa1703146b891137f1a0639c3671243679d4f14697e304e737d17408a5c880c8e2399278285b02fddfe08a18e8a
|
7
|
+
data.tar.gz: 32945088f9c0cbf22a8525c36f0dd527fcd5d81a763986a334736331b1d0ad9013d9f6b89a3202118427a85021b261bd0b35caad6690d38e8969efe0299c7c60
|
data/README.md
CHANGED
@@ -34,13 +34,13 @@ gem install ruby-gr
|
|
34
34
|
```
|
35
35
|
Note: If you are using [RubyInstaller](https://rubyinstaller.org/) (Windows), pacman will automatically install [mingw-w64-gr](https://packages.msys2.org/base/mingw-w64-gr).
|
36
36
|
|
37
|
-
Set environment variable `GRDIR`.
|
37
|
+
Set environment variable `GRDIR`.
|
38
38
|
|
39
39
|
```sh
|
40
40
|
export GRDIR="/your/path/to/gr"
|
41
41
|
```
|
42
42
|
|
43
|
-
If you use package managers to install GR, [pkg-config](https://github.com/ruby-gnome/pkg-config) may automatically detect the shared library location without specifying the `GRDIR` environment variable.
|
43
|
+
If you use package managers to install GR, [pkg-config](https://github.com/ruby-gnome/pkg-config) may automatically detect the shared library location without specifying the `GRDIR` environment variable.
|
44
44
|
|
45
45
|
## Quick Start
|
46
46
|
|
@@ -79,7 +79,7 @@ GR.plot(
|
|
79
79
|
)
|
80
80
|
```
|
81
81
|
|
82
|
-
Save in PNG format.
|
82
|
+
Save the figure in PNG format.
|
83
83
|
|
84
84
|
```ruby
|
85
85
|
GR.savefig("figure.png")
|
@@ -87,17 +87,17 @@ GR.savefig("figure.png")
|
|
87
87
|
|
88
88
|
## API Overview
|
89
89
|
|
90
|
-
There are two different approaches
|
90
|
+
There are two different approaches when plotting with GR.rb. One is to call Matlab-like APIs. The other is to call GR/GR3 native functions.
|
91
91
|
|
92
|
-
#### GR::Plot - A simple, matlab-style API.
|
92
|
+
#### GR::Plot - A simple, matlab-style API.
|
93
93
|
|
94
94
|
```ruby
|
95
95
|
require 'gr/plot'
|
96
96
|
GR.plot(x, y)
|
97
97
|
```
|
98
98
|
|
99
|
-
|
100
|
-
Some GR module methods are
|
99
|
+
Below are a list of available functions. See [GR.rb Wiki](https://github.com/red-data-tools/GR.rb/wiki) for details.
|
100
|
+
Some GR module methods are overwritten.
|
101
101
|
|
102
102
|
[`plot`](../../wiki/Plotting-functions#plot)
|
103
103
|
[`step`](../../wiki/Plotting-functions#step)
|
@@ -123,7 +123,7 @@ Some GR module methods are overridden.
|
|
123
123
|
[`imshow`](../../wiki/Plotting-functions#imshow)
|
124
124
|
[`isosurface`](../../wiki/Plotting-functions#isosurface)
|
125
125
|
|
126
|
-
We are
|
126
|
+
We are preparing a [more object-oriented interface](https://github.com/kojix2/GRUtils.rb) based on [GRUtils.jl](https://github.com/heliosdrm/GRUtils.jl) in the future.
|
127
127
|
|
128
128
|
#### GR - A module for calling native GR functions.
|
129
129
|
|
@@ -154,7 +154,7 @@ GR3.cameralookat(-3, 2, -2, 0, 0, 0, 0, 0, -1)
|
|
154
154
|
- [GR Framework](https://gr-framework.org/)
|
155
155
|
- [GR.rb API Documentation](https://rubydoc.info/gems/ruby-gr)
|
156
156
|
|
157
|
-
Although GR.rb adds methods dynamically, we try our best to provide a complete yard document.
|
157
|
+
Although GR.rb adds methods dynamically, we try our best to provide a complete yard document. If you want to see more up-to-date information, we recommend using the official GR reference.
|
158
158
|
|
159
159
|
## GR Installation
|
160
160
|
|
@@ -168,24 +168,45 @@ Set environment variable GRDIR.
|
|
168
168
|
export GRDIR="your/path/to/gr"
|
169
169
|
```
|
170
170
|
|
171
|
-
* macOS Catalina and macOS Mojave: See the "How to open an app that hasn’t been notarized or is from an unidentified developer" section
|
171
|
+
* macOS Catalina and macOS Mojave: See the "How to open an app that hasn’t been notarized or is from an unidentified developer" section under [Safely open apps on your Mac](https://support.apple.com/en-us/HT202491) in the Apple documentation.
|
172
172
|
|
173
173
|
### Using package managers
|
174
174
|
|
175
175
|
* The third party GR packages for Mac, Linux and Windows are available (for advanced users).
|
176
176
|
* If you find any problem, please report the issue [here](https://github.com/red-data-tools/GR.rb/issues).
|
177
|
-
* Note: These packages may not have some features
|
177
|
+
* Note: These packages may not have some features such as video output.
|
178
178
|
|
179
179
|
#### Mac - Homebrew
|
180
180
|
|
181
181
|
```sh
|
182
182
|
brew install libgr
|
183
|
+
# brew install --build-from-source libgr
|
183
184
|
```
|
184
185
|
|
185
|
-
|
186
|
+
|
187
|
+
#### Linux - APT
|
186
188
|
|
187
189
|
[packages.red-data-tools.org](https://github.com/red-data-tools/packages.red-data-tools.org) provides `libgr-dev`, `libgr3-dev` and `libgrm-dev`
|
188
190
|
|
191
|
+
Debian GNU/Linux and Ubuntu
|
192
|
+
|
193
|
+
```sh
|
194
|
+
sudo apt install -y -V ca-certificates lsb-release wget
|
195
|
+
wget https://packages.red-data-tools.org/$(lsb_release --id --short | tr 'A-Z' 'a-z')/red-data-tools-apt-source-latest-$(lsb_release --codename --short).deb
|
196
|
+
sudo apt install -y -V ./red-data-tools-apt-source-latest-$(lsb_release --codename --short).deb
|
197
|
+
sudo apt update
|
198
|
+
sudo apt install libgrm-dev
|
199
|
+
```
|
200
|
+
|
201
|
+
#### Linux - Yum
|
202
|
+
|
203
|
+
CentOS
|
204
|
+
|
205
|
+
```sh
|
206
|
+
(. /etc/os-release && sudo dnf install -y https://packages.red-data-tools.org/centos/${VERSION_ID}/red-data-tools-release-latest.noarch.rpm)
|
207
|
+
sudo dnf install -y gr-devel
|
208
|
+
```
|
209
|
+
|
189
210
|
### Windows - MSYS2
|
190
211
|
|
191
212
|
If you are using Rubyinstaller, pacman will automatically install [mingw-w64-gr](https://packages.msys2.org/base/mingw-w64-gr) when the gem is installed.
|
@@ -196,7 +217,7 @@ GR.rb will be the default backend for [Charty](https://github.com/red-data-tools
|
|
196
217
|
|
197
218
|
## Contributing
|
198
219
|
|
199
|
-
GR.rb is a library under development, so even small improvements like
|
220
|
+
GR.rb is a library under development, so even small improvements like fixing typos are welcome!
|
200
221
|
Please feel free to send us your PR.
|
201
222
|
|
202
223
|
* [Report bugs](https://github.com/red-data-tools/GR.rb/issues)
|
@@ -209,4 +230,3 @@ Please feel free to send us your PR.
|
|
209
230
|
## Acknowledgements
|
210
231
|
|
211
232
|
We would like to thank Josef Heinen, the creator of [GR](https://github.com/sciapp/gr) and [GR.jl](https://github.com/jheinen/GR.jl), Florian Rhiem, the creator of [python-gr](https://github.com/sciapp/python-gr), and all [GR](https://github.com/sciapp/gr) developers.
|
212
|
-
|
data/lib/gr.rb
CHANGED
@@ -175,30 +175,56 @@ module GR
|
|
175
175
|
# Draw a polyline using the current line attributes,
|
176
176
|
# starting from the first data point and ending at the last data point.
|
177
177
|
#
|
178
|
-
# @param x
|
179
|
-
# @param y
|
178
|
+
# @param x [Array, NArray] A list containing the X coordinates
|
179
|
+
# @param y [Array, NArray] A list containing the Y coordinates
|
180
|
+
# @param linewidth [Array, NArray, Numeric] A list containing the line widths
|
181
|
+
# @param line_z [Array, NArray] A list to be converted to colors
|
180
182
|
#
|
181
183
|
# The values for x and y are in world coordinates.
|
182
184
|
# The attributes that control the appearance of a polyline are linetype,
|
183
185
|
# linewidth and color index.
|
184
186
|
#
|
185
|
-
def polyline(x, y)
|
187
|
+
def polyline(x, y, linewidth = nil, line_z = nil)
|
188
|
+
# GR.jl - Multiple dispatch
|
186
189
|
n = equal_length(x, y)
|
187
|
-
|
190
|
+
if linewidth.nil? && line_z.nil?
|
191
|
+
super(n, x, y)
|
192
|
+
else
|
193
|
+
linewidth = Array.new(n, linewidth) if linewidth.is_a?(Numeric)
|
194
|
+
linewidth.map! { |i| (100 * i).round }
|
195
|
+
line_z ||= Array.new(n, 0)
|
196
|
+
raise ArgumentError if n != equal_length(linewidth, line_z)
|
197
|
+
|
198
|
+
color = to_rgb_color(line_z)
|
199
|
+
gdp(x, y, GDP_DRAW_LINES, linewidth.zip(color).flatten)
|
200
|
+
end
|
188
201
|
end
|
189
202
|
|
190
203
|
# Draw marker symbols centered at the given data points.
|
191
204
|
#
|
192
|
-
# @param x
|
193
|
-
# @param y
|
205
|
+
# @param x [Array, NArray] A list containing the X coordinates
|
206
|
+
# @param y [Array, NArray] A list containing the Y coordinates
|
207
|
+
# @param markersize [Array, NArray, Numeric] A list containing the marker sizes
|
208
|
+
# @param marker_z [Array, NArray] A list to be converted to colors
|
194
209
|
#
|
195
210
|
# The values for x and y are in world coordinates.
|
196
211
|
# The attributes that control the appearance of a polymarker are marker type,
|
197
212
|
# marker size scale factor and color index.
|
198
213
|
#
|
199
|
-
def polymarker(x, y)
|
214
|
+
def polymarker(x, y, markersize = nil, marker_z = nil)
|
215
|
+
# GR.jl - Multiple dispatch
|
200
216
|
n = equal_length(x, y)
|
201
|
-
|
217
|
+
if markersize.nil? && marker_z.nil?
|
218
|
+
super(n, x, y)
|
219
|
+
else
|
220
|
+
markersize = Array.new(n, markersize) if markersize.is_a?(Numeric)
|
221
|
+
markersize.map! { |i| (100 * i).round }
|
222
|
+
marker_z ||= Array.new(n, 0)
|
223
|
+
raise ArgumentError if n != equal_length(markersize, marker_z)
|
224
|
+
|
225
|
+
color = to_rgb_color(marker_z)
|
226
|
+
gdp(x, y, GDP_DRAW_MARKERS, markersize.zip(color).flatten)
|
227
|
+
end
|
202
228
|
end
|
203
229
|
|
204
230
|
# Draw a text at position `x`, `y` using the current text attributes.
|
@@ -269,7 +295,9 @@ module GR
|
|
269
295
|
def nonuniformcellarray(x, y, dimx, dimy, color)
|
270
296
|
raise ArgumentError unless x.length == dimx + 1 && y.length == dimy + 1
|
271
297
|
|
272
|
-
|
298
|
+
nx = dimx == x.length ? -dimx : dimx
|
299
|
+
ny = dimy == y.length ? -dimy : dimy
|
300
|
+
super(x, y, nx, ny, 1, 1, dimx, dimy, int(color))
|
273
301
|
end
|
274
302
|
|
275
303
|
# Display a two dimensional color index array mapped to a disk using polar
|
@@ -318,6 +346,27 @@ module GR
|
|
318
346
|
super(x_org, y_org, phimin, phimax, rmin, rmax, dimphi, dimr, 1, 1, dimphi, dimr, int(color))
|
319
347
|
end
|
320
348
|
|
349
|
+
# Display a two dimensional color index array mapped to a disk using polar
|
350
|
+
# coordinates with nonuniform cell sizes.
|
351
|
+
#
|
352
|
+
# @param phi [Array, NArray] array with the angles of the disk sector in degrees
|
353
|
+
# @param r [Array, NArray] array with the radii of the disk in world coordinates
|
354
|
+
# @param ncol [Integer] total number of columns in the color index array and the angle array
|
355
|
+
# @param nrow [Integer] total number of rows in the color index array and the radii array
|
356
|
+
# @param color [Integer] color index array
|
357
|
+
#
|
358
|
+
# The mapping of the polar coordinates and the drawing is performed simialr
|
359
|
+
# to `gr_polarcellarray` with the difference that the individual cell sizes
|
360
|
+
# are specified allowing nonuniform sized cells.
|
361
|
+
#
|
362
|
+
def nonuniformpolarcellarray(phi, r, ncol, nrow, color)
|
363
|
+
raise ArgumentError unless (ncol..(ncol + 1)).include?(phi.length) && (nrow..(nrow + 1)).include?(r.length)
|
364
|
+
|
365
|
+
dimphi = ncol == phi.length ? -ncol : ncol
|
366
|
+
dimr = nrow == r.length ? -nrow : nrow
|
367
|
+
super(0, 0, phi, r, dimphi, dimr, 1, 1, ncol, nrow, int(color))
|
368
|
+
end
|
369
|
+
|
321
370
|
# Generates a generalized drawing primitive (GDP) of the type you specify,
|
322
371
|
# using specified points and any additional information contained in a data
|
323
372
|
# record.
|
@@ -330,7 +379,7 @@ module GR
|
|
330
379
|
def gdp(x, y, primid, datrec)
|
331
380
|
n = equal_length(x, y)
|
332
381
|
ldr = datrec.length
|
333
|
-
super(n, x, y, primid, ldr, datrec)
|
382
|
+
super(n, x, y, primid, ldr, int(datrec))
|
334
383
|
end
|
335
384
|
|
336
385
|
# Generate a cubic spline-fit,
|
@@ -1423,7 +1472,15 @@ module GR
|
|
1423
1472
|
# * .webm : WebM video file
|
1424
1473
|
# * .ogg : Ogg video file
|
1425
1474
|
#
|
1426
|
-
#
|
1475
|
+
# @note Ruby feature - you can use block to call endprint automatically.
|
1476
|
+
|
1477
|
+
def beginprint(file_path)
|
1478
|
+
super(file_path)
|
1479
|
+
if block_given?
|
1480
|
+
yield
|
1481
|
+
endprint
|
1482
|
+
end
|
1483
|
+
end
|
1427
1484
|
|
1428
1485
|
# Open and activate a print device with the given layout attributes.
|
1429
1486
|
#
|
@@ -2014,6 +2071,18 @@ module GR
|
|
2014
2071
|
super(n, x, y, codes)
|
2015
2072
|
end
|
2016
2073
|
|
2074
|
+
# @param z [Array, NArray]
|
2075
|
+
# @return [Array, NArray]
|
2076
|
+
def to_rgb_color(z)
|
2077
|
+
zmin, zmax = z.minmax
|
2078
|
+
return Array.new(z.length, 0) if zmax == zmin
|
2079
|
+
|
2080
|
+
z.map do |i|
|
2081
|
+
zi = (i - zmin) / (zmax - zmin).to_f
|
2082
|
+
inqcolor(1000 + (zi * 255).round)
|
2083
|
+
end
|
2084
|
+
end
|
2085
|
+
|
2017
2086
|
# Define the border width of subsequent path output primitives.
|
2018
2087
|
#
|
2019
2088
|
# @param width [Numeric] The border width scale factor
|
@@ -2034,6 +2103,12 @@ module GR
|
|
2034
2103
|
inquiry_int { |pt| super(pt) }
|
2035
2104
|
end
|
2036
2105
|
|
2106
|
+
# @!method selectclipxform
|
2107
|
+
|
2108
|
+
def inqclipxform
|
2109
|
+
inquiry_int { |pt| super(pt) }
|
2110
|
+
end
|
2111
|
+
|
2037
2112
|
# Set the projection type with this flag.
|
2038
2113
|
#
|
2039
2114
|
# @param flag [Integer] projection type
|
@@ -2190,6 +2265,20 @@ module GR
|
|
2190
2265
|
super(encoding)
|
2191
2266
|
end
|
2192
2267
|
end
|
2268
|
+
|
2269
|
+
# Load a font file from a given filename.
|
2270
|
+
#
|
2271
|
+
# This function loads a font from a given absolute filename and assigns a
|
2272
|
+
# font index to it. To use the loaded font call `gr_settextfontprec` using
|
2273
|
+
# the resulting font index and precision 3.
|
2274
|
+
#
|
2275
|
+
# @param filename [String] The absolute filename of the font
|
2276
|
+
#
|
2277
|
+
def loadfont(str)
|
2278
|
+
inquiry_int do |font|
|
2279
|
+
super(str, font)
|
2280
|
+
end
|
2281
|
+
end
|
2193
2282
|
end
|
2194
2283
|
|
2195
2284
|
ASF_BUNDLED = 0
|
@@ -2398,6 +2487,10 @@ module GR
|
|
2398
2487
|
PATH_CURVE4 = 0x04
|
2399
2488
|
PATH_CLOSEPOLY = 0x4f
|
2400
2489
|
|
2490
|
+
GDP_DRAW_PATH = 1
|
2491
|
+
GDP_DRAW_LINES = 2
|
2492
|
+
GDP_DRAW_MARKERS = 3
|
2493
|
+
|
2401
2494
|
MPL_SUPPRESS_CLEAR = 1
|
2402
2495
|
MPL_POSTPONE_UPDATE = 2
|
2403
2496
|
|
data/lib/gr/ffi.rb
CHANGED
@@ -184,6 +184,8 @@ module GR
|
|
184
184
|
try_extern 'void gr_inqborderwidth(double *)'
|
185
185
|
try_extern 'void gr_setbordercolorind(int)'
|
186
186
|
try_extern 'void gr_inqbordercolorind(int *)'
|
187
|
+
try_extern 'void gr_selectclipxform(int)'
|
188
|
+
try_extern 'void gr_inqclipxform(int *);'
|
187
189
|
try_extern 'void gr_setprojectiontype(int)'
|
188
190
|
try_extern 'void gr_inqprojectiontype(int *)'
|
189
191
|
try_extern 'void gr_setperspectiveprojection(double, double, double)'
|
@@ -204,6 +206,7 @@ module GR
|
|
204
206
|
try_extern 'void gr_inqtext3d(double, double, double, char *, int axis, double *, double *)'
|
205
207
|
try_extern 'void gr_settextencoding(int)'
|
206
208
|
try_extern 'void gr_inqtextencoding(int *)'
|
209
|
+
try_extern 'void gr_loadfont(char *, int *)'
|
207
210
|
# gr_setcallback(char *(*)(const char *));
|
208
211
|
end
|
209
212
|
end
|
data/lib/gr/plot.rb
CHANGED
@@ -33,8 +33,8 @@ module GR
|
|
33
33
|
# Plot kinds conform to GR.jl
|
34
34
|
PLOT_KIND = %i[line step scatter stem hist contour contourf hexbin heatmap
|
35
35
|
nonuniformheatmap wireframe surface plot3 scatter3 imshow
|
36
|
-
isosurface polar polarhist polarheatmap
|
37
|
-
volume].freeze
|
36
|
+
isosurface polar polarhist polarheatmap nonuniformpolarheatmap
|
37
|
+
trisurf tricont shade volume].freeze
|
38
38
|
|
39
39
|
# Keyword options conform to GR.jl.
|
40
40
|
KW_ARGS = %i[accelerate algorithm alpha ax backgroundcolor barwidth baseline
|
@@ -78,8 +78,7 @@ module GR
|
|
78
78
|
zapfchancery_mediumitalic: 130,
|
79
79
|
zapfdingbats: 131,
|
80
80
|
cmuserif_math: 232, # original: cmuserif-math
|
81
|
-
dejavusans: 233
|
82
|
-
pingfangsc: 234
|
81
|
+
dejavusans: 233
|
83
82
|
}.freeze
|
84
83
|
|
85
84
|
@last_plot = nil
|
@@ -159,7 +158,7 @@ module GR
|
|
159
158
|
vp3 + 0.925 * (vp4 - vp3)]
|
160
159
|
|
161
160
|
if %i[contour contourf hexbin heatmap nonuniformheatmap polarheatmap
|
162
|
-
surface trisurf volume].include?(kind)
|
161
|
+
nonuniformpolarheatmap surface trisurf volume].include?(kind)
|
163
162
|
viewport[1] -= 0.1
|
164
163
|
end
|
165
164
|
|
@@ -193,7 +192,7 @@ module GR
|
|
193
192
|
GR.restorestate
|
194
193
|
end
|
195
194
|
|
196
|
-
if %i[polar polarhist polarheatmap].include? kind
|
195
|
+
if %i[polar polarhist polarheatmap nonuniformpolarheatmap].include? kind
|
197
196
|
xmin, xmax, ymin, ymax = viewport
|
198
197
|
xcenter = 0.5 * (xmin + xmax)
|
199
198
|
ycenter = 0.5 * (ymin + ymax)
|
@@ -204,7 +203,7 @@ module GR
|
|
204
203
|
|
205
204
|
def set_window(kind)
|
206
205
|
scale = 0
|
207
|
-
unless %i[polar polarhist polarheatmap].include?(kind)
|
206
|
+
unless %i[polar polarhist polarheatmap nonuniformpolarheatmap].include?(kind)
|
208
207
|
scale |= GR::OPTION_X_LOG if kvs[:xlog]
|
209
208
|
scale |= GR::OPTION_Y_LOG if kvs[:ylog]
|
210
209
|
scale |= GR::OPTION_Z_LOG if kvs[:zlog]
|
@@ -223,7 +222,7 @@ module GR
|
|
223
222
|
end
|
224
223
|
|
225
224
|
major_count = if %i[wireframe surface plot3 scatter3 polar polarhist
|
226
|
-
polarheatmap trisurf volume].include?(kind)
|
225
|
+
polarheatmap nonuniformpolarheatmap trisurf volume].include?(kind)
|
227
226
|
2
|
228
227
|
else
|
229
228
|
5
|
@@ -301,7 +300,7 @@ module GR
|
|
301
300
|
end
|
302
301
|
|
303
302
|
kvs[:window] = xmin, xmax, ymin, ymax
|
304
|
-
if %i[polar polarhist polarheatmap].include?(kind)
|
303
|
+
if %i[polar polarhist polarheatmap nonuniformpolarheatmap].include?(kind)
|
305
304
|
GR.setwindow(-1, 1, -1, 1)
|
306
305
|
else
|
307
306
|
GR.setwindow(xmin, xmax, ymin, ymax)
|
@@ -622,7 +621,12 @@ module GR
|
|
622
621
|
font = FONTS[sym_name]
|
623
622
|
GR.settextfontprec(font, font > 200 ? 3 : 0)
|
624
623
|
else
|
625
|
-
|
624
|
+
font = GR.loadfont(name)
|
625
|
+
if font >= 0
|
626
|
+
GR.settextfontprec(font, 3)
|
627
|
+
else
|
628
|
+
warn "Unknown font name: #{name}"
|
629
|
+
end
|
626
630
|
end
|
627
631
|
else
|
628
632
|
# The following fonts are the default in GR.jl
|
@@ -636,7 +640,7 @@ module GR
|
|
636
640
|
set_window(kind)
|
637
641
|
if %i[polar polarhist].include?(kind)
|
638
642
|
draw_polar_axes
|
639
|
-
elsif !%i[imshow isosurface polarheatmap].include?(kind)
|
643
|
+
elsif !%i[imshow isosurface polarheatmap nonuniformpolarheatmap].include?(kind)
|
640
644
|
draw_axes(kind)
|
641
645
|
end
|
642
646
|
end
|
@@ -757,7 +761,7 @@ module GR
|
|
757
761
|
GR.fillarc(-ρ[i], ρ[i], -ρ[i], ρ[i], θ[i - 1], θ[i])
|
758
762
|
end
|
759
763
|
|
760
|
-
when :polarheatmap
|
764
|
+
when :polarheatmap, :nonuniformpolarheatmap
|
761
765
|
w, h = z.shape
|
762
766
|
cmap = colormap
|
763
767
|
cmin, cmax = kvs[:zrange]
|
@@ -766,7 +770,15 @@ module GR
|
|
766
770
|
data.reverse(axis: 1) if kvs[:yflip]
|
767
771
|
colors = data * 255 + 1000
|
768
772
|
colors = colors.transpose # Julia is column major
|
769
|
-
|
773
|
+
case kind
|
774
|
+
when :polarheatmap
|
775
|
+
GR.polarcellarray(0, 0, 0, 360, 0, 1, w, h, colors)
|
776
|
+
when :nonuniformpolarheatmap
|
777
|
+
ymax = y.max.to_f
|
778
|
+
ρ = y.map{|i| i / ymax}
|
779
|
+
θ = x.map { |i| i * 180 / Math::PI }
|
780
|
+
GR.nonuniformpolarcellarray(θ, ρ, w, h, colors)
|
781
|
+
end
|
770
782
|
draw_polar_axes
|
771
783
|
kvs[:zrange] = [cmin, cmax]
|
772
784
|
colorbar
|
@@ -1023,7 +1035,7 @@ module GR
|
|
1023
1035
|
|
1024
1036
|
def to_svg
|
1025
1037
|
## Need IRuby improvemend.
|
1026
|
-
GR.show(false) if ENV['
|
1038
|
+
GR.show(false) if ENV['GKS_WSTYPE'] == 'svg'
|
1027
1039
|
end
|
1028
1040
|
|
1029
1041
|
private
|
@@ -1285,6 +1297,20 @@ module GR
|
|
1285
1297
|
end
|
1286
1298
|
end
|
1287
1299
|
|
1300
|
+
# (Plot) Draw a nonuniformpolarheatmap.
|
1301
|
+
def nonuniformpolarheatmap(*args)
|
1302
|
+
# FIXME
|
1303
|
+
args, kv = format_xyzc(*args)
|
1304
|
+
_x, _y, z = args
|
1305
|
+
ysize, xsize = z.shape
|
1306
|
+
z = z.reshape(xsize, ysize)
|
1307
|
+
create_plot(:nonuniformpolarheatmap, kv) do |plt|
|
1308
|
+
plt.kvs[:xlim] ||= [0.5, xsize + 0.5]
|
1309
|
+
plt.kvs[:ylim] ||= [0.5, ysize + 0.5]
|
1310
|
+
plt.args = [[(1..xsize).to_a, (1..ysize).to_a, z, nil, '']]
|
1311
|
+
end
|
1312
|
+
end
|
1313
|
+
|
1288
1314
|
alias _contour_ contour
|
1289
1315
|
# (Plot) Draw a contour plot.
|
1290
1316
|
def contour(*args)
|
data/lib/gr3.rb
CHANGED
@@ -823,6 +823,7 @@ module GR3
|
|
823
823
|
IA_END_OF_LIST = 0
|
824
824
|
IA_FRAMEBUFFER_WIDTH = 1
|
825
825
|
IA_FRAMEBUFFER_HEIGHT = 2
|
826
|
+
IA_NUM_THREADS = 3
|
826
827
|
|
827
828
|
# Error
|
828
829
|
ERROR_NONE = 0
|
@@ -853,6 +854,11 @@ module GR3
|
|
853
854
|
DRAWABLE_OPENGL = 1
|
854
855
|
DRAWABLE_GKS = 2
|
855
856
|
|
857
|
+
# Projection
|
858
|
+
PROJECTION_PERSPECTIVE = 0
|
859
|
+
PROJECTION_PARALLEL = 1
|
860
|
+
PROJECTION_ORTHOGRAPHIC = 2
|
861
|
+
|
856
862
|
# SurfaceOption
|
857
863
|
SURFACE_DEFAULT = 0
|
858
864
|
SURFACE_NORMALS = 1
|
data/lib/gr3/ffi.rb
CHANGED
@@ -138,5 +138,7 @@ module GR3
|
|
138
138
|
# try_extern 'void gr3_drawtrianglesurface(int n, const float *triangles)'
|
139
139
|
try_extern 'void gr_volume(int nx, int ny, int nz, double *data, ' \
|
140
140
|
'int algorithm, double *dmin_ptr, double *dmax_ptr)'
|
141
|
+
try_extern 'void gr3_setorthographicprojection' \
|
142
|
+
'(float left, float right, float bottom, float top, float znear, float zfar)'
|
141
143
|
end
|
142
144
|
end
|
@@ -16,9 +16,9 @@ module GRCommons
|
|
16
16
|
args.map! do |arg|
|
17
17
|
case arg
|
18
18
|
when Array
|
19
|
-
|
19
|
+
GRCommonUtils.public_send(default_type, arg)
|
20
20
|
when ->(x) { defined?(Numo::NArray) && x.is_a?(Numo::NArray) }
|
21
|
-
|
21
|
+
GRCommonUtils.public_send(default_type, arg)
|
22
22
|
else
|
23
23
|
arg
|
24
24
|
end
|
@@ -8,7 +8,7 @@ module GRCommons
|
|
8
8
|
# Sets the environment variable when the module is extended.
|
9
9
|
def self.extended(_obj)
|
10
10
|
require 'tmpdir'
|
11
|
-
ENV['
|
11
|
+
ENV['GKS_WSTYPE'] = 'svg'
|
12
12
|
ENV['GKS_FILEPATH'] = Dir::Tmpname.create('plot-') {}
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ module GRCommons
|
|
16
16
|
def show(display = true)
|
17
17
|
emergencyclosegks
|
18
18
|
sleep 0.5
|
19
|
-
type = ENV['
|
19
|
+
type = ENV['GKS_WSTYPE']
|
20
20
|
case type
|
21
21
|
when 'svg'
|
22
22
|
data = File.read("#{ENV['GKS_FILEPATH']}.svg")
|
data/lib/gr_commons/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-gr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: histogram
|