Added a convenience binding for vector+point

This way, the vector/point sum is commutable.
vector+point == point+vector.
This commit is contained in:
Matthias Koefferlein 2017-10-27 22:02:26 +02:00
parent 374816fe0e
commit d90593df89
2 changed files with 23 additions and 0 deletions

View File

@ -100,6 +100,11 @@ struct vector_defs
return std_ext::hfunc (*v);
}
static db::point<coord_type> add_with_point (const C *v, const db::point<coord_type> &p)
{
return p + *v;
}
static gsi::Methods methods ()
{
return
@ -120,6 +125,7 @@ struct vector_defs
method_ext ("to_p", &to_point,
"@brief Turns the vector into a point\n"
"This method returns the point resulting from adding the vector to (0,0)."
"\n"
"This method has been introduced in version 0.25."
) +
method_ext ("-@", &negate,
@ -136,6 +142,13 @@ struct vector_defs
"\n"
"Adds vector v to self by adding the coordinates.\n"
) +
method_ext ("+", &add_with_point,
"@brief Adds a vector and a point\n"
"\n"
"@args p\n"
"\n"
"Returns the point p shifted by the vector.\n"
) +
method ("-", (C (C::*) (const C &) const) &C::subtract,
"@brief Subtract two vectors\n"
"\n"

View File

@ -55,6 +55,11 @@ class DBVector_TestClass < TestBase
b.y = a.y
assert_equal( a, b )
assert_equal( c.to_p.class == RBA::DPoint, true )
assert_equal( c.class == RBA::DVector, true )
assert_equal( (c + RBA::DPoint::new(1, 2)).class == RBA::DPoint, true )
assert_equal( (c + RBA::DPoint::new(1, 2)).to_s, "6,13" )
end
# Transforming DVector
@ -101,6 +106,11 @@ class DBVector_TestClass < TestBase
b.y = a.y
assert_equal( a, b )
assert_equal( c.to_p.class == RBA::Point, true )
assert_equal( c.class == RBA::Vector, true )
assert_equal( (c + RBA::Point::new(1, 2)).class == RBA::Point, true )
assert_equal( (c + RBA::Point::new(1, 2)).to_s, "6,13" )
end
# Transforming Vector