mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
implemented setters and constructor of CvBox2D, and added some tests for them
This commit is contained in:
parent
9791dae3bd
commit
874ed9df69
3 changed files with 160 additions and 0 deletions
|
@ -41,9 +41,14 @@ define_ruby_class()
|
||||||
*/
|
*/
|
||||||
VALUE opencv = rb_module_opencv();
|
VALUE opencv = rb_module_opencv();
|
||||||
rb_klass = rb_define_class_under(opencv, "CvBox2D", rb_cObject);
|
rb_klass = rb_define_class_under(opencv, "CvBox2D", rb_cObject);
|
||||||
|
rb_define_alloc_func(rb_klass, rb_allocate);
|
||||||
|
rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
||||||
rb_define_method(rb_klass, "center", RUBY_METHOD_FUNC(rb_center), 0);
|
rb_define_method(rb_klass, "center", RUBY_METHOD_FUNC(rb_center), 0);
|
||||||
|
rb_define_method(rb_klass, "center=", RUBY_METHOD_FUNC(rb_set_center), 1);
|
||||||
rb_define_method(rb_klass, "size", RUBY_METHOD_FUNC(rb_size), 0);
|
rb_define_method(rb_klass, "size", RUBY_METHOD_FUNC(rb_size), 0);
|
||||||
|
rb_define_method(rb_klass, "size=", RUBY_METHOD_FUNC(rb_set_size), 1);
|
||||||
rb_define_method(rb_klass, "angle", RUBY_METHOD_FUNC(rb_angle), 0);
|
rb_define_method(rb_klass, "angle", RUBY_METHOD_FUNC(rb_angle), 0);
|
||||||
|
rb_define_method(rb_klass, "angle=", RUBY_METHOD_FUNC(rb_set_angle), 1);
|
||||||
rb_define_method(rb_klass, "points", RUBY_METHOD_FUNC(rb_points), 0);
|
rb_define_method(rb_klass, "points", RUBY_METHOD_FUNC(rb_points), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +60,31 @@ rb_allocate(VALUE klass)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* CvBox2D.new(<i>[center][, size][, angle]</i>) -> cvbox2d
|
||||||
|
*
|
||||||
|
* Create a box
|
||||||
|
*/
|
||||||
|
VALUE
|
||||||
|
rb_initialize(int argc, VALUE *argv, VALUE self)
|
||||||
|
{
|
||||||
|
VALUE center, size, angle;
|
||||||
|
rb_scan_args(argc, argv, "03", ¢er, &size, &angle);
|
||||||
|
if (!NIL_P(center))
|
||||||
|
CVBOX2D(self)->center = VALUE_TO_CVPOINT2D32F(center);
|
||||||
|
|
||||||
|
if (!NIL_P(size))
|
||||||
|
CVBOX2D(self)->size = VALUE_TO_CVSIZE2D32F(size);
|
||||||
|
|
||||||
|
if (!NIL_P(size))
|
||||||
|
CVBOX2D(self)->angle = NUM2DBL(angle);
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* center -> cvpoint2d32f
|
||||||
* Return center point of box as CvPoint2D32f.
|
* Return center point of box as CvPoint2D32f.
|
||||||
*/
|
*/
|
||||||
VALUE
|
VALUE
|
||||||
|
@ -64,6 +94,23 @@ rb_center(VALUE self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* center = <i>value</i>
|
||||||
|
*
|
||||||
|
* Set center to <i>value</i>
|
||||||
|
*/
|
||||||
|
VALUE
|
||||||
|
rb_set_center(VALUE self, VALUE value)
|
||||||
|
{
|
||||||
|
if (!cCvPoint2D32f::rb_compatible_q(rb_klass, value))
|
||||||
|
rb_raise(rb_eArgError, "object is not compatible %s.", rb_class2name(cCvPoint2D32f::rb_class()));
|
||||||
|
CVBOX2D(self)->center = VALUE_TO_CVPOINT2D32F(value);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* size -> cvsize2d32f
|
||||||
* Return size of box as CvSize2D32f.
|
* Return size of box as CvSize2D32f.
|
||||||
*/
|
*/
|
||||||
VALUE
|
VALUE
|
||||||
|
@ -73,6 +120,24 @@ rb_size(VALUE self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* size = <i>value</i>
|
||||||
|
*
|
||||||
|
* Set size to <i>value</i>
|
||||||
|
*/
|
||||||
|
VALUE
|
||||||
|
rb_set_size(VALUE self, VALUE value)
|
||||||
|
{
|
||||||
|
if (!cCvSize2D32f::rb_compatible_q(rb_klass, value))
|
||||||
|
rb_raise(rb_eArgError, "object is not compatible %s.", rb_class2name(cCvSize2D32f::rb_class()));
|
||||||
|
CVBOX2D(self)->size = VALUE_TO_CVSIZE2D32F(value);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* angle -> float
|
||||||
|
*
|
||||||
* Return angle of box as Float.
|
* Return angle of box as Float.
|
||||||
*/
|
*/
|
||||||
VALUE
|
VALUE
|
||||||
|
@ -82,6 +147,21 @@ rb_angle(VALUE self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* angle = <i>value</i>
|
||||||
|
*
|
||||||
|
* Set angle to <i>value</i>
|
||||||
|
*/
|
||||||
|
VALUE
|
||||||
|
rb_set_angle(VALUE self, VALUE value)
|
||||||
|
{
|
||||||
|
CVBOX2D(self)->angle = NUM2DBL(value);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* points -> array(include cvpoint2d32f)
|
||||||
* Find box vertices. Return Array contain 4 CvPoint2D32f.
|
* Find box vertices. Return Array contain 4 CvPoint2D32f.
|
||||||
*/
|
*/
|
||||||
VALUE
|
VALUE
|
||||||
|
|
|
@ -24,9 +24,13 @@ void define_ruby_class();
|
||||||
|
|
||||||
VALUE rb_allocate(VALUE klass);
|
VALUE rb_allocate(VALUE klass);
|
||||||
|
|
||||||
|
VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
|
||||||
VALUE rb_center(VALUE self);
|
VALUE rb_center(VALUE self);
|
||||||
|
VALUE rb_set_center(VALUE self, VALUE value);
|
||||||
VALUE rb_size(VALUE self);
|
VALUE rb_size(VALUE self);
|
||||||
|
VALUE rb_set_size(VALUE self, VALUE value);
|
||||||
VALUE rb_angle(VALUE self);
|
VALUE rb_angle(VALUE self);
|
||||||
|
VALUE rb_set_angle(VALUE self, VALUE value);
|
||||||
VALUE rb_points(VALUE self);
|
VALUE rb_points(VALUE self);
|
||||||
|
|
||||||
VALUE new_object();
|
VALUE new_object();
|
||||||
|
|
76
test/test_cvbox2d.rb
Executable file
76
test/test_cvbox2d.rb
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
# -*- mode: ruby; coding: utf-8-unix -*-
|
||||||
|
require 'test/unit'
|
||||||
|
require 'opencv'
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/helper'
|
||||||
|
|
||||||
|
include OpenCV
|
||||||
|
|
||||||
|
# Tests for OpenCV::CvBox2D
|
||||||
|
class TestCvBox2D < OpenCVTestCase
|
||||||
|
class MyPoint; end
|
||||||
|
def test_initialize
|
||||||
|
box = CvBox2D.new
|
||||||
|
assert_in_delta(0, box.center.x, 0.001)
|
||||||
|
assert_in_delta(0, box.center.y, 0.001)
|
||||||
|
assert_in_delta(0, box.size.width, 0.001)
|
||||||
|
assert_in_delta(0, box.size.height, 0.001)
|
||||||
|
assert_in_delta(0, box.angle, 0.001)
|
||||||
|
|
||||||
|
box = CvBox2D.new(CvPoint2D32f.new(1.1, 2.2), CvSize2D32f.new(3.3, 4.4), 5.5)
|
||||||
|
assert_in_delta(1.1, box.center.x, 0.001)
|
||||||
|
assert_in_delta(2.2, box.center.y, 0.001)
|
||||||
|
assert_in_delta(3.3, box.size.width, 0.001)
|
||||||
|
assert_in_delta(4.4, box.size.height, 0.001)
|
||||||
|
assert_in_delta(5.5, box.angle, 0.001)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_center
|
||||||
|
box = CvBox2D.new
|
||||||
|
box.center = CvPoint2D32f.new(1.1, 2.2)
|
||||||
|
assert_in_delta(1.1, box.center.x, 0.001)
|
||||||
|
assert_in_delta(2.2, box.center.y, 0.001)
|
||||||
|
|
||||||
|
box.center.x = 3.3
|
||||||
|
box.center.y = 4.4
|
||||||
|
assert_in_delta(3.3, box.center.x, 0.001)
|
||||||
|
assert_in_delta(4.4, box.center.y, 0.001)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_size
|
||||||
|
box = CvBox2D.new
|
||||||
|
box.size = CvSize2D32f.new(1.1, 2.2)
|
||||||
|
assert_in_delta(1.1, box.size.width, 0.001)
|
||||||
|
assert_in_delta(2.2, box.size.height, 0.001)
|
||||||
|
|
||||||
|
box.size.width = 3.3
|
||||||
|
box.size.height = 4.4
|
||||||
|
assert_in_delta(3.3, box.size.width, 0.001)
|
||||||
|
assert_in_delta(4.4, box.size.height, 0.001)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_angle
|
||||||
|
box = CvBox2D.new
|
||||||
|
box.angle = 1.1
|
||||||
|
assert_in_delta(1.1, box.angle, 0.001)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_points
|
||||||
|
box = CvBox2D.new
|
||||||
|
box.center = CvPoint2D32f.new(10, 20)
|
||||||
|
box.size = CvSize2D32f.new(5, 7)
|
||||||
|
pt = box.points
|
||||||
|
|
||||||
|
assert_equal(4, pt.size)
|
||||||
|
assert_in_delta(7.5, pt[0].x, 0.001)
|
||||||
|
assert_in_delta(23.5, pt[0].y, 0.001)
|
||||||
|
assert_in_delta(7.5, pt[1].x, 0.001)
|
||||||
|
assert_in_delta(16.5, pt[1].y, 0.001)
|
||||||
|
assert_in_delta(12.5, pt[2].x, 0.001)
|
||||||
|
assert_in_delta(16.5, pt[2].y, 0.001)
|
||||||
|
assert_in_delta(12.5, pt[3].x, 0.001)
|
||||||
|
assert_in_delta(23.5, pt[3].y, 0.001)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue