ruby-gr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gr/ffi.rb ADDED
@@ -0,0 +1,172 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+
5
+ module GR
6
+ module FFI
7
+ extend ::FFI::Library
8
+
9
+ ffi_lib GR.ffi_lib
10
+
11
+ extend GRCommons::AttachFunction
12
+
13
+ # https://github.com/sciapp/gr/blob/master/lib/gr/gr.c
14
+
15
+ attach_function :gr_initgr, %i[], :void
16
+
17
+ # gks - graphical kernel system
18
+ attach_function :gr_opengks, %i[], :void
19
+ attach_function :gr_closegks, %i[], :void
20
+ attach_function :gr_inqdspsize, %i[pointer pointer pointer pointer], :void
21
+
22
+ # ws - workstation
23
+ attach_function :gr_openws, %i[int string int], :void
24
+ attach_function :gr_closews, %i[int], :void
25
+ attach_function :gr_activatews, %i[int], :void
26
+ attach_function :gr_deactivatews, %i[int], :void
27
+ attach_function :gr_configurews, %i[], :void
28
+ attach_function :gr_clearws, %i[], :void
29
+ attach_function :gr_updatews, %i[], :void
30
+
31
+ attach_function :gr_polyline, %i[int pointer pointer], :void
32
+ attach_function :gr_polymarker, %i[int pointer pointer], :void
33
+ attach_function :gr_text, %i[double double string], :void
34
+ attach_function :gr_inqtext, %i[double double string pointer pointer], :void
35
+ attach_function :gr_fillarea, %i[int pointer pointer], :void
36
+ attach_function :gr_cellarray, %i[double double double double int int int int int int pointer], :void
37
+ attach_function :gr_nonuniformcellarray, %i[pointer pointer int int int int int int pointer], :void
38
+ attach_function :gr_polarcellarray, %i[double double double double double double int int int int int int pointer], :void
39
+ attach_function :gr_gdp, %i[int pointer pointer int int pointer], :void
40
+ attach_function :gr_spline, %i[int pointer pointer int int], :void
41
+ attach_function :gr_gridit, %i[int pointer pointer pointer int int pointer pointer pointer], :void
42
+
43
+ # inq - inquiry
44
+ attach_function :gr_setlinetype, %i[int], :void
45
+ attach_function :gr_inqlinetype, %i[pointer], :void
46
+ attach_function :gr_setlinewidth, %i[double], :void
47
+ attach_function :gr_inqlinewidth, %i[pointer], :void
48
+ attach_function :gr_setlinecolorind, %i[int], :void
49
+ attach_function :gr_inqlinecolorind, %i[pointer], :void
50
+ attach_function :gr_setmarkertype, %i[int], :void
51
+ attach_function :gr_inqmarkertype, %i[pointer], :void
52
+ attach_function :gr_setmarkersize, %i[double], :void
53
+ # gr_inqmarkersize is not implemented
54
+ attach_function :gr_setmarkercolorind, %i[int], :void
55
+ attach_function :gr_inqmarkercolorind, %i[pointer], :void
56
+
57
+ attach_function :gr_settextfontprec, %i[int int], :void
58
+ attach_function :gr_setcharexpan, %i[double], :void
59
+ attach_function :gr_setcharspace, %i[double], :void
60
+ attach_function :gr_settextcolorind, %i[int], :void
61
+ attach_function :gr_setcharheight, %i[double], :void
62
+ attach_function :gr_setcharup, %i[double double], :void
63
+ attach_function :gr_settextpath, %i[int], :void
64
+ attach_function :gr_settextalign, %i[int int], :void
65
+
66
+ attach_function :gr_setfillintstyle, %i[int], :void
67
+ attach_function :gr_inqfillintstyle, %i[pointer], :void
68
+ attach_function :gr_setfillstyle, %i[int], :void
69
+ attach_function :gr_inqfillstyle, %i[pointer], :void
70
+ attach_function :gr_setfillcolorind, %i[int], :void
71
+ attach_function :gr_inqfillcolorind, %i[pointer], :void
72
+
73
+ attach_function :gr_setcolorrep, %i[int double double double], :void
74
+ attach_function :gr_setscale, %i[int], :int
75
+ attach_function :gr_inqscale, %i[pointer], :void
76
+
77
+ attach_function :gr_setwindow, %i[double double double double], :void
78
+ attach_function :gr_inqwindow, %i[pointer pointer pointer pointer], :void
79
+ attach_function :gr_setviewport, %i[double double double double], :void
80
+ attach_function :gr_inqviewport, %i[pointer pointer pointer pointer], :void
81
+ attach_function :gr_selntran, %i[int], :void
82
+ attach_function :gr_setclip, %i[int], :void
83
+
84
+ attach_function :gr_setwswindow, %i[double double double double], :void
85
+ attach_function :gr_setwsviewport, %i[double double double double], :void
86
+ attach_function :gr_createseg, %i[int], :void
87
+ attach_function :gr_copysegws, %i[int], :void
88
+ attach_function :gr_redrawsegws, %i[], :void
89
+ attach_function :gr_setsegtran, %i[int double double double double double double double], :void
90
+ attach_function :gr_closeseg, %i[], :void
91
+ attach_function :gr_emergencyclosegks, %i[], :void
92
+ attach_function :gr_updategks, %i[], :void
93
+ attach_function :gr_setspace, %i[double double int int], :void
94
+ attach_function :gr_inqspace, %i[pointer pointer pointer pointer], :void
95
+ attach_function :gr_textext, %i[double double string], :int
96
+ attach_function :gr_inqtextext, %i[double double string pointer pointer], :void
97
+
98
+ # attach_function :gr_axeslbl
99
+ attach_function :gr_axes, %i[double double double double int int double], :void
100
+ attach_function :gr_grid, %i[double double double double int int], :void
101
+ attach_function :gr_grid3d, %i[double double double double double double int int int], :void
102
+ attach_function :gr_verrorbars, %i[int pointer pointer pointer pointer], :void
103
+ attach_function :gr_herrorbars, %i[int pointer pointer pointer pointer], :void
104
+
105
+ attach_function :gr_polyline3d, %i[int pointer pointer pointer], :void
106
+ attach_function :gr_polymarker3d, %i[int pointer pointer pointer], :void
107
+ attach_function :gr_axes3d, %i[double double double double double double int int int double], :void
108
+ attach_function :gr_titles3d, %i[string string string], :void
109
+ attach_function :gr_surface, %i[int int pointer pointer pointer int], :void
110
+ attach_function :gr_trisurface, %i[int pointer pointer pointer], :void
111
+ attach_function :gr_gradient, %i[int int pointer pointer pointer pointer pointer], :void
112
+ attach_function :gr_quiver, %i[int int pointer pointer pointer pointer int], :void
113
+ attach_function :gr_contour, %i[int int int pointer pointer pointer pointer int], :void
114
+ attach_function :gr_contourf, %i[int int int pointer pointer pointer pointer int], :void
115
+ attach_function :gr_tricontour, %i[int pointer pointer pointer int pointer], :void
116
+ attach_function :gr_hexbin, %i[int pointer pointer int], :int
117
+ attach_function :gr_setcolormap, %i[int], :void
118
+ attach_function :gr_inqcolormap, %i[pointer], :void
119
+ attach_function :gr_setcolormapfromrgb, %i[int pointer pointer pointer pointer], :void
120
+ attach_function :gr_colorbar, %i[], :void
121
+ attach_function :gr_inqcolor, %i[int pointer], :void
122
+ attach_function :gr_inqcolorfromrgb, %i[double double double], :int
123
+ attach_function :gr_hsvtorgb, %i[double double double pointer pointer pointer], :void
124
+ attach_function :gr_tick, %i[double double], :double
125
+
126
+ attach_function :gr_validaterange, %i[double double], :int
127
+ attach_function :gr_adjustrange, %i[pointer pointer], :void
128
+ attach_function :gr_beginprint, %i[string], :void
129
+ attach_function :gr_beginprintext, %i[string string string string], :void
130
+ attach_function :gr_endprint, %i[], :void
131
+ attach_function :gr_ndctowc, %i[pointer pointer], :void
132
+ attach_function :gr_wctondc, %i[pointer pointer], :void
133
+ attach_function :gr_wc3towc, %i[pointer pointer pointer], :void
134
+ attach_function :gr_drawrect, %i[double double double double], :void
135
+ attach_function :gr_fillrect, %i[double double double double], :void
136
+ attach_function :gr_drawarc, %i[double double double double double double], :void
137
+ attach_function :gr_fillarc, %i[double double double double double double], :void
138
+ attach_function :gr_drawpath, %i[int pointer pointer int], :void
139
+ attach_function :gr_setarrowstyle, %i[int], :void
140
+ attach_function :gr_setarrowsize, %i[double], :void
141
+ attach_function :gr_drawarrow, %i[double double double double], :void
142
+ attach_function :gr_drawimage, %i[double double double double int int pointer int], :void
143
+ attach_function :gr_setshadow, %i[double double double], :void
144
+ attach_function :gr_settransparency, %i[double], :void
145
+ attach_function :gr_setcoordxform, %i[pointer], :void
146
+ attach_function :gr_begingraphics, %i[string], :void
147
+ attach_function :gr_endgraphics, %i[], :void
148
+ attach_function :gr_mathtex, %i[double double string], :void
149
+ attach_function :gr_inqmathtex, %i[double double string pointer pointer], :void
150
+ attach_function :gr_beginselection, %i[int int], :void
151
+ attach_function :gr_endselection, %i[], :void
152
+ attach_function :gr_moveselection, %i[double double], :void
153
+ attach_function :gr_resizeselection, %i[int double double], :void
154
+ attach_function :gr_inqbbox, %i[pointer pointer pointer pointer], :void
155
+ attach_function :gr_precision, %i[], :void
156
+ attach_function :gr_setregenflags, %i[int], :void
157
+ attach_function :gr_inqregenflags, %i[], :void
158
+ attach_function :gr_savestate, %i[], :void
159
+ attach_function :gr_restorestate, %i[], :void
160
+ attach_function :gr_selectcontext, %i[int], :void
161
+ attach_function :gr_destroycontext, %i[int], :void
162
+ attach_function :gr_uselinespec, %i[string], :void
163
+ attach_function :gr_adjustlimits, %i[pointer pointer], :void
164
+ attach_function :gr_version, %i[], :pointer
165
+
166
+ attach_function :gr_reducepoints, %i[int pointer pointer int pointer pointer], :void
167
+ attach_function :gr_shadepoints, %i[int pointer pointer int int int], :void
168
+ attach_function :gr_shadelines, %i[int pointer pointer int int int], :void
169
+ attach_function :gr_panzoom, %i[double double double double pointer pointer pointer pointer], :void
170
+ # attach_function :gr_findboundary
171
+ end
172
+ end
data/lib/gr/grbase.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GR
4
+ module GRBase
5
+ extend GRCommons::DefineMethods
6
+ define_ffi_methods(FFI,
7
+ prefix: 'gr_',
8
+ default_type: :double)
9
+ end
10
+ private_constant :GRBase
11
+
12
+ extend GRCommons::GRCommonUtils
13
+ end
data/lib/gr3.rb ADDED
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+
5
+ module GR3
6
+ class << self
7
+ attr_reader :ffi_lib
8
+ end
9
+
10
+ # Platforms | path
11
+ # Windows | bin/libgr3.dll
12
+ # MacOSX | lib/libGR3.so (NOT .dylib)
13
+ # Ubuntu | lib/libGR3.so
14
+ raise 'Please set env variable GRDIR' unless ENV['GRDIR']
15
+
16
+ ENV['GKS_FONTPATH'] ||= ENV['GRDIR']
17
+ @ffi_lib = case RbConfig::CONFIG['host_os']
18
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
19
+ File.expand_path('bin/libgr3.dll', ENV['GRDIR'])
20
+ .gsub('/', '\\') # windows backslash
21
+ else
22
+ File.expand_path('lib/libGR3.so', ENV['GRDIR'])
23
+ end
24
+ end
25
+
26
+ require_relative 'gr_commons'
27
+ require 'gr3/ffi'
28
+ require 'gr3/gr3base'
29
+
30
+ module GR3
31
+ extend GRCommons::JupyterSupport
32
+ extend GR3Base
33
+
34
+ # 1. double is the default type
35
+ # 2. don't check size (for now)
36
+
37
+ module CheckError
38
+ FFI.ffi_methods.each do |method|
39
+ method_name = method.to_s.sub(/^gr3_/, '')
40
+ next if method_name == 'geterror'
41
+
42
+ define_method(method_name) do |*args|
43
+ values = super(*args)
44
+ GR3Base.check_error
45
+ values
46
+ end
47
+ end
48
+ end
49
+ extend CheckError
50
+
51
+ class << self
52
+ def createmesh_nocopy(_n, vertices, normals, colors)
53
+ inquiry_int do |mesh|
54
+ super(mesh, vertices, normals, colors)
55
+ end
56
+ end
57
+
58
+ def createmesh(_n, vertices, normals, colors)
59
+ inquiry_int do |mesh|
60
+ super(mesh, vertices, normals, colors)
61
+ end
62
+ end
63
+
64
+ def createindexedmesh_nocopy(num_vertices, vertices, normals, colors, num_indices, indices)
65
+ inquiry_int do |mesh|
66
+ super(mesh, num_vertices, vertices, normals, colors, num_indices, indices)
67
+ end
68
+ end
69
+
70
+ def createindexedmesh(num_vertices, vertices, normals, colors, num_indices, indices)
71
+ inquiry_int do |mesh|
72
+ super(mesh, num_vertices, vertices, normals, colors, num_indices, indices)
73
+ end
74
+ end
75
+
76
+ def getimage(width, height, use_alpha = true)
77
+ bpp = use_alpha ? 4 : 3
78
+ inquiry(uint8: width * height * bpp) do |bitmap|
79
+ super(width, height, (use_alpha ? 1 : 0), bitmap)
80
+ end
81
+ end
82
+
83
+ # gr3_gr
84
+
85
+ def createsurfacemesh(nx, ny, px, py, pz, option = 0)
86
+ inquiry_int do |mesh|
87
+ super(mesh, nx, ny, px, py, pz, option)
88
+ end
89
+ end
90
+
91
+ # gr3_convenience
92
+
93
+ def drawtubemesh(n, points, colors, radii, num_steps = 10, num_segments = 20)
94
+ super(n, points, colors, radii, num_steps, num_segments)
95
+ end
96
+ end
97
+
98
+ IA_END_OF_LIST = 0
99
+ IA_FRAMEBUFFER_WIDTH = 1
100
+ IA_FRAMEBUFFER_HEIGHT = 2
101
+
102
+ ERROR_NONE = 0
103
+ ERROR_INVALID_VALUE = 1
104
+ ERROR_INVALID_ATTRIBUTE = 2
105
+ ERROR_INIT_FAILED = 3
106
+ ERROR_OPENGL_ERR = 4
107
+ ERROR_OUT_OF_MEM = 5
108
+ ERROR_NOT_INITIALIZED = 6
109
+ ERROR_CAMERA_NOT_INITIALIZED = 7
110
+ ERROR_UNKNOWN_FILE_EXTENSION = 8
111
+ ERROR_CANNOT_OPEN_FILE = 9
112
+ ERROR_EXPORT = 10
113
+
114
+ QUALITY_OPENGL_NO_SSAA = 0
115
+ QUALITY_OPENGL_2X_SSAA = 2
116
+ QUALITY_OPENGL_4X_SSAA = 4
117
+ QUALITY_OPENGL_8X_SSAA = 8
118
+ QUALITY_OPENGL_16X_SSAA = 16
119
+ QUALITY_POVRAY_NO_SSAA = 0 + 1
120
+ QUALITY_POVRAY_2X_SSAA = 2 + 1
121
+ QUALITY_POVRAY_4X_SSAA = 4 + 1
122
+ QUALITY_POVRAY_8X_SSAA = 8 + 1
123
+ QUALITY_POVRAY_16X_SSAA = 16 + 1
124
+
125
+ DRAWABLE_OPENGL = 1
126
+ DRAWABLE_GKS = 2
127
+
128
+ SURFACE_DEFAULT = 0
129
+ SURFACE_NORMALS = 1
130
+ SURFACE_FLAT = 2
131
+ SURFACE_GRTRANSFORM = 4
132
+ SURFACE_GRCOLOR = 8
133
+ SURFACE_GRZSHADED = 16
134
+ end
data/lib/gr3/ffi.rb ADDED
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+
5
+ module GR3
6
+ module FFI
7
+ extend ::FFI::Library
8
+
9
+ ffi_lib GR3.ffi_lib
10
+
11
+ extend GRCommons::AttachFunction
12
+
13
+ # gr3.c
14
+
15
+ attach_function :gr3_init, %i[int], :int
16
+ attach_function :gr3_geterror, %i[int pointer pointer], :int
17
+ attach_function :gr3_terminate, %i[], :void
18
+ attach_function :gr3_clear, %i[], :int
19
+ attach_function :gr3_usecurrentframebuffer, %i[], :void
20
+ attach_function :gr3_useframebuffer, %i[uint], :void
21
+ attach_function :gr3_setbackgroundcolor, %i[float float float float], :void
22
+ # getbackgroundcolor not implemented
23
+ attach_function :gr3_createmesh_nocopy, %i[pointer int pointer pointer pointer], :int
24
+ attach_function :gr3_createmesh, %i[pointer int pointer pointer pointer], :int
25
+ attach_function :gr3_createindexedmesh_nocopy, %i[pointer int pointer pointer pointer int pointer], :int
26
+ attach_function :gr3_createindexedmesh, %i[pointer int pointer pointer pointer int pointer], :int
27
+ attach_function :gr3_drawmesh, %i[int int pointer pointer pointer pointer pointer], :void
28
+ attach_function :gr3_deletemesh, %i[int], :void
29
+ attach_function :gr3_setlightdirection, %i[float float float], :void
30
+ attach_function :gr3_cameralookat, %i[float float float float float float float float float], :void
31
+ attach_function :gr3_setcameraprojectionparameters, %i[float float float], :int
32
+ attach_function :gr3_getcameraprojectionparameters, %i[pointer pointer pointer], :int
33
+ attach_function :gr3_drawimage, %i[float float float float int int int], :int
34
+ attach_function :gr3_setquality, %i[int], :int
35
+ attach_function :gr3_getimage, %i[int int int pointer], :int
36
+ attach_function :gr3_export, %i[pointer int int], :int
37
+ attach_function :gr3_free, %i[pointer], :void
38
+ # callback :gr3_log_func, %i[string], :void
39
+ # attach_function :gr3_setlogcallback, %i[:gr3_log_func], :void
40
+ attach_function :gr3_geterrorstring, %i[int], :string
41
+ attach_function :gr3_getrenderpathstring, %i[], :string
42
+ attach_function :gr3_setobjectid, %i[int], :void
43
+ attach_function :gr3_selectid, %i[int int int int pointer], :int
44
+ attach_function :gr3_getviewmatrix, %i[pointer], :void
45
+ # attach_function :gr3_setviewmatrix, %i[pointer], :void
46
+ attach_function :gr3_getprojectiontype, %i[], :int
47
+ attach_function :gr3_setprojectiontype, %i[int], :void
48
+
49
+ # gr3_gr.c
50
+
51
+ attach_function :gr3_createsurfacemesh, %i[pointer int int pointer pointer pointer int], :int
52
+ attach_function :gr3_drawmesh_grlike, %i[int int pointer pointer pointer pointer pointer], :void
53
+ attach_function :gr3_drawsurface, %i[int], :void
54
+ # attach_function gr3_surface, %i[int int pointer pointer pointer int], :void
55
+ # attach_function gr3_drawtrianglesurface, %i[int pointer], :void
56
+ # attach_function gr_volume, %i[int int int pointer int pointer pointer], :void
57
+
58
+ # gr3_convenience.c
59
+
60
+ attach_function :gr3_drawcubemesh, %i[int pointer pointer pointer pointer pointer], :void
61
+ attach_function :gr3_drawcylindermesh, %i[int pointer pointer pointer pointer pointer], :void
62
+ attach_function :gr3_drawconemesh, %i[int pointer pointer pointer pointer pointer], :void
63
+ attach_function :gr3_drawspheremesh, %i[int pointer pointer pointer], :void
64
+ attach_function :gr3_drawheightmap, %i[pointer int int pointer pointer], :void
65
+ attach_function :gr3_createheightmapmesh, %i[pointer int int], :void
66
+ # attach_function :gr3_createisosurfacemesh,
67
+ # %i[pointer pointer ushort uint uint uint uint uint uint double double double double double double], :int
68
+ attach_function :gr3_drawtubemesh, %i[int pointer pointer pointer int int], :int
69
+ # attach_function gr3_drawspins, %i[int pointer pointer pointer float float float float], :void
70
+ # attach_function gr3_drawmolecule, %i[int pointer pointer pointer float pointer float], :void
71
+
72
+ # gr3_slices.c
73
+
74
+ # attach_function gr3_createxslicemesh,
75
+ # %i[pointer pointer uint uint uint uint uint uint uint double double double double double double], :void
76
+ # attach_function gr3_createyslicemesh
77
+ # %i[pointer pointer uint uint uint uint uint uint uint double double double double double double], :void
78
+ # attach_function gr3_createzslicemesh
79
+ # %i[pointer pointer uint uint uint uint uint uint uint double double double double double double], :void
80
+ # attach_function gr3_drawxslicemesh
81
+ # %i[pointer uint uint uint uint uint uint uint double double double double double double], :void
82
+ # attach_function gr3_drawyslicemesh
83
+ # %i[pointer uint uint uint uint uint uint uint double double double double double double], :void
84
+ # attach_function gr3_drawzslicemesh
85
+ # %i[pointer uint uint uint uint uint uint uint double double double double double double], :void
86
+
87
+ # gr3_mc.c
88
+
89
+ # attach_function gr3_triangulateindexed
90
+ # %i[pointer ushort uint uint uint uint uint uint double double double double double double pointer pointer pointer pointer poiter], :void
91
+ # attach_function gr3_triangulate
92
+ # %i[pointer ushort uint uint uint uint uint uint double double double double double double pointer], :void
93
+ end
94
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GR3
4
+ module GR3Base
5
+ extend GRCommons::DefineMethods
6
+ define_ffi_methods(FFI,
7
+ prefix: 'gr3_',
8
+ default_type: :float)
9
+
10
+ def self.check_error
11
+ line = ::FFI::MemoryPointer.new(:int)
12
+ file = ::FFI::MemoryPointer.new(:string, 100)
13
+ e = FFI.gr3_geterror(1, line, file)
14
+ return if e == 0
15
+
16
+ mesg = FFI.gr3_geterrorstring(e)
17
+ raise "GR3 error #{file} #{line} #{mesg}"
18
+ end
19
+ end
20
+ private_constant :GR3Base
21
+
22
+ extend GRCommons::GRCommonUtils
23
+ end
data/lib/gr_commons.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GRCommons
4
+ end
5
+
6
+ require 'gr_commons/attach_function'
7
+ require 'gr_commons/define_methods'
8
+ require 'gr_commons/gr_common_utils'
9
+ require 'gr_commons/jupyter_support'