rays 0.1.46 → 0.1.48

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/rays/bitmap.cpp +499 -0
  3. data/.doc/ext/rays/camera.cpp +2 -2
  4. data/.doc/ext/rays/defs.cpp +35 -11
  5. data/.doc/ext/rays/font.cpp +50 -2
  6. data/.doc/ext/rays/native.cpp +2 -4
  7. data/.doc/ext/rays/painter.cpp +111 -6
  8. data/.doc/ext/rays/polygon.cpp +152 -41
  9. data/.doc/ext/rays/polyline.cpp +89 -10
  10. data/.doc/ext/rays/rays.cpp +91 -11
  11. data/.doc/ext/rays/{noise.cpp → util.cpp} +2 -2
  12. data/.github/workflows/test.yml +0 -1
  13. data/ChangeLog.md +38 -0
  14. data/Rakefile +4 -4
  15. data/VERSION +1 -1
  16. data/ext/rays/bitmap.cpp +501 -0
  17. data/ext/rays/camera.cpp +2 -2
  18. data/ext/rays/defs.cpp +35 -11
  19. data/ext/rays/defs.h +56 -3
  20. data/ext/rays/font.cpp +56 -4
  21. data/ext/rays/native.cpp +2 -4
  22. data/ext/rays/painter.cpp +125 -11
  23. data/ext/rays/polygon.cpp +161 -41
  24. data/ext/rays/polyline.cpp +95 -9
  25. data/ext/rays/rays.cpp +91 -11
  26. data/ext/rays/{noise.cpp → util.cpp} +2 -2
  27. data/include/rays/defs.h +24 -0
  28. data/include/rays/font.h +17 -3
  29. data/include/rays/matrix.h +2 -0
  30. data/include/rays/painter.h +29 -1
  31. data/include/rays/polygon.h +57 -33
  32. data/include/rays/polyline.h +20 -1
  33. data/include/rays/ruby/polygon.h +0 -11
  34. data/include/rays/ruby/rays.h +4 -0
  35. data/include/rays/{noise.h → util.h} +2 -2
  36. data/lib/rays/color.rb +1 -1
  37. data/lib/rays/font.rb +1 -1
  38. data/lib/rays/image.rb +1 -1
  39. data/lib/rays/painter.rb +13 -2
  40. data/lib/rays/point.rb +1 -1
  41. data/lib/rays/polygon.rb +54 -16
  42. data/lib/rays/polyline.rb +54 -8
  43. data/lib/rays.rb +0 -1
  44. data/rays.gemspec +2 -2
  45. data/src/color_space.cpp +2 -2
  46. data/src/font.cpp +24 -2
  47. data/src/font.h +8 -1
  48. data/src/ios/font.mm +88 -27
  49. data/src/matrix.cpp +8 -0
  50. data/src/osx/font.mm +90 -28
  51. data/src/osx/helper.h +2 -2
  52. data/src/osx/helper.mm +2 -2
  53. data/src/painter.cpp +227 -90
  54. data/src/painter.h +11 -3
  55. data/src/polygon.cpp +588 -205
  56. data/src/polyline.cpp +154 -28
  57. data/src/polyline.h +3 -5
  58. data/src/shader.cpp +36 -4
  59. data/src/shader.h +1 -1
  60. data/src/texture.cpp +2 -2
  61. data/src/{noise.cpp → util.cpp} +1 -1
  62. data/src/win32/font.cpp +1 -1
  63. data/test/test_bitmap.rb +16 -2
  64. data/test/test_color.rb +4 -0
  65. data/test/test_font.rb +20 -2
  66. data/test/test_image.rb +18 -18
  67. data/test/test_point.rb +1 -1
  68. data/test/test_polygon.rb +52 -45
  69. data/test/test_polyline.rb +191 -72
  70. metadata +11 -17
  71. data/.doc/ext/rays/polygon_line.cpp +0 -97
  72. data/ext/rays/polygon_line.cpp +0 -100
  73. data/lib/rays/polygon_line.rb +0 -33
  74. data/test/test_polygon_line.rb +0 -164
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include <assert.h>
5
5
  #include <vector>
6
+ #include "rays/ruby/color.h"
6
7
  #include "rays/ruby/point.h"
7
8
  #include "rays/ruby/bounds.h"
8
9
  #include "rays/ruby/polygon.h"
@@ -24,13 +25,15 @@ RUCY_DEF_ALLOC(alloc, klass)
24
25
  RUCY_END
25
26
 
26
27
  static
27
- RUCY_DEF2(setup, points, loop)
28
+ RUCY_DEF6(setup, points, loop, fill, colors, texcoords, hole)
28
29
  {
29
30
  CHECK;
30
31
 
31
- std::vector<Rays::Point> array;
32
- get_line_args(&array, points.size(), points.as_array());
33
- *THIS = Rays::Polyline(&array[0], array.size(), loop);
32
+ CreateParams params(points, colors, texcoords);
33
+ *THIS = Rays::Polyline(
34
+ params.ppoints(), params.size(), loop, fill,
35
+ params.pcolors(), params.ptexcoords(),
36
+ hole);
34
37
  }
35
38
  RUCY_END
36
39
 
@@ -60,13 +63,29 @@ RUCY_DEF0(bounds)
60
63
  RUCY_END
61
64
 
62
65
  static
63
- RUCY_DEF0(loop)
66
+ RUCY_DEF0(is_loop)
64
67
  {
65
68
  CHECK;
66
69
  return value(THIS->loop());
67
70
  }
68
71
  RUCY_END
69
72
 
73
+ static
74
+ RUCY_DEF0(is_fill)
75
+ {
76
+ CHECK;
77
+ return value(THIS->fill());
78
+ }
79
+ RUCY_END
80
+
81
+ static
82
+ RUCY_DEF0(is_hole)
83
+ {
84
+ CHECK;
85
+ return value(THIS->hole());
86
+ }
87
+ RUCY_END
88
+
70
89
  static
71
90
  RUCY_DEF0(size)
72
91
  {
@@ -100,7 +119,31 @@ RUCY_DEF1(get_at, index)
100
119
  RUCY_END
101
120
 
102
121
  static
103
- RUCY_DEF0(each)
122
+ RUCY_DEF0(has_points)
123
+ {
124
+ CHECK;
125
+ return value(THIS->points() && !THIS->empty());
126
+ }
127
+ RUCY_END
128
+
129
+ static
130
+ RUCY_DEF0(has_colors)
131
+ {
132
+ CHECK;
133
+ return value(THIS->colors() && !THIS->empty());
134
+ }
135
+ RUCY_END
136
+
137
+ static
138
+ RUCY_DEF0(has_texcoords)
139
+ {
140
+ CHECK;
141
+ return value(THIS->texcoords() && !THIS->empty());
142
+ }
143
+ RUCY_END
144
+
145
+ static
146
+ RUCY_DEF0(each_point)
104
147
  {
105
148
  CHECK;
106
149
 
@@ -111,6 +154,42 @@ RUCY_DEF0(each)
111
154
  }
112
155
  RUCY_END
113
156
 
157
+ static
158
+ RUCY_DEF0(each_color)
159
+ {
160
+ CHECK;
161
+
162
+ const Rays::Color* colors = THIS->colors();
163
+
164
+ Value ret = Qnil;
165
+ if (colors)
166
+ {
167
+ size_t size = THIS->size();
168
+ for (size_t i = 0; i < size; ++i)
169
+ ret = rb_yield(value(colors[i]));
170
+ }
171
+ return ret;
172
+ }
173
+ RUCY_END
174
+
175
+ static
176
+ RUCY_DEF0(each_texcoord)
177
+ {
178
+ CHECK;
179
+
180
+ const Rays::Coord3* texcoords = THIS->texcoords();
181
+
182
+ Value ret = Qnil;
183
+ if (texcoords)
184
+ {
185
+ size_t size = THIS->size();
186
+ for (size_t i = 0; i < size; ++i)
187
+ ret = rb_yield(value(*(Rays::Point*) &texcoords[i]));
188
+ }
189
+ return ret;
190
+ }
191
+ RUCY_END
192
+
114
193
 
115
194
  static Class cPolyline;
116
195
 
@@ -124,11 +203,18 @@ Init_rays_polyline ()
124
203
  cPolyline.define_private_method("setup", setup);
125
204
  cPolyline.define_method("expand", expand);
126
205
  cPolyline.define_method("bounds", bounds);
127
- cPolyline.define_method("loop?", loop);
206
+ cPolyline.define_method("loop?", is_loop);
207
+ cPolyline.define_method("fill?", is_fill);
208
+ cPolyline.define_method("hole?", is_hole);
128
209
  cPolyline.define_method("size", size);
129
210
  cPolyline.define_method("empty?", is_empty);
130
211
  cPolyline.define_method("[]", get_at);
131
- cPolyline.define_method("each", each);
212
+ cPolyline.define_method("points?", has_points);
213
+ cPolyline.define_method("colors?", has_colors);
214
+ cPolyline.define_method("texcoords?", has_texcoords);
215
+ cPolyline.define_private_method("each_point!", each_point);
216
+ cPolyline.define_private_method("each_color!", each_color);
217
+ cPolyline.define_private_method("each_texcoord!", each_texcoord);
132
218
  }
