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 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