rays 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.doc/ext/rays/bitmap.cpp +22 -76
- data/.doc/ext/rays/bounds.cpp +95 -125
- data/.doc/ext/rays/color.cpp +224 -45
- data/.doc/ext/rays/color_space.cpp +137 -45
- data/.doc/ext/rays/defs.cpp +183 -0
- data/.doc/ext/rays/font.cpp +39 -21
- data/.doc/ext/rays/image.cpp +26 -37
- data/.doc/ext/rays/matrix.cpp +186 -29
- data/.doc/ext/rays/native.cpp +12 -6
- data/.doc/ext/rays/noise.cpp +53 -0
- data/.doc/ext/rays/painter.cpp +120 -308
- data/.doc/ext/rays/point.cpp +82 -77
- data/.doc/ext/rays/polygon.cpp +287 -0
- data/.doc/ext/rays/polygon_line.cpp +96 -0
- data/.doc/ext/rays/polyline.cpp +161 -0
- data/.doc/ext/rays/rays.cpp +0 -13
- data/.doc/ext/rays/shader.cpp +83 -9
- data/README.md +1 -1
- data/Rakefile +21 -9
- data/VERSION +1 -1
- data/ext/rays/bitmap.cpp +22 -80
- data/ext/rays/bounds.cpp +100 -128
- data/ext/rays/color.cpp +232 -51
- data/ext/rays/color_space.cpp +140 -46
- data/ext/rays/defs.cpp +183 -0
- data/ext/rays/defs.h +26 -2
- data/ext/rays/extconf.rb +1 -2
- data/ext/rays/font.cpp +39 -22
- data/ext/rays/image.cpp +27 -39
- data/ext/rays/matrix.cpp +198 -30
- data/ext/rays/native.cpp +12 -6
- data/ext/rays/noise.cpp +55 -0
- data/ext/rays/painter.cpp +129 -315
- data/ext/rays/point.cpp +89 -81
- data/ext/rays/polygon.cpp +301 -0
- data/ext/rays/polygon_line.cpp +99 -0
- data/ext/rays/polyline.cpp +170 -0
- data/ext/rays/rays.cpp +0 -14
- data/ext/rays/shader.cpp +84 -9
- data/include/rays.h +10 -2
- data/include/rays/bitmap.h +14 -26
- data/include/rays/bounds.h +21 -4
- data/include/rays/color.h +25 -14
- data/include/rays/color_space.h +11 -8
- data/include/rays/coord.h +114 -0
- data/include/rays/debug.h +22 -0
- data/include/rays/defs.h +3 -0
- data/include/rays/font.h +4 -4
- data/include/rays/image.h +11 -17
- data/include/rays/matrix.h +50 -24
- data/include/rays/noise.h +42 -0
- data/include/rays/opengl.h +2 -50
- data/include/rays/painter.h +57 -99
- data/include/rays/point.h +44 -51
- data/include/rays/polygon.h +164 -0
- data/include/rays/polyline.h +65 -0
- data/include/rays/rays.h +3 -0
- data/include/rays/ruby.h +7 -1
- data/include/rays/ruby/bounds.h +1 -1
- data/include/rays/ruby/color.h +1 -1
- data/include/rays/ruby/color_space.h +1 -1
- data/include/rays/ruby/font.h +1 -1
- data/include/rays/ruby/matrix.h +1 -1
- data/include/rays/ruby/point.h +1 -1
- data/include/rays/ruby/polygon.h +52 -0
- data/include/rays/ruby/polyline.h +41 -0
- data/include/rays/ruby/shader.h +1 -1
- data/include/rays/shader.h +36 -8
- data/lib/rays.rb +6 -1
- data/lib/rays/bitmap.rb +0 -15
- data/lib/rays/bounds.rb +17 -23
- data/lib/rays/color.rb +20 -47
- data/lib/rays/color_space.rb +13 -13
- data/lib/rays/image.rb +2 -6
- data/lib/rays/matrix.rb +28 -0
- data/lib/rays/module.rb +4 -19
- data/lib/rays/painter.rb +60 -97
- data/lib/rays/point.rb +13 -21
- data/lib/rays/polygon.rb +50 -0
- data/lib/rays/polygon_line.rb +36 -0
- data/lib/rays/polyline.rb +32 -0
- data/lib/rays/shader.rb +20 -1
- data/rays.gemspec +5 -7
- data/src/bitmap.h +36 -0
- data/src/bounds.cpp +74 -11
- data/src/color.cpp +58 -23
- data/src/color_space.cpp +50 -32
- data/src/color_space.h +22 -0
- data/src/coord.cpp +170 -0
- data/src/coord.h +35 -0
- data/src/font.cpp +118 -0
- data/src/font.h +64 -0
- data/src/frame_buffer.cpp +37 -71
- data/src/frame_buffer.h +4 -4
- data/src/image.cpp +171 -97
- data/src/image.h +25 -0
- data/src/ios/bitmap.mm +107 -105
- data/src/ios/font.mm +48 -60
- data/src/ios/helper.h +2 -2
- data/src/ios/opengl.mm +19 -4
- data/src/ios/rays.mm +3 -0
- data/src/matrix.cpp +111 -26
- data/src/matrix.h +30 -0
- data/src/noise.cpp +74 -0
- data/src/opengl.cpp +9 -27
- data/src/opengl.h +37 -0
- data/src/osx/bitmap.mm +111 -106
- data/src/osx/font.mm +48 -61
- data/src/osx/helper.h +2 -2
- data/src/osx/opengl.mm +19 -83
- data/src/osx/rays.mm +3 -0
- data/src/painter.cpp +780 -696
- data/src/painter.h +24 -0
- data/src/point.cpp +140 -119
- data/src/polygon.cpp +1100 -0
- data/src/polygon.h +32 -0
- data/src/polyline.cpp +158 -0
- data/src/polyline.h +67 -0
- data/src/render_buffer.cpp +11 -4
- data/src/render_buffer.h +2 -2
- data/src/shader.cpp +163 -106
- data/src/shader.h +38 -0
- data/src/shader_program.cpp +533 -0
- data/src/{program.h → shader_program.h} +28 -16
- data/src/shader_source.cpp +140 -0
- data/src/shader_source.h +52 -0
- data/src/texture.cpp +136 -160
- data/src/texture.h +65 -0
- data/src/win32/bitmap.cpp +62 -52
- data/src/win32/font.cpp +11 -13
- data/src/win32/font.h +24 -0
- data/src/win32/gdi.h +6 -6
- data/test/helper.rb +0 -3
- data/test/test_bitmap.rb +31 -7
- data/test/test_bounds.rb +36 -0
- data/test/test_color.rb +59 -19
- data/test/test_color_space.rb +95 -0
- data/test/test_image.rb +24 -20
- data/test/test_matrix.rb +106 -0
- data/test/test_painter.rb +92 -46
- data/test/test_painter_shape.rb +57 -0
- data/test/test_point.rb +21 -0
- data/test/test_polygon.rb +234 -0
- data/test/test_polygon_line.rb +167 -0
- data/test/test_polyline.rb +145 -0
- data/test/test_shader.rb +9 -9
- metadata +88 -67
- data/.doc/ext/rays/texture.cpp +0 -138
- data/ext/rays/texture.cpp +0 -149
- data/include/rays/ruby/texture.h +0 -41
- data/include/rays/texture.h +0 -71
- data/lib/rays/texture.rb +0 -24
- data/src/program.cpp +0 -648
- data/test/test_texture.rb +0 -27
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.13
|
data/ext/rays/bitmap.cpp
CHANGED
@@ -1,23 +1,12 @@
|
|
1
1
|
#include "rays/ruby/bitmap.h"
|
2
2
|
|
3
3
|
|
4
|
-
#include <rucy.h>
|
5
|
-
#include "rays/exception.h"
|
6
4
|
#include "rays/ruby/color_space.h"
|
7
5
|
#include "rays/ruby/color.h"
|
8
6
|
#include "rays/ruby/font.h"
|
9
|
-
#include "rays/ruby/texture.h"
|
10
7
|
#include "defs.h"
|
11
8
|
|
12
9
|
|
13
|
-
using namespace Rucy;
|
14
|
-
|
15
|
-
using Rays::uchar;
|
16
|
-
using Rays::ushort;
|
17
|
-
using Rays::uint;
|
18
|
-
using Rays::coord;
|
19
|
-
|
20
|
-
|
21
10
|
RUCY_DEFINE_VALUE_FROM_TO(Rays::Bitmap)
|
22
11
|
|
23
12
|
#define THIS to<Rays::Bitmap*>(self)
|
@@ -33,42 +22,25 @@ RUCY_DEF_ALLOC(alloc, klass)
|
|
33
22
|
RUCY_END
|
34
23
|
|
35
24
|
static
|
36
|
-
|
25
|
+
RUCY_DEFN(initialize)
|
37
26
|
{
|
38
27
|
RUCY_CHECK_OBJ(Rays::Bitmap, self);
|
28
|
+
check_arg_count(__FILE__, __LINE__, "Bitmap#initialize", argc, 2, 3);
|
39
29
|
|
40
|
-
*THIS =
|
41
|
-
|
42
|
-
|
43
|
-
RUCY_END
|
30
|
+
*THIS = Rays::Bitmap(
|
31
|
+
to<int>(argv[0]), to<int>(argv[1]),
|
32
|
+
argc >= 3 ? to<Rays::ColorSpace>(argv[2]) : Rays::RGBA);
|
44
33
|
|
45
|
-
static
|
46
|
-
RUCY_DEF3(setup, width, height, color_space)
|
47
|
-
{
|
48
|
-
RUCY_CHECK_OBJ(Rays::Bitmap, self);
|
49
|
-
|
50
|
-
Rays::ColorSpace* cs = to<Rays::ColorSpace*>(color_space);
|
51
|
-
if (!cs)
|
52
|
-
argument_error(__FILE__, __LINE__);
|
53
|
-
|
54
|
-
*THIS = Rays::Bitmap(to<int>(width), to<int>(height), *cs);
|
55
34
|
return self;
|
56
35
|
}
|
57
36
|
RUCY_END
|
58
37
|
|
59
38
|
static
|
60
|
-
|
39
|
+
RUCY_DEF1(initialize_copy, obj)
|
61
40
|
{
|
62
|
-
|
63
|
-
check_arg_count(__FILE__, __LINE__, "Bitmap#draw_string", argc, 1, 2, 3, 4);
|
64
|
-
|
65
|
-
const char* str = to<const char*>(argv[0]);
|
66
|
-
coord x = argc >= 2 ? to<coord>(argv[1]) : 0;
|
67
|
-
coord y = argc >= 3 ? to<coord>(argv[2]) : 0;
|
68
|
-
const Rays::Font* font = argc >= 4
|
69
|
-
? to<Rays::Font*>(argv[3]) : &Rays::default_font();
|
41
|
+
RUCY_CHECK_OBJ(Rays::Bitmap, self);
|
70
42
|
|
71
|
-
Rays::
|
43
|
+
*THIS = to<Rays::Bitmap&>(obj).dup();
|
72
44
|
return self;
|
73
45
|
}
|
74
46
|
RUCY_END
|
@@ -101,54 +73,28 @@ RUCY_DEF0(color_space)
|
|
101
73
|
RUCY_END
|
102
74
|
|
103
75
|
static
|
104
|
-
|
105
|
-
{
|
106
|
-
CHECK;
|
107
|
-
|
108
|
-
return value(Rays::Color(THIS->at<void>(x.as_i(), y.as_i()), THIS->color_space()));
|
109
|
-
}
|
110
|
-
RUCY_END
|
111
|
-
|
112
|
-
static
|
113
|
-
RUCY_DEF3(set_at, x, y, color)
|
76
|
+
RUCY_DEFN(set_at)
|
114
77
|
{
|
115
78
|
CHECK;
|
79
|
+
check_arg_count(__FILE__, __LINE__, "Bitmap#set_at", argc, 3, 4, 5, 6);
|
116
80
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
col->get(THIS->at<void>(x.as_i(), y.as_i()), THIS->color_space());
|
81
|
+
int x = to<int>(argv[0]);
|
82
|
+
int y = to<int>(argv[1]);
|
83
|
+
Rays::Color color = to<Rays::Color>(argc - 2, argv + 2);
|
122
84
|
|
123
|
-
|
85
|
+
color.get(THIS->at<void>(x, y), THIS->color_space());
|
86
|
+
return value(color);
|
124
87
|
}
|
125
88
|
RUCY_END
|
126
89
|
|
127
90
|
static
|
128
|
-
|
91
|
+
RUCY_DEF2(get_at, x, y)
|
129
92
|
{
|
130
93
|
CHECK;
|
131
94
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
RUCY_END
|
136
|
-
|
137
|
-
static
|
138
|
-
RUCY_DEF1(save, path)
|
139
|
-
{
|
140
|
-
CHECK;
|
141
|
-
|
142
|
-
Rays::save_bitmap(*THIS, path.c_str());
|
143
|
-
return self;
|
144
|
-
}
|
145
|
-
RUCY_END
|
146
|
-
|
147
|
-
|
148
|
-
static
|
149
|
-
RUCY_DEF1(load, path)
|
150
|
-
{
|
151
|
-
return value(Rays::load_bitmap(path.c_str()));
|
95
|
+
int xx = to<int>(x);
|
96
|
+
int yy = to<int>(y);
|
97
|
+
return value(Rays::Color(THIS->at<void>(xx, yy), THIS->color_space()));
|
152
98
|
}
|
153
99
|
RUCY_END
|
154
100
|
|
@@ -162,17 +108,13 @@ Init_bitmap ()
|
|
162
108
|
|
163
109
|
cBitmap = mRays.define_class("Bitmap");
|
164
110
|
cBitmap.define_alloc_func(alloc);
|
111
|
+
cBitmap.define_private_method("initialize", initialize);
|
165
112
|
cBitmap.define_private_method("initialize_copy", initialize_copy);
|
166
|
-
cBitmap.define_private_method("setup", setup);
|
167
|
-
cBitmap.define_method("draw_string", draw_string);
|
168
113
|
cBitmap.define_method("width", width);
|
169
114
|
cBitmap.define_method("height", height);
|
170
115
|
cBitmap.define_method("color_space", color_space);
|
171
|
-
cBitmap.define_method("[]",
|
172
|
-
cBitmap.define_method("
|
173
|
-
cBitmap.define_method("to_texture", to_texture);
|
174
|
-
cBitmap.define_method("save", save);
|
175
|
-
cBitmap.define_function("load", load);
|
116
|
+
cBitmap.define_method("[]=", set_at);
|
117
|
+
cBitmap.define_method("[]", get_at);
|
176
118
|
}
|
177
119
|
|
178
120
|
|
data/ext/rays/bounds.cpp
CHANGED
@@ -1,17 +1,11 @@
|
|
1
1
|
#include "rays/ruby/bounds.h"
|
2
2
|
|
3
3
|
|
4
|
-
#include <rucy.h>
|
5
4
|
#include "rays/ruby/point.h"
|
6
5
|
#include "defs.h"
|
7
6
|
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
using Rays::coord;
|
12
|
-
|
13
|
-
|
14
|
-
RUCY_DEFINE_VALUE_FROM_TO(Rays::Bounds)
|
8
|
+
RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Bounds)
|
15
9
|
|
16
10
|
#define THIS to<Rays::Bounds*>(self)
|
17
11
|
|
@@ -31,35 +25,8 @@ RUCY_DEFN(initialize)
|
|
31
25
|
CHECK;
|
32
26
|
check_arg_count(__FILE__, __LINE__, "Bounds#initialize", argc, 0, 1, 2, 3, 4, 6);
|
33
27
|
|
34
|
-
if (argc
|
35
|
-
|
36
|
-
switch (argc)
|
37
|
-
{
|
38
|
-
case 1:
|
39
|
-
*THIS = Rays::Bounds(to<coord>(argv[0]));
|
40
|
-
break;
|
41
|
-
|
42
|
-
case 2:
|
43
|
-
*THIS = Rays::Bounds(to<coord>(argv[0]), to<coord>(argv[1]));
|
44
|
-
break;
|
45
|
-
|
46
|
-
case 3:
|
47
|
-
*THIS = Rays::Bounds(
|
48
|
-
to<coord>(argv[0]), to<coord>(argv[1]), to<coord>(argv[2]));
|
49
|
-
break;
|
50
|
-
|
51
|
-
case 4:
|
52
|
-
*THIS = Rays::Bounds(
|
53
|
-
to<coord>(argv[0]), to<coord>(argv[1]),
|
54
|
-
to<coord>(argv[2]), to<coord>(argv[3]));
|
55
|
-
break;
|
56
|
-
|
57
|
-
case 6:
|
58
|
-
*THIS = Rays::Bounds(
|
59
|
-
to<coord>(argv[0]), to<coord>(argv[1]), to<coord>(argv[2]),
|
60
|
-
to<coord>(argv[3]), to<coord>(argv[4]), to<coord>(argv[5]));
|
61
|
-
break;
|
62
|
-
}
|
28
|
+
if (argc >= 1)
|
29
|
+
*THIS = to<Rays::Bounds>(argc, argv);
|
63
30
|
|
64
31
|
return self;
|
65
32
|
}
|
@@ -69,6 +36,7 @@ static
|
|
69
36
|
RUCY_DEF1(initialize_copy, obj)
|
70
37
|
{
|
71
38
|
CHECK;
|
39
|
+
|
72
40
|
*THIS = to<Rays::Bounds&>(obj);
|
73
41
|
return self;
|
74
42
|
}
|
@@ -117,7 +85,7 @@ RUCY_DEFN(move_to)
|
|
117
85
|
}
|
118
86
|
|
119
87
|
const Rays::Point& p = THIS->position();
|
120
|
-
coord x =
|
88
|
+
coord x = argv[0] ? to<coord>(argv[0]) : p.x;
|
121
89
|
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : p.y;
|
122
90
|
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : p.z;
|
123
91
|
THIS->move_to(x, y, z);
|
@@ -143,7 +111,7 @@ RUCY_DEFN(move_by)
|
|
143
111
|
argv = argv[0].as_array();
|
144
112
|
}
|
145
113
|
|
146
|
-
coord x =
|
114
|
+
coord x = argv[0] ? to<coord>(argv[0]) : 0;
|
147
115
|
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : 0;
|
148
116
|
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : 0;
|
149
117
|
THIS->move_by(x, y, z);
|
@@ -170,7 +138,7 @@ RUCY_DEFN(resize_to)
|
|
170
138
|
}
|
171
139
|
|
172
140
|
const Rays::Point& p = THIS->size();
|
173
|
-
coord x =
|
141
|
+
coord x = argv[0] ? to<coord>(argv[0]) : p.x;
|
174
142
|
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : p.y;
|
175
143
|
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : p.z;
|
176
144
|
THIS->resize_to(x, y, z);
|
@@ -196,7 +164,7 @@ RUCY_DEFN(resize_by)
|
|
196
164
|
argv = argv[0].as_array();
|
197
165
|
}
|
198
166
|
|
199
|
-
coord x =
|
167
|
+
coord x = argv[0] ? to<coord>(argv[0]) : 0;
|
200
168
|
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : 0;
|
201
169
|
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : 0;
|
202
170
|
THIS->resize_by(x, y, z);
|
@@ -222,7 +190,7 @@ RUCY_DEFN(inset_by)
|
|
222
190
|
argv = argv[0].as_array();
|
223
191
|
}
|
224
192
|
|
225
|
-
coord x =
|
193
|
+
coord x = argv[0] ? to<coord>(argv[0]) : 0;
|
226
194
|
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : 0;
|
227
195
|
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : 0;
|
228
196
|
THIS->inset_by(x, y, z);
|
@@ -232,12 +200,22 @@ RUCY_DEFN(inset_by)
|
|
232
200
|
}
|
233
201
|
RUCY_END
|
234
202
|
|
203
|
+
static
|
204
|
+
RUCY_DEF0(is_valid)
|
205
|
+
{
|
206
|
+
CHECK;
|
207
|
+
|
208
|
+
return value(THIS->operator bool());
|
209
|
+
}
|
210
|
+
RUCY_END
|
211
|
+
|
235
212
|
static
|
236
213
|
RUCY_DEF1(set_x, x)
|
237
214
|
{
|
238
215
|
CHECK;
|
239
216
|
|
240
|
-
|
217
|
+
THIS->x = to<coord>(x);
|
218
|
+
return x;
|
241
219
|
}
|
242
220
|
RUCY_END
|
243
221
|
|
@@ -255,7 +233,8 @@ RUCY_DEF1(set_y, y)
|
|
255
233
|
{
|
256
234
|
CHECK;
|
257
235
|
|
258
|
-
|
236
|
+
THIS->y = to<coord>(y);
|
237
|
+
return y;
|
259
238
|
}
|
260
239
|
RUCY_END
|
261
240
|
|
@@ -273,7 +252,8 @@ RUCY_DEF1(set_z, z)
|
|
273
252
|
{
|
274
253
|
CHECK;
|
275
254
|
|
276
|
-
|
255
|
+
THIS->z = to<coord>(z);
|
256
|
+
return z;
|
277
257
|
}
|
278
258
|
RUCY_END
|
279
259
|
|
@@ -291,7 +271,8 @@ RUCY_DEF1(set_width, width)
|
|
291
271
|
{
|
292
272
|
CHECK;
|
293
273
|
|
294
|
-
|
274
|
+
THIS->width = to<coord>(width);
|
275
|
+
return width;
|
295
276
|
}
|
296
277
|
RUCY_END
|
297
278
|
|
@@ -309,7 +290,8 @@ RUCY_DEF1(set_height, height)
|
|
309
290
|
{
|
310
291
|
CHECK;
|
311
292
|
|
312
|
-
|
293
|
+
THIS->height = to<coord>(height);
|
294
|
+
return height;
|
313
295
|
}
|
314
296
|
RUCY_END
|
315
297
|
|
@@ -327,7 +309,8 @@ RUCY_DEF1(set_depth, depth)
|
|
327
309
|
{
|
328
310
|
CHECK;
|
329
311
|
|
330
|
-
|
312
|
+
THIS->depth = to<coord>(depth);
|
313
|
+
return depth;
|
331
314
|
}
|
332
315
|
RUCY_END
|
333
316
|
|
@@ -344,10 +327,9 @@ static
|
|
344
327
|
RUCY_DEF1(set_left, left)
|
345
328
|
{
|
346
329
|
CHECK;
|
347
|
-
Rays::Bounds* this_ = THIS;
|
348
330
|
|
349
|
-
|
350
|
-
return
|
331
|
+
THIS->set_left(to<coord>(left));
|
332
|
+
return left;
|
351
333
|
}
|
352
334
|
RUCY_END
|
353
335
|
|
@@ -364,10 +346,9 @@ static
|
|
364
346
|
RUCY_DEF1(set_right, right)
|
365
347
|
{
|
366
348
|
CHECK;
|
367
|
-
Rays::Bounds* this_ = THIS;
|
368
349
|
|
369
|
-
|
370
|
-
return
|
350
|
+
THIS->set_right(to<coord>(right));
|
351
|
+
return right;
|
371
352
|
}
|
372
353
|
RUCY_END
|
373
354
|
|
@@ -384,10 +365,9 @@ static
|
|
384
365
|
RUCY_DEF1(set_top, top)
|
385
366
|
{
|
386
367
|
CHECK;
|
387
|
-
Rays::Bounds* this_ = THIS;
|
388
368
|
|
389
|
-
|
390
|
-
return
|
369
|
+
THIS->set_top(to<coord>(top));
|
370
|
+
return top;
|
391
371
|
}
|
392
372
|
RUCY_END
|
393
373
|
|
@@ -404,10 +384,9 @@ static
|
|
404
384
|
RUCY_DEF1(set_bottom, bottom)
|
405
385
|
{
|
406
386
|
CHECK;
|
407
|
-
Rays::Bounds* this_ = THIS;
|
408
387
|
|
409
|
-
|
410
|
-
return
|
388
|
+
THIS->set_bottom(to<coord>(bottom));
|
389
|
+
return bottom;
|
411
390
|
}
|
412
391
|
RUCY_END
|
413
392
|
|
@@ -424,10 +403,9 @@ static
|
|
424
403
|
RUCY_DEF1(set_back, back)
|
425
404
|
{
|
426
405
|
CHECK;
|
427
|
-
Rays::Bounds* this_ = THIS;
|
428
406
|
|
429
|
-
|
430
|
-
return
|
407
|
+
THIS->set_back(to<coord>(back));
|
408
|
+
return back;
|
431
409
|
}
|
432
410
|
RUCY_END
|
433
411
|
|
@@ -444,10 +422,9 @@ static
|
|
444
422
|
RUCY_DEF1(set_front, front)
|
445
423
|
{
|
446
424
|
CHECK;
|
447
|
-
Rays::Bounds* this_ = THIS;
|
448
425
|
|
449
|
-
|
450
|
-
return
|
426
|
+
THIS->set_front(to<coord>(front));
|
427
|
+
return front;
|
451
428
|
}
|
452
429
|
RUCY_END
|
453
430
|
|
@@ -464,11 +441,9 @@ static
|
|
464
441
|
RUCY_DEFN(set_position)
|
465
442
|
{
|
466
443
|
CHECK;
|
467
|
-
check_arg_count(__FILE__, __LINE__, "Bounds#set_position", argc, 1, 2, 3);
|
468
444
|
|
469
|
-
|
470
|
-
|
471
|
-
if (argc > i && !argv[i].is_nil()) pos[i] = to<coord>(argv[i]);
|
445
|
+
THIS->set_position(to<Rays::Point>(argc, argv));
|
446
|
+
return value(THIS->position());
|
472
447
|
}
|
473
448
|
RUCY_END
|
474
449
|
|
@@ -485,11 +460,9 @@ static
|
|
485
460
|
RUCY_DEFN(set_size)
|
486
461
|
{
|
487
462
|
CHECK;
|
488
|
-
check_arg_count(__FILE__, __LINE__, "Bounds#set_size", argc, 1, 2, 3);
|
489
463
|
|
490
|
-
|
491
|
-
|
492
|
-
if (argc > i && !argv[i].is_nil()) size[i] = to<coord>(argv[i]);
|
464
|
+
THIS->set_size(to<Rays::Point>(argc, argv));
|
465
|
+
return value(THIS->size());
|
493
466
|
}
|
494
467
|
RUCY_END
|
495
468
|
|
@@ -506,25 +479,14 @@ static
|
|
506
479
|
RUCY_DEFN(set_center)
|
507
480
|
{
|
508
481
|
CHECK;
|
509
|
-
check_arg_count(__FILE__, __LINE__, "Bounds#set_center", argc, 1, 2, 3);
|
510
|
-
|
511
|
-
if (argv[0].is_kind_of(Rays::point_class()))
|
512
|
-
THIS->set_center(to<Rays::Point&>(argv[0]));
|
513
|
-
else
|
514
|
-
{
|
515
|
-
Rays::Point p = THIS->center();
|
516
|
-
coord x = (argc >= 1 && argv[0]) ? to<coord>(argv[0]) : p.x;
|
517
|
-
coord y = (argc >= 2 && argv[1]) ? to<coord>(argv[1]) : p.y;
|
518
|
-
coord z = (argc >= 3 && argv[2]) ? to<coord>(argv[2]) : p.z;
|
519
|
-
THIS->set_center(x, y, z);
|
520
|
-
}
|
521
482
|
|
483
|
+
THIS->set_center(to<Rays::Point>(argc, argv));
|
522
484
|
return value(THIS->center());
|
523
485
|
}
|
524
486
|
RUCY_END
|
525
487
|
|
526
488
|
static
|
527
|
-
RUCY_DEF0(
|
489
|
+
RUCY_DEF0(get_center)
|
528
490
|
{
|
529
491
|
CHECK;
|
530
492
|
|
@@ -533,7 +495,7 @@ RUCY_DEF0(center)
|
|
533
495
|
RUCY_END
|
534
496
|
|
535
497
|
static
|
536
|
-
|
498
|
+
RUCY_DEF2(set_at, index, value)
|
537
499
|
{
|
538
500
|
CHECK;
|
539
501
|
|
@@ -541,12 +503,13 @@ RUCY_DEF1(array_get, index)
|
|
541
503
|
if (i < 0 || 1 < i)
|
542
504
|
index_error(__FILE__, __LINE__);
|
543
505
|
|
544
|
-
|
506
|
+
(*THIS)[i] = to<Rays::Point&>(value);
|
507
|
+
return value;
|
545
508
|
}
|
546
509
|
RUCY_END
|
547
510
|
|
548
511
|
static
|
549
|
-
|
512
|
+
RUCY_DEF1(get_at, index)
|
550
513
|
{
|
551
514
|
CHECK;
|
552
515
|
|
@@ -554,13 +517,12 @@ RUCY_DEF2(array_set, index, value)
|
|
554
517
|
if (i < 0 || 1 < i)
|
555
518
|
index_error(__FILE__, __LINE__);
|
556
519
|
|
557
|
-
(*THIS)[i]
|
558
|
-
return value;
|
520
|
+
return value((*THIS)[i]);
|
559
521
|
}
|
560
522
|
RUCY_END
|
561
523
|
|
562
524
|
static
|
563
|
-
RUCY_DEF1(
|
525
|
+
RUCY_DEF1(op_and, bounds)
|
564
526
|
{
|
565
527
|
CHECK;
|
566
528
|
|
@@ -571,12 +533,18 @@ RUCY_DEF1(and_, bounds)
|
|
571
533
|
RUCY_END
|
572
534
|
|
573
535
|
static
|
574
|
-
RUCY_DEF1(
|
536
|
+
RUCY_DEF1(op_or, arg)
|
575
537
|
{
|
576
538
|
CHECK;
|
577
539
|
|
578
540
|
Rays::Bounds b = *THIS;
|
579
|
-
|
541
|
+
if (arg.is_kind_of(Rays::bounds_class()))
|
542
|
+
b |= to<Rays::Bounds&>(arg);
|
543
|
+
else if (arg.is_kind_of(Rays::point_class()))
|
544
|
+
b |= to<Rays::Point&>(arg);
|
545
|
+
else
|
546
|
+
argument_error(__FILE__, __LINE__);
|
547
|
+
|
580
548
|
return value(b);
|
581
549
|
}
|
582
550
|
RUCY_END
|
@@ -590,6 +558,13 @@ RUCY_DEF0(inspect)
|
|
590
558
|
}
|
591
559
|
RUCY_END
|
592
560
|
|
561
|
+
static
|
562
|
+
RUCY_DEF0(invalid)
|
563
|
+
{
|
564
|
+
return value(Rays::invalid_bounds());
|
565
|
+
}
|
566
|
+
RUCY_END
|
567
|
+
|
593
568
|
|
594
569
|
static Class cBounds;
|
595
570
|
|
@@ -600,7 +575,7 @@ Init_bounds ()
|
|
600
575
|
|
601
576
|
cBounds = mRays.define_class("Bounds");
|
602
577
|
cBounds.define_alloc_func(alloc);
|
603
|
-
cBounds.define_private_method("initialize",
|
578
|
+
cBounds.define_private_method("initialize", initialize);
|
604
579
|
cBounds.define_private_method("initialize_copy", initialize_copy);
|
605
580
|
cBounds.define_method("intersect?", intersect);
|
606
581
|
cBounds.define_method("include?", include);
|
@@ -609,6 +584,7 @@ Init_bounds ()
|
|
609
584
|
cBounds.define_method("resize_to!", resize_to);
|
610
585
|
cBounds.define_method("resize_by!", resize_by);
|
611
586
|
cBounds.define_method("inset_by!", inset_by);
|
587
|
+
cBounds.define_method("valid?", is_valid);
|
612
588
|
cBounds.define_method("x=", set_x);
|
613
589
|
cBounds.define_method("x", get_x);
|
614
590
|
cBounds.define_method("y=", set_y);
|
@@ -633,17 +609,18 @@ Init_bounds ()
|
|
633
609
|
cBounds.define_method("back", get_back);
|
634
610
|
cBounds.define_method("front=", set_front);
|
635
611
|
cBounds.define_method("front", get_front);
|
636
|
-
cBounds.define_method("
|
637
|
-
cBounds.define_method(
|
638
|
-
cBounds.define_method("
|
639
|
-
cBounds.define_method(
|
640
|
-
cBounds.define_method("
|
641
|
-
cBounds.define_method("center",
|
642
|
-
cBounds.define_method("[]",
|
643
|
-
cBounds.define_method("[]=",
|
644
|
-
cBounds.define_method("&",
|
645
|
-
cBounds.define_method("|",
|
612
|
+
cBounds.define_method("position=", set_position);
|
613
|
+
cBounds.define_method("position", get_position);
|
614
|
+
cBounds.define_method("size=", set_size);
|
615
|
+
cBounds.define_method("size", get_size);
|
616
|
+
cBounds.define_method("center=", set_center);
|
617
|
+
cBounds.define_method("center", get_center);
|
618
|
+
cBounds.define_method("[]", get_at);
|
619
|
+
cBounds.define_method("[]=", set_at);
|
620
|
+
cBounds.define_method("&", op_and);
|
621
|
+
cBounds.define_method("|", op_or);
|
646
622
|
cBounds.define_method("inspect", inspect);
|
623
|
+
cBounds.define_singleton_method("invalid", invalid);
|
647
624
|
}
|
648
625
|
|
649
626
|
|
@@ -652,29 +629,21 @@ namespace Rucy
|
|
652
629
|
|
653
630
|
|
654
631
|
template <> Rays::Bounds
|
655
|
-
value_to<Rays::Bounds> (Value
|
632
|
+
value_to<Rays::Bounds> (int argc, const Value* argv, bool convert)
|
656
633
|
{
|
657
|
-
if (
|
634
|
+
if (argc == 1 && argv->is_array())
|
658
635
|
{
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
{
|
663
|
-
argc = value.size();
|
664
|
-
argv = value.as_array();
|
665
|
-
}
|
666
|
-
else
|
667
|
-
{
|
668
|
-
argc = 1;
|
669
|
-
argv = &value;
|
670
|
-
}
|
636
|
+
argc = argv->size();
|
637
|
+
argv = argv->as_array();
|
638
|
+
}
|
671
639
|
|
672
|
-
|
673
|
-
Rucy::argument_error(__FILE__, __LINE__);
|
640
|
+
assert(argc == 0 || (argc > 0 && argv));
|
674
641
|
|
675
|
-
|
676
|
-
|
677
|
-
|
642
|
+
if (convert)
|
643
|
+
{
|
644
|
+
if (argc == 0)
|
645
|
+
return Rays::Bounds();
|
646
|
+
else if (argv->is_kind_of(Rays::point_class()))
|
678
647
|
{
|
679
648
|
switch (argc)
|
680
649
|
{
|
@@ -682,10 +651,10 @@ namespace Rucy
|
|
682
651
|
case 1: return Rays::Bounds(V(0));
|
683
652
|
case 2: return Rays::Bounds(V(0), V(1));
|
684
653
|
#undef V
|
685
|
-
default:
|
654
|
+
default: argument_error(__FILE__, __LINE__);
|
686
655
|
}
|
687
656
|
}
|
688
|
-
else if (argv
|
657
|
+
else if (argv->is_num())
|
689
658
|
{
|
690
659
|
switch (argc)
|
691
660
|
{
|
@@ -696,12 +665,15 @@ namespace Rucy
|
|
696
665
|
case 4: return Rays::Bounds(V(0), V(1), V(2), V(3));
|
697
666
|
case 6: return Rays::Bounds(V(0), V(1), V(2), V(3), V(4), V(5));
|
698
667
|
#undef V
|
699
|
-
default:
|
668
|
+
default: argument_error(__FILE__, __LINE__);
|
700
669
|
}
|
701
670
|
}
|
702
671
|
}
|
703
672
|
|
704
|
-
|
673
|
+
if (argc != 1)
|
674
|
+
argument_error(__FILE__, __LINE__);
|
675
|
+
|
676
|
+
return value_to<Rays::Bounds&>(*argv, convert);
|
705
677
|
}
|
706
678
|
|
707
679
|
|