133
219
 
134
220
 
@@ -148,7 +234,7 @@ namespace Rucy
148
234
  else if (argv->is_num() || argv->is_array())
149
235
  {
150
236
  std::vector<Rays::Point> points;
151
- get_line_args(&points, argc, argv);
237
+ get_points(&points, argc, argv);
152
238
  return Rays::Polyline(&points[0], points.size());
153
239
  }
154
240
  }
data/ext/rays/rays.cpp CHANGED
@@ -9,6 +9,8 @@
9
9
  RUCY_DEFINE_CONVERT_TO(Rays::CapType)
10
10
  RUCY_DEFINE_CONVERT_TO(Rays::JoinType)
11
11
  RUCY_DEFINE_CONVERT_TO(Rays::BlendMode)
12
+ RUCY_DEFINE_CONVERT_TO(Rays::TexCoordMode)
13
+ RUCY_DEFINE_CONVERT_TO(Rays::TexCoordWrap)
12
14
 
13
15
 
14
16
  template <typename T>
@@ -16,7 +18,7 @@ struct EnumType
16
18
  {
17
19
  const char* name;
18
20
  const char* short_name;
19
- T type;
21
+ T value;
20
22
  };
21
23
 
22
24
  static std::vector<EnumType<Rays::CapType>> CAP_TYPES({
@@ -43,6 +45,16 @@ static std::vector<EnumType<Rays::BlendMode>> BLEND_MODES({
43
45
  {"BLEND_REPLACE", "REPLACE", Rays::BLEND_REPLACE},
44
46
  });
45
47
 
48
+ static std::vector<EnumType<Rays::TexCoordMode>> TEXCOORD_MODES({
49
+ {"TEXCOORD_IMAGE", "IMAGE", Rays::TEXCOORD_IMAGE},
50
+ {"TEXCOORD_NORMAL", "NORMAL", Rays::TEXCOORD_NORMAL},
51
+ });
52
+
53
+ static std::vector<EnumType<Rays::TexCoordWrap>> TEXCOORD_WRAPS({
54
+ {"TEXCOORD_CLAMP", "CLAMP", Rays::TEXCOORD_CLAMP},
55
+ {"TEXCOORD_REPEAT", "REPEAT", Rays::TEXCOORD_REPEAT},
56
+ });
57
+
46
58
 
47
59
  static
48
60
  RUCY_DEF0(init)
@@ -72,13 +84,19 @@ Init_rays ()
72
84
  mRays.define_singleton_method("fin!", fin);
73
85
 
74
86
  for (auto it = CAP_TYPES.begin(); it != CAP_TYPES.end(); ++it)
75
- mRays.define_const(it->name, it->type);
87
+ mRays.define_const(it->name, it->value);
76
88
 
77
89
  for (auto it = JOIN_TYPES.begin(); it != JOIN_TYPES.end(); ++it)
78
- mRays.define_const(it->name, it->type);
90
+ mRays.define_const(it->name, it->value);
79
91
 
80
92
  for (auto it = BLEND_MODES.begin(); it != BLEND_MODES.end(); ++it)
81
- mRays.define_const(it->name, it->type);
93
+ mRays.define_const(it->name, it->value);
94
+
95
+ for (auto it = TEXCOORD_MODES.begin(); it != TEXCOORD_MODES.end(); ++it)
96
+ mRays.define_const(it->name, it->value);
97
+
98
+ for (auto it = TEXCOORD_WRAPS.begin(); it != TEXCOORD_WRAPS.end(); ++it)
99
+ mRays.define_const(it->name, it->value);
82
100
  }
83
101
 
84
102
 
@@ -102,7 +120,7 @@ namespace Rucy
102
120
  strcasecmp(str, it->name) == 0 ||
103
121
  strcasecmp(str, it->short_name) == 0)
