ruby-gr 0.0.21 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +2 -2
- data/README.md +50 -22
- data/lib/gr.rb +1114 -847
- data/lib/gr/ffi.rb +8 -2
- data/lib/gr/plot.rb +119 -48
- data/lib/gr3.rb +310 -238
- data/lib/gr3/ffi.rb +3 -1
- data/lib/gr_commons/define_methods.rb +5 -5
- data/lib/gr_commons/fiddley.rb +6 -6
- data/lib/gr_commons/gr_common_utils.rb +4 -4
- data/lib/gr_commons/gr_commons.rb +2 -2
- data/lib/gr_commons/gr_lib.rb +83 -0
- data/lib/gr_commons/gr_logger.rb +106 -0
- data/lib/gr_commons/jupyter_support.rb +7 -7
- data/lib/gr_commons/{extern.rb → try_extern.rb} +1 -1
- data/lib/gr_commons/version.rb +1 -1
- data/lib/grm.rb +18 -8
- data/lib/grm/ffi.rb +8 -4
- metadata +9 -9
- data/lib/gr/plot.rb.md +0 -172
- data/lib/gr_commons/search_shared_library.rb +0 -31
data/lib/gr/ffi.rb
CHANGED
@@ -15,7 +15,7 @@ module GR
|
|
15
15
|
raise LoadError, 'Could not find GR Framework'
|
16
16
|
end
|
17
17
|
|
18
|
-
extend GRCommons::
|
18
|
+
extend GRCommons::TryExtern
|
19
19
|
|
20
20
|
# https://github.com/sciapp/gr/blob/master/lib/gr/gr.h
|
21
21
|
# keep same order
|
@@ -41,6 +41,8 @@ module GR
|
|
41
41
|
'int, int, int, int, int, int, int *)'
|
42
42
|
try_extern 'void gr_polarcellarray(double, double, double, double, double, double, ' \
|
43
43
|
'int, int, int, int, int, int, int *)'
|
44
|
+
try_extern 'void gr_nonuniformpolarcellarray(double, double, double *, double *, ' \
|
45
|
+
'int, int, int, int, int, int, int *);'
|
44
46
|
try_extern 'void gr_gdp(int, double *, double *, int, int, int *)'
|
45
47
|
try_extern 'void gr_spline(int, double *, double *, int, int)'
|
46
48
|
try_extern 'void gr_gridit(int, double *, double *, double *, int, int, ' \
|
@@ -174,7 +176,7 @@ module GR
|
|
174
176
|
try_extern 'void gr_shadepoints(int, double *, double *, int, int, int)'
|
175
177
|
try_extern 'void gr_shadelines(int, double *, double *, int, int, int)'
|
176
178
|
try_extern 'void gr_panzoom(double, double, double, double, double *, double *, double *, double *)'
|
177
|
-
|
179
|
+
try_extern 'int gr_findboundary(int, double *, double *, double, double (*)(double, double), int, int *)'
|
178
180
|
try_extern 'void gr_setresamplemethod(unsigned int flag)'
|
179
181
|
try_extern 'void gr_inqresamplemethod(unsigned int *flag)'
|
180
182
|
try_extern 'void gr_path(int, double *, double *, const char *)'
|
@@ -182,6 +184,8 @@ module GR
|
|
182
184
|
try_extern 'void gr_inqborderwidth(double *)'
|
183
185
|
try_extern 'void gr_setbordercolorind(int)'
|
184
186
|
try_extern 'void gr_inqbordercolorind(int *)'
|
187
|
+
try_extern 'void gr_selectclipxform(int)'
|
188
|
+
try_extern 'void gr_inqclipxform(int *);'
|
185
189
|
try_extern 'void gr_setprojectiontype(int)'
|
186
190
|
try_extern 'void gr_inqprojectiontype(int *)'
|
187
191
|
try_extern 'void gr_setperspectiveprojection(double, double, double)'
|
@@ -202,5 +206,7 @@ module GR
|
|
202
206
|
try_extern 'void gr_inqtext3d(double, double, double, char *, int axis, double *, double *)'
|
203
207
|
try_extern 'void gr_settextencoding(int)'
|
204
208
|
try_extern 'void gr_inqtextencoding(int *)'
|
209
|
+
try_extern 'void gr_loadfont(char *, int *)'
|
210
|
+
# gr_setcallback(char *(*)(const char *));
|
205
211
|
end
|
206
212
|
end
|
data/lib/gr/plot.rb
CHANGED
@@ -33,17 +33,53 @@ module GR
|
|
33
33
|
# Plot kinds conform to GR.jl
|
34
34
|
PLOT_KIND = %i[line step scatter stem hist contour contourf hexbin heatmap
|
35
35
|
nonuniformheatmap wireframe surface plot3 scatter3 imshow
|
36
|
-
isosurface polar polarhist polarheatmap
|
37
|
-
volume].freeze
|
36
|
+
isosurface polar polarhist polarheatmap nonuniformpolarheatmap
|
37
|
+
trisurf tricont shade volume].freeze
|
38
38
|
|
39
39
|
# Keyword options conform to GR.jl.
|
40
40
|
KW_ARGS = %i[accelerate algorithm alpha ax backgroundcolor barwidth baseline
|
41
|
-
clabels clear clim color colormap crange figsize grid
|
42
|
-
isovalue kind label labels levels location nbins
|
43
|
-
scale size spec subplot tilt title update xaxis
|
44
|
-
xlabel xlim xlog xrange xticks yaxis yflip ylabel
|
45
|
-
zflip yrange yticks viewport vp where window zaxis
|
46
|
-
zlog zrange zticks].freeze
|
41
|
+
clabels clear clim color colormap crange figsize font grid
|
42
|
+
horizontal isovalue kind label labels levels location nbins
|
43
|
+
ratio rotation scale size spec subplot tilt title update xaxis
|
44
|
+
xflip xform xlabel xlim xlog xrange xticks yaxis yflip ylabel
|
45
|
+
ylim ylog zflip yrange yticks viewport vp where window zaxis
|
46
|
+
zlabel zlim zlog zrange zticks].freeze
|
47
|
+
|
48
|
+
FONTS = {
|
49
|
+
times_roman: 101,
|
50
|
+
times_italic: 102,
|
51
|
+
times_bold: 103,
|
52
|
+
times_bolditalic: 104,
|
53
|
+
helvetica_regular: 105,
|
54
|
+
helvetica_oblique: 106,
|
55
|
+
helvetica_bold: 107,
|
56
|
+
helvetica_boldoblique: 108,
|
57
|
+
courier_regular: 109,
|
58
|
+
courier_oblique: 110,
|
59
|
+
courier_bold: 111,
|
60
|
+
courier_boldoblique: 112,
|
61
|
+
symbol: 113,
|
62
|
+
bookman_light: 114,
|
63
|
+
bookman_lightitalic: 115,
|
64
|
+
bookman_demi: 116,
|
65
|
+
bookman_demiitalic: 117,
|
66
|
+
newcenturyschlbk_roman: 118,
|
67
|
+
newcenturyschlbk_italic: 119,
|
68
|
+
newcenturyschlbk_bold: 120,
|
69
|
+
newcenturyschlbk_bolditalic: 121,
|
70
|
+
avantgarde_book: 122,
|
71
|
+
avantgarde_bookoblique: 123,
|
72
|
+
avantgarde_demi: 124,
|
73
|
+
avantgarde_demioblique: 125,
|
74
|
+
palatino_roman: 126,
|
75
|
+
palatino_italic: 127,
|
76
|
+
palatino_bold: 128,
|
77
|
+
palatino_bolditalic: 129,
|
78
|
+
zapfchancery_mediumitalic: 130,
|
79
|
+
zapfdingbats: 131,
|
80
|
+
cmuserif_math: 232, # original: cmuserif-math
|
81
|
+
dejavusans: 233
|
82
|
+
}.freeze
|
47
83
|
|
48
84
|
@last_plot = nil
|
49
85
|
class << self
|
@@ -122,7 +158,7 @@ module GR
|
|
122
158
|
vp3 + 0.925 * (vp4 - vp3)]
|
123
159
|
|
124
160
|
if %i[contour contourf hexbin heatmap nonuniformheatmap polarheatmap
|
125
|
-
surface trisurf volume].include?(kind)
|
161
|
+
nonuniformpolarheatmap surface trisurf volume].include?(kind)
|
126
162
|
viewport[1] -= 0.1
|
127
163
|
end
|
128
164
|
|
@@ -156,7 +192,7 @@ module GR
|
|
156
192
|
GR.restorestate
|
157
193
|
end
|
158
194
|
|
159
|
-
if %i[polar polarhist polarheatmap].include? kind
|
195
|
+
if %i[polar polarhist polarheatmap nonuniformpolarheatmap].include? kind
|
160
196
|
xmin, xmax, ymin, ymax = viewport
|
161
197
|
xcenter = 0.5 * (xmin + xmax)
|
162
198
|
ycenter = 0.5 * (ymin + ymax)
|
@@ -167,7 +203,7 @@ module GR
|
|
167
203
|
|
168
204
|
def set_window(kind)
|
169
205
|
scale = 0
|
170
|
-
unless %i[polar polarhist polarheatmap].include?(kind)
|
206
|
+
unless %i[polar polarhist polarheatmap nonuniformpolarheatmap].include?(kind)
|
171
207
|
scale |= GR::OPTION_X_LOG if kvs[:xlog]
|
172
208
|
scale |= GR::OPTION_Y_LOG if kvs[:ylog]
|
173
209
|
scale |= GR::OPTION_Z_LOG if kvs[:zlog]
|
@@ -186,7 +222,7 @@ module GR
|
|
186
222
|
end
|
187
223
|
|
188
224
|
major_count = if %i[wireframe surface plot3 scatter3 polar polarhist
|
189
|
-
polarheatmap trisurf volume].include?(kind)
|
225
|
+
polarheatmap nonuniformpolarheatmap trisurf volume].include?(kind)
|
190
226
|
2
|
191
227
|
else
|
192
228
|
5
|
@@ -202,10 +238,10 @@ module GR
|
|
202
238
|
xmax += 0.5
|
203
239
|
end
|
204
240
|
xtick, majorx = if (scale & GR::OPTION_X_LOG) == 0
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
241
|
+
if !%i[heatmap polarheatmap].include?(kind) &&
|
242
|
+
!kvs.has_key?(:xlim) &&
|
243
|
+
!kvs[:panzoom]
|
244
|
+
xmin, xmax = GR.adjustlimits(xmin, xmax)
|
209
245
|
end
|
210
246
|
if kvs.has_key?(:xticks)
|
211
247
|
kvs[:xticks]
|
@@ -231,10 +267,10 @@ module GR
|
|
231
267
|
end
|
232
268
|
end
|
233
269
|
ytick, majory = if (scale & GR::OPTION_Y_LOG) == 0
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
270
|
+
if !%i[heatmap polarheatmap].include?(kind) &&
|
271
|
+
!kvs.has_key?(:ylim) &&
|
272
|
+
!kvs[:panzoom]
|
273
|
+
ymin, ymax = GR.adjustlimits(ymin, ymax)
|
238
274
|
end
|
239
275
|
if kvs.has_key?(:yticks)
|
240
276
|
kvs[:yticks]
|
@@ -264,7 +300,7 @@ module GR
|
|
264
300
|
end
|
265
301
|
|
266
302
|
kvs[:window] = xmin, xmax, ymin, ymax
|
267
|
-
if %i[polar polarhist polarheatmap].include?(kind)
|
303
|
+
if %i[polar polarhist polarheatmap nonuniformpolarheatmap].include?(kind)
|
268
304
|
GR.setwindow(-1, 1, -1, 1)
|
269
305
|
else
|
270
306
|
GR.setwindow(xmin, xmax, ymin, ymax)
|
@@ -345,29 +381,29 @@ module GR
|
|
345
381
|
GR.axes(xtick, ytick, xorg[1], yorg[1], -majorx, -majory, -ticksize)
|
346
382
|
end
|
347
383
|
|
348
|
-
if kvs
|
384
|
+
if kvs.has_key?(:title)
|
349
385
|
GR.savestate
|
350
386
|
GR.settextalign(GR::TEXT_HALIGN_CENTER, GR::TEXT_VALIGN_TOP)
|
351
|
-
text(0.5 * (viewport[0] + viewport[1]), vp[3], kvs[:title])
|
387
|
+
text(0.5 * (viewport[0] + viewport[1]), vp[3], kvs[:title].to_s)
|
352
388
|
GR.restorestate
|
353
389
|
end
|
354
390
|
if %i[wireframe surface plot3 scatter3 trisurf volume].include?(kind)
|
355
|
-
xlabel = kvs[:xlabel] || ''
|
356
|
-
ylabel = kvs[:ylabel] || ''
|
357
|
-
zlabel = kvs[:zlabel] || ''
|
391
|
+
xlabel = (kvs[:xlabel] || '').to_s
|
392
|
+
ylabel = (kvs[:ylabel] || '').to_s
|
393
|
+
zlabel = (kvs[:zlabel] || '').to_s
|
358
394
|
GR.titles3d(xlabel, ylabel, zlabel)
|
359
395
|
else
|
360
396
|
if kvs.has_key?(:xlabel)
|
361
397
|
GR.savestate
|
362
398
|
GR.settextalign(GR::TEXT_HALIGN_CENTER, GR::TEXT_VALIGN_BOTTOM)
|
363
|
-
text(0.5 * (viewport[0] + viewport[1]), vp[2] + 0.5 * charheight, kvs[:xlabel])
|
399
|
+
text(0.5 * (viewport[0] + viewport[1]), vp[2] + 0.5 * charheight, kvs[:xlabel].to_s)
|
364
400
|
GR.restorestate
|
365
401
|
end
|
366
402
|
if kvs.has_key?(:ylabel)
|
367
403
|
GR.savestate
|
368
404
|
GR.settextalign(GR::TEXT_HALIGN_CENTER, GR::TEXT_VALIGN_TOP)
|
369
405
|
GR.setcharup(-1, 0)
|
370
|
-
text(vp[0] + 0.5 * charheight, 0.5 * (viewport[2] + viewport[3]), kvs[:ylabel])
|
406
|
+
text(vp[0] + 0.5 * charheight, 0.5 * (viewport[2] + viewport[3]), kvs[:ylabel].to_s)
|
371
407
|
GR.restorestate
|
372
408
|
end
|
373
409
|
end
|
@@ -475,7 +511,7 @@ module GR
|
|
475
511
|
if kvs.has_key?(:title)
|
476
512
|
GR.savestate
|
477
513
|
GR.settextalign(GR::TEXT_HALIGN_CENTER, GR::TEXT_VALIGN_TOP)
|
478
|
-
text(0.5 * (viewport[0] + viewport[1]), vp[3], kvs[:title])
|
514
|
+
text(0.5 * (viewport[0] + viewport[1]), vp[3], kvs[:title].to_s)
|
479
515
|
GR.restorestate
|
480
516
|
end
|
481
517
|
GR.selntran(1)
|
@@ -577,16 +613,34 @@ module GR
|
|
577
613
|
# Not yet.
|
578
614
|
end
|
579
615
|
|
580
|
-
|
581
|
-
|
582
|
-
|
616
|
+
if kvs.has_key?(:font)
|
617
|
+
name = kvs[:font]
|
618
|
+
# 'Cmuserif-Math' => :cmuserif_math
|
619
|
+
sym_name = name.to_s.gsub('-', '_').downcase.to_sym
|
620
|
+
if FONTS.include?(sym_name)
|
621
|
+
font = FONTS[sym_name]
|
622
|
+
GR.settextfontprec(font, font > 200 ? 3 : 0)
|
623
|
+
else
|
624
|
+
font = GR.loadfont(name)
|
625
|
+
if font >= 0
|
626
|
+
GR.settextfontprec(font, 3)
|
627
|
+
else
|
628
|
+
warn "Unknown font name: #{name}"
|
629
|
+
end
|
630
|
+
end
|
631
|
+
else
|
632
|
+
# The following fonts are the default in GR.jl
|
633
|
+
# Japanese, Chinese, Korean, etc. cannot be displayed.
|
634
|
+
|
635
|
+
# GR.settextfontprec(232, 3) # CM Serif Roman
|
636
|
+
end
|
583
637
|
|
584
638
|
set_viewport(kind, kvs[:subplot])
|
585
639
|
unless kvs[:ax]
|
586
640
|
set_window(kind)
|
587
641
|
if %i[polar polarhist].include?(kind)
|
588
642
|
draw_polar_axes
|
589
|
-
elsif !%i[imshow isosurface polarheatmap].include?(kind)
|
643
|
+
elsif !%i[imshow isosurface polarheatmap nonuniformpolarheatmap].include?(kind)
|
590
644
|
draw_axes(kind)
|
591
645
|
end
|
592
646
|
end
|
@@ -707,7 +761,7 @@ module GR
|
|
707
761
|
GR.fillarc(-ρ[i], ρ[i], -ρ[i], ρ[i], θ[i - 1], θ[i])
|
708
762
|
end
|
709
763
|
|
710
|
-
when :polarheatmap
|
764
|
+
when :polarheatmap, :nonuniformpolarheatmap
|
711
765
|
w, h = z.shape
|
712
766
|
cmap = colormap
|
713
767
|
cmin, cmax = kvs[:zrange]
|
@@ -716,7 +770,15 @@ module GR
|
|
716
770
|
data.reverse(axis: 1) if kvs[:yflip]
|
717
771
|
colors = data * 255 + 1000
|
718
772
|
colors = colors.transpose # Julia is column major
|
719
|
-
|
773
|
+
case kind
|
774
|
+
when :polarheatmap
|
775
|
+
GR.polarcellarray(0, 0, 0, 360, 0, 1, w, h, colors)
|
776
|
+
when :nonuniformpolarheatmap
|
777
|
+
ymax = y.max.to_f
|
778
|
+
ρ = y.map{|i| i / ymax}
|
779
|
+
θ = x.map { |i| i * 180 / Math::PI }
|
780
|
+
GR.nonuniformpolarcellarray(θ, ρ, w, h, colors)
|
781
|
+
end
|
720
782
|
draw_polar_axes
|
721
783
|
kvs[:zrange] = [cmin, cmax]
|
722
784
|
colorbar
|
@@ -748,9 +810,10 @@ module GR
|
|
748
810
|
else
|
749
811
|
h = levels
|
750
812
|
end
|
751
|
-
|
813
|
+
case kind
|
814
|
+
when :contour
|
752
815
|
GR._contour_(x, y, h, z, clabels ? 1 : 1000)
|
753
|
-
|
816
|
+
when :contourf
|
754
817
|
GR._contourf_(x, y, h, z, clabels ? 1 : 0)
|
755
818
|
end
|
756
819
|
colorbar(0, h.length)
|
@@ -972,7 +1035,7 @@ module GR
|
|
972
1035
|
|
973
1036
|
def to_svg
|
974
1037
|
## Need IRuby improvemend.
|
975
|
-
GR.show(false) if ENV['
|
1038
|
+
GR.show(false) if ENV['GKS_WSTYPE'] == 'svg'
|
976
1039
|
end
|
977
1040
|
|
978
1041
|
private
|
@@ -1054,6 +1117,7 @@ module GR
|
|
1054
1117
|
end
|
1055
1118
|
|
1056
1119
|
def inqtext(x, y, s)
|
1120
|
+
s = s.to_s
|
1057
1121
|
if s.length >= 2 && s[0] == '$' && s[-1] == '$'
|
1058
1122
|
GR.inqmathtex(x, y, s[1..-2])
|
1059
1123
|
elsif s.include?('\\') || s.include?('_') || s.include?('^')
|
@@ -1064,6 +1128,7 @@ module GR
|
|
1064
1128
|
end
|
1065
1129
|
|
1066
1130
|
def text(x, y, s)
|
1131
|
+
s = s.to_s
|
1067
1132
|
if s.length >= 2 && s[0] == '$' && s[-1] == '$'
|
1068
1133
|
GR.mathtex(x, y, s[1..-2])
|
1069
1134
|
elsif s.include?('\\') || s.include?('_') || s.include?('^')
|
@@ -1163,20 +1228,12 @@ module GR
|
|
1163
1228
|
[w, h]
|
1164
1229
|
end
|
1165
1230
|
|
1166
|
-
# NOTE: duplicated definition (GRCommonUtils)
|
1167
1231
|
def equal_length(*args)
|
1168
|
-
|
1169
|
-
unless lengths.all? { |l| l == lengths[0] }
|
1170
|
-
raise ArgumentError,
|
1171
|
-
'Sequences must have same length.'
|
1172
|
-
end
|
1173
|
-
|
1174
|
-
lengths[0]
|
1232
|
+
GRCommons::GRCommonUtils.equal_length(*args)
|
1175
1233
|
end
|
1176
1234
|
|
1177
|
-
# NOTE: duplicated definition (GRCommonUtils)
|
1178
1235
|
def narray?(data)
|
1179
|
-
|
1236
|
+
GRCommons::GRCommonUtils.narray?(data)
|
1180
1237
|
end
|
1181
1238
|
end
|
1182
1239
|
|
@@ -1240,6 +1297,20 @@ module GR
|
|
1240
1297
|
end
|
1241
1298
|
end
|
1242
1299
|
|
1300
|
+
# (Plot) Draw a nonuniformpolarheatmap.
|
1301
|
+
def nonuniformpolarheatmap(*args)
|
1302
|
+
# FIXME
|
1303
|
+
args, kv = format_xyzc(*args)
|
1304
|
+
_x, _y, z = args
|
1305
|
+
ysize, xsize = z.shape
|
1306
|
+
z = z.reshape(xsize, ysize)
|
1307
|
+
create_plot(:nonuniformpolarheatmap, kv) do |plt|
|
1308
|
+
plt.kvs[:xlim] ||= [0.5, xsize + 0.5]
|
1309
|
+
plt.kvs[:ylim] ||= [0.5, ysize + 0.5]
|
1310
|
+
plt.args = [[(1..xsize).to_a, (1..ysize).to_a, z, nil, '']]
|
1311
|
+
end
|
1312
|
+
end
|
1313
|
+
|
1243
1314
|
alias _contour_ contour
|
1244
1315
|
# (Plot) Draw a contour plot.
|
1245
1316
|
def contour(*args)
|
data/lib/gr3.rb
CHANGED
@@ -40,39 +40,51 @@
|
|
40
40
|
#
|
41
41
|
# Fiddley is Ruby-FFI compatible API layer for Fiddle.
|
42
42
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
43
|
+
# @note
|
44
|
+
# Why not GR::GR3?
|
45
|
+
# * kojix2 did not want to force gr3 to be loaded when gr is loaded.
|
46
|
+
# * kojix2 did not want to write `GR3 = GR::GR3` or something.
|
47
|
+
# * This is a opinion of kojix2 and may be changed by future maintainers.
|
47
48
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
# *
|
49
|
+
# @note
|
50
|
+
# GR3 uses Numo::Narrray.
|
51
|
+
# * It is difficult to write GR3 modules with only Ruby arrays.
|
52
|
+
# * Numo::Narray has better performance and is easier to read.
|
53
|
+
# * Numo::Narray does not work with JRuby.
|
54
|
+
# * https://github.com/ruby-numo/numo-narray/issues/147
|
53
55
|
#
|
54
56
|
# This is a procedural interface to the GR3 in GR plotting library,
|
55
57
|
# https://github.com/sciapp/gr
|
56
58
|
module GR3
|
57
59
|
class Error < StandardError; end
|
58
60
|
|
61
|
+
class NotFoundError < Error; end
|
62
|
+
|
59
63
|
class << self
|
60
64
|
attr_accessor :ffi_lib
|
61
65
|
end
|
62
66
|
|
63
67
|
require_relative 'gr_commons/gr_commons'
|
64
|
-
extend GRCommons::SearchSharedLibrary
|
65
68
|
|
66
69
|
# Platforms | path
|
67
70
|
# Windows | bin/libGR3.dll
|
68
|
-
# MacOSX | lib/libGR3.
|
71
|
+
# MacOSX | lib/libGR3.dylib (v0.53.0 .so)
|
69
72
|
# Ubuntu | lib/libGR3.so
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
platform = RbConfig::CONFIG['host_os']
|
74
|
+
lib_names, pkg_name = \
|
75
|
+
case platform
|
76
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
77
|
+
[['libGR3.dll'], 'gr3']
|
78
|
+
when /darwin|mac os/
|
79
|
+
[['libGR3.dylib', 'libGR3.so'], 'gr3']
|
80
|
+
else
|
81
|
+
[['libGR3.so'], 'gr3']
|
82
|
+
end
|
83
|
+
lib_path = GRCommons::GRLib.search(lib_names, pkg_name)
|
84
|
+
|
85
|
+
raise NotFoundError, "#{lib_names} not found" if lib_path.nil?
|
86
|
+
|
87
|
+
self.ffi_lib = lib_path
|
76
88
|
|
77
89
|
require_relative 'gr3/version'
|
78
90
|
require_relative 'gr3/ffi'
|
@@ -117,70 +129,82 @@ module GR3
|
|
117
129
|
end
|
118
130
|
extend CheckError
|
119
131
|
|
120
|
-
# Now you can see a lot of methods just calling super here.
|
121
|
-
# They are written to help the yard generate the documentation.
|
122
132
|
class << self
|
123
133
|
# This method initializes the gr3 context.
|
134
|
+
#
|
124
135
|
# @return [Integer]
|
125
|
-
|
126
|
-
|
127
|
-
end
|
136
|
+
#
|
137
|
+
# @!method gr3_init
|
128
138
|
|
129
|
-
|
130
|
-
super
|
131
|
-
end
|
139
|
+
# @!method free
|
132
140
|
|
133
141
|
# This function terminates the gr3 context.
|
134
|
-
|
135
|
-
|
136
|
-
|
142
|
+
#
|
143
|
+
# After calling this function, gr3 is in the same state as when it was first
|
144
|
+
# loaded, except for context-independent variables, i.e. the logging callback.
|
145
|
+
#
|
146
|
+
# @!method terminate
|
137
147
|
|
138
|
-
#
|
148
|
+
# @note This method is defined in the CheckError module.
|
149
|
+
#
|
139
150
|
# This function returns information on the most recent GR3 error.
|
151
|
+
#
|
140
152
|
# @return [Integer]
|
141
|
-
#
|
153
|
+
#
|
154
|
+
# @!method geterror
|
142
155
|
|
143
156
|
# This function allows the user to find out how his commands are rendered.
|
157
|
+
#
|
144
158
|
# If gr3 is initialized, a string in the format:
|
145
|
-
# `"gr3 - " + window toolkit + " - " + framebuffer extension + " - "
|
146
|
-
#
|
147
|
-
#
|
159
|
+
# `"gr3 - " + window toolkit + " - " + framebuffer extension + " - "
|
160
|
+
# + OpenGL version + " - " + OpenGL renderer string`.
|
161
|
+
# For example
|
162
|
+
# `"gr3 - GLX - GL_ARB_framebuffer_object - 2.1 Mesa 7.10.2 - Software Rasterizer"`
|
163
|
+
# might be returned on a Linux system (using GLX) with an available
|
164
|
+
# GL_ARB_framebuffer_object implementation.
|
148
165
|
# If gr3 is not initialized `"Not initialized"` is returned.
|
166
|
+
#
|
149
167
|
# @return [String]
|
168
|
+
#
|
150
169
|
def getrenderpathstring(*)
|
151
170
|
super.to_s
|
152
171
|
end
|
153
172
|
|
154
173
|
# This function returns a string representation of a given error code.
|
174
|
+
#
|
155
175
|
# @return [String]
|
176
|
+
#
|
156
177
|
def geterrorstring(*)
|
157
178
|
super.to_s
|
158
179
|
end
|
159
180
|
|
160
181
|
# This function clears the draw list.
|
182
|
+
#
|
161
183
|
# @return [Integer]
|
162
|
-
|
163
|
-
|
164
|
-
end
|
184
|
+
#
|
185
|
+
# @!method clear
|
165
186
|
|
166
|
-
# Use the currently bound framebuffer as the framebuffer used for drawing to
|
167
|
-
#
|
168
|
-
|
169
|
-
|
170
|
-
|
187
|
+
# Use the currently bound framebuffer as the framebuffer used for drawing to
|
188
|
+
# OpenGL (using gr3.drawimage).
|
189
|
+
# This function is only needed when you do not want to render to 0, the
|
190
|
+
# default framebuffer.
|
191
|
+
#
|
192
|
+
# @!method usecurrentframebuffer
|
171
193
|
|
172
194
|
# Set the framebuffer used for drawing to OpenGL (using gr3.drawimage).
|
173
|
-
#
|
174
|
-
|
175
|
-
|
176
|
-
|
195
|
+
#
|
196
|
+
# This function is only needed when you do not want to render to 0, the
|
197
|
+
# default framebuffer.
|
198
|
+
#
|
199
|
+
# @!method useframebuffer
|
177
200
|
|
178
201
|
# Set rendering quality
|
202
|
+
#
|
179
203
|
# @param quality [] The quality to set
|
204
|
+
#
|
180
205
|
# @return [Integer]
|
181
|
-
|
182
|
-
|
183
|
-
end
|
206
|
+
#
|
207
|
+
# @!method setquality
|
184
208
|
|
185
209
|
# @return [Integer]
|
186
210
|
def getimage(width, height, use_alpha = true)
|
@@ -191,31 +215,31 @@ module GR3
|
|
191
215
|
end
|
192
216
|
|
193
217
|
# @return [Integer]
|
194
|
-
|
195
|
-
super
|
196
|
-
end
|
218
|
+
# @!method export
|
197
219
|
|
198
220
|
# @return [Integer]
|
199
|
-
|
200
|
-
super
|
201
|
-
end
|
221
|
+
# @!method drawimage
|
202
222
|
|
203
|
-
#
|
223
|
+
# This function creates a mesh from vertex position, normal and color data.
|
224
|
+
#
|
204
225
|
# @return [Integer]
|
205
|
-
def createmesh_nocopy(
|
226
|
+
def createmesh_nocopy(n, vertices, normals, colors)
|
206
227
|
inquiry_int do |mesh|
|
207
|
-
super(mesh, vertices, normals, colors)
|
228
|
+
super(mesh, n, vertices, normals, colors)
|
208
229
|
end
|
209
230
|
end
|
210
231
|
|
211
232
|
# This function creates a int from vertex position, normal and color data.
|
212
233
|
# Returns a mesh.
|
213
|
-
#
|
234
|
+
#
|
235
|
+
# @param n [Integer] the number of vertices in the mesh
|
214
236
|
# @param vertices [Array, NArray] the vertex positions
|
215
|
-
# @param normals
|
216
|
-
# @param colors
|
217
|
-
#
|
237
|
+
# @param normals [Array, NArray] the vertex normals
|
238
|
+
# @param colors [Array, NArray] the vertex colors, they should be
|
239
|
+
# white (1,1,1) if you want to change the color for each drawn mesh
|
240
|
+
#
|
218
241
|
# @return [Integer]
|
242
|
+
#
|
219
243
|
def createmesh(n, vertices, normals, colors)
|
220
244
|
inquiry_int do |mesh|
|
221
245
|
super(mesh, n, vertices, normals, colors)
|
@@ -223,6 +247,7 @@ module GR3
|
|
223
247
|
end
|
224
248
|
|
225
249
|
# This function creates a mesh from vertex position, normal and color data.
|
250
|
+
#
|
226
251
|
# @return [Integer]
|
227
252
|
def createindexedmesh_nocopy(num_vertices, vertices, normals, colors, num_indices, indices)
|
228
253
|
inquiry_int do |mesh|
|
@@ -233,150 +258,159 @@ module GR3
|
|
233
258
|
# This function creates an indexed mesh from vertex information (position,
|
234
259
|
# normal and color) and triangle information (indices).
|
235
260
|
# Returns a mesh.
|
236
|
-
#
|
237
|
-
# @param
|
238
|
-
# @param
|
239
|
-
# @param
|
240
|
-
#
|
241
|
-
#
|
242
|
-
#
|
261
|
+
#
|
262
|
+
# @param num_vertices [Integer] the number of vertices in the mesh
|
263
|
+
# @param vertices [Array, NArray] the vertex positions
|
264
|
+
# @param normals [Array, NArray] the vertex normals
|
265
|
+
# @param colors [Array, NArray] the vertex colors, they should be
|
266
|
+
# white (1,1,1) if you want to change
|
267
|
+
# the color for each drawn mesh
|
268
|
+
# @param num_indices [Integer] the number of indices in the mesh
|
269
|
+
# (three times the number of triangles)
|
270
|
+
# @param indices [Array, NArray] the index array (vertex indices for
|
271
|
+
# each triangle)
|
272
|
+
#
|
243
273
|
# @return [Integer]
|
274
|
+
#
|
244
275
|
def createindexedmesh(num_vertices, vertices, normals, colors, num_indices, indices)
|
245
276
|
inquiry_int do |mesh|
|
246
277
|
super(mesh, num_vertices, vertices, normals, colors, num_indices, indices)
|
247
278
|
end
|
248
279
|
end
|
249
280
|
|
250
|
-
# This function adds a mesh to the draw list, so it will be drawn when the
|
251
|
-
# The given data stays owned by the user, a copy will
|
252
|
-
#
|
253
|
-
#
|
254
|
-
#
|
281
|
+
# This function adds a mesh to the draw list, so it will be drawn when the
|
282
|
+
# user calls getpixmap. The given data stays owned by the user, a copy will
|
283
|
+
# be saved in the draw list and the mesh reference counter will be increased.
|
284
|
+
#
|
285
|
+
# This function does not return an error code, because of its asynchronous
|
286
|
+
# nature. If gr3_getpixmap_() returns a GR3_ERROR_OPENGL_ERR, this might be
|
287
|
+
# caused by this function saving unuseable data into the draw list.
|
288
|
+
#
|
289
|
+
# @param mesh [Integer] The mesh to be drawn
|
290
|
+
# @param n [Integer] The number of meshes to be drawn
|
291
|
+
# @param positions [Array, NArray] The positions where the meshes should be drawn
|
255
292
|
# @param directions [Array, NArray] The forward directions the meshes should be facing at
|
256
|
-
# @param ups
|
257
|
-
# @param colors
|
258
|
-
#
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
# This function marks a mesh for deletion and removes the user’s reference
|
264
|
-
# so a user must not use the mesh after
|
293
|
+
# @param ups [Array, NArray] The up directions
|
294
|
+
# @param colors [Array, NArray] The colors the meshes should be drawn in,
|
295
|
+
# it will be multiplied with each vertex color
|
296
|
+
# @param scales [Array, NArray] The scaling factors
|
297
|
+
#
|
298
|
+
# @!method drawmesh
|
299
|
+
|
300
|
+
# This function marks a mesh for deletion and removes the user’s reference
|
301
|
+
# from the mesh’s referenc counter, so a user must not use the mesh after
|
302
|
+
# calling this function.
|
303
|
+
#
|
265
304
|
# @param mesh [Integer] The mesh that should be marked for deletion
|
266
|
-
|
267
|
-
|
268
|
-
end
|
305
|
+
#
|
306
|
+
# @!method deletemesh
|
269
307
|
|
270
308
|
# This function sets the view matrix by getting the position of the camera,
|
271
309
|
# the position of the center of focus and the direction which should point up.
|
310
|
+
# This function takes effect when the next image is created. Therefore if
|
311
|
+
# you want to take pictures of the same data from different perspectives,
|
312
|
+
# you can call and gr3_cameralookat(), gr3_getpixmap_(), gr3_cameralookat(),
|
313
|
+
# gr3_getpixmap_(), … without calling gr3_clear() and gr3_drawmesh() again.
|
314
|
+
#
|
272
315
|
# @param camera_x [Array, NArray] The x-coordinate of the camera
|
273
316
|
# @param camera_y [Array, NArray] The y-coordinate of the camera
|
274
317
|
# @param camera_z [Array, NArray] The z-coordinate of the camera
|
275
318
|
# @param center_x [Array, NArray] The x-coordinate of the center of focus
|
276
319
|
# @param center_y [Array, NArray] The y-coordinate of the center of focus
|
277
320
|
# @param center_z [Array, NArray] The z-coordinate of the center of focus
|
278
|
-
# @param up_x
|
279
|
-
# @param up_y
|
280
|
-
# @param up_z
|
281
|
-
|
282
|
-
|
283
|
-
end
|
321
|
+
# @param up_x [Array, NArray] The x-component of the up direction
|
322
|
+
# @param up_y [Array, NArray] The y-component of the up direction
|
323
|
+
# @param up_z [Array, NArray] The z-component of the up direction
|
324
|
+
#
|
325
|
+
# @!method cameralookat
|
284
326
|
|
285
327
|
# This function sets the projection parameters.
|
286
328
|
# This function takes effect when the next image is created.
|
287
|
-
#
|
288
|
-
#
|
329
|
+
#
|
330
|
+
# The ratio between zFar and zNear influences the precision of the depth
|
331
|
+
# buffer, the greater (zFar/zNear), the more likely are errors. So you should
|
332
|
+
# try to keep both values as close to each other as possible while making
|
333
|
+
# sure everything you want to be visible, is visible.
|
334
|
+
#
|
335
|
+
# @param vertical_field_of_view [Numeric]
|
336
|
+
# This parameter is the vertical field of view in degrees.
|
337
|
+
# It must be greater than 0 and less than 180.
|
289
338
|
# @param zNear [Numeric] The distance to the near clipping plane.
|
290
|
-
# @param zFar
|
339
|
+
# @param zFar [Numeric] The distance to the far clipping plane.
|
340
|
+
#
|
291
341
|
# @return [Integer]
|
292
|
-
|
293
|
-
|
294
|
-
end
|
342
|
+
#
|
343
|
+
# @!method setcameraprojectionparameters
|
295
344
|
|
296
345
|
# Get the projection parameters.
|
346
|
+
#
|
347
|
+
# @param vfov [Array, NArray] Vertical field of view in degrees
|
348
|
+
# @param znear [Array, NArray] The distance to the near clipping plane.
|
349
|
+
# @param zfar [Array, NArray] The distance to the far clipping plane.
|
350
|
+
#
|
297
351
|
# @return [Integer]
|
298
|
-
|
299
|
-
|
300
|
-
end
|
352
|
+
#
|
353
|
+
# @!method getcameraprojectionparameters
|
301
354
|
|
302
|
-
# This function sets the direction of light.
|
303
|
-
#
|
355
|
+
# This function sets the direction of light. If it is called with (0, 0, 0),
|
356
|
+
# the light is always pointing into the same direction as the camera.
|
357
|
+
#
|
304
358
|
# @param x [Numeric] The x-component of the light's direction
|
305
359
|
# @param y [Numeric] The y-component of the light's direction
|
306
360
|
# @param z [Numeric] The z-component of the light's direction
|
307
|
-
|
308
|
-
|
309
|
-
end
|
361
|
+
#
|
362
|
+
# @!method setlightdirection
|
310
363
|
|
311
364
|
# This function sets the background color.
|
312
|
-
|
313
|
-
super
|
314
|
-
end
|
365
|
+
# @!method setbackgroundcolor
|
315
366
|
|
316
367
|
# @return [Integer]
|
317
|
-
|
318
|
-
super
|
319
|
-
end
|
368
|
+
# @!method createheightmapmesh
|
320
369
|
|
321
|
-
|
322
|
-
super
|
323
|
-
end
|
370
|
+
# @!method drawheightmap
|
324
371
|
|
325
372
|
# This function allows drawing a cylinder without requiring a mesh.
|
326
|
-
|
327
|
-
super
|
328
|
-
end
|
373
|
+
# @!method drawconemesh
|
329
374
|
|
330
375
|
# This function allows drawing a cylinder without requiring a mesh.
|
331
|
-
|
332
|
-
super
|
333
|
-
end
|
376
|
+
# @!method drawcylindermesh
|
334
377
|
|
335
378
|
# This function allows drawing a sphere without requiring a mesh.
|
336
|
-
|
337
|
-
super
|
338
|
-
end
|
379
|
+
# @!method drawspheremesh
|
339
380
|
|
340
|
-
|
341
|
-
super
|
342
|
-
end
|
381
|
+
# @!method drawcubemesh
|
343
382
|
|
344
|
-
|
345
|
-
super
|
346
|
-
end
|
383
|
+
# @!method setobjectid
|
347
384
|
|
348
385
|
# @return [Integer]
|
349
|
-
|
350
|
-
super
|
351
|
-
end
|
386
|
+
# @!method selectid
|
352
387
|
|
353
|
-
|
354
|
-
|
355
|
-
end
|
388
|
+
# @param m [Array, NArray] the 4x4 column major view matrix
|
389
|
+
# @!method getviewmatrix
|
356
390
|
|
357
|
-
|
358
|
-
|
359
|
-
end
|
391
|
+
# @param m [Array, NArray] the 4x4 column major view matrix
|
392
|
+
# @!method setviewmatrix
|
360
393
|
|
361
|
-
# the current projection type: GR3_PROJECTION_PERSPECTIVE or GR3_PROJECTION_PARALLEL
|
362
394
|
# @return [Integer]
|
363
|
-
|
364
|
-
|
365
|
-
end
|
395
|
+
# the current projection type: GR3_PROJECTION_PERSPECTIVE or GR3_PROJECTION_PARALLEL
|
396
|
+
# @!method getprojectiontype
|
366
397
|
|
367
|
-
# @param type [Integer]
|
368
|
-
|
369
|
-
|
370
|
-
|
398
|
+
# @param type [Integer]
|
399
|
+
# the new projection type: GR3_PROJECTION_PERSPECTIVE,
|
400
|
+
# GR3_PROJECTION_PARALLEL or GR3_PROJECTION_ORTHOGRAPHIC
|
401
|
+
# @!method setprojectiontype
|
371
402
|
|
372
403
|
# This function creates an isosurface from voxel data using the
|
373
404
|
# marching cubes algorithm.
|
374
405
|
# Returns a mesh.
|
375
|
-
#
|
376
|
-
# @param
|
377
|
-
# @param
|
378
|
-
# @param
|
406
|
+
#
|
407
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
408
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
409
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
410
|
+
# @param isolevel [Integer] isovalue at which the surface will be created
|
411
|
+
#
|
379
412
|
# @return [Integer]
|
413
|
+
#
|
380
414
|
def createisosurfacemesh(grid, step, offset, isolevel)
|
381
415
|
args = _preprocess_createslicemesh(grid, step, offset)
|
382
416
|
grid = args.shift
|
@@ -388,10 +422,11 @@ module GR3
|
|
388
422
|
# Create a mesh of a surface plot similar to gr_surface.
|
389
423
|
# Uses the current colormap. To apply changes of the colormap
|
390
424
|
# a new mesh has to be created.
|
391
|
-
#
|
392
|
-
# @param
|
393
|
-
# @param
|
394
|
-
# @param
|
425
|
+
#
|
426
|
+
# @param nx [Integer] number of points in x-direction
|
427
|
+
# @param ny [Integer] number of points in y-direction
|
428
|
+
# @param x [Array, NArray] an array containing the x-coordinates
|
429
|
+
# @param y [Array, NArray] an array containing the y-coordinates
|
395
430
|
# @param z [Array, NArray] an array of length nx * ny containing the z-coordinates
|
396
431
|
# @param option [Integer] option for the surface mesh; the GR3_SURFACE constants can be combined with bitwise or. See the table below.
|
397
432
|
# * 0 : GR3_SURFACE_DEFAULT
|
@@ -406,6 +441,7 @@ module GR3
|
|
406
441
|
# * color the surface according to the current gr colormap
|
407
442
|
# * 16 : GR3_SURFACE_GRZSHADED
|
408
443
|
# * like GR3_SURFACE_GRCOLOR, but use the z-value directly as color index
|
444
|
+
#
|
409
445
|
# @return [Integer]
|
410
446
|
def createsurfacemesh(nx, ny, x, y, z, option = 0)
|
411
447
|
inquiry_int do |mesh|
|
@@ -419,29 +455,32 @@ module GR3
|
|
419
455
|
# the viewmatrix and the light direction. If necessary, the user has to
|
420
456
|
# save them before the call to this function and restore them after
|
421
457
|
# the call to gr3_drawimage.
|
422
|
-
#
|
423
|
-
# @param
|
424
|
-
# @param
|
458
|
+
#
|
459
|
+
# @param mesh [Integer] the mesh to be drawn
|
460
|
+
# @param n [Integer] the number of meshes to be drawn
|
461
|
+
# @param positions [Array, NArray] the positions where the meshes should be drawn
|
425
462
|
# @param directions [Array, NArray] the forward directions the meshes should be facing at
|
426
|
-
# @param ups
|
427
|
-
# @param colors
|
428
|
-
#
|
429
|
-
|
430
|
-
|
431
|
-
|
463
|
+
# @param ups [Array, NArray] the up directions
|
464
|
+
# @param colors [Array, NArray] the colors the meshes should be drawn in,
|
465
|
+
# it will be multiplied with each vertex color
|
466
|
+
# @param scales [Array, NArray] the scaling factors
|
467
|
+
#
|
468
|
+
# @!method drawmesh_grlike
|
432
469
|
|
433
470
|
# Convenience function for drawing a surfacemesh.
|
471
|
+
#
|
434
472
|
# @param mesh [Integer] the mesh to be drawn
|
435
|
-
|
436
|
-
|
437
|
-
end
|
473
|
+
#
|
474
|
+
# @!method drawsurface
|
438
475
|
|
439
476
|
# Create a surface plot with gr3 and draw it with gks as cellarray.
|
440
|
-
#
|
441
|
-
# @param
|
442
|
-
# @param
|
443
|
-
# @param
|
444
|
-
#
|
477
|
+
#
|
478
|
+
# @param x [Array, NArray] an array containing the x-coordinates
|
479
|
+
# @param y [Array, NArray] an array containing the y-coordinates
|
480
|
+
# @param z [Array, NArray] an array of length nx * ny containing the z-coordinates
|
481
|
+
# @param option [Integer] see the option parameter of gr_surface.
|
482
|
+
# OPTION_COLORED_MESH and OPTION_Z_SHADED_MESH are supported.
|
483
|
+
#
|
445
484
|
def surface(x, y, z, option)
|
446
485
|
nx = x.length
|
447
486
|
ny = y.length
|
@@ -449,17 +488,20 @@ module GR3
|
|
449
488
|
super(nx, ny, x, y, z, option)
|
450
489
|
end
|
451
490
|
|
452
|
-
# drawtubemesh
|
453
491
|
# Draw a tube following a path given by a list of points. The colors and
|
454
492
|
# radii arrays specify the color and radius at each point.
|
455
|
-
#
|
493
|
+
#
|
494
|
+
# @param n [Integer] the number of points given
|
456
495
|
# @param points [Array, NArray] the points the tube should go through
|
457
496
|
# @param colors [Array, NArray] the color at each point
|
458
|
-
# @param radii
|
459
|
-
# @param num_steps
|
460
|
-
#
|
461
|
-
#
|
497
|
+
# @param radii [Array, NArray] the desired tube radius at each point
|
498
|
+
# @param num_steps [Integer] the number of steps between each point,
|
499
|
+
# allowing for a more smooth tube
|
500
|
+
# @param num_segments [Integer] the number of segments each ring of the tube
|
501
|
+
# consists of, e.g. 3 would yield a triangular tube
|
502
|
+
#
|
462
503
|
# @return [Integer]
|
504
|
+
#
|
463
505
|
def drawtubemesh(n, points, colors, radii, num_steps = 10, num_segments = 20)
|
464
506
|
super(n, points, colors, radii, num_steps, num_segments)
|
465
507
|
end
|
@@ -467,12 +509,17 @@ module GR3
|
|
467
509
|
# Create a mesh object in the shape of a tube following a path given by a
|
468
510
|
# list of points. The colors and radii arrays specify the color and radius at
|
469
511
|
# each point.
|
470
|
-
#
|
471
|
-
# @param
|
472
|
-
# @param
|
473
|
-
# @param
|
474
|
-
# @param
|
475
|
-
# @param
|
512
|
+
#
|
513
|
+
# @param n [Integer] the number of points given
|
514
|
+
# @param points [Array, NArray] the points the tube should go through
|
515
|
+
# @param colors [Array, NArray] the color at each point
|
516
|
+
# @param radii [Array, NArray] the desired tube radius at each point
|
517
|
+
# @param num_steps [Integer] the number of steps between each point,
|
518
|
+
# allowing for a more smooth tube
|
519
|
+
# @param num_segments [Integer] the number of segments each ring of the
|
520
|
+
# tube consists of, e.g. 3 would yield a
|
521
|
+
# triangular tube
|
522
|
+
#
|
476
523
|
# @return [Integer]
|
477
524
|
def createtubemesh(n, points, colors, radii, num_steps = 10, num_segments = 20)
|
478
525
|
inquiry_uint do |mesh| # mesh should be Int?
|
@@ -547,12 +594,14 @@ module GR3
|
|
547
594
|
# drawn and at which positions they should go through the data. If neither
|
548
595
|
# x nor y nor z are set, 0.5 will be used for all three.
|
549
596
|
# Returns meshes for the yz-slice, the xz-slice and the xy-slice.
|
550
|
-
#
|
551
|
-
# @param
|
552
|
-
# @param
|
553
|
-
# @param
|
554
|
-
# @param
|
555
|
-
# @param
|
597
|
+
#
|
598
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
599
|
+
# @param x [Numeric] the position of the slice through the xz-plane (0 to 1)
|
600
|
+
# @param y [Numeric] the position of the slice through the xz-plane (0 to 1)
|
601
|
+
# @param z [Numeric] the position of the slice through the xz-plane (0 to 1)
|
602
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
603
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
604
|
+
#
|
556
605
|
def createslicemeshes(grid, x = nil, y = nil, z = nil, step = nil, offset = nil)
|
557
606
|
if [x, y, z].all?(&:nil?)
|
558
607
|
x = 0.5
|
@@ -569,10 +618,11 @@ module GR3
|
|
569
618
|
# using the current GR colormap. Use the x parameter to set the position of
|
570
619
|
# the yz-slice.
|
571
620
|
# Returns a mesh for the yz-slice.
|
572
|
-
#
|
573
|
-
# @param
|
574
|
-
# @param
|
575
|
-
# @param
|
621
|
+
#
|
622
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
623
|
+
# @param x [Numeric] the position of the slice through the xz-plane (0 to 1)
|
624
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
625
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
576
626
|
def createxslicemesh(grid, x = 0.5, step = nil, offset = nil)
|
577
627
|
args = _preprocess_createslicemesh(grid, step, offset)
|
578
628
|
grid = args.shift
|
@@ -586,10 +636,12 @@ module GR3
|
|
586
636
|
# using the current GR colormap. Use the y parameter to set the position of
|
587
637
|
# the xz-slice.
|
588
638
|
# Returns a mesh for the xz-slice.
|
589
|
-
#
|
590
|
-
# @param
|
591
|
-
# @param
|
592
|
-
# @param
|
639
|
+
#
|
640
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
641
|
+
# @param y [Numeric] the position of the slice through the xz-plane (0 to 1)
|
642
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
643
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
644
|
+
#
|
593
645
|
def createyslicemesh(grid, y = 0.5, step = nil, offset = nil)
|
594
646
|
args = _preprocess_createslicemesh(grid, step, offset)
|
595
647
|
grid = args.shift
|
@@ -603,10 +655,12 @@ module GR3
|
|
603
655
|
# using the current GR colormap. Use the z parameter to set the position of
|
604
656
|
# the xy-slice.
|
605
657
|
# Returns a mesh for the xy-slice.
|
606
|
-
#
|
607
|
-
# @param
|
608
|
-
# @param
|
609
|
-
# @param
|
658
|
+
#
|
659
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
660
|
+
# @param z [Numeric] the position of the slice through the xz-plane (0 to 1)
|
661
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
662
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
663
|
+
#
|
610
664
|
def createzslicemesh(grid, z = 0.5, step = nil, offset = nil)
|
611
665
|
args = _preprocess_createslicemesh(grid, step, offset)
|
612
666
|
grid = args.shift
|
@@ -617,15 +671,18 @@ module GR3
|
|
617
671
|
end
|
618
672
|
|
619
673
|
# Draw a yz-slice through the given data, using the current GR colormap.
|
620
|
-
#
|
621
|
-
# @param
|
622
|
-
# @param
|
623
|
-
# @param
|
624
|
-
# @param
|
625
|
-
# @param
|
626
|
-
# @param
|
627
|
-
# @param
|
628
|
-
# @param
|
674
|
+
#
|
675
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
676
|
+
# @param x [Numeric] the position of the slice through the yz-plane (0 to 1)
|
677
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
678
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
679
|
+
# @param position [Array, NArray] the positions where the meshes should be drawn
|
680
|
+
# @param direction [Array, NArray] the forward directions the meshes should be facing at
|
681
|
+
# @param up [Array, NArray] the up directions
|
682
|
+
# @param color [Array, NArray] the colors the meshes should be drawn in,
|
683
|
+
# it will be multiplied with each vertex color
|
684
|
+
# @param scale [Array, NArray] the scaling factors
|
685
|
+
#
|
629
686
|
def drawxslicemesh(grid, x = 0.5, step = nil, offset = nil,
|
630
687
|
position = [0, 0, 0], direction = [0, 0, 1], up = [0, 1, 0],
|
631
688
|
color = [1, 1, 1], scale = [1, 1, 1])
|
@@ -635,15 +692,18 @@ module GR3
|
|
635
692
|
end
|
636
693
|
|
637
694
|
# Draw a xz-slice through the given data, using the current GR colormap.
|
638
|
-
#
|
639
|
-
# @param
|
640
|
-
# @param
|
641
|
-
# @param
|
642
|
-
# @param
|
643
|
-
# @param
|
644
|
-
# @param
|
645
|
-
# @param
|
646
|
-
# @param
|
695
|
+
#
|
696
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
697
|
+
# @param y [Numeric] the position of the slice through the xz-plane (0 to 1)
|
698
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
699
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
700
|
+
# @param position [Array, NArray] the positions where the meshes should be drawn
|
701
|
+
# @param direction [Array, NArray] the forward directions the meshes should be facing at
|
702
|
+
# @param up [Array, NArray] the up directions
|
703
|
+
# @param color [Array, NArray] the colors the meshes should be drawn in,
|
704
|
+
# it will be multiplied with each vertex color
|
705
|
+
# @param scale [Array, NArray] the scaling factors
|
706
|
+
#
|
647
707
|
def drawyslicemesh(grid, y = 0.5, step = nil, offset = nil,
|
648
708
|
position = [0, 0, 0], direction = [0, 0, 1], up = [0, 1, 0],
|
649
709
|
color = [1, 1, 1], scale = [1, 1, 1])
|
@@ -653,15 +713,18 @@ module GR3
|
|
653
713
|
end
|
654
714
|
|
655
715
|
# Draw a xy-slice through the given data, using the current GR colormap.
|
656
|
-
#
|
657
|
-
# @param
|
658
|
-
# @param
|
659
|
-
# @param
|
660
|
-
# @param
|
661
|
-
# @param
|
662
|
-
# @param
|
663
|
-
# @param
|
664
|
-
# @param
|
716
|
+
#
|
717
|
+
# @param grid [NArray] 3D narray array containing the voxel data
|
718
|
+
# @param z [Numeric] the position of the slice through the xy-plane (0 to 1)
|
719
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
720
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
721
|
+
# @param position [Array, NArray] the positions where the meshes should be drawn
|
722
|
+
# @param direction [Array, NArray] the forward directions the meshes should be facing at
|
723
|
+
# @param up [Array, NArray] the up directions
|
724
|
+
# @param color [Array, NArray] the colors the meshes should be drawn in,
|
725
|
+
# it will be multiplied with each vertex color
|
726
|
+
# @param scale [Array, NArray] the scaling factors
|
727
|
+
#
|
665
728
|
def drawzslicemesh(grid, z = 0.5, step = nil, offset = nil,
|
666
729
|
position = [0, 0, 0], direction = [0, 0, 1], up = [0, 1, 0],
|
667
730
|
color = [1, 1, 1], scale = [1, 1, 1])
|
@@ -674,17 +737,20 @@ module GR3
|
|
674
737
|
# Use the parameters x, y or z to specify what slices should be drawn and at
|
675
738
|
# which positions they should go through the data. If neither x nor y nor
|
676
739
|
# z are set, 0.5 will be used for all three.
|
740
|
+
#
|
677
741
|
# @param grid [NArray] 3D narray array containing the voxel data
|
678
|
-
# @param x
|
679
|
-
# @param y
|
680
|
-
# @param z
|
681
|
-
# @param step
|
682
|
-
# @param offset
|
683
|
-
# @param position
|
684
|
-
# @param direction [Array] the forward directions the meshes should be facing at
|
685
|
-
# @param up
|
686
|
-
# @param color
|
687
|
-
#
|
742
|
+
# @param x [Numeric] the position of the slice through the yz-plane (0 to 1)
|
743
|
+
# @param y [Numeric] the position of the slice through the xz-plane (0 to 1)
|
744
|
+
# @param z [Numeric] the position of the slice through the xy-plane (0 to 1)
|
745
|
+
# @param step [Array, NArray] voxel sizes in each direction
|
746
|
+
# @param offset [Array, NArray] coordinate origin in each direction
|
747
|
+
# @param position [Array, NArray] the positions where the meshes should be drawn
|
748
|
+
# @param direction [Array, NArray] the forward directions the meshes should be facing at
|
749
|
+
# @param up [Array, NArray] the up directions
|
750
|
+
# @param color [Array, NArray] the colors the meshes should be drawn in,
|
751
|
+
# it will be multiplied with each vertex color
|
752
|
+
# @param scale [Array, NArray] the scaling factors
|
753
|
+
#
|
688
754
|
def drawslicemeshes(grid, x = nil, y = nil, z = nil, step = nil,
|
689
755
|
offset = nil, position = [0, 0, 0], direction = [0, 0, 1], up = [0, 1, 0],
|
690
756
|
color = [1, 1, 1], scale = [1, 1, 1])
|
@@ -757,6 +823,7 @@ module GR3
|
|
757
823
|
IA_END_OF_LIST = 0
|
758
824
|
IA_FRAMEBUFFER_WIDTH = 1
|
759
825
|
IA_FRAMEBUFFER_HEIGHT = 2
|
826
|
+
IA_NUM_THREADS = 3
|
760
827
|
|
761
828
|
# Error
|
762
829
|
ERROR_NONE = 0
|
@@ -787,6 +854,11 @@ module GR3
|
|
787
854
|
DRAWABLE_OPENGL = 1
|
788
855
|
DRAWABLE_GKS = 2
|
789
856
|
|
857
|
+
# Projection
|
858
|
+
PROJECTION_PERSPECTIVE = 0
|
859
|
+
PROJECTION_PARALLEL = 1
|
860
|
+
PROJECTION_ORTHOGRAPHIC = 2
|
861
|
+
|
790
862
|
# SurfaceOption
|
791
863
|
SURFACE_DEFAULT = 0
|
792
864
|
SURFACE_NORMALS = 1
|