29#include <boost/python.hpp>
30#include <boost/python/implicit.hpp>
31#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
41using namespace boost::python;
46 return make_tuple(a.
c[0], a.
c[1], a.
c[2], a.
c[3], a.
c[4], a.
c[5]);
52 extract<double>(t[1]),
53 extract<double>(t[2]),
54 extract<double>(t[3]),
55 extract<double>(t[4]),
96 return make_tuple(a, b);
100 std::optional<Geom::RatQuad> oc = xax.
toCurve(r);
101 return oc?object(*oc):object();
110 class_<Geom::xAx>(
"xAx", init<>())
111 .def(init<double, double, double, double, double, double>())
112 .def(init<Geom::xAx const&>())
117 .staticmethod(
"from_tuple")
119 .staticmethod(
"fromPoint")
121 .staticmethod(
"fromPoints")
123 .staticmethod(
"fromLine")
124 .def(self_ns::str(self))
143 class_<Geom::RatQuad>(
"RatQuad", init<>())
144 .def(init<Geom::Point, Geom::Point, Geom::Point, double>())
162 .staticmethod(
"fromPointsTangents")
164 implicitly_convertible<Geom::Point,tuple>();
Cartesian point / 2D vector and related operations.
D2< SBasis > toSBasis() const override
Convert the curve to a symmetric power basis polynomial.
std::vector< Point > controlPoints() const
Get the control points.
Adaptor that creates 2D functions from 1D ones.
Infinite line on a plane.
Two-dimensional point that doubles as a vector.
void split(RatQuad &a, RatQuad &b) const
D2< SBasis > hermite() const
static RatQuad fromPointsTangents(Point P0, Point dP0, Point P, Point P2, Point dP2)
CubicBezier toCubic() const
Point pointAt(double t) const
Point P[3]
A curve of the form B02*A + B12*B*w + B22*C/(B02 + B12*w + B22) These curves can exactly represent a ...
std::vector< SBasis > homogeneous() const
Axis aligned, non-empty rectangle.
Polynomial in symmetric power basis.
std::vector< double > implicit_form_coefficients() const
static xAx fromPoints(std::vector< Point > const &pts)
static xAx fromPoint(Point p)
Point gradient(Point p) const
std::vector< double > roots(Point d, Point o) const
static xAx fromLine(Point n, double d)
double valueAt(Point P) const
bool isDegenerate() const
Interval extrema(Rect r) const
T evaluate_at(T x, T y) const
std::optional< RatQuad > toCurve(Rect const &bnd) const
std::vector< Point > crossings(Rect r) const
static tuple xAx_to_tuple(Geom::xAx const &a)
static object wrap_xax_to_curve(Geom::xAx const &xax, Geom::Rect const &r)
static std::vector< double > xax_roots1(Geom::xAx const &xax, Geom::Point const &a, Geom::Point const &b)
static std::vector< Geom::Point > wrap_rq_to_cubic(Geom::RatQuad const &rq)
static Geom::SBasis xy_eval_at(Geom::xAx const &xax, Geom::SBasis const &x, Geom::SBasis const &y)
static Geom::xAx tuple_to_xAx(boost::python::tuple const &t)
static Geom::D2< Geom::SBasis > wrap_rq_to_cubic_sb_l(Geom::RatQuad const &rq, double l)
static std::vector< double > xax_roots2(Geom::xAx const &xax, Geom::Line const &l)
static std::vector< Geom::Point > wrap_rq_to_cubic_l(Geom::RatQuad const &rq, double l)
static Geom::SBasis homo_eval_at(Geom::xAx const &xax, Geom::SBasis const &x, Geom::SBasis const &y, Geom::SBasis const &w)
static Geom::D2< Geom::SBasis > wrap_rq_to_cubic_sb(Geom::RatQuad const &rq)
static tuple wrap_rq_split(Geom::RatQuad const &rq)
std::vector< Point > intersect(const xAx &C1, const xAx &C2)