104
122
  {
105
- return it->type;
123
+ return it->value;
106
124
  }
107
125
  }
108
126
  argument_error(__FILE__, __LINE__, "invalid cap type -- %s", str);
@@ -133,7 +151,7 @@ namespace Rucy
133
151
  strcasecmp(str, it->name) == 0 ||
134
152
  strcasecmp(str, it->short_name) == 0)
135
153
  {
136
- return it->type;
154
+ return it->value;
137
155
  }
138
156
  }
139
157
  argument_error(__FILE__, __LINE__, "invalid join type -- %s", str);
@@ -164,18 +182,80 @@ namespace Rucy
164
182
  strcasecmp(str, it->name) == 0 ||
165
183
  strcasecmp(str, it->short_name) == 0)
166
184
  {
167
- return it->type;
185
+ return it->value;
168
186
  }
169
187
  }
170
188
  argument_error(__FILE__, __LINE__, "invalid blend mode -- %s", str);
171
189
  }
172
190
  }
173
191
 
174
- int type = value_to<int>(*argv, convert);
175
- if (type < 0 || Rays::BLEND_MAX <= type)
176
- argument_error(__FILE__, __LINE__, "invalid blend mode -- %d", type);
192
+ int mode = value_to<int>(*argv, convert);
193
+ if (mode < 0 || Rays::BLEND_MAX <= mode)
194
+ argument_error(__FILE__, __LINE__, "invalid blend mode -- %d", mode);
195
+
196
+ return (Rays::BlendMode) mode;
197
+ }
198
+
199
+
200
+ template <> Rays::TexCoordMode
201
+ value_to<Rays::TexCoordMode> (int argc, const Value* argv, bool convert)
202
+ {
203
+ assert(argc > 0 && argv);
204
+
205
+ if (convert)
206
+ {
207
+ if (argv->is_s() || argv->is_sym())
208
+ {
209
+ const char* str = argv->c_str();
210
+ for (auto it = TEXCOORD_MODES.begin(); it != TEXCOORD_MODES.end(); ++it)
211
+ {
212
+ if (
213
+ strcasecmp(str, it->name) == 0 ||
214
+ strcasecmp(str, it->short_name) == 0)
215
+ {
216
+ return it->value;
217
+ }
218
+ }
219
+ argument_error(__FILE__, __LINE__, "invalid texcoord mode -- %s", str);
220
+ }
221
+ }
222
+
223
+ int mode = value_to<int>(*argv, convert);
224
+ if (mode < 0 || Rays::TEXCOORD_MODE_MAX <= mode)
225
+ argument_error(__FILE__, __LINE__, "invalid texcoord mode -- %d", mode);
226
+
227
+ return (Rays::TexCoordMode) mode;
228
+ }
229
+
230
+
231
+ template <> Rays::TexCoordWrap
232
+ value_to<Rays::TexCoordWrap> (int argc, const Value* argv, bool convert)
233
+ {
234
+ assert(argc > 0 && argv);
235
+
236
+ if (convert)
237
+ {
238
+ if (argv->is_s() || argv->is_sym())
239
+ {
240
+ const char* str = argv->c_str();
241
+ for (auto it = TEXCOORD_WRAPS.begin(); it != TEXCOORD_WRAPS.end(); ++it)
242
+ {
243
+ if (
244
+ strcasecmp(str, it->name) == 0 ||
245
+ strcasecmp(str, it->short_name) == 0)
246
+ {
247
+ return it->value;
248
+ }
249
+ }
250
+ argument_error(__FILE__, __LINE__, "invalid texcoord wrap -- %s", str);
251
+ }
252
+ }
253
+
254
+ int wrap = value_to<int>(*argv, convert);
255
+ if (wrap < 0 || Rays::TEXCOORD_WRAP_MAX <= wrap)
256
+ argument_error(__FILE__, __LINE__, "invalid texcoord wrap -- %d", wrap);
177
257
 
178
- return (Rays::BlendMode) type;
258
+ return (Rays::TexCoordWrap) wrap;
179
259
  }
