ruby-gr 0.0.15 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d9ef46d38e4a4cb1d52b933af0b1d3a44de17e780bbb0dc404ac62a40026827
4
- data.tar.gz: 9084d96ecd560a87d7540d736e87312cc3351f85bcdc4a2ed1a4eb5b590b3ed0
3
+ metadata.gz: 29a78c0f4c5e3ab3afdc4245ab4dd6d9ce7d6c4f38638901a93487e366c219c6
4
+ data.tar.gz: 72f3fb64d9508c28338214583b185c041362f3e8b31a138ab9990cba4669b27a
5
5
  SHA512:
6
- metadata.gz: 5b4acddc1c8237754644b1e75b9b11d87364e0ef2d5fac59e9ce5685464dcab180817e130a0b244cf27ac3716d0c9e1e6f78192b031a229b42cc1157117aea70
7
- data.tar.gz: cf0daf98117cf7408bb1b8f3e33006043a0cd3c7f17da6f0521d98b2ebf5788be88defc0e6909ed00101a1f3a9023dbfb3cc9879b86c79193fc6750d8f6022f9
6
+ metadata.gz: e0b0766224a375477115ff004467b4b5196689bff28846efabd31f078bd7f36d00a5f736e088f0a8333327d9eb6f8d80e398365e79d26e99f6303e2975b66c1c
7
+ data.tar.gz: 69dbc6bc3859bad4e3d67c2d2131b48c41c659e79c2f9b8b0f3250fb15cb94a3c29cc0b10c217fd1b354784ac969f2d82d9be256f59e5f0224d4d597b94ea131
data/README.md CHANGED
@@ -6,32 +6,38 @@
6
6
  [![Gitter Chat](https://badges.gitter.im/red-data-tools/en.svg)](https://gitter.im/red-data-tools/en)
7
7
  [![Docs Latest](https://img.shields.io/badge/docs-latest-blue.svg)](https://rubydoc.info/gems/ruby-gr)
8
8
 
9
- <p align="center">
10
- <img src="https://user-images.githubusercontent.com/5798442/70857099-13d57600-1f2c-11ea-8f3c-7d81065f13a5.png">
11
- </p>
12
-
13
- :bar_chart: [GR framework](https://github.com/sciapp/gr) - the graphics library for visualization - for Ruby
9
+ ![rdatasets-1](https://i.imgur.com/XEQ6wKs.png)
10
+ ![stem](https://i.imgur.com/3w0Ejrm.png)
11
+ ![histogram](https://i.imgur.com/xUdoA2s.png)
12
+ ![barplot](https://i.imgur.com/52bOFKE.png)
13
+ ![scatter3](https://i.imgur.com/yTTVetQ.png)
14
+ ![volume](https://i.imgur.com/CuRN6oC.png)
15
+ ![griddata](https://i.imgur.com/58HdYDo.png)
16
+ ![2darray](https://i.imgur.com/aKR2FJG.png)
17
+ ![2dpolararray](https://i.imgur.com/cmSrxvS.png)
18
+ ![hexbin](https://i.imgur.com/unWhQHr.png)
19
+ ![rdatasets-2](https://i.imgur.com/ZPit2F5.png)
20
+ ![rdatasets-3](https://i.imgur.com/TbNoxwy.png)
21
+ ![surface](https://i.imgur.com/sWdaHme.png)
22
+ ![face](https://i.imgur.com/uLCKi2r.png)
23
+ ![shade](https://i.imgur.com/VJmS3EQ.png)
24
+
25
+ :bar_chart: [GR framework](https://github.com/sciapp/gr) - powerful visualization library - for Ruby
14
26
 
15
27
  ## Installation
16
28
 
17
29
  GR.rb supports Ruby 2.4+.
18
30
 
19
- [Install GR](#gr-installation).
20
-
21
- Set environment variable GRDIR, if you have not already done.
31
+ First, [install GR](#gr-installation). Next, set environment variable `GRDIR`.
22
32
 
23
33
  ```sh
24
34
  export GRDIR="/your/path/to/gr"
25
35
  ```
26
36
 
27
- Add this line to your application's Gemfile:
28
-
29
37
  ```sh
30
- gem 'ruby-gr'
38
+ gem install ruby-gr
31
39
  ```
32
40
 
33
- GR3 and GR::Plot require [numo-narray](https://github.com/ruby-numo/numo-narray).
34
-
35
41
  ## Quick Start
36
42
 
37
43
  <p align="center">
@@ -47,42 +53,103 @@ y = [0.3, 0.5, 0.4, 0.2, 0.6, 0.7]
47
53
  GR.plot(x, y)
48
54
  ```
49
55
 
50
- ## Examples
56
+ <p align="center">
57
+ <img src="https://user-images.githubusercontent.com/5798442/84570709-242ab880-adca-11ea-9099-3a6b3418bf19.png">
58
+ </p>
59
+
60
+ ```ruby
61
+ require 'gr/plot'
62
+
63
+ x = Numo::DFloat.linspace(0, 10, 101)
64
+ y1 = Numo::NMath.sin(x)
65
+ y2 = Numo::NMath.cos(x)
66
+
67
+ GR.plot(
68
+ [x, y1, 'bo'], [x, y2, 'g*'],
69
+ title: "Multiple plot example",
70
+ xlabel: "x",
71
+ ylabel: "y",
72
+ ylim: [-1.2, 1.2],
73
+ labels: ["sin(x)", "cos(x)"],
74
+ location: 11
75
+ )
76
+ ```
77
+
78
+ Save in PNG format.
51
79
 
52
- Have a look in the [`examples`](https://github.com/red-data-tools/GR.rb/tree/master/examples) directory. Start with [`fast_plot`](https://github.com/red-data-tools/GR.rb/blob/master/examples/fast_plots.rb).
80
+ ```ruby
81
+ GR.savefig("figure.png")
82
+ ```
53
83
 
54
- ## Features
84
+ ## API Overview
55
85
 
56
- #### GR::Plot
86
+ There are two different approaches to plotting with GR.rb. One way is to call Matlab-like APIs. The other is to call GR/GR3 native functions. We are planning to prepare a more object-oriented interface based on [GRUtils.jl](https://github.com/heliosdrm/GRUtils.jl) in the future.
57
87
 
58
- A simple, matlab-style API.
88
+ #### GR::Plot - A simple, matlab-style API.
59
89
 
60
90
  ```ruby
61
91
  require 'gr/plot'
92
+ GR.plot(x, y)
62
93
  ```
63
94
 
64
- `plot` `step` `scatter` `stem` `histogram` `contour` `contourf` `hexbin` `heatmap` `wireframe` `surface` `plot3` `scatter3` `imshow` `isosurface` `polar` `polarhist` `polarheatmap` `trisurf` `tricont` `shade` `volume`
65
-
66
- #### GR
95
+ List of vailable functions. See [GR.rb Wiki](https://github.com/red-data-tools/GR.rb/wiki) for details.
96
+
97
+ [`plot`](../../wiki/Plotting-functions#plot)
98
+ [`step`](../../wiki/Plotting-functions#step)
99
+ [`plot3`](../../wiki/Plotting-functions#plot3)
100
+ [`polar`](../../wiki/Plotting-functions#polar)
101
+ [`scatter`](../../wiki/Plotting-functions#scatter)
102
+ [`scatter3`](../../wiki/Plotting-functions#scatter3)
103
+ [`stem`](../../wiki/Plotting-functions#stem)
104
+ [`barplot`](../../wiki/Plotting-functions#barplot)
105
+ [`histogram`](../../wiki/Plotting-functions#histogram)
106
+ [`polarhistogram`](../../wiki/Plotting-functions#polarhistogram)
107
+ [`hexbin`](../../wiki/Plotting-functions#hexbin)
108
+ [`contour`](../../wiki/Plotting-functions#contour)
109
+ [`contourf`](../../wiki/Plotting-functions#contourf)
110
+ [`tricont`](../../wiki/Plotting-functions#tricont)
111
+ [`surface`](../../wiki/Plotting-functions#surface)
112
+ [`trisurf`](../../wiki/Plotting-functions#trisurf)
113
+ [`wireframe`](../../wiki/Plotting-functions#wireframe)
114
+ [`volume`](../../wiki/Plotting-functions#volume)
115
+ [`heatmap`](../../wiki/Plotting-functions#heatmap)
116
+ [`polarheatmap`](../../wiki/Plotting-functions#polarheatmap)
117
+ [`shade`](../../wiki/Plotting-functions#shade)
118
+ [`imshow`](../../wiki/Plotting-functions#imshow)
119
+ [`isosurface`](../../wiki/Plotting-functions#isosurface)
120
+
121
+ #### GR - A module for calling native GR functions.
122
+
123
+ 2-D Plots and common 3-D Plots.
67
124
 
68
125
  ```ruby
69
126
  require 'gr'
127
+
128
+ # For example
129
+ GR.setviewport(0.1, 0.9, 0.1, 0.9)
130
+ GR.setwindow(0.0, 20.0, 0.0, 20.0)
70
131
  ```
71
132
 
72
- #### GR3
133
+ #### GR3 - A module for calling native GR3 functions.
134
+
135
+ Complex 3D scenes.
73
136
 
74
137
  ```ruby
75
138
  require 'gr3'
139
+
140
+ # For example
141
+ GR3.cameralookat(-3, 2, -2, 0, 0, 0, 0, 0, -1)
76
142
  ```
77
143
 
78
144
  ## Documentation
79
145
 
146
+ - [GR.rb Wiki](https://github.com/red-data-tools/GR.rb/wiki)
80
147
  - [GR Framework](https://gr-framework.org/)
81
148
  - [GR.rb API Documentation](https://rubydoc.info/gems/ruby-gr)
82
149
 
83
150
  ## GR Installation
84
151
 
85
- ### Official binary release
152
+ ### Installing an official release (recommended)
86
153
 
87
154
  Download the [latest release](https://github.com/sciapp/gr/releases).
88
155
 
@@ -92,23 +159,36 @@ Set environment variable GRDIR.
92
159
  export GRDIR="your/path/to/gr"
93
160
  ```
94
161
 
95
- ### Homebrew
162
+ * macOS Catalina and macOS Mojave: See the "How to open an app that hasn’t been notarized or is from an unidentified developer" section of [Safely open apps on your Mac](https://support.apple.com/en-us/HT202491) in the Apple documentation.
163
+
164
+ ### Using your package manager
165
+
166
+ * The third party GR packages for Mac, Linux and Windows are available (for advanced users).
167
+ * If you find any problem, please report the issue [here](https://github.com/red-data-tools/GR.rb/issues).
168
+
169
+ #### Mac - Homebrew
96
170
 
97
171
  ```sh
98
172
  brew install libgr
99
173
  ```
100
174
 
101
- Set environment variable GRDIR.
175
+ Set environment variable `GRDIR`.
102
176
 
103
177
  ```sh
104
178
  export GRDIR=$(brew --prefix libgr)
105
179
  ```
106
180
 
107
- If you fail to build libgr using homebrew, Please feel free to [send us your feedback](https://github.com/red-data-tools/GR.rb/issues).
181
+ #### Linux - APT Yum
182
+
183
+ [packages.red-data-tools.org](https://github.com/red-data-tools/packages.red-data-tools.org) provides `libgr-dev` and `libgr3-dev`.
184
+
185
+ #### Windows - MSYS2
186
+
187
+ If you are using Rubyinstaller, pacman will automatically install [mingw-w64-gr](https://packages.msys2.org/base/mingw-w64-gr) when the gem is installed.
108
188
 
109
189
  ## Backend for Charty
110
190
 
111
- GR.rb is expected to be the backend for [Charty](https://github.com/red-data-tools/charty) in the future.
191
+ GR.rb will be the default backend for [Charty](https://github.com/red-data-tools/charty).
112
192
 
113
193
  ## Contributing
114
194
 
@@ -116,8 +196,9 @@ GR.rb is expected to be the backend for [Charty](https://github.com/red-data-too
116
196
  * Fix bugs and submit pull requests
117
197
  * Write, clarify, or fix documentation
118
198
  * Suggest or add new features
199
+ * Create visualization library based on GR.rb
119
200
 
120
201
  ## Acknowledgements
121
202
 
122
- We would like to thank Josef Heinen, the creator of [GR.jl](https://github.com/jheinen/GR.jl) and Florian Rhiem, the creator of [python-gr](https://github.com/sciapp/python-gr).
203
+ We would like to thank Josef Heinen, the creator of [GR.jl](https://github.com/jheinen/GR.jl), Florian Rhiem, the creator of [python-gr](https://github.com/sciapp/python-gr), and [GR](https://github.com/sciapp/gr) developers.
123
204
 
data/lib/gr.rb CHANGED
@@ -2,40 +2,46 @@
2
2
 
3
3
  # OverView of GR.rb
4
4
  #
5
- # +--------------------+
6
- # +-------------------+ | GR3 module |
7
- # | GR module | | +----------------+ |
8
- # | +---------------+ | | | GR3::FFI | |
9
- # | | GR::FFI | | | | + libGR3.so | |
10
- # | | + libGR.so | | | +----------------+ |
11
- # | +---------------+ | | | define_method |
12
- # | | define_method | | +----------------+ |
13
- # | +---------------+ | | | | GR3::GR3Base | |
14
- # | | | GR::GRBase | | | | v (Private) | |
15
- # | | v (Private) | | | +++--------------+ |
16
- # | +++-------------+ | | | Extend |
17
- # | | Extend | | v +------+ |
18
- # | v | | |Check | |
19
- # | | | <--+Error | |
20
- # +-------+-----------+ | +------+ |
21
- # ^ +---------+----------+
22
- # | +------------------+ ^
23
- # Extend | | GRCommons module | | Extend
24
- # | | +--------------+ | |
25
- # | | | Fiddley | | |
26
- # | | +--------------+ | |
27
- # | | +--------------+ | |
28
- # +----+ CommonUtils +----+
29
- # | | +--------------+ | |
30
- # | | +--------------+ | |
31
- # +----+ Version +----+
32
- # | | +--------------+ |
33
- # | | +--------------+ |
34
- # +----+JupyterSupport| |
35
- # | +--------------+ |
36
- # +------------------+
5
+ # +--------------------+ +--------------------+
6
+ # | GR module | | GR3 module |
7
+ # | +----------------+ | | +----------------+ |
8
+ # | | GR::FFI | | | | GR3::FFI | |
9
+ # | | + libGR.so | | | | + libGR3.so | |
10
+ # | +----------------+ | | +----------------+ |
11
+ # | | define_method | | | define_method |
12
+ # | +----------------+ | | +----------------+ |
13
+ # | | | GR::GRBase | | | | | GR3::GR3Base | |
14
+ # | | v (Pri^ate) | | | | v (Pri^ate) | |
15
+ # | +++--------------+ | | +++--------------+ |
16
+ # | | Extend | | | Extend |
17
+ # | v | | v +-------+ |
18
+ # | +-----------+ | | | Check | |
19
+ # | | GR::Plot | | | <--+ Error | |
20
+ # | +-----------+ | | +-------+ |
21
+ # +--------------------+ +----------+---------+
22
+ # ^ ^
23
+ # | +------------------+ |
24
+ # Extend | | GRCommons module | | Extend
25
+ # | | +--------------+ | |
26
+ # | | | Fiddley | | |
27
+ # | | +--------------+ | |
28
+ # | | +--------------+ | |
29
+ # +----+ CommonUtils +----+
30
+ # | | +--------------+ | |
31
+ # | | +--------------+ | |
32
+ # +----+ Version +----+
33
+ # | | +--------------+ |
34
+ # | | +--------------+ |
35
+ # +----+JupyterSupport| |
36
+ # | +--------------+ |
37
+ # +------------------+
38
+ #
39
+ # (You can edit the above AA diagram with http://asciiflow.com/))
40
+ #
41
+ # Fiddley is Ruby-FFI compatible API layer for Fiddle.
37
42
  #
38
43
  # The GR module works without Numo::Narrray.
44
+ # GR3 and GR::Plot depends on numo-narray.
39
45
  #
40
46
  # This is a procedural interface to the GR plotting library,
41
47
  # https://github.com/sciapp/gr
@@ -46,20 +52,24 @@ module GR
46
52
  attr_accessor :ffi_lib
47
53
  end
48
54
 
49
- raise Error, 'Please set env variable GRDIR' unless ENV['GRDIR']
50
-
51
55
  # Platforms | path
52
56
  # Windows | bin/libgr.dll
53
57
  # MacOSX | lib/libGR.so (NOT .dylib)
54
58
  # Ubuntu | lib/libGR.so
55
59
  if Object.const_defined?(:RubyInstaller)
60
+ ENV['GRDIR'] ||= [
61
+ RubyInstaller::Runtime.msys2_installation.msys_path,
62
+ RubyInstaller::Runtime.msys2_installation.mingwarch
63
+ ].join(File::ALT_SEPARATOR)
56
64
  self.ffi_lib = File.expand_path('bin/libgr.dll', ENV['GRDIR'])
57
65
  RubyInstaller::Runtime.add_dll_directory(File.dirname(ffi_lib))
58
66
  else
67
+ raise Error, 'Please set env variable GRDIR' unless ENV['GRDIR']
68
+
59
69
  self.ffi_lib = File.expand_path('lib/libGR.so', ENV['GRDIR'])
60
70
  end
61
71
 
62
- # Change the default encoding to UTF-8
72
+ # Change the default encoding to UTF-8.
63
73
  ENV['GKS_ENCODING'] ||= 'utf8'
64
74
 
65
75
  require_relative 'gr_commons/gr_commons'
@@ -67,16 +77,19 @@ module GR
67
77
  require_relative 'gr/ffi'
68
78
  require_relative 'gr/grbase'
69
79
 
80
+ # `inquiry` methods etc. are defined here.
81
+ extend GRCommons::GRCommonUtils
82
+
83
+ # Support for Jupyter Notebook / Lab.
70
84
  extend GRCommons::JupyterSupport
71
85
 
72
- # `double` is the default type in GR
86
+ # `double` is the default type in GR.
73
87
  # A Ruby array or NArray passed to GR method is automatically converted to
74
- # a FFI::MemoryPointer in the GRBase class.
88
+ # a Fiddley::MemoryPointer in the GRBase class.
75
89
  extend GRBase
76
90
 
77
91
  # Now you can see a lot of methods just calling super here.
78
- # Why? Do they really need?
79
- # Yes. They are written to help the yard generate the documentation.
92
+ # They are written to help the yard generate the documentation.
80
93
  class << self
81
94
  def initgr(*)
82
95
  super
@@ -230,6 +243,9 @@ module GR
230
243
  # @param dimx [Integer] X dimension of the color index array
231
244
  # @param dimy [Integer] Y dimension of the color index array
232
245
  # @param color [Array, NArray] Color index array
246
+ # The values for `x` and `y` are in world coordinates. `x` must contain
247
+ # `dimx` + 1 elements and `y` must contain `dimy` + 1 elements. The elements
248
+ # i and i+1 are respectively the edges of the i-th cell in X and Y direction.
233
249
  def nonuniformcellarray(x, y, dimx, dimy, color)
234
250
  raise ArgumentError unless x.length == dimx + 1 && y.length == dimy + 1
235
251
 
@@ -1579,10 +1595,10 @@ module GR
1579
1595
  super(npoints, x, y, ntri, triangles.ref)
1580
1596
  end
1581
1597
  if n_tri > 0
1582
- tri = triangles.to_str(3 * n_tri * Fiddle::SIZEOF_INT).unpack('l*') # Int32
1598
+ tri = triangles.to_str(dim * n_tri * Fiddle::SIZEOF_INT).unpack('l*') # Int32
1583
1599
  # Ruby : 0-based indexing
1584
1600
  # Julia : 1-based indexing
1585
- tri = tri.each_slice(3).to_a
1601
+ tri = tri.each_slice(dim).to_a
1586
1602
  [n_tri, tri]
1587
1603
  else
1588
1604
  0
@@ -1789,31 +1805,32 @@ module GR
1789
1805
  end
1790
1806
  end
1791
1807
 
1792
- # Draw paths using given vertices and path codes.
1808
+ # Draw paths using the given vertices and path codes.
1793
1809
  # @param x [Array, NArray] A list containing the X coordinates
1794
1810
  # @param y [Array, NArray] A list containing the Y coordinates
1795
- # @param codes [String] Path codes
1811
+ # @param codes [String] A list containing the path codes
1796
1812
  # The following path codes are recognized:
1797
1813
  # * M, m
1798
- # * moveto x, y
1814
+ # * moveto x, y
1799
1815
  # * L, l
1800
- # * lineto x, y
1816
+ # * lineto x, y
1801
1817
  # * Q, q
1802
- # * quadratic Bézier x1, y1 x2, y2
1818
+ # * quadratic Bézier x1, x2 y1, y2
1803
1819
  # * C, c
1804
- # * cubic Bézier x1, y1 x2, y2 x3, y3
1805
- # * R, r
1806
- # * rectangle w, h
1820
+ # * cubic Bézier x1, x2, x3 y1, y2, y3
1807
1821
  # * A, a
1808
- # * arc w, h a1, a2
1822
+ # * arc rx, a1, reserved ry, a2, reserved
1809
1823
  # * Z
1810
- # * closepath -
1824
+ # * close path -
1811
1825
  # * s
1812
- # * stroke -
1826
+ # * stroke -
1827
+ # * s
1828
+ # * close path and stroke -
1813
1829
  # * f
1814
- # * fill -
1815
- # The values for `x` and `y` are in normalized device coordinates.
1816
- # The `codes` describe several patch primitives that can be used to create compound paths.
1830
+ # * close path and fill -
1831
+ # * F
1832
+ # * close path, fill and stroke -
1833
+ # See https://gr-framework.org/python-gr.html#gr.path for more details.
1817
1834
  def path(x, y, codes)
1818
1835
  n = equal_length(x, y)
1819
1836
  super(n, x, y, codes)
@@ -1959,22 +1976,41 @@ module GR
1959
1976
  end
1960
1977
  end
1961
1978
 
1962
- # This is an interface for REPL based languages to enable an easier way to
1963
- # rotate around an object.
1979
+ # Set the camera for orthographic or perspective projection.
1964
1980
  # The center of the 3d window is used as the focus point and the camera is
1965
- # positioned relative to it, using spherical coordinates. This function can
1966
- # therefore also be used if the user prefers spherical coordinates to setting
1967
- # the direct camera position, but with reduced functionality in comparison
1968
- # to gr.settransformationparameters, gr.setperspectiveprojection and
1969
- # gr.setorthographicprojection.
1970
- # @param phi [Numeric] phi angle of the spherical coordinates
1971
- # @param theta [Numeric] theta angle of the spherical coordinates
1981
+ # positioned relative to it, using camera distance, rotation and tilt similar
1982
+ # to gr_setspace. This function can be used if the user prefers spherical
1983
+ # coordinates to setting the camera position directly, but has reduced
1984
+ # functionality in comparison to GR.settransformationparameters,
1985
+ # GR.setperspectiveprojection and GR.setorthographicprojection.
1986
+ # @param phi [Numeric] azimuthal angle of the spherical coordinates
1987
+ # @param theta [Numeric] polar angle of the spherical coordinates
1972
1988
  # @param fov [Numeric] vertical field of view (0 or NaN for orthographic projection)
1973
- # @param radius [Numeric] distance between the camera and the focus point
1989
+ # @param camera_distance [Numeric] distance between the camera and the focus point
1974
1990
  # (0 or NaN for the radius of the object's smallest bounding sphere)
1975
- def transformationinterfaceforrepl(*)
1991
+ def setspace3d(*)
1992
+ super
1993
+ end
1994
+
1995
+ def text3d(*)
1976
1996
  super
1977
1997
  end
1998
+
1999
+ def inqtext3d(x, y, z, string, axis)
2000
+ inquiry [{ double: 16 }, { double: 16 }] do |tbx, tby|
2001
+ super(x, y, z, string, axis, tbx, tby)
2002
+ end
2003
+ end
2004
+
2005
+ def settextencoding(*)
2006
+ super
2007
+ end
2008
+
2009
+ def inqtextencoding
2010
+ inquiry_int do |encoding|
2011
+ super(encoding)
2012
+ end
2013
+ end
1978
2014
  end
1979
2015
 
1980
2016
  ASF_BUNDLED = 0
@@ -2193,6 +2229,9 @@ module GR
2193
2229
  XFORM_CUBIC = 4
2194
2230
  XFORM_EQUALIZED = 5
2195
2231
 
2232
+ ENCODING_LATIN1 = 300
2233
+ ENCODING_UTF8 = 301
2234
+
2196
2235
  UPSAMPLE_VERTICAL_DEFAULT = 0x00000000
2197
2236
  UPSAMPLE_HORIZONTAL_DEFAULT = 0x00000000
2198
2237
  DOWNSAMPLE_VERTICAL_DEFAULT = 0x00000000