Class: Ray::Polygon
- Inherits:
-
Drawable
- Object
- Drawable
- Ray::Polygon
- Includes:
- Enumerable
- Defined in:
- lib/ray/polygon.rb,
ext/polygon.c
Defined Under Namespace
Classes: Point
Class Method Summary collapse
-
.circle(center, radius, color = Ray::Color.white, outline_width = 0) ⇒ Object
@param [Ray::Vector2] center The center of the circle @param [Float] radius The radius of the circle @param [Ray::Color] color The color of the circle.
-
.ellipse(center, rx, ry, color = Ray::Color.white) ⇒ Object
@param [Ray::Vector2] center The center of the ellipse @param [Float] rx Horizontal radius @param [Float] ry Vertical radius @param [Ray::Color] color The color of the ellipse @param outline_width (see rectangle) @param outline_color (see rectangle).
- .line(first, last, width = 1, color = Ray::Color.white) ⇒ Ray::Polygon
-
.rectangle(rect, color = Ray::Color.white, outline_width = 0) ⇒ Object
@param [Ray::Rect, #to_rect] rect Rectangle occupied by the polygon @param [Ray::Color] color Color of the rectangle @param [Float] outline_width Width of the outline @param [Ray::Color] outline_color Color of the outline.
Instance Method Summary collapse
-
#[](id) ⇒ Ray::Polygon::Point
Idth point of the polygon (id should be less than size).
-
#add_point(pos, col = Ray::Color.white, outline = Ray::Color.white) ⇒ Object
Adds a point to the polygon.
-
#color=(val) ⇒ Object
Sets a color to all the points of the shape.
- #color_of(id) ⇒ Ray::Color?
- #each {|point| ... } ⇒ Object
-
#filled=(val) ⇒ Object
Enables or disable filling.
-
#filled? ⇒ true, false
True if filling is enabled.
-
#initialize(size = nil, &block) ⇒ Polygon
constructor
A new instance of Polygon.
- #initialize_copy(other) ⇒ Object
-
#outline=(val) ⇒ Object
Sets an outline color to all the points of the shape.
- #outline_of(id) ⇒ Ray::Color?
-
#outline_width ⇒ Float
The width of the outline.
-
#outline_width=(val) ⇒ Object
Sets the width of the outline.
-
#outlined=(val) ⇒ Object
Enables or disable outline.
-
#outlined? ⇒ true, false
True if outline is enabled.
- #pos_of(id) ⇒ Ray::Vector2?
- #pretty_print(q, other_attr = []) ⇒ Object
-
#resize(n) ⇒ Object
Changes the amount of points in the polygon.
- #set_color_of(id, val) ⇒ Object
- #set_outline_of(id, val) ⇒ Object
- #set_pos_of(id, val) ⇒ Object
-
#size ⇒ Integer
The amount of points in the polygon.
Constructor Details
#initialize(size = nil, &block) ⇒ Polygon
Returns a new instance of Polygon.
65 66 67 68 69 70 |
# File 'lib/ray/polygon.rb', line 65 def initialize(size = nil, &block) if size resize size each(&block) if block end end |
Class Method Details
.circle(center, radius, color = Ray::Color.white, outline_width = 0) ⇒ Object
@param [Ray::Vector2] center The center of the circle
@param [Float] radius The radius of the circle
@param [Ray::Color] color The color of the circle
@param outline_width (see rectangle)
@param outline_color (see rectangle)
@return [Ray::Polygon] A circle
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'ext/polygon.c', line 127 static VALUE ray_polygon_circle(int argc, VALUE *argv, VALUE self) { VALUE rb_center = Qnil, rb_radius = Qnil, rb_color = Qnil, rb_outline_width = Qnil, rb_outline = Qnil; rb_scan_args(argc, argv, "23", &rb_center, &rb_radius, &rb_color, &rb_outline_width, &rb_outline); say_color color = NIL_P(rb_color) ? say_make_color(255, 255, 255, 255) : ray_rb2col(rb_color); say_polygon *poly = say_polygon_circle(ray_convert_to_vector2(rb_center), NUM2DBL(rb_radius), color); VALUE ret = Data_Wrap_Struct(self, NULL, say_polygon_free, poly); ray_polygon_make_outline(poly, rb_outline_width, rb_outline); say_drawable_set_shader_proc(poly->drawable, ray_drawable_shader_proc); say_drawable_set_other_data(poly->drawable, (void*)ret); rb_iv_set(ret, "@shader_attributes", Qnil); return ret; } |
.ellipse(center, rx, ry, color = Ray::Color.white) ⇒ Object
@param [Ray::Vector2] center The center of the ellipse
@param [Float] rx Horizontal radius
@param [Float] ry Vertical radius
@param [Ray::Color] color The color of the ellipse
@param outline_width (see rectangle)
@param outline_color (see rectangle)
@return [Ray::Polygon] An ellipse
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'ext/polygon.c', line 165 static VALUE ray_polygon_ellipse(int argc, VALUE *argv, VALUE self) { VALUE rb_center = Qnil, rb_rx = Qnil, rb_ry = Qnil, rb_color = Qnil, rb_outline_width = Qnil, rb_outline = Qnil; rb_scan_args(argc, argv, "33", &rb_center, &rb_rx, &rb_ry, &rb_color, &rb_outline_width, &rb_outline); say_color color = NIL_P(rb_color) ? say_make_color(255, 255, 255, 255) : ray_rb2col(rb_color); say_polygon *poly = say_polygon_ellipse(ray_convert_to_vector2(rb_center), NUM2DBL(rb_rx), NUM2DBL(rb_ry), color); ray_polygon_make_outline(poly, rb_outline_width, rb_outline); VALUE rb = Data_Wrap_Struct(self, NULL, say_polygon_free, poly); say_drawable_set_shader_proc(poly->drawable, ray_drawable_shader_proc); say_drawable_set_other_data(poly->drawable, (void*)rb); rb_iv_set(rb, "@shader_attributes", Qnil); return rb; } |
.line(first, last, width = 1, color = Ray::Color.white) ⇒ Ray::Polygon
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'ext/polygon.c', line 61 static VALUE ray_polygon_line(int argc, VALUE *argv, VALUE self) { VALUE first = Qnil, last = Qnil, width = Qnil, color = Qnil; rb_scan_args(argc, argv, "22", &first, &last, &width, &color); say_polygon *line = say_polygon_line(ray_convert_to_vector2(first), ray_convert_to_vector2(last), NIL_P(width) ? 1 : NUM2DBL(width), NIL_P(color) ? say_make_color(255, 255, 255, 255) : ray_rb2col(color)); VALUE rb = Data_Wrap_Struct(self, NULL, say_polygon_free, line); say_drawable_set_shader_proc(line->drawable, ray_drawable_shader_proc); say_drawable_set_other_data(line->drawable, (void*)rb); rb_iv_set(rb, "@shader_attributes", Qnil); return rb; } |
.rectangle(rect, color = Ray::Color.white, outline_width = 0) ⇒ Object
@param [Ray::Rect, #to_rect] rect Rectangle occupied by the polygon
@param [Ray::Color] color Color of the rectangle
@param [Float] outline_width Width of the outline
@param [Ray::Color] outline_color Color of the outline
@return [Ray::Polygon] A rectangle
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'ext/polygon.c', line 91 static VALUE ray_polygon_rectangle(int argc, VALUE *argv, VALUE self) { VALUE rb_rect = Qnil, rb_color = Qnil, outline_width = Qnil, outline = Qnil; rb_scan_args(argc, argv, "13", &rb_rect, &rb_color, &outline_width, &outline); say_rect rect = ray_convert_to_rect(rb_rect); say_color color = NIL_P(rb_color) ? say_make_color(255, 255, 255, 255) : ray_rb2col(rb_color); say_polygon *poly = say_polygon_rectangle(say_make_vector2(rect.x, rect.y), say_make_vector2(rect.w, rect.h), color); VALUE ret = Data_Wrap_Struct(self, NULL, say_polygon_free, poly); ray_polygon_make_outline(poly, outline_width, outline); say_drawable_set_shader_proc(poly->drawable, ray_drawable_shader_proc); say_drawable_set_other_data(poly->drawable, (void*)ret); rb_iv_set(ret, "@shader_attributes", Qnil); return ret; } |
Instance Method Details
#[](id) ⇒ Ray::Polygon::Point
Returns idth point of the polygon (id should be less than size).
81 82 83 |
# File 'lib/ray/polygon.rb', line 81 def [](id) Point.new(self, id) end |
#add_point(pos, col = Ray::Color.white, outline = Ray::Color.white) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'ext/polygon.c', line 207 static VALUE ray_polygon_add_point(int argc, VALUE *argv, VALUE self) { say_polygon *poly = ray_rb2polygon(self); VALUE rb_pos = Qnil, rb_col = Qnil, rb_outline_col = Qnil; rb_scan_args(argc, argv, "12", &rb_pos, &rb_col, &rb_outline_col); say_vector2 pos = ray_convert_to_vector2(rb_pos); say_color col = NIL_P(rb_col) ? say_make_color(255, 255, 255, 255) : ray_rb2col(rb_col); say_color outline_col = NIL_P(rb_col) ? say_make_color(255, 255, 255, 255) : ray_rb2col(rb_outline_col); size_t index = say_polygon_get_size(poly); say_polygon_resize(poly, say_polygon_get_size(poly) + 1); say_polygon_set_pos_for(poly, index, pos); say_polygon_set_color_for(poly, index, col); say_polygon_set_outline_for(poly, index, outline_col); return self; } |
#color=(val) ⇒ Object
402 403 404 405 406 |
# File 'ext/polygon.c', line 402 static VALUE ray_polygon_set_color(VALUE self, VALUE val) { say_polygon_set_color(ray_rb2polygon(self), ray_rb2col(val)); return val; } |
#color_of(id) ⇒ Ray::Color?
312 313 314 315 316 317 318 319 320 |
# File 'ext/polygon.c', line 312 static VALUE ray_polygon_color_of(VALUE self, VALUE rb_id) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) return Qnil; return ray_col2rb(say_polygon_get_color_for(poly, id)); } |
#each {|point| ... } ⇒ Object
73 74 75 |
# File 'lib/ray/polygon.rb', line 73 def each 0.upto(size - 1) { |n| yield self[n] } end |
#filled=(val) ⇒ Object
246 247 248 249 250 |
# File 'ext/polygon.c', line 246 static VALUE ray_polygon_set_filled(VALUE self, VALUE val) { say_polygon_set_filled(ray_rb2polygon(self), RTEST(val)); return val; } |
#filled? ⇒ true, false
Returns True if filling is enabled.
264 265 266 267 |
# File 'ext/polygon.c', line 264 static VALUE ray_polygon_filled(VALUE self) { return say_polygon_filled(ray_rb2polygon(self)) ? Qtrue : Qfalse; } |
#initialize_copy(other) ⇒ Object
29 30 31 32 33 34 |
# File 'ext/polygon.c', line 29 static VALUE ray_polygon_init_copy(VALUE self, VALUE other) { say_polygon_copy(ray_rb2polygon(self), ray_rb2polygon(other)); ray_drawable_copy_attr(self, other); return self; } |
#outline=(val) ⇒ Object
413 414 415 416 417 |
# File 'ext/polygon.c', line 413 static VALUE ray_polygon_set_outline(VALUE self, VALUE val) { say_polygon_set_outline_color(ray_rb2polygon(self), ray_rb2col(val)); return val; } |
#outline_of(id) ⇒ Ray::Color?
327 328 329 330 331 332 333 334 335 |
# File 'ext/polygon.c', line 327 static VALUE ray_polygon_outline_of(VALUE self, VALUE rb_id) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) return Qnil; return ray_col2rb(say_polygon_get_outline_for(poly, id)); } |
#outline_width ⇒ Float
Returns The width of the outline.
276 277 278 279 |
# File 'ext/polygon.c', line 276 static VALUE ray_polygon_outline_width(VALUE self) { return rb_float_new(say_polygon_get_outline(ray_rb2polygon(self))); } |
#outline_width=(val) ⇒ Object
286 287 288 289 290 |
# File 'ext/polygon.c', line 286 static VALUE ray_polygon_set_outline_width(VALUE self, VALUE val) { say_polygon_set_outline(ray_rb2polygon(self), NUM2DBL(val)); return val; } |
#outlined=(val) ⇒ Object
257 258 259 260 261 |
# File 'ext/polygon.c', line 257 static VALUE ray_polygon_set_outlined(VALUE self, VALUE val) { say_polygon_set_outlined(ray_rb2polygon(self), RTEST(val)); return val; } |
#outlined? ⇒ true, false
Returns True if outline is enabled.
270 271 272 273 |
# File 'ext/polygon.c', line 270 static VALUE ray_polygon_outlined(VALUE self) { return say_polygon_outlined(ray_rb2polygon(self)) ? Qtrue : Qfalse; } |
#pos_of(id) ⇒ Ray::Vector2?
297 298 299 300 301 302 303 304 305 |
# File 'ext/polygon.c', line 297 static VALUE ray_polygon_pos_of(VALUE self, VALUE rb_id) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) return Qnil; return ray_vector2_to_rb(say_polygon_get_pos_for(poly, id)); } |
#pretty_print(q, other_attr = []) ⇒ Object
85 86 87 88 89 90 91 92 |
# File 'lib/ray/polygon.rb', line 85 def pretty_print(q, other_attr = []) attr = [ "filled?", "outlined?", "outline_width", "points" ] super q, attr + other_attr end |
#resize(n) ⇒ Object
235 236 237 238 239 |
# File 'ext/polygon.c', line 235 static VALUE ray_polygon_resize(VALUE self, VALUE size) { say_polygon_resize(ray_rb2polygon(self), NUM2ULONG(size)); return self; } |
#set_color_of(id, val) ⇒ Object
362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# File 'ext/polygon.c', line 362 static VALUE ray_polygon_set_color_of(VALUE self, VALUE rb_id, VALUE val) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) { rb_raise(rb_eArgError, "trying to change point %ld, when there are %ld points", id, say_polygon_get_size(poly)); } say_polygon_set_color_for(poly, id, ray_rb2col(val)); return val; } |
#set_outline_of(id, val) ⇒ Object
382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
# File 'ext/polygon.c', line 382 static VALUE ray_polygon_set_outline_of(VALUE self, VALUE rb_id, VALUE val) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) { rb_raise(rb_eArgError, "trying to change point %ld, when there are %ld points", id, say_polygon_get_size(poly)); } say_polygon_set_outline_for(poly, id, ray_rb2col(val)); return val; } |
#set_pos_of(id, val) ⇒ Object
342 343 344 345 346 347 348 349 350 351 352 353 354 355 |
# File 'ext/polygon.c', line 342 static VALUE ray_polygon_set_pos_of(VALUE self, VALUE rb_id, VALUE val) { say_polygon *poly = ray_rb2polygon(self); size_t id = NUM2ULONG(rb_id); if (id >= say_polygon_get_size(poly)) { rb_raise(rb_eArgError, "trying to change point %ld, when there are %ld points", id, say_polygon_get_size(poly)); } say_polygon_set_pos_for(poly, id, ray_convert_to_vector2(val)); return val; } |
#size ⇒ Integer
Returns The amount of points in the polygon.
194 195 196 197 |
# File 'ext/polygon.c', line 194 static VALUE ray_polygon_size(VALUE self) { return INT2FIX(say_polygon_get_size(ray_rb2polygon(self))); } |