180
260
 
181
261
 
@@ -1,4 +1,4 @@
1
- #include "rays/noise.h"
1
+ #include "rays/util.h"
2
2
  #include "rays/ruby/point.h"
3
3
  #include "defs.h"
4
4
 
@@ -47,7 +47,7 @@ RUCY_END
47
47
 
48
48
 
49
49
  void
50
- Init_rays_noise ()
50
+ Init_rays_util ()
51
51
  {
52
52
  Module mRays = define_module("Rays");
53
53
  mRays.define_singleton_method("perlin", perlin);
data/include/rays/defs.h CHANGED
@@ -82,6 +82,30 @@ namespace Rays
82
82
  };// BlendMode
83
83
 
84
84
 
85
+ enum TexCoordMode
86
+ {
87
+
88
+ TEXCOORD_IMAGE = 0,
89
+
90
+ TEXCOORD_NORMAL,
91
+
92
+ TEXCOORD_MODE_MAX
93
+
94
+ };// TexCoordMode
95
+
96
+
97
+ enum TexCoordWrap
98
+ {
99
+
100
+ TEXCOORD_CLAMP = 0,
101
+
102
+ TEXCOORD_REPEAT,
103
+
104
+ TEXCOORD_WRAP_MAX
105
+
106
+ };// TexCoordWrap
107
+
108
+
85
109
  }// Rays
86
110
 
87
111
 
data/include/rays/font.h CHANGED
@@ -4,6 +4,8 @@
4
4
  #define __RAYS_FONT_H__
5
5
 
6
6
 
7
+ #include <vector>
8
+ #include <map>
7
9
  #include <xot/pimpl.h>
8
10
  #include <rays/defs.h>
9
11
 
@@ -17,15 +19,21 @@ namespace Rays
17
19
 
18
20
  public:
19
21
 
22
+ enum {DEFAULT_SIZE = 12};
23
+
20
24
  Font ();
21
25
 
22
- Font (const char* name, coord size = 0);
26
+ Font (const char* name, coord size = DEFAULT_SIZE);
23
27
 
24
28
  ~Font ();
25
29
 
30
+ Font dup () const;
31
+
26
32
  String name () const;
27
33
 
28
- coord size () const;
34
+ void set_size (coord size);
35
+
36
+ coord size () const;
29
37
 
30
38
  coord get_width (const char* str) const;
31
39
 
@@ -45,7 +53,13 @@ namespace Rays
45
53
  };// Font
46
54
 
47
55
 
48
- const Font& default_font ();
56
+ typedef std::map<String, std::vector<String>> FontFamilyMap;
57
+
58
+ const FontFamilyMap& get_font_families ();
59
+
60
+ Font load_font (const char* path, coord size = Font::DEFAULT_SIZE);
61
+
62
+ const Font& get_default_font ();
49
63
 
50
64
 
51
65
  }// Rays
@@ -43,6 +43,8 @@ namespace Rays
43
43
 
44
44
  Matrix (const coord* elements, size_t size);
45
45
 
46
+ Matrix (void* null);
47
+
46
48
  This dup () const;
47
49
 
48
50
  This& reset (coord value = 1);
@@ -65,7 +65,17 @@ namespace Rays
65
65
 
66
66
  void clear ();
67
67
 
68
- void polygon (const Polygon& polygon);
68
+ void polygon (
69
+ const Polygon& polygon, coord x = 0, coord y = 0);
70
+
71
+ void polygon (
72
+ const Polygon& polygon, const Point& position);
73
+
74
+ void polygon (
75
+ const Polygon& polygon, coord x, coord y, coord width, coord height);
76
+
77
+ void polygon (
78
+ const Polygon& polygon, const Bounds& bounds);
69
79
 
70
80
  void line (coord x1, coord y1, coord x2, coord y2);
71
81
 
@@ -205,6 +215,10 @@ namespace Rays
205
215
 
206
216
  coord stroke_width () const;
207
217
 
