ruby-gr 0.0.11 → 0.0.12
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.
- checksums.yaml +4 -4
- data/README.md +20 -66
- data/lib/gr.rb +23 -0
- data/lib/gr/ffi.rb +182 -177
- data/lib/gr/plot.rb +69 -23
- data/lib/gr3.rb +4 -2
- data/lib/gr3/ffi.rb +57 -56
- data/lib/gr3/gr3base.rb +3 -1
- data/lib/gr_commons/extern.rb +11 -5
- data/lib/gr_commons/fiddley.rb +0 -2
- data/lib/gr_commons/jupyter_support.rb +8 -2
- data/lib/gr_commons/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f4e784e40e804964849c5c2f05a123b0d3e406ab7a13b7d04fd86585b5eb1c0
|
4
|
+
data.tar.gz: bc5d9cd4960f02a434d01a2d61543a06d663408a4cb26eb3717074fd9106735f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d82b0a46cfd56972908ba0f79132e38d98b707b440f19e9895cf3698bf9fd6eae7ef44ecee6859f11a057908918e642fc167f2f60f04eb7e96d91daae7bab2f
|
7
|
+
data.tar.gz: 1783d15a3ba35d762f7c0f53b56e042408a1e86b61924da0e4b49511564dee8961302646747ce4bd1ec9e18cb63f5c653dc2e4728636005b499dc18d8d11b75a
|
data/README.md
CHANGED
@@ -10,13 +10,15 @@
|
|
10
10
|
<img src="https://user-images.githubusercontent.com/5798442/70857099-13d57600-1f2c-11ea-8f3c-7d81065f13a5.png">
|
11
11
|
</p>
|
12
12
|
|
13
|
-
:bar_chart: [GR framework](https://github.com/sciapp/gr) - the graphics library for
|
13
|
+
:bar_chart: [GR framework](https://github.com/sciapp/gr) - the graphics library for visualization - for Ruby
|
14
14
|
|
15
15
|
## Installation
|
16
|
+
|
16
17
|
GR.rb supports Ruby 2.4+.
|
17
18
|
|
18
|
-
Install
|
19
|
-
|
19
|
+
[Install GR](#gr-installation).
|
20
|
+
|
21
|
+
Set environment variable GRDIR, if you have not already done.
|
20
22
|
|
21
23
|
```sh
|
22
24
|
export GRDIR="/your/path/to/gr"
|
@@ -46,79 +48,31 @@ GR.plot(x, y)
|
|
46
48
|
```
|
47
49
|
|
48
50
|
## Examples
|
49
|
-
Have a look in the [`examples`](https://github.com/red-data-tools/GR.rb/tree/master/examples) directory for some simple examples.
|
50
|
-
|
51
|
-
griddata.rb
|
52
|
-
|
53
|
-
<p align="center">
|
54
|
-
<img src="https://user-images.githubusercontent.com/5798442/68080405-1b3e3580-fe3e-11e9-9f71-592ca2826bcb.png">
|
55
|
-
</p>
|
56
51
|
|
57
|
-
|
58
|
-
require 'gr'
|
59
|
-
require 'numo/narray'
|
52
|
+
Have a look in the [`examples`](https://github.com/red-data-tools/GR.rb/tree/master/examples) directory.
|
60
53
|
|
61
|
-
|
54
|
+
## GR Installation
|
62
55
|
|
63
|
-
|
64
|
-
yd = -2 + DFloat.new(100).rand * 4
|
65
|
-
zd = xd * Numo::NMath.exp(-xd * xd - yd * yd)
|
56
|
+
### Homebrew
|
66
57
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
GR.setwindow(-2.0, 2.0, -2.0, 2.0)
|
71
|
-
GR.setspace(-0.5, 0.5, 0, 90)
|
72
|
-
GR.setmarkersize(1.0)
|
73
|
-
GR.setmarkertype(-1)
|
74
|
-
GR.setcharheight(0.024)
|
75
|
-
GR.settextalign(2, 0)
|
76
|
-
GR.settextfontprec(3, 0)
|
58
|
+
```sh
|
59
|
+
brew install libgr
|
60
|
+
```
|
77
61
|
|
78
|
-
|
79
|
-
GR.surface(x, y, z, 5)
|
80
|
-
GR.contour(x, y, h, z, 0)
|
81
|
-
GR.polymarker(xd, yd)
|
82
|
-
GR.axes(0.25, 0.25, -2, -2, 2, 2, 0.01)
|
62
|
+
Set environment variable GRDIR.
|
83
63
|
|
84
|
-
|
64
|
+
```sh
|
65
|
+
export GRDIR="/usr/local/Cellar/libgr/0.44.1"
|
85
66
|
```
|
86
67
|
|
87
|
-
|
68
|
+
### Mac Linux Windows
|
88
69
|
|
89
|
-
|
90
|
-
<img src="https://user-images.githubusercontent.com/5798442/68080387-baaef880-fe3d-11e9-9435-f998eaca79da.png">
|
91
|
-
</p>
|
70
|
+
Download the [latest release](https://github.com/sciapp/gr/releases).
|
92
71
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
n = 100_000_000
|
99
|
-
x0 = 0
|
100
|
-
y0 = 0
|
101
|
-
a = -1.3
|
102
|
-
b = -1.3
|
103
|
-
c = -1.8
|
104
|
-
d = -1.9
|
105
|
-
dθ = 0.007
|
106
|
-
|
107
|
-
x = [x0]
|
108
|
-
y = [y0]
|
109
|
-
θ = 0.007
|
110
|
-
|
111
|
-
n.times do |i|
|
112
|
-
x << (sin(a * y[i]) + c * cos(a * x[i])) * cos(θ)
|
113
|
-
y << (sin(b * x[i]) + d * cos(b * y[i])) * cos(θ)
|
114
|
-
θ += dθ
|
115
|
-
end
|
116
|
-
|
117
|
-
GR.setviewport(0, 1, 0, 1)
|
118
|
-
GR.setwindow(-3, 3, -3, 3)
|
119
|
-
GR.setcolormap(8)
|
120
|
-
GR.shadepoints(x, y, dims: [480, 480], xform: 5)
|
121
|
-
GR.updatews
|
72
|
+
Set environment variable GRDIR.
|
73
|
+
|
74
|
+
```sh
|
75
|
+
export GRDIR="your/path/to/gr"
|
122
76
|
```
|
123
77
|
|
124
78
|
## Contributing
|
data/lib/gr.rb
CHANGED
@@ -52,7 +52,10 @@ module GR
|
|
52
52
|
# Ubuntu | lib/libGR.so
|
53
53
|
raise Error, 'Please set env variable GRDIR' unless ENV['GRDIR']
|
54
54
|
|
55
|
+
# Set the font path
|
55
56
|
ENV['GKS_FONTPATH'] ||= ENV['GRDIR']
|
57
|
+
# Change the default encoding to UTF-8
|
58
|
+
ENV['GKS_ENCODING'] ||= 'utf8'
|
56
59
|
if Object.const_defined?(:RubyInstaller)
|
57
60
|
@ffi_lib = File.expand_path('bin/libgr.dll', ENV['GRDIR'])
|
58
61
|
RubyInstaller::Runtime.add_dll_directory(File.dirname(@ffi_lib))
|
@@ -1787,6 +1790,26 @@ module GR
|
|
1787
1790
|
n = equal_length(x, y)
|
1788
1791
|
super(n, x, y, codes)
|
1789
1792
|
end
|
1793
|
+
|
1794
|
+
# Define the border width of subsequent path output primitives.
|
1795
|
+
# @param width [Numeric] The border width scale factor
|
1796
|
+
def setborderwidth(*)
|
1797
|
+
super
|
1798
|
+
end
|
1799
|
+
|
1800
|
+
def inqborderwidth
|
1801
|
+
inquiry_double { |pt| super(pt) }
|
1802
|
+
end
|
1803
|
+
|
1804
|
+
# Define the color of subsequent path output primitives.
|
1805
|
+
# @param color [Integer] The border color index (COLOR < 1256)
|
1806
|
+
def setbordercolorind(*)
|
1807
|
+
super
|
1808
|
+
end
|
1809
|
+
|
1810
|
+
def inqbordercolorind
|
1811
|
+
inquiry_int { |pt| super(pt) }
|
1812
|
+
end
|
1790
1813
|
end
|
1791
1814
|
|
1792
1815
|
ASF_BUNDLED = 0
|
data/lib/gr/ffi.rb
CHANGED
@@ -16,191 +16,196 @@ module GR
|
|
16
16
|
extend GRCommons::Extern
|
17
17
|
|
18
18
|
# https://github.com/sciapp/gr/blob/master/lib/gr/gr.h
|
19
|
+
# Order is important.
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
21
|
+
try_extern 'void gr_initgr(void)'
|
22
|
+
try_extern 'void gr_opengks(void)'
|
23
|
+
try_extern 'void gr_closegks(void)'
|
24
|
+
try_extern 'void gr_inqdspsize(double *, double *, int *, int *)'
|
25
|
+
try_extern 'void gr_openws(int, char *, int)'
|
26
|
+
try_extern 'void gr_closews(int)'
|
27
|
+
try_extern 'void gr_activatews(int)'
|
28
|
+
try_extern 'void gr_deactivatews(int)'
|
29
|
+
try_extern 'void gr_configurews(void)'
|
30
|
+
try_extern 'void gr_clearws(void)'
|
31
|
+
try_extern 'void gr_updatews(void)'
|
32
|
+
try_extern 'void gr_polyline(int, double *, double *)'
|
33
|
+
try_extern 'void gr_polymarker(int, double *, double *)'
|
34
|
+
try_extern 'void gr_text(double, double, char *)'
|
35
|
+
try_extern 'void gr_inqtext(double, double, char *, double *, double *)'
|
36
|
+
try_extern 'void gr_fillarea(int, double *, double *)'
|
37
|
+
try_extern 'void gr_cellarray(double, double, double, double, ' \
|
37
38
|
'int, int, int, int, int, int, int *)'
|
38
|
-
|
39
|
+
try_extern 'void gr_nonuniformcellarray(double *, double *, ' \
|
39
40
|
'int, int, int, int, int, int, int *)'
|
40
|
-
|
41
|
+
try_extern 'void gr_polarcellarray(double, double, double, double, double, double, ' \
|
41
42
|
'int, int, int, int, int, int, int *)'
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
try_extern 'void gr_gdp(int, double *, double *, int, int, int *)'
|
44
|
+
try_extern 'void gr_spline(int, double *, double *, int, int)'
|
45
|
+
try_extern 'void gr_gridit(int, double *, double *, double *, int, int, ' \
|
45
46
|
'double *, double *, double *)'
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
47
|
+
try_extern 'void gr_setlinetype(int)'
|
48
|
+
try_extern 'void gr_inqlinetype(int *)'
|
49
|
+
try_extern 'void gr_setlinewidth(double)'
|
50
|
+
try_extern 'void gr_inqlinewidth(double *)'
|
51
|
+
try_extern 'void gr_setlinecolorind(int)'
|
52
|
+
try_extern 'void gr_inqlinecolorind(int *)'
|
53
|
+
try_extern 'void gr_setmarkertype(int)'
|
54
|
+
try_extern 'void gr_inqmarkertype(int *)'
|
55
|
+
try_extern 'void gr_setmarkersize(double)'
|
56
|
+
try_extern 'void gr_inqmarkersize(double *)'
|
57
|
+
try_extern 'void gr_setmarkercolorind(int)'
|
58
|
+
try_extern 'void gr_inqmarkercolorind(int *)'
|
59
|
+
try_extern 'void gr_settextfontprec(int, int)'
|
60
|
+
try_extern 'void gr_setcharexpan(double)'
|
61
|
+
try_extern 'void gr_setcharspace(double)'
|
62
|
+
try_extern 'void gr_settextcolorind(int)'
|
63
|
+
try_extern 'void gr_setcharheight(double)'
|
64
|
+
try_extern 'void gr_setcharup(double, double)'
|
65
|
+
try_extern 'void gr_settextpath(int)'
|
66
|
+
try_extern 'void gr_settextalign(int, int)'
|
67
|
+
try_extern 'void gr_setfillintstyle(int)'
|
68
|
+
try_extern 'void gr_inqfillintstyle(int *)'
|
69
|
+
try_extern 'void gr_setfillstyle(int)'
|
70
|
+
try_extern 'void gr_inqfillstyle(int *)'
|
71
|
+
try_extern 'void gr_setfillcolorind(int)'
|
72
|
+
try_extern 'void gr_inqfillcolorind(int *)'
|
73
|
+
try_extern 'void gr_setcolorrep(int, double, double, double)'
|
74
|
+
try_extern 'void gr_setwindow(double, double, double, double)'
|
75
|
+
try_extern 'void gr_inqwindow(double *, double *, double *, double *)'
|
76
|
+
try_extern 'void gr_setviewport(double, double, double, double)'
|
77
|
+
try_extern 'void gr_inqviewport(double *, double *, double *, double *)'
|
78
|
+
try_extern 'void gr_selntran(int)'
|
79
|
+
try_extern 'void gr_setclip(int)'
|
80
|
+
try_extern 'void gr_setwswindow(double, double, double, double)'
|
81
|
+
try_extern 'void gr_setwsviewport(double, double, double, double)'
|
82
|
+
try_extern 'void gr_createseg(int)'
|
83
|
+
try_extern 'void gr_copysegws(int)'
|
84
|
+
try_extern 'void gr_redrawsegws(void)'
|
85
|
+
try_extern 'void gr_setsegtran(int, double, double, double, double, double, double, double)'
|
86
|
+
try_extern 'void gr_closeseg(void)'
|
87
|
+
try_extern 'void gr_emergencyclosegks(void)'
|
88
|
+
try_extern 'void gr_updategks(void)'
|
89
|
+
try_extern 'int gr_setspace(double, double, int, int)'
|
90
|
+
try_extern 'void gr_inqspace(double *, double *, int *, int *)'
|
91
|
+
try_extern 'int gr_setscale(int)'
|
92
|
+
try_extern 'void gr_inqscale(int *)'
|
93
|
+
try_extern 'int gr_textext(double, double, char *)'
|
94
|
+
try_extern 'void gr_inqtextext(double, double, char *, double *, double *)'
|
95
|
+
try_extern 'void gr_axes(double, double, double, double, int, int, double)'
|
96
|
+
try_extern 'void gr_axeslbl(double, double, double, double, int, int, double,' \
|
96
97
|
'void (*)(double, double, const char *, double),' \
|
97
98
|
'void (*)(double, double, const char *, double))'
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
#
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
99
|
+
try_extern 'void gr_grid(double, double, double, double, int, int)'
|
100
|
+
try_extern 'void gr_grid3d(double, double, double, double, double, double, int, int, int)'
|
101
|
+
try_extern 'void gr_verrorbars(int, double *, double *, double *, double *)'
|
102
|
+
try_extern 'void gr_herrorbars(int, double *, double *, double *, double *)'
|
103
|
+
try_extern 'void gr_polyline3d(int, double *, double *, double *)'
|
104
|
+
try_extern 'void gr_polymarker3d(int, double *, double *, double *)'
|
105
|
+
try_extern 'void gr_axes3d(double, double, double, double, double, double, int, int, int, double)'
|
106
|
+
try_extern 'void gr_titles3d(char *, char *, char *)'
|
107
|
+
try_extern 'void gr_surface(int, int, double *, double *, double *, int)'
|
108
|
+
try_extern 'void gr_contour(int, int, int, double *, double *, double *, double *, int)'
|
109
|
+
try_extern 'void gr_contourf(int, int, int, double *, double *, double *, double *, int)'
|
110
|
+
try_extern 'void gr_tricontour(int, double *, double *, double *, int, double *)'
|
111
|
+
try_extern 'int gr_hexbin(int, double *, double *, int)'
|
112
|
+
try_extern 'void gr_setcolormap(int)'
|
113
|
+
try_extern 'void gr_inqcolormap(int *)'
|
114
|
+
try_extern 'void gr_setcolormapfromrgb(int n, double *r, double *g, double *b, double *x)'
|
115
|
+
try_extern 'void gr_colorbar(void)'
|
116
|
+
try_extern 'void gr_inqcolor(int, int *)'
|
117
|
+
try_extern 'int gr_inqcolorfromrgb(double, double, double)'
|
118
|
+
try_extern 'void gr_hsvtorgb(double h, double s, double v, double *r, double *g, double *b)'
|
119
|
+
try_extern 'double gr_tick(double, double)'
|
120
|
+
try_extern 'int gr_validaterange(double, double)'
|
121
|
+
try_extern 'void gr_adjustlimits(double *, double *)'
|
122
|
+
try_extern 'void gr_adjustrange(double *, double *)'
|
123
|
+
try_extern 'void gr_beginprint(char *)'
|
124
|
+
try_extern 'void gr_beginprintext(char *, char *, char *, char *)'
|
125
|
+
try_extern 'void gr_endprint(void)'
|
126
|
+
try_extern 'void gr_ndctowc(double *, double *)'
|
127
|
+
try_extern 'void gr_wctondc(double *, double *)'
|
128
|
+
try_extern 'void gr_wc3towc(double *, double *, double *)'
|
129
|
+
try_extern 'void gr_drawrect(double, double, double, double)'
|
130
|
+
try_extern 'void gr_fillrect(double, double, double, double)'
|
131
|
+
try_extern 'void gr_drawarc(double, double, double, double, double, double)'
|
132
|
+
try_extern 'void gr_fillarc(double, double, double, double, double, double)'
|
133
|
+
try_extern 'void gr_drawpath(int, vertex_t *, unsigned char *, int)'
|
134
|
+
try_extern 'void gr_setarrowstyle(int)'
|
135
|
+
try_extern 'void gr_setarrowsize(double)'
|
136
|
+
try_extern 'void gr_drawarrow(double, double, double, double)'
|
137
|
+
try_extern 'int gr_readimage(char *, int *, int *, int **)'
|
138
|
+
try_extern 'void gr_drawimage(double, double, double, double, int, int, int *, int)'
|
139
|
+
try_extern 'int gr_importgraphics(char *)'
|
140
|
+
try_extern 'void gr_setshadow(double, double, double)'
|
141
|
+
try_extern 'void gr_settransparency(double)'
|
142
|
+
try_extern 'void gr_setcoordxform(double[3][2])'
|
143
|
+
try_extern 'void gr_begingraphics(char *)'
|
144
|
+
try_extern 'void gr_endgraphics(void)'
|
145
|
+
try_extern 'char *gr_getgraphics(void)'
|
146
|
+
try_extern 'int gr_drawgraphics(char *)'
|
147
|
+
try_extern 'void gr_mathtex(double, double, char *)'
|
148
|
+
try_extern 'void gr_inqmathtex(double, double, char *, double *, double *)'
|
149
|
+
try_extern 'void gr_beginselection(int, int)'
|
150
|
+
try_extern 'void gr_endselection(void)'
|
151
|
+
try_extern 'void gr_moveselection(double, double)'
|
152
|
+
try_extern 'void gr_resizeselection(int, double, double)'
|
153
|
+
try_extern 'void gr_inqbbox(double *, double *, double *, double *)'
|
154
|
+
try_extern 'double gr_precision(void)'
|
155
|
+
try_extern 'void gr_setregenflags(int)'
|
156
|
+
try_extern 'int gr_inqregenflags(void)'
|
157
|
+
try_extern 'void gr_savestate(void)'
|
158
|
+
try_extern 'void gr_restorestate(void)'
|
159
|
+
try_extern 'void gr_selectcontext(int)'
|
160
|
+
try_extern 'void gr_destroycontext(int)'
|
161
|
+
try_extern 'int gr_uselinespec(char *)'
|
162
|
+
# try_extern 'void gr_delaunay(int, const double *, const double *, int *, int **)'
|
163
|
+
try_extern 'void gr_reducepoints(int, const double *, const double *, int, double *, double *)'
|
164
|
+
try_extern 'void gr_trisurface(int, double *, double *, double *)'
|
165
|
+
try_extern 'void gr_gradient(int, int, double *, double *, double *, double *, double *)'
|
166
|
+
try_extern 'void gr_quiver(int, int, double *, double *, double *, double *, int)'
|
167
|
+
try_extern 'void gr_interp2(int nx, int ny, const double *x, const double *y, const double *z,' \
|
167
168
|
'int nxq, int nyq, const double *xq, const double *yq, double *zq, int method, double extrapval)'
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
171
|
-
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
#
|
182
|
-
#
|
183
|
-
#
|
184
|
-
#
|
185
|
-
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
#
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
193
|
-
#
|
194
|
-
#
|
169
|
+
# try_extern :gr_newmeta
|
170
|
+
# try_extern :gr_deletemeta
|
171
|
+
# try_extern :gr_finalizemeta
|
172
|
+
# try_extern :gr_meta_args_push
|
173
|
+
# try_extern :gr_meta_args_push_buf
|
174
|
+
# try_extern :gr_meta_args_contains
|
175
|
+
# try_extern :gr_meta_args_clear
|
176
|
+
# try_extern :gr_meta_args_remove
|
177
|
+
# try_extern :gr_meta_get_box
|
178
|
+
# try_extern :gr_openmeta
|
179
|
+
# try_extern :gr_recvmeta
|
180
|
+
# try_extern :gr_sendmeta
|
181
|
+
# try_extern :gr_sendmeta_buf
|
182
|
+
# try_extern :gr_sendmeta_ref
|
183
|
+
# try_extern :gr_sendmeta_args
|
184
|
+
# try_extern :gr_closemeta
|
185
|
+
# try_extern :gr_clearmeta
|
186
|
+
# try_extern :gr_inputmeta
|
187
|
+
# try_extern :gr_mergemeta
|
188
|
+
# try_extern :gr_plotmeta
|
189
|
+
# try_extern :gr_readmeta
|
190
|
+
# try_extern :gr_switchmeta
|
191
|
+
# try_extern :gr_registermeta
|
192
|
+
# try_extern :gr_unregistermeta
|
193
|
+
# try_extern :gr_meta_max_plotid
|
194
|
+
# try_extern :gr_dumpmeta
|
195
|
+
# try_extern :gr_dumpmeta_json
|
195
196
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
#
|
202
|
-
|
203
|
-
|
204
|
-
|
197
|
+
try_extern 'const char *gr_version(void)'
|
198
|
+
try_extern 'void gr_shade(int, double *, double *, int, int, double *, int, int, int *)'
|
199
|
+
try_extern 'void gr_shadepoints(int, double *, double *, int, int, int)'
|
200
|
+
try_extern 'void gr_shadelines(int, double *, double *, int, int, int)'
|
201
|
+
try_extern 'void gr_panzoom(double, double, double, double, double *, double *, double *, double *)'
|
202
|
+
# try_extern 'int gr_findboundary(int, double *, double *, double, double (*)(double, double), int, int *)'
|
203
|
+
try_extern 'void gr_setresamplemethod(unsigned int flag)'
|
204
|
+
try_extern 'void gr_inqresamplemethod(unsigned int *flag)'
|
205
|
+
try_extern 'void gr_path(int, double *, double *, char *)'
|
206
|
+
try_extern 'void gr_setborderwidth(double)'
|
207
|
+
try_extern 'void gr_inqborderwidth(double *)'
|
208
|
+
try_extern 'void gr_setbordercolorind(int)'
|
209
|
+
try_extern 'void gr_inqbordercolorind(int *)'
|
205
210
|
end
|
206
211
|
end
|
data/lib/gr/plot.rb
CHANGED
@@ -51,6 +51,10 @@ module GR
|
|
51
51
|
else
|
52
52
|
{}
|
53
53
|
end
|
54
|
+
|
55
|
+
# label is a original keyword arg which GR.jl does not have.
|
56
|
+
@kvs[:labels] = [@kvs[:label]] if @kvs[:label] && @kvs[:labels].nil?
|
57
|
+
|
54
58
|
@args = plot_args(args) # method name is the same as Julia/Python
|
55
59
|
@kvs[:size] ||= [600, 450]
|
56
60
|
@kvs[:ax] ||= false
|
@@ -574,11 +578,14 @@ module GR
|
|
574
578
|
spec ||= ''
|
575
579
|
GR.savestate
|
576
580
|
GR.settransparency(kvs[:alpha]) if kvs.key?(:alpha)
|
581
|
+
|
577
582
|
case kind
|
583
|
+
|
578
584
|
when :line
|
579
585
|
mask = GR.uselinespec(spec)
|
580
586
|
GR.polyline(x, y) if hasline(mask)
|
581
587
|
GR.polymarker(x, y) if hasmarker(mask)
|
588
|
+
|
582
589
|
when :step
|
583
590
|
mask = GR.uselinespec(spec)
|
584
591
|
if hasline(mask)
|
@@ -610,6 +617,7 @@ module GR
|
|
610
617
|
GR.polyline(xs, ys)
|
611
618
|
end
|
612
619
|
GR.polymarker(x, y) if hasmarker(mask)
|
620
|
+
|
613
621
|
when :scatter
|
614
622
|
GR.setmarkertype(GR::MARKERTYPE_SOLID_CIRCLE)
|
615
623
|
if z || c
|
@@ -627,6 +635,7 @@ module GR
|
|
627
635
|
else
|
628
636
|
GR.polymarker(x, y)
|
629
637
|
end
|
638
|
+
|
630
639
|
when :stem
|
631
640
|
GR.setlinecolorind(1)
|
632
641
|
GR.polyline(kvs[:window][0..1], [0, 0])
|
@@ -638,6 +647,7 @@ module GR
|
|
638
647
|
GR.polyline([xi, xi], [0, yi])
|
639
648
|
end
|
640
649
|
GR.polymarker(x, y)
|
650
|
+
|
641
651
|
when :hist
|
642
652
|
ymin = kvs[:window][2]
|
643
653
|
y.length.times do |i|
|
@@ -648,6 +658,7 @@ module GR
|
|
648
658
|
GR.setfillintstyle(GR::INTSTYLE_HOLLOW)
|
649
659
|
GR.fillrect(x[i], x[i + 1], ymin, y[i])
|
650
660
|
end
|
661
|
+
|
651
662
|
# when :polarhist
|
652
663
|
# xmin, xmax = x.minmax
|
653
664
|
# ymax = kvs[:window][3]
|
@@ -663,6 +674,7 @@ module GR
|
|
663
674
|
# GR.fillarea([0, ρ[i] * Math.cos(θ[i]), ρ[i] * Math.cos(θ[i + 1])],
|
664
675
|
# [0, ρ[i] * Math.sin(θ[i]), ρ[i] * Math.sin(θ[i + 1])])
|
665
676
|
# end
|
677
|
+
|
666
678
|
when :polarheatmap
|
667
679
|
w, h = z.shape
|
668
680
|
cmap = colormap
|
@@ -675,6 +687,7 @@ module GR
|
|
675
687
|
draw_polar_axes
|
676
688
|
kvs[:zrange] = [cmin, cmax]
|
677
689
|
colorbar
|
690
|
+
|
678
691
|
when :contour, :contourf
|
679
692
|
zmin, zmax = kvs[:zrange]
|
680
693
|
if narray?(z) && z.ndim == 2
|
@@ -701,6 +714,7 @@ module GR
|
|
701
714
|
GR._contourf_(x, y, h, z, clabels ? 1 : 0)
|
702
715
|
end
|
703
716
|
colorbar(0, h.length)
|
717
|
+
|
704
718
|
when :hexbin
|
705
719
|
nbins = kvs[:nbins] || 40
|
706
720
|
cntmax = GR._hexbin_(x, y, nbins)
|
@@ -708,6 +722,7 @@ module GR
|
|
708
722
|
kvs[:zrange] = [0, cntmax]
|
709
723
|
colorbar
|
710
724
|
end
|
725
|
+
|
711
726
|
when :heatmap, :nonuniformheatmap
|
712
727
|
case z
|
713
728
|
when Array
|
@@ -734,6 +749,7 @@ module GR
|
|
734
749
|
GR.nonuniformcellarray(x, y, w, h, colors)
|
735
750
|
end
|
736
751
|
colorbar(0, levels)
|
752
|
+
|
737
753
|
when :wireframe
|
738
754
|
if narray?(z) && z.ndim == 2
|
739
755
|
a, b = z.shape
|
@@ -745,6 +761,7 @@ module GR
|
|
745
761
|
GR.setfillcolorind(0)
|
746
762
|
GR._surface_(x, y, z, GR::OPTION_FILLED_MESH)
|
747
763
|
draw_axes(kind, 2)
|
764
|
+
|
748
765
|
when :surface
|
749
766
|
if narray?(z) && z.ndim == 2
|
750
767
|
a, b = z.shape
|
@@ -762,6 +779,7 @@ module GR
|
|
762
779
|
end
|
763
780
|
draw_axes(kind, 2)
|
764
781
|
colorbar(0.05)
|
782
|
+
|
765
783
|
when :volume
|
766
784
|
algorithm = kvs[:algorithm] || 0
|
767
785
|
require 'gr3'
|
@@ -770,9 +788,11 @@ module GR
|
|
770
788
|
draw_axes(kind, 2)
|
771
789
|
kvs[:zrange] = [dmin, dmax]
|
772
790
|
colorbar(0.05)
|
791
|
+
|
773
792
|
when :plot3
|
774
793
|
GR.polyline3d(x, y, z)
|
775
794
|
draw_axes(kind, 2)
|
795
|
+
|
776
796
|
when :scatter3
|
777
797
|
GR.setmarkertype(GR::MARKERTYPE_SOLID_CIRCLE)
|
778
798
|
if c
|
@@ -787,21 +807,27 @@ module GR
|
|
787
807
|
GR.polymarker3d(x, y, z)
|
788
808
|
end
|
789
809
|
draw_axes(kind, 2)
|
810
|
+
|
790
811
|
when :imshow
|
791
812
|
plot_img(z)
|
813
|
+
|
792
814
|
when :isosurface
|
793
815
|
plot_iso(z)
|
816
|
+
|
794
817
|
when :polar
|
795
818
|
GR.uselinespec(spec)
|
796
819
|
plot_polar(x, y)
|
820
|
+
|
797
821
|
when :trisurf
|
798
822
|
GR._trisurface_(x, y, z)
|
799
823
|
draw_axes(kind, 2)
|
800
824
|
colorbar(0.05)
|
825
|
+
|
801
826
|
when :tricont
|
802
827
|
zmin, zmax = kvs[:zrange]
|
803
828
|
levels = linspace(zmin, zmax, 20)
|
804
|
-
GR.
|
829
|
+
GR.tricontour(x, y, z, levels)
|
830
|
+
|
805
831
|
when :shade
|
806
832
|
xform = kvs[:xform] || 5
|
807
833
|
if x.to_a.include? Float::NAN # FIXME: Ruby is different from Julia?
|
@@ -810,6 +836,7 @@ module GR
|
|
810
836
|
else
|
811
837
|
GR.shadepoints(x, y, xform: xform)
|
812
838
|
end
|
839
|
+
|
813
840
|
when :bar
|
814
841
|
0.step(x.length - 1, 2) do |i|
|
815
842
|
GR.setfillcolorind(989)
|
@@ -820,6 +847,7 @@ module GR
|
|
820
847
|
GR.fillrect(x[i], x[i + 1], y[i], y[i + 1])
|
821
848
|
end
|
822
849
|
end
|
850
|
+
|
823
851
|
GR.restorestate
|
824
852
|
end
|
825
853
|
|
@@ -1110,35 +1138,26 @@ module GR
|
|
1110
1138
|
end
|
1111
1139
|
|
1112
1140
|
class << self
|
1113
|
-
# line
|
1141
|
+
# Draw one or more line plots.
|
1114
1142
|
def plot(*args)
|
1115
1143
|
create_plot(:line, *args)
|
1116
1144
|
end
|
1117
1145
|
|
1146
|
+
# Draw one or more step or staircase plots.
|
1118
1147
|
def step(*args)
|
1119
1148
|
create_plot(:step, *args)
|
1120
1149
|
end
|
1121
1150
|
|
1151
|
+
# Draw one or more scatter plots.
|
1122
1152
|
def scatter(*args)
|
1123
1153
|
create_plot(:scatter, *args)
|
1124
1154
|
end
|
1125
1155
|
|
1126
|
-
|
1127
|
-
create_plot(:scatter3, *args)
|
1128
|
-
end
|
1129
|
-
|
1156
|
+
# Draw a stem plot.
|
1130
1157
|
def stem(*args)
|
1131
1158
|
create_plot(:stem, *args)
|
1132
1159
|
end
|
1133
1160
|
|
1134
|
-
def histogram(x, kv = {})
|
1135
|
-
create_plot(:hist, x, kv) do |plt|
|
1136
|
-
nbins = plt.kvs[:nbins] || 0
|
1137
|
-
x, y = hist(x, nbins)
|
1138
|
-
plt.args = [[x, y, nil, nil, '']]
|
1139
|
-
end
|
1140
|
-
end
|
1141
|
-
|
1142
1161
|
# def polarhistogram(x, kv = {})
|
1143
1162
|
# plt = GR::Plot.new(x, kv)
|
1144
1163
|
# plt.kvs[:kind] = :polarhist
|
@@ -1148,6 +1167,7 @@ module GR
|
|
1148
1167
|
# plt.plot_data
|
1149
1168
|
# end
|
1150
1169
|
|
1170
|
+
# Draw a heatmap.
|
1151
1171
|
def heatmap(*args)
|
1152
1172
|
# FIXME
|
1153
1173
|
_x, _y, z, kv = parse_args(*args)
|
@@ -1175,28 +1195,38 @@ module GR
|
|
1175
1195
|
end
|
1176
1196
|
|
1177
1197
|
alias _contour_ contour
|
1198
|
+
# Draw a contour plot.
|
1178
1199
|
def contour(*args)
|
1179
1200
|
x, y, z, kv = parse_args(*args)
|
1180
1201
|
create_plot(:contour, x, y, z, kv)
|
1181
1202
|
end
|
1182
1203
|
|
1183
1204
|
alias _contourf_ contourf
|
1205
|
+
# Draw a filled contour plot.
|
1184
1206
|
def contourf(*args)
|
1185
1207
|
x, y, z, kv = parse_args(*args)
|
1186
1208
|
create_plot(:contourf, x, y, z, kv)
|
1187
1209
|
end
|
1188
1210
|
|
1189
1211
|
alias _hexbin_ hexbin
|
1212
|
+
# Draw a hexagon binning plot.
|
1190
1213
|
def hexbin(*args)
|
1191
1214
|
create_plot(:hexbin, *args)
|
1192
1215
|
end
|
1193
1216
|
|
1194
|
-
|
1195
|
-
def
|
1217
|
+
# Draw a triangular contour plot.
|
1218
|
+
def tricont(*args)
|
1196
1219
|
x, y, z, kv = parse_args(*args)
|
1197
1220
|
create_plot(:tricont, x, y, z, kv)
|
1198
1221
|
end
|
1199
1222
|
|
1223
|
+
# Draw a three-dimensional wireframe plot.
|
1224
|
+
def wireframe(*args)
|
1225
|
+
x, y, z, kv = parse_args(*args)
|
1226
|
+
create_plot(:wireframe, x, y, z, kv)
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
# Draw a three-dimensional surface plot.
|
1200
1230
|
alias _surface_ surface
|
1201
1231
|
def surface(*args)
|
1202
1232
|
x, y, z, kv = parse_args(*args)
|
@@ -1208,20 +1238,22 @@ module GR
|
|
1208
1238
|
end
|
1209
1239
|
|
1210
1240
|
alias _trisurface_ trisurface
|
1241
|
+
# Draw a triangular surface plot.
|
1211
1242
|
def trisurface(*args)
|
1212
1243
|
x, y, z, kv = parse_args(*args)
|
1213
1244
|
create_plot(:trisurf, x, y, z, kv)
|
1214
1245
|
end
|
1215
1246
|
|
1216
|
-
|
1217
|
-
x, y, z, kv = parse_args(*args)
|
1218
|
-
create_plot(:wireframe, x, y, z, kv)
|
1219
|
-
end
|
1220
|
-
|
1247
|
+
# Draw one or more three-dimensional line plots.
|
1221
1248
|
def plot3(*args)
|
1222
1249
|
create_plot(:plot3, *args)
|
1223
1250
|
end
|
1224
1251
|
|
1252
|
+
# Draw one or more three-dimensional scatter plots.
|
1253
|
+
def scatter3(*args)
|
1254
|
+
create_plot(:scatter3, *args)
|
1255
|
+
end
|
1256
|
+
|
1225
1257
|
alias _shade_ shade
|
1226
1258
|
def shade(*args)
|
1227
1259
|
create_plot(:shade, *args)
|
@@ -1233,6 +1265,7 @@ module GR
|
|
1233
1265
|
end
|
1234
1266
|
end
|
1235
1267
|
|
1268
|
+
# Draw a bar plot.
|
1236
1269
|
def barplot(labels, heights, kv = {})
|
1237
1270
|
labels = labels.map(&:to_s)
|
1238
1271
|
wc, hc = barcoordinates(heights)
|
@@ -1250,6 +1283,16 @@ module GR
|
|
1250
1283
|
end
|
1251
1284
|
end
|
1252
1285
|
|
1286
|
+
# Draw a histogram.
|
1287
|
+
def histogram(x, kv = {})
|
1288
|
+
create_plot(:hist, x, kv) do |plt|
|
1289
|
+
nbins = plt.kvs[:nbins] || 0
|
1290
|
+
x, y = hist(x, nbins)
|
1291
|
+
plt.args = [[x, y, nil, nil, '']]
|
1292
|
+
end
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
# Draw an image.
|
1253
1296
|
def imshow(img, kv = {})
|
1254
1297
|
img = Numo::DFloat.cast(img) # Umm...
|
1255
1298
|
create_plot(:imshow, img, kv) do |plt|
|
@@ -1257,6 +1300,7 @@ module GR
|
|
1257
1300
|
end
|
1258
1301
|
end
|
1259
1302
|
|
1303
|
+
# Draw an isosurface.
|
1260
1304
|
def isosurface(v, kv = {})
|
1261
1305
|
v = Numo::DFloat.cast(v) # Umm...
|
1262
1306
|
create_plot(:isosurface, v, kv) do |plt|
|
@@ -1264,9 +1308,11 @@ module GR
|
|
1264
1308
|
end
|
1265
1309
|
end
|
1266
1310
|
|
1267
|
-
def savefig(filename)
|
1311
|
+
def savefig(filename, kv = {})
|
1268
1312
|
GR.beginprint(filename)
|
1269
|
-
GR::Plot.last_plot
|
1313
|
+
plt = GR::Plot.last_plot
|
1314
|
+
plt.kvs.merge!(kv)
|
1315
|
+
plt.plot_data(false)
|
1270
1316
|
GR.endprint
|
1271
1317
|
end
|
1272
1318
|
|
data/lib/gr3.rb
CHANGED
@@ -61,7 +61,10 @@ module GR3
|
|
61
61
|
# Ubuntu | lib/libGR3.so
|
62
62
|
raise Error, 'Please set env variable GRDIR' unless ENV['GRDIR']
|
63
63
|
|
64
|
+
# Set the font path
|
64
65
|
ENV['GKS_FONTPATH'] ||= ENV['GRDIR']
|
66
|
+
# change the default encoding to UTF-8
|
67
|
+
ENV['GKS_ENCODING'] ||= 'utf8'
|
65
68
|
if Object.const_defined?(:RubyInstaller)
|
66
69
|
@ffi_lib = File.expand_path('bin/libGR3.dll', ENV['GRDIR'])
|
67
70
|
RubyInstaller::Runtime.add_dll_directory(File.dirname(@ffi_lib))
|
@@ -692,11 +695,10 @@ module GR3
|
|
692
695
|
end
|
693
696
|
|
694
697
|
def volume(data, algorithm)
|
698
|
+
data = Numo::DFloat.cast(data) if data.is_a? Array
|
695
699
|
inquiry %i[double double] do |dmin, dmax|
|
696
700
|
dmin.write_double(-1)
|
697
701
|
dmax.write_double(-1)
|
698
|
-
# TODO: raise error when no NArray
|
699
|
-
data = Numo::DFloat.cast(data) if data.is_a? Array
|
700
702
|
nx, ny, nz = data.shape
|
701
703
|
super(nx, ny, nz, data, algorithm, dmin, dmax)
|
702
704
|
end
|
data/lib/gr3/ffi.rb
CHANGED
@@ -16,116 +16,117 @@ module GR3
|
|
16
16
|
extend GRCommons::Extern
|
17
17
|
|
18
18
|
# https://github.com/sciapp/gr/blob/master/lib/gr3/gr3.h
|
19
|
+
# Order is important.
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
try_extern 'int gr3_init(int *attrib_list)'
|
22
|
+
try_extern 'void gr3_free(void *pointer)'
|
23
|
+
try_extern 'void gr3_terminate(void)'
|
24
|
+
try_extern 'int gr3_geterror(int clear, int *line, const char **file)'
|
25
|
+
try_extern 'const char *gr3_getrenderpathstring(void)'
|
26
|
+
try_extern 'const char *gr3_geterrorstring(int error)'
|
27
|
+
# try_extern 'void gr3_setlogcallback(void (*gr3_log_func)(const char *log_message))'
|
28
|
+
try_extern 'int gr3_clear(void)'
|
29
|
+
try_extern 'void gr3_usecurrentframebuffer()'
|
30
|
+
try_extern 'void gr3_useframebuffer(unsigned int framebuffer)'
|
31
|
+
try_extern 'int gr3_setquality(int quality)'
|
32
|
+
try_extern 'int gr3_getimage(int width, int height, int use_alpha, char *pixels)'
|
33
|
+
try_extern 'int gr3_export(const char *filename, int width, int height)'
|
34
|
+
try_extern 'int gr3_drawimage(float xmin, float xmax, float ymin, float ymax, ' \
|
34
35
|
'int width, int height, int drawable_type)'
|
35
|
-
|
36
|
+
try_extern 'int gr3_createmesh_nocopy(int *mesh, int n, ' \
|
36
37
|
'float *vertices, float *normals, float *colors)'
|
37
|
-
|
38
|
+
try_extern 'int gr3_createmesh(int *mesh, int n, ' \
|
38
39
|
'const float *vertices, const float *normals, const float *colors)'
|
39
|
-
|
40
|
+
try_extern 'int gr3_createindexedmesh_nocopy(int *mesh, int number_of_vertices, ' \
|
40
41
|
'float *vertices, float *normals, float *colors, int number_of_indices, int *indices)'
|
41
|
-
|
42
|
+
try_extern 'int gr3_createindexedmesh(int *mesh, int number_of_vertices, ' \
|
42
43
|
'const float *vertices, const float *normals, const float *colors, ' \
|
43
44
|
'int number_of_indices, const int *indices)'
|
44
|
-
|
45
|
+
try_extern 'void gr3_drawmesh(int mesh, int n, ' \
|
45
46
|
'const float *positions, const float *directions, const float *ups, ' \
|
46
47
|
'const float *colors, const float *scales)'
|
47
|
-
|
48
|
-
|
48
|
+
try_extern 'void gr3_deletemesh(int mesh)'
|
49
|
+
try_extern 'void gr3_cameralookat(float camera_x, float camera_y, float camera_z, ' \
|
49
50
|
'float center_x, float center_y, float center_z, ' \
|
50
51
|
'float up_x, float up_y, float up_z)'
|
51
|
-
|
52
|
+
try_extern 'int gr3_setcameraprojectionparameters(float vertical_field_of_view, ' \
|
52
53
|
'float zNear, float zFar)'
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
try_extern 'int gr3_getcameraprojectionparameters(float *vfov, float *znear, float *zfar)'
|
55
|
+
try_extern 'void gr3_setlightdirection(float x, float y, float z)'
|
56
|
+
try_extern 'void gr3_setbackgroundcolor(float red, float green, float blue, float alpha)'
|
57
|
+
try_extern 'int gr3_createheightmapmesh(const float *heightmap, int num_columns, int num_rows)'
|
58
|
+
try_extern 'void gr3_drawheightmap(const float *heightmap, ' \
|
58
59
|
'int num_columns, int num_rows, const float *positions, const float *scales)'
|
59
|
-
|
60
|
+
try_extern 'void gr3_drawconemesh(int n, const float *positions, const float *directions, ' \
|
60
61
|
'const float *colors, const float *radii, const float *lengths)'
|
61
|
-
|
62
|
+
try_extern 'void gr3_drawcylindermesh(int n, const float *positions, const float *directions, ' \
|
62
63
|
'const float *colors, const float *radii, const float *lengths)'
|
63
|
-
|
64
|
+
try_extern 'void gr3_drawspheremesh(int n, const float *positions, ' \
|
64
65
|
'const float *colors, const float *radii)'
|
65
|
-
|
66
|
+
try_extern 'void gr3_drawcubemesh(int n, ' \
|
66
67
|
'const float *positions, const float *directions, const float *ups, ' \
|
67
68
|
'const float *colors, const float *scales)'
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
#
|
75
|
-
#
|
76
|
-
|
69
|
+
try_extern 'void gr3_setobjectid(int id)'
|
70
|
+
try_extern 'int gr3_selectid(int x, int y, int width, int height, int *selection_id)'
|
71
|
+
try_extern 'void gr3_getviewmatrix(float *m)'
|
72
|
+
try_extern 'void gr3_setviewmatrix(const float *m)'
|
73
|
+
try_extern 'int gr3_getprojectiontype(void)'
|
74
|
+
try_extern 'void gr3_setprojectiontype(int type)'
|
75
|
+
# try_extern 'unsigned int gr3_triangulate(const unsigned short *data, unsigned short isolevel, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, double step_x, double step_y, double step_z, double offset_x, double offset_y, double offset_z, gr3_triangle_t **triangles_p)'
|
76
|
+
# try_extern 'void gr3_triangulateindexed(const unsigned short *data, unsigned short isolevel, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, double step_x, double step_y, double step_z, double offset_x, double offset_y, double offset_z, unsigned int *num_vertices, gr3_coord_t **vertices, gr3_coord_t **normals, unsigned int *num_indices, unsigned int **indices)'
|
77
|
+
try_extern 'int gr3_createisosurfacemesh(int *mesh, unsigned short *data, ' \
|
77
78
|
'unsigned short isolevel, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
78
79
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
79
80
|
'double step_x, double step_y, double step_z, ' \
|
80
81
|
'double offset_x, double offset_y, double offset_z)'
|
81
|
-
|
82
|
+
try_extern 'int gr3_createsurfacemesh(int *mesh, int nx, int ny, ' \
|
82
83
|
'float *px, float *py, float *pz, int option)'
|
83
|
-
|
84
|
+
try_extern 'void gr3_drawmesh_grlike(int mesh, int n, ' \
|
84
85
|
'const float *positions, const float *directions, const float *ups, ' \
|
85
86
|
'const float *colors, const float *scales)'
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
try_extern 'void gr3_drawsurface(int mesh)'
|
88
|
+
try_extern 'void gr3_surface(int nx, int ny, float *px, float *py, float *pz, int option)'
|
89
|
+
try_extern 'int gr3_drawtubemesh(int n, float *points, float *colors, float *radii, ' \
|
89
90
|
'int num_steps, int num_segments)'
|
90
|
-
|
91
|
+
try_extern 'int gr3_createtubemesh(int *mesh, int n, ' \
|
91
92
|
'const float *points, const float *colors, const float *radii, ' \
|
92
93
|
'int num_steps, int num_segments)'
|
93
|
-
|
94
|
+
try_extern 'void gr3_drawspins(int n, const float *positions, const float *directions, const float *colors, ' \
|
94
95
|
'float cone_radius, float cylinder_radius, float cone_height, float cylinder_height)'
|
95
|
-
|
96
|
+
try_extern 'void gr3_drawmolecule(int n, const float *positions, const float *colors, const float *radii, ' \
|
96
97
|
'float bond_radius, const float bond_color[3], float bond_delta)'
|
97
|
-
|
98
|
+
try_extern 'void gr3_createxslicemesh(int *mesh, const unsigned short *data, ' \
|
98
99
|
'unsigned int ix, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
99
100
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
100
101
|
'double step_x, double step_y, double step_z, ' \
|
101
102
|
'double offset_x, double offset_y, double offset_z)'
|
102
|
-
|
103
|
+
try_extern 'void gr3_createyslicemesh(int *mesh, const unsigned short *data, ' \
|
103
104
|
'unsigned int iy, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
104
105
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
105
106
|
'double step_x, double step_y, double step_z, ' \
|
106
107
|
'double offset_x, double offset_y, double offset_z)'
|
107
|
-
|
108
|
+
try_extern 'void gr3_createzslicemesh(int *mesh, const unsigned short *data, ' \
|
108
109
|
'unsigned int iz, unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
109
110
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
110
111
|
'double step_x, double step_y, double step_z, ' \
|
111
112
|
'double offset_x, double offset_y, double offset_z)'
|
112
|
-
|
113
|
+
try_extern 'void gr3_drawxslicemesh(const unsigned short *data, unsigned int ix,' \
|
113
114
|
'unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
114
115
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
115
116
|
'double step_x, double step_y, double step_z, ' \
|
116
117
|
'double offset_x, double offset_y, double offset_z)'
|
117
|
-
|
118
|
+
try_extern 'void gr3_drawyslicemesh(const unsigned short *data, unsigned int iy, ' \
|
118
119
|
'unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
119
120
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
120
121
|
'double step_x, double step_y, double step_z, ' \
|
121
122
|
'double offset_x, double offset_y, double offset_z)'
|
122
|
-
|
123
|
+
try_extern 'void gr3_drawzslicemesh(const unsigned short *data, unsigned int iz, ' \
|
123
124
|
'unsigned int dim_x, unsigned int dim_y, unsigned int dim_z, ' \
|
124
125
|
'unsigned int stride_x, unsigned int stride_y, unsigned int stride_z, ' \
|
125
126
|
'double step_x, double step_y, double step_z, ' \
|
126
127
|
'double offset_x, double offset_y, double offset_z)'
|
127
|
-
#
|
128
|
-
|
128
|
+
# try_extern 'void gr3_drawtrianglesurface(int n, const float *triangles)'
|
129
|
+
try_extern 'void gr_volume(int nx, int ny, int nz, double *data, ' \
|
129
130
|
'int algorithm, double *dmin_ptr, double *dmax_ptr)'
|
130
131
|
end
|
131
132
|
end
|
data/lib/gr3/gr3base.rb
CHANGED
@@ -7,7 +7,9 @@ module GR3
|
|
7
7
|
define_ffi_methods(FFI,
|
8
8
|
prefix: 'gr3_',
|
9
9
|
default_type: :float)
|
10
|
-
|
10
|
+
|
11
|
+
# Workaround for `gr_volume`
|
12
|
+
# See https://github.com/sciapp/gr/issues/95
|
11
13
|
define_ffi_methods(FFI,
|
12
14
|
prefix: 'gr_',
|
13
15
|
default_type: :double)
|
data/lib/gr_commons/extern.rb
CHANGED
@@ -5,12 +5,18 @@ module GRCommons
|
|
5
5
|
module Extern
|
6
6
|
attr_reader :ffi_methods
|
7
7
|
|
8
|
-
#
|
9
|
-
|
8
|
+
# 1. Ignore functions that cannot be attached.
|
9
|
+
# For compatiblity with older versions of GR.
|
10
|
+
# 2. Available function (names) are stored in @ffi_methods.
|
11
|
+
def try_extern(signature, *opts)
|
10
12
|
@ffi_methods ||= []
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
begin
|
14
|
+
func = extern(signature, *opts)
|
15
|
+
@ffi_methods << func.name
|
16
|
+
func
|
17
|
+
rescue StandardError => e
|
18
|
+
warn "#{e.class.name}: #{e.message}"
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
data/lib/gr_commons/fiddley.rb
CHANGED
@@ -32,11 +32,17 @@ module GRCommons
|
|
32
32
|
IRuby.display(data, mime: 'image/gif') if display
|
33
33
|
when 'webm', 'ogg', 'mp4', 'mov'
|
34
34
|
require 'base64'
|
35
|
+
mimespec = if type == 'mov'
|
36
|
+
'movie/quicktime'
|
37
|
+
else
|
38
|
+
"video/#{type}"
|
39
|
+
end
|
35
40
|
data = File.binread(ENV['GKS_FILEPATH'] + '.' + type)
|
36
41
|
if display
|
37
42
|
IRuby.display(
|
38
|
-
"<video controls
|
39
|
-
"src=\"data
|
43
|
+
"<video autoplay controls><source type=\"#{mimespec}\" " \
|
44
|
+
"src=\"data:#{mimespec};base64,#{Base64.encode64(data)}\">" \
|
45
|
+
'</video>',
|
40
46
|
mime: 'text/html'
|
41
47
|
)
|
42
48
|
end
|
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.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
180
|
- !ruby/object:Gem::Version
|
181
181
|
version: '0'
|
182
182
|
requirements: []
|
183
|
-
rubygems_version: 3.
|
183
|
+
rubygems_version: 3.1.2
|
184
184
|
signing_key:
|
185
185
|
specification_version: 4
|
186
186
|
summary: GR for Ruby
|