ruby-gr 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75bb1b87e62ac8956aa3bf5e6d61fca8abc7194f987629c247bbd7613bea1668
4
- data.tar.gz: 1585233f679f8c94c1c596e6e89071f8e45dbba2e0003c91f06e4faf7e0b767f
3
+ metadata.gz: 3f4e784e40e804964849c5c2f05a123b0d3e406ab7a13b7d04fd86585b5eb1c0
4
+ data.tar.gz: bc5d9cd4960f02a434d01a2d61543a06d663408a4cb26eb3717074fd9106735f
5
5
  SHA512:
6
- metadata.gz: 3e0ddfe6e2d814b0db8dca11fef8c8e00f07e95933140b6679d26706b7850ce14af7c0c67b12d29354c2320c38b94552ebc2431c991a9761a7a9ef3a5714d7a2
7
- data.tar.gz: 86fb767cd9ab5654fcb68b104f9a594ee8e3ba496702c3173de4fe6a5a26620aec0df1716910f1fcadc09b0c018fe1c71289b9270cfaa2e4b08782c796923dd7
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 visualisation - for Ruby
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 [GR](https://github.com/sciapp/gr/releases).
19
- Set environment variable GRDIR.
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
- ```ruby
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
- DFloat = Numo::DFloat
54
+ ## GR Installation
62
55
 
63
- xd = -2 + DFloat.new(100).rand * 4
64
- yd = -2 + DFloat.new(100).rand * 4
65
- zd = xd * Numo::NMath.exp(-xd * xd - yd * yd)
56
+ ### Homebrew
66
57
 
67
- h = -0.5 + DFloat.new(20).seq / 19.0
68
-
69
- GR.setviewport(0.1, 0.95, 0.1, 0.95)
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
- x, y, z = GR.gridit(xd, yd, zd, 200, 200)
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
- GR.updatews
64
+ ```sh
65
+ export GRDIR="/usr/local/Cellar/libgr/0.44.1"
85
66
  ```
86
67
 
87
- clifford_attractor.rb
68
+ ### Mac Linux Windows
88
69
 
89
- <p align="center">
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
- ```ruby
94
- require 'gr'
95
-
96
- include Math
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
@@ -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
- extern 'void gr_initgr(void)'
21
- extern 'void gr_opengks(void)'
22
- extern 'void gr_closegks(void)'
23
- extern 'void gr_inqdspsize(double *, double *, int *, int *)'
24
- extern 'void gr_openws(int, char *, int)'
25
- extern 'void gr_closews(int)'
26
- extern 'void gr_activatews(int)'
27
- extern 'void gr_deactivatews(int)'
28
- extern 'void gr_configurews(void)'
29
- extern 'void gr_clearws(void)'
30
- extern 'void gr_updatews(void)'
31
- extern 'void gr_polyline(int, double *, double *)'
32
- extern 'void gr_polymarker(int, double *, double *)'
33
- extern 'void gr_text(double, double, char *)'
34
- extern 'void gr_inqtext(double, double, char *, double *, double *)'
35
- extern 'void gr_fillarea(int, double *, double *)'
36
- extern 'void gr_cellarray(double, double, double, double, ' \
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
- extern 'void gr_nonuniformcellarray(double *, double *, ' \
39
+ try_extern 'void gr_nonuniformcellarray(double *, double *, ' \
39
40
  'int, int, int, int, int, int, int *)'
40
- extern 'void gr_polarcellarray(double, double, double, double, double, double, ' \
41
+ try_extern 'void gr_polarcellarray(double, double, double, double, double, double, ' \
41
42
  'int, int, int, int, int, int, int *)'
42
- extern 'void gr_gdp(int, double *, double *, int, int, int *)'
43
- extern 'void gr_spline(int, double *, double *, int, int)'
44
- extern 'void gr_gridit(int, double *, double *, double *, int, int, ' \
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
- extern 'void gr_setlinetype(int)'
47
- extern 'void gr_inqlinetype(int *)'
48
- extern 'void gr_setlinewidth(double)'
49
- extern 'void gr_inqlinewidth(double *)'
50
- extern 'void gr_setlinecolorind(int)'
51
- extern 'void gr_inqlinecolorind(int *)'
52
- extern 'void gr_setmarkertype(int)'
53
- extern 'void gr_inqmarkertype(int *)'
54
- extern 'void gr_setmarkersize(double)'
55
- extern 'void gr_inqmarkersize(double *)'
56
- extern 'void gr_setmarkercolorind(int)'
57
- extern 'void gr_inqmarkercolorind(int *)'
58
- extern 'void gr_settextfontprec(int, int)'
59
- extern 'void gr_setcharexpan(double)'
60
- extern 'void gr_setcharspace(double)'
61
- extern 'void gr_settextcolorind(int)'
62
- extern 'void gr_setcharheight(double)'
63
- extern 'void gr_setcharup(double, double)'
64
- extern 'void gr_settextpath(int)'
65
- extern 'void gr_settextalign(int, int)'
66
- extern 'void gr_setfillintstyle(int)'
67
- extern 'void gr_inqfillintstyle(int *)'
68
- extern 'void gr_setfillstyle(int)'
69
- extern 'void gr_inqfillstyle(int *)'
70
- extern 'void gr_setfillcolorind(int)'
71
- extern 'void gr_inqfillcolorind(int *)'
72
- extern 'void gr_setcolorrep(int, double, double, double)'
73
- extern 'void gr_setwindow(double, double, double, double)'
74
- extern 'void gr_inqwindow(double *, double *, double *, double *)'
75
- extern 'void gr_setviewport(double, double, double, double)'
76
- extern 'void gr_inqviewport(double *, double *, double *, double *)'
77
- extern 'void gr_selntran(int)'
78
- extern 'void gr_setclip(int)'
79
- extern 'void gr_setwswindow(double, double, double, double)'
80
- extern 'void gr_setwsviewport(double, double, double, double)'
81
- extern 'void gr_createseg(int)'
82
- extern 'void gr_copysegws(int)'
83
- extern 'void gr_redrawsegws(void)'
84
- extern 'void gr_setsegtran(int, double, double, double, double, double, double, double)'
85
- extern 'void gr_closeseg(void)'
86
- extern 'void gr_emergencyclosegks(void)'
87
- extern 'void gr_updategks(void)'
88
- extern 'int gr_setspace(double, double, int, int)'
89
- extern 'void gr_inqspace(double *, double *, int *, int *)'
90
- extern 'int gr_setscale(int)'
91
- extern 'void gr_inqscale(int *)'
92
- extern 'int gr_textext(double, double, char *)'
93
- extern 'void gr_inqtextext(double, double, char *, double *, double *)'
94
- extern 'void gr_axes(double, double, double, double, int, int, double)'
95
- extern 'void gr_axeslbl(double, double, double, double, int, int, double,' \
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
- extern 'void gr_grid(double, double, double, double, int, int)'
99
- extern 'void gr_grid3d(double, double, double, double, double, double, int, int, int)'
100
- extern 'void gr_verrorbars(int, double *, double *, double *, double *)'
101
- extern 'void gr_herrorbars(int, double *, double *, double *, double *)'
102
- extern 'void gr_polyline3d(int, double *, double *, double *)'
103
- extern 'void gr_polymarker3d(int, double *, double *, double *)'
104
- extern 'void gr_axes3d(double, double, double, double, double, double, int, int, int, double)'
105
- extern 'void gr_titles3d(char *, char *, char *)'
106
- extern 'void gr_surface(int, int, double *, double *, double *, int)'
107
- extern 'void gr_contour(int, int, int, double *, double *, double *, double *, int)'
108
- extern 'void gr_contourf(int, int, int, double *, double *, double *, double *, int)'
109
- extern 'void gr_tricontour(int, double *, double *, double *, int, double *)'
110
- extern 'int gr_hexbin(int, double *, double *, int)'
111
- extern 'void gr_setcolormap(int)'
112
- extern 'void gr_inqcolormap(int *)'
113
- extern 'void gr_setcolormapfromrgb(int n, double *r, double *g, double *b, double *x)'
114
- extern 'void gr_colorbar(void)'
115
- extern 'void gr_inqcolor(int, int *)'
116
- extern 'int gr_inqcolorfromrgb(double, double, double)'
117
- extern 'void gr_hsvtorgb(double h, double s, double v, double *r, double *g, double *b)'
118
- extern 'double gr_tick(double, double)'
119
- extern 'int gr_validaterange(double, double)'
120
- extern 'void gr_adjustlimits(double *, double *)'
121
- extern 'void gr_adjustrange(double *, double *)'
122
- extern 'void gr_beginprint(char *)'
123
- extern 'void gr_beginprintext(char *, char *, char *, char *)'
124
- extern 'void gr_endprint(void)'
125
- extern 'void gr_ndctowc(double *, double *)'
126
- extern 'void gr_wctondc(double *, double *)'
127
- extern 'void gr_wc3towc(double *, double *, double *)'
128
- extern 'void gr_drawrect(double, double, double, double)'
129
- extern 'void gr_fillrect(double, double, double, double)'
130
- extern 'void gr_drawarc(double, double, double, double, double, double)'
131
- extern 'void gr_fillarc(double, double, double, double, double, double)'
132
- extern 'void gr_drawpath(int, vertex_t *, unsigned char *, int)'
133
- extern 'void gr_setarrowstyle(int)'
134
- extern 'void gr_setarrowsize(double)'
135
- extern 'void gr_drawarrow(double, double, double, double)'
136
- extern 'int gr_readimage(char *, int *, int *, int **)'
137
- extern 'void gr_drawimage(double, double, double, double, int, int, int *, int)'
138
- extern 'int gr_importgraphics(char *)'
139
- extern 'void gr_setshadow(double, double, double)'
140
- extern 'void gr_settransparency(double)'
141
- extern 'void gr_setcoordxform(double[3][2])'
142
- extern 'void gr_begingraphics(char *)'
143
- extern 'void gr_endgraphics(void)'
144
- extern 'char *gr_getgraphics(void)'
145
- extern 'int gr_drawgraphics(char *)'
146
- extern 'void gr_mathtex(double, double, char *)'
147
- extern 'void gr_inqmathtex(double, double, char *, double *, double *)'
148
- extern 'void gr_beginselection(int, int)'
149
- extern 'void gr_endselection(void)'
150
- extern 'void gr_moveselection(double, double)'
151
- extern 'void gr_resizeselection(int, double, double)'
152
- extern 'void gr_inqbbox(double *, double *, double *, double *)'
153
- extern 'double gr_precision(void)'
154
- extern 'void gr_setregenflags(int)'
155
- extern 'int gr_inqregenflags(void)'
156
- extern 'void gr_savestate(void)'
157
- extern 'void gr_restorestate(void)'
158
- extern 'void gr_selectcontext(int)'
159
- extern 'void gr_destroycontext(int)'
160
- extern 'int gr_uselinespec(char *)'
161
- # extern 'void gr_delaunay(int, const double *, const double *, int *, int **)'
162
- extern 'void gr_reducepoints(int, const double *, const double *, int, double *, double *)'
163
- extern 'void gr_trisurface(int, double *, double *, double *)'
164
- extern 'void gr_gradient(int, int, double *, double *, double *, double *, double *)'
165
- extern 'void gr_quiver(int, int, double *, double *, double *, double *, int)'
166
- extern 'void gr_interp2(int nx, int ny, const double *x, const double *y, const double *z,' \
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
- # extern :gr_newmeta
169
- # extern :gr_deletemeta
170
- # extern :gr_finalizemeta
171
- # extern :gr_meta_args_push
172
- # extern :gr_meta_args_push_buf
173
- # extern :gr_meta_args_contains
174
- # extern :gr_meta_args_clear
175
- # extern :gr_meta_args_remove
176
- # extern :gr_meta_get_box
177
- # extern :gr_openmeta
178
- # extern :gr_recvmeta
179
- # extern :gr_sendmeta
180
- # extern :gr_sendmeta_buf
181
- # extern :gr_sendmeta_ref
182
- # extern :gr_sendmeta_args
183
- # extern :gr_closemeta
184
- # extern :gr_clearmeta
185
- # extern :gr_inputmeta
186
- # extern :gr_mergemeta
187
- # extern :gr_plotmeta
188
- # extern :gr_readmeta
189
- # extern :gr_switchmeta
190
- # extern :gr_registermeta
191
- # extern :gr_unregistermeta
192
- # extern :gr_meta_max_plotid
193
- # extern :gr_dumpmeta
194
- # extern :gr_dumpmeta_json
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
- extern 'const char *gr_version(void)'
197
- extern 'void gr_shade(int, double *, double *, int, int, double *, int, int, int *)'
198
- extern 'void gr_shadepoints(int, double *, double *, int, int, int)'
199
- extern 'void gr_shadelines(int, double *, double *, int, int, int)'
200
- extern 'void gr_panzoom(double, double, double, double, double *, double *, double *, double *)'
201
- # extern 'int gr_findboundary(int, double *, double *, double, double (*)(double, double), int, int *)'
202
- extern 'void gr_setresamplemethod(unsigned int flag)'
203
- extern 'void gr_inqresamplemethod(unsigned int *flag)'
204
- extern 'void gr_path(int, double *, double *, char *)'
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
@@ -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._tricontour_(x, y, z, levels)
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 plot
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
- def scatter3(*args)
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
- alias _tricontour_ tricontour
1195
- def tricontour(*args)
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
- def wireframe(*args)
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.plot_data(false)
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
@@ -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
- extern 'int gr3_init(int *attrib_list)'
21
- extern 'void gr3_free(void *pointer)'
22
- extern 'void gr3_terminate(void)'
23
- extern 'int gr3_geterror(int clear, int *line, const char **file)'
24
- extern 'const char *gr3_getrenderpathstring(void)'
25
- extern 'const char *gr3_geterrorstring(int error)'
26
- # extern 'void gr3_setlogcallback(void (*gr3_log_func)(const char *log_message))'
27
- extern 'int gr3_clear(void)'
28
- extern 'void gr3_usecurrentframebuffer()'
29
- extern 'void gr3_useframebuffer(unsigned int framebuffer)'
30
- extern 'int gr3_setquality(int quality)'
31
- extern 'int gr3_getimage(int width, int height, int use_alpha, char *pixels)'
32
- extern 'int gr3_export(const char *filename, int width, int height)'
33
- extern 'int gr3_drawimage(float xmin, float xmax, float ymin, float ymax, ' \
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
- extern 'int gr3_createmesh_nocopy(int *mesh, int n, ' \
36
+ try_extern 'int gr3_createmesh_nocopy(int *mesh, int n, ' \
36
37
  'float *vertices, float *normals, float *colors)'
37
- extern 'int gr3_createmesh(int *mesh, int n, ' \
38
+ try_extern 'int gr3_createmesh(int *mesh, int n, ' \
38
39
  'const float *vertices, const float *normals, const float *colors)'
39
- extern 'int gr3_createindexedmesh_nocopy(int *mesh, int number_of_vertices, ' \
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
- extern 'int gr3_createindexedmesh(int *mesh, int number_of_vertices, ' \
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
- extern 'void gr3_drawmesh(int mesh, int n, ' \
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
- extern 'void gr3_deletemesh(int mesh)'
48
- extern 'void gr3_cameralookat(float camera_x, float camera_y, float camera_z, ' \
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
- extern 'int gr3_setcameraprojectionparameters(float vertical_field_of_view, ' \
52
+ try_extern 'int gr3_setcameraprojectionparameters(float vertical_field_of_view, ' \
52
53
  'float zNear, float zFar)'
53
- extern 'int gr3_getcameraprojectionparameters(float *vfov, float *znear, float *zfar)'
54
- extern 'void gr3_setlightdirection(float x, float y, float z)'
55
- extern 'void gr3_setbackgroundcolor(float red, float green, float blue, float alpha)'
56
- extern 'int gr3_createheightmapmesh(const float *heightmap, int num_columns, int num_rows)'
57
- extern 'void gr3_drawheightmap(const float *heightmap, ' \
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
- extern 'void gr3_drawconemesh(int n, const float *positions, const float *directions, ' \
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
- extern 'void gr3_drawcylindermesh(int n, const float *positions, const float *directions, ' \
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
- extern 'void gr3_drawspheremesh(int n, const float *positions, ' \
64
+ try_extern 'void gr3_drawspheremesh(int n, const float *positions, ' \
64
65
  'const float *colors, const float *radii)'
65
- extern 'void gr3_drawcubemesh(int n, ' \
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
- extern 'void gr3_setobjectid(int id)'
69
- extern 'int gr3_selectid(int x, int y, int width, int height, int *selection_id)'
70
- extern 'void gr3_getviewmatrix(float *m)'
71
- extern 'void gr3_setviewmatrix(const float *m)'
72
- extern 'int gr3_getprojectiontype(void)'
73
- extern 'void gr3_setprojectiontype(int type)'
74
- # 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)'
75
- # 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)'
76
- extern 'int gr3_createisosurfacemesh(int *mesh, unsigned short *data, ' \
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
- extern 'int gr3_createsurfacemesh(int *mesh, int nx, int ny, ' \
82
+ try_extern 'int gr3_createsurfacemesh(int *mesh, int nx, int ny, ' \
82
83
  'float *px, float *py, float *pz, int option)'
83
- extern 'void gr3_drawmesh_grlike(int mesh, int n, ' \
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
- extern 'void gr3_drawsurface(int mesh)'
87
- extern 'void gr3_surface(int nx, int ny, float *px, float *py, float *pz, int option)'
88
- extern 'int gr3_drawtubemesh(int n, float *points, float *colors, float *radii, ' \
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
- extern 'int gr3_createtubemesh(int *mesh, int n, ' \
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
- extern 'void gr3_drawspins(int n, const float *positions, const float *directions, const float *colors, ' \
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
- extern 'void gr3_drawmolecule(int n, const float *positions, const float *colors, const float *radii, ' \
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
- extern 'void gr3_createxslicemesh(int *mesh, const unsigned short *data, ' \
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
- extern 'void gr3_createyslicemesh(int *mesh, const unsigned short *data, ' \
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
- extern 'void gr3_createzslicemesh(int *mesh, const unsigned short *data, ' \
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
- extern 'void gr3_drawxslicemesh(const unsigned short *data, unsigned int ix,' \
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
- extern 'void gr3_drawyslicemesh(const unsigned short *data, unsigned int iy, ' \
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
- extern 'void gr3_drawzslicemesh(const unsigned short *data, unsigned int iz, ' \
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
- # extern 'void gr3_drawtrianglesurface(int n, const float *triangles)'
128
- extern 'void gr_volume(int nx, int ny, int nz, double *data, ' \
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
@@ -7,7 +7,9 @@ module GR3
7
7
  define_ffi_methods(FFI,
8
8
  prefix: 'gr3_',
9
9
  default_type: :float)
10
- # workaround for `gr_volume`
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)
@@ -5,12 +5,18 @@ module GRCommons
5
5
  module Extern
6
6
  attr_reader :ffi_methods
7
7
 
8
- # Remember added method name
9
- def extern(*args)
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
- func = super(*args)
12
- @ffi_methods << func.name
13
- func
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
@@ -181,8 +181,6 @@ module GRCommons
181
181
  end
182
182
 
183
183
  class MemoryPointer
184
- using Fiddley::RefineStringUnpack1 if defined?(Fiddley::RefineStringUnpack1)
185
-
186
184
  include Fiddley::Utils
187
185
 
188
186
  def initialize(type, num = 1)
@@ -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 autoplay type=\"video/#{type}\" " \
39
- "src=\"data:video/#{type};base64,#{Base64.encode64(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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GRCommons
4
- VERSION = '0.0.11'
4
+ VERSION = '0.0.12'
5
5
  end
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.11
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: 2019-12-21 00:00:00.000000000 Z
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.0.3
183
+ rubygems_version: 3.1.2
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: GR for Ruby