218
+ void set_stroke_outset (float outset);
219
+
220
+ float stroke_outset () const;
221
+
208
222
  void set_stroke_cap (CapType cap);
209
223
 
210
224
  CapType stroke_cap () const;
@@ -239,6 +253,20 @@ namespace Rays
239
253
 
240
254
  const Font& font () const;
241
255
 
256
+ void set_texture (const Image& image);
257
+
258
+ void no_texture ();
259
+
260
+ const Image& texture () const;
261
+
262
+ void set_texcoord_mode (TexCoordMode mode);
263
+
264
+ TexCoordMode texcoord_mode () const;
265
+
266
+ void set_texcoord_wrap (TexCoordWrap wrap);
267
+
268
+ TexCoordWrap texcoord_wrap () const;
269
+
242
270
  void set_shader (const Shader& shader);
243
271
 
244
272
  void no_shader ();
@@ -20,45 +20,19 @@ namespace Rays
20
20
 
21
21
  public:
22
22
 
23
- struct Line : public Polyline
24
- {
23
+ typedef std::vector<Polyline> PolylineList;
25
24
 
26
- typedef Polyline Super;
27
-
28
- public:
29
-
30
- Line ();
31
-
32
- Line (
33
- const Point* points, size_t size,
34
- bool loop = true,
35
- bool hole = false);
36
-
37
- Line (const Polyline& polyline, bool hole = false);
38
-
39
- bool hole () const;
40
-
41
- operator bool () const;
42
-
43
- bool operator ! () const;
44
-
45
- private:
46
-
47
- bool hole_;
48
-
49
- };// Line
50
-
51
- typedef std::vector<Line> LineList;
52
-
53
- typedef LineList::const_iterator const_iterator;
25
+ typedef PolylineList::const_iterator const_iterator;
54
26
 
55
27
  Polygon ();
56
28
 
57
- Polygon (const Point* points, size_t size, bool loop = true);
29
+ Polygon (
30
+ const Point* points, size_t size, bool loop = true,
31
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
58
32
 
59
33
  Polygon (const Polyline& polyline);
60
34
 
61
- Polygon (const Line* lines, size_t size);
35
+ Polygon (const Polyline* polylines, size_t size);
62
36
 
63
37
  ~Polygon ();
64
38
 
@@ -79,12 +53,14 @@ namespace Rays
79
53
 
80
54
  const_iterator end () const;
81
55
 
82
- const Line& operator [] (size_t index) const;
56
+ const Polyline& operator [] (size_t index) const;
83
57
 
84
58
  operator bool () const;
85
59
 
86
60
  bool operator ! () const;
87
61
 
62
+ friend Polygon operator + (const Polygon& lhs, const Polyline& rhs);
63
+
88
64
  friend Polygon operator + (const Polygon& lhs, const Polygon& rhs);
89
65
 
90
66
  friend Polygon operator - (const Polygon& lhs, const Polygon& rhs);
@@ -110,6 +86,13 @@ namespace Rays
110
86
  };// Polygon
111
87
 
112
88
 
89
+ Polygon create_point (coord x, coord y);
90
+
91
+ Polygon create_point (const Point& point);
92
+
93
+ Polygon create_points (const Point* points, size_t size);
94
+
95
+
113
96
  Polygon create_line (coord x1, coord y1, coord x2, coord y2);
114
97
 
115
98
  Polygon create_line (const Point& p1, const Point& p2);
@@ -118,6 +101,29 @@ namespace Rays
118
101
 
119
102
  Polygon create_line (const Polyline& polyline);
120
103
 
104
+ Polygon create_lines (const Point* points, size_t size);
105
+
106
+
107
+ Polygon create_triangle (
108
+ coord x1, coord y1, coord x2, coord y2, coord x3, coord y3,
109
+ bool loop = true);
110
+
111
+ Polygon create_triangle (
112
+ const Point& p1, const Point& p2, const Point& p3,
113
+ bool loop = true);
114
+
115
+ Polygon create_triangles (
116
+ const Point* points, size_t size, bool loop = true,
117
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
118
+
119
+ Polygon create_triangle_strip (
120
+ const Point* points, size_t size,
121
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
122
+
123
+ Polygon create_triangle_fan (
124
+ const Point* points, size_t size,
125
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
126
+
121
127
 
122
128
  Polygon create_rect (
123
129
  coord x, coord y, coord width, coord height,
@@ -142,6 +148,24 @@ namespace Rays
142
148
  uint nsegment = 0);
143
149
 
144
150
 
151
+ Polygon create_quad (
152
+ coord x1, coord y1, coord x2, coord y2,
153
+ coord x3, coord y3, coord x4, coord y4,
154
+ bool loop = true);
155
+
156
+ Polygon create_quad (
157
+ const Point& p1, const Point& p2, const Point& p3, const Point& p4,
158
+ bool loop = true);
159
+
160
+ Polygon create_quads (
161
+ const Point* points, size_t size, bool loop = true,
162
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
163
+
164
+ Polygon create_quad_strip (
165
+ const Point* points, size_t size,
166
+ const Color* colors = NULL, const Coord3* texcoords = NULL);
167
+
168
+
145
169
  Polygon create_ellipse (
146
170
  coord x, coord y, coord width, coord height = 0,
147
171
  const Point& hole_size = 0,
@@ -15,6 +15,7 @@ namespace Rays
15
15
  {
16
16
 
17
17
 
18
+ struct Color;
18
19
  class Polygon;
19
20
 
20
21
 
@@ -29,7 +30,15 @@ namespace Rays
29
30
 
30
31
  Polyline ();
31
32
 
32
- Polyline (const Point* points, size_t size, bool loop = false);
33
+ Polyline (
34
+ const Point* points, size_t size, bool loop = false,
35
+ const Color* colors = NULL, const Coord3* texcoords = NULL,
36
+ bool hole = false);
37
+
38
+ Polyline (
39
+ const Point* points, size_t size, bool loop, bool fill,
40
+ const Color* colors = NULL, const Coord3* texcoords = NULL,
41
+ bool hole = false);
33
42
 
34
43
  ~Polyline ();
35
44
 
@@ -44,6 +53,16 @@ namespace Rays
44
53
 
45
54
  bool loop () const;
46
55
 
56
+ bool fill () const;
57
+
58
+ bool hole () const;
59
+
60
+ const Point* points () const;
61
+
62
+ const Color* colors () const;
63
+
64
+ const Coord3* texcoords () const;
65
+
47
66
  size_t size () const;
48
67
 
49
68
  bool empty () const;
@@ -11,8 +11,6 @@
11
11
 
12
12
  RUCY_DECLARE_VALUE_OR_ARRAY_FROM_TO(Rays::Polygon)
13
13
 
14
- RUCY_DECLARE_VALUE_OR_ARRAY_FROM_TO(Rays::Polygon::Line)
15
-
16
14
 
17
15
  namespace Rays
18
16
  {
@@ -21,9 +19,6 @@ namespace Rays
21
19
  Rucy::Class polygon_class ();
22
20
  // class Rays::Polygon
23
21
 
24
- Rucy::Class polygon_line_class ();
25
- // class Rays::Polygon::Line
26
-
27
22
 
28
23
  }// Rays
29
24
 
@@ -38,12 +33,6 @@ namespace Rucy
38
33
  return Rays::polygon_class();
39
34
  }
40
35
 
41
- template <> inline Class
42
- get_ruby_class<Rays::Polygon::Line> ()
43
- {
44
- return Rays::polygon_line_class();
45
- }
46
-
47
36
 
48
37
  }// Rucy
49
38
 
@@ -15,6 +15,10 @@ RUCY_DECLARE_CONVERT_TO(Rays::JoinType)
15
15
 
16
16
  RUCY_DECLARE_CONVERT_TO(Rays::BlendMode)
17
17
 
18
+ RUCY_DECLARE_CONVERT_TO(Rays::TexCoordMode)
19
+
20
+ RUCY_DECLARE_CONVERT_TO(Rays::TexCoordWrap)
21
+
18
22
 
19
23
  namespace Rays
20
24
  {
@@ -1,7 +1,7 @@
1
1
  // -*- c++ -*-
2
2
  #pragma once
3
- #ifndef __RAYS_NOISE_H__
4
- #define __RAYS_NOISE_H__
3
+ #ifndef __RAYS_UTIL_H__
4
+ #define __RAYS_UTIL_H__
5
5
 
6
6
 
7
7
  #include <rays/defs.h>