Inkscape
Vector Graphics Editor
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages Concepts
Geom::detail::bezier_clipping Namespace Reference

Functions

void portion (std::vector< Point > &B, Interval const &I)
 
void derivative (std::vector< Point > &D, std::vector< Point > const &B)
 
void print (std::vector< Point > const &cp, const char *msg="")
 
template<class charT >
std::basic_ostream< charT > & operator<< (std::basic_ostream< charT > &os, const Interval &I)
 
double angle (std::vector< Point > const &A)
 
size_t get_precision (Interval const &I)
 
void range_assertion (int k, int m, int n, const char *msg)
 
double det (Point const &P1, Point const &P2)
 
bool solve (Point &P, Point const &P1, Point const &P2, Point const &Q)
 
void map_to (Interval &J, Interval const &I)
 
bool is_constant (std::vector< Point > const &A, double precision)
 
void normal (std::vector< Point > &N, std::vector< Point > const &B)
 
void left_portion (Coord t, std::vector< Point > &B)
 
void right_portion (Coord t, std::vector< Point > &B)
 
template<typename Tag >
OptInterval clip (std::vector< Point > const &A, std::vector< Point > const &B, double precision)
 
template<typename Tag >
void iterate (std::vector< Interval > &domsA, std::vector< Interval > &domsB, std::vector< Point > const &A, std::vector< Point > const &B, Interval const &domA, Interval const &domB, double precision)
 
void orientation_line (std::vector< double > &l, std::vector< Point > const &c, size_t i, size_t j)
 
Line pick_orientation_line (std::vector< Point > const &c, double precision)
 
Line orthogonal_orientation_line (std::vector< Point > const &c, Point const &p, double precision)
 
double signed_distance (Point const &p, Line const &l)
 
Interval fat_line_bounds (std::vector< Point > const &c, Line const &l)
 
double intersect (Point const &p1, Point const &p2, double y)
 
OptInterval clip_interval (std::vector< Point > const &B, Line const &l, Interval const &bound)
 
template<>
OptInterval clip< intersection_point_tag > (std::vector< Point > const &A, std::vector< Point > const &B, double precision)
 
void make_focus (std::vector< Point > &F, std::vector< Point > const &B)
 
void distance_control_points (std::vector< Point > &D, std::vector< Point > const &B, std::vector< Point > const &F)
 
OptInterval clip_interval (std::vector< Point > const &B, std::vector< Point > const &F)
 
template<>
OptInterval clip< collinear_normal_tag > (std::vector< Point > const &A, std::vector< Point > const &B, double)
 
template<>
void iterate< intersection_point_tag > (std::vector< Interval > &domsA, std::vector< Interval > &domsB, std::vector< Point > const &A, std::vector< Point > const &B, Interval const &domA, Interval const &domB, double precision)
 
template<>
void iterate< collinear_normal_tag > (std::vector< Interval > &domsA, std::vector< Interval > &domsB, std::vector< Point > const &A, std::vector< Point > const &B, Interval const &domA, Interval const &domB, double precision)
 
template<typename Tag >
void get_solutions (std::vector< std::pair< double, double > > &xs, std::vector< Point > const &A, std::vector< Point > const &B, double precision)
 
void print (std::vector< Point > const &cp)
 
void pick_orientation_line (std::vector< double > &l, std::vector< Point > const &c)
 
double distance (Point const &P, std::vector< double > const &l)
 
void fat_line_bounds (Interval &bound, std::vector< Point > const &c, std::vector< double > const &l)
 
void clip (Interval &dom, std::vector< Point > const &B, std::vector< double > const &l, Interval const &bound)
 
Interval make_empty_interval ()
 
const Interval H2_INTERVAL (0.5+MAX_PRECISION, 1.0)
 
void intersection (std::vector< Interval > &domsA, std::vector< Interval > &domsB, std::vector< Point > const &A, std::vector< Point > const &B, Interval const &domA, Interval const &domB, double precision)
 

Variables

const double MAX_PRECISION = 1e-8
 
const double MIN_CLIPPED_SIZE_THRESHOLD = 0.8
 
const Interval UNIT_INTERVAL (0, 1)
 
const OptInterval EMPTY_INTERVAL = make_empty_interval()
 
const Interval H1_INTERVAL (0, 0.5)
 
const Interval H2_INTERVAL (nextafter(0.5, 1.0), 1.0)
 

Function Documentation

◆ angle()

double Geom::detail::bezier_clipping::angle ( std::vector< Point > const &  A)
inline

Definition at line 81 of file bezier-clipping.cpp.

References Geom::X, and Geom::Y.

Referenced by iterate< collinear_normal_tag >(), and iterate< intersection_point_tag >().

◆ clip() [1/2]

void Geom::detail::bezier_clipping::clip ( Interval dom,
std::vector< Point > const &  B,
std::vector< double > const &  l,
Interval const &  bound 
)

◆ clip() [2/2]

template<typename Tag >
OptInterval Geom::detail::bezier_clipping::clip ( std::vector< Point > const &  A,
std::vector< Point > const &  B,
double  precision 
)

Referenced by intersection().

◆ clip< collinear_normal_tag >()

template<>
OptInterval Geom::detail::bezier_clipping::clip< collinear_normal_tag > ( std::vector< Point > const &  A,
std::vector< Point > const &  B,
double   
)

Definition at line 711 of file bezier-clipping.cpp.

References clip_interval(), and make_focus().

Referenced by iterate< collinear_normal_tag >().

◆ clip< intersection_point_tag >()

template<>
OptInterval Geom::detail::bezier_clipping::clip< intersection_point_tag > ( std::vector< Point > const &  A,
std::vector< Point > const &  B,
double  precision 
)

◆ clip_interval() [1/2]

OptInterval Geom::detail::bezier_clipping::clip_interval ( std::vector< Point > const &  B,
Line const &  l,
Interval const &  bound 
)

◆ clip_interval() [2/2]

OptInterval Geom::detail::bezier_clipping::clip_interval ( std::vector< Point > const &  B,
std::vector< Point > const &  F 
)

◆ derivative()

void Geom::detail::bezier_clipping::derivative ( std::vector< Point > &  D,
std::vector< Point > const &  B 
)

Definition at line 173 of file bezier-clipping.cpp.

References D.

Referenced by normal().

◆ det()

double Geom::detail::bezier_clipping::det ( Point const &  P1,
Point const &  P2 
)

Definition at line 121 of file bezier-clipping.cpp.

References Geom::X, and Geom::Y.

Referenced by solve().

◆ distance()

double Geom::detail::bezier_clipping::distance ( Point const &  P,
std::vector< double > const &  l 
)
inline

Definition at line 163 of file intersection-by-bezier-clipping.cpp.

References Geom::X, and Geom::Y.

Referenced by clip(), and fat_line_bounds().

◆ distance_control_points()

void Geom::detail::bezier_clipping::distance_control_points ( std::vector< Point > &  D,
std::vector< Point > const &  B,
std::vector< Point > const &  F 
)

Definition at line 545 of file bezier-clipping.cpp.

References Geom::binomial_decrement_k(), Geom::binomial_increment_k(), D, and Geom::dot().

Referenced by clip_interval().

◆ fat_line_bounds() [1/2]

void Geom::detail::bezier_clipping::fat_line_bounds ( Interval bound,
std::vector< Point > const &  c,
std::vector< double > const &  l 
)
inline

Definition at line 174 of file intersection-by-bezier-clipping.cpp.

References c, and distance().

◆ fat_line_bounds() [2/2]

Interval Geom::detail::bezier_clipping::fat_line_bounds ( std::vector< Point > const &  c,
Line const &  l 
)

◆ get_precision()

size_t Geom::detail::bezier_clipping::get_precision ( Interval const &  I)
inline

Definition at line 88 of file bezier-clipping.cpp.

Referenced by get_solutions().

◆ get_solutions()

template<typename Tag >
void Geom::detail::bezier_clipping::get_solutions ( std::vector< std::pair< double, double > > &  xs,
std::vector< Point > const &  A,
std::vector< Point > const &  B,
double  precision 
)

Definition at line 1084 of file bezier-clipping.cpp.

References get_precision(), and UNIT_INTERVAL.

◆ H2_INTERVAL()

const Interval Geom::detail::bezier_clipping::H2_INTERVAL ( 0.5+  MAX_PRECISION,
1.  0 
)

◆ intersect()

double Geom::detail::bezier_clipping::intersect ( Point const &  p1,
Point const &  p2,
double  y 
)
inline

Definition at line 365 of file bezier-clipping.cpp.

References Geom::X, and Geom::Y.

Referenced by clip(), clip_interval(), and clip_interval().

◆ intersection()

void Geom::detail::bezier_clipping::intersection ( std::vector< Interval > &  domsA,
std::vector< Interval > &  domsB,
std::vector< Point > const &  A,
std::vector< Point > const &  B,
Interval const &  domA,
Interval const &  domB,
double  precision 
)

◆ is_constant()

bool Geom::detail::bezier_clipping::is_constant ( std::vector< Point > const &  A,
double  precision = EPSILON 
)
inline

◆ iterate()

template<typename Tag >
void Geom::detail::bezier_clipping::iterate ( std::vector< Interval > &  domsA,
std::vector< Interval > &  domsB,
std::vector< Point > const &  A,
std::vector< Point > const &  B,
Interval const &  domA,
Interval const &  domB,
double  precision 
)

◆ iterate< collinear_normal_tag >()

template<>
void Geom::detail::bezier_clipping::iterate< collinear_normal_tag > ( std::vector< Interval > &  domsA,
std::vector< Interval > &  domsB,
std::vector< Point > const &  A,
std::vector< Point > const &  B,
Interval const &  domA,
Interval const &  domB,
double  precision 
)

◆ iterate< intersection_point_tag >()

template<>
void Geom::detail::bezier_clipping::iterate< intersection_point_tag > ( std::vector< Interval > &  domsA,
std::vector< Interval > &  domsB,
std::vector< Point > const &  A,
std::vector< Point > const &  B,
Interval const &  domA,
Interval const &  domB,
double  precision 
)

◆ left_portion()

void Geom::detail::bezier_clipping::left_portion ( Coord  t,
std::vector< Point > &  B 
)

Definition at line 209 of file bezier-clipping.cpp.

References Geom::lerp().

Referenced by portion().

◆ make_empty_interval()

Interval Geom::detail::bezier_clipping::make_empty_interval ( )
inline

Definition at line 341 of file intersection-by-bezier-clipping.cpp.

◆ make_focus()

void Geom::detail::bezier_clipping::make_focus ( std::vector< Point > &  F,
std::vector< Point > const &  B 
)

Definition at line 504 of file bezier-clipping.cpp.

References c, normal(), and solve().

Referenced by clip< collinear_normal_tag >().

◆ map_to()

void Geom::detail::bezier_clipping::map_to ( Interval J,
Interval const &  I 
)
inline

◆ normal()

void Geom::detail::bezier_clipping::normal ( std::vector< Point > &  N,
std::vector< Point > const &  B 
)

Definition at line 196 of file bezier-clipping.cpp.

References derivative(), N, and Geom::rot90().

Referenced by make_focus().

◆ operator<<()

template<class charT >
std::basic_ostream< charT > & Geom::detail::bezier_clipping::operator<< ( std::basic_ostream< charT > &  os,
const Interval I 
)
inline

Definition at line 66 of file bezier-clipping.cpp.

References msg.

◆ orientation_line()

void Geom::detail::bezier_clipping::orientation_line ( std::vector< double > &  l,
std::vector< Point > const &  c,
size_t  i,
size_t  j 
)
inline

Definition at line 284 of file bezier-clipping.cpp.

References c, Geom::cross(), Geom::length(), Geom::X, and Geom::Y.

Referenced by pick_orientation_line().

◆ orthogonal_orientation_line()

Line Geom::detail::bezier_clipping::orthogonal_orientation_line ( std::vector< Point > const &  c,
Point const &  p,
double  precision 
)

Definition at line 325 of file bezier-clipping.cpp.

References c, Geom::Point::cw(), and is_constant().

Referenced by clip< intersection_point_tag >().

◆ pick_orientation_line() [1/2]

void Geom::detail::bezier_clipping::pick_orientation_line ( std::vector< double > &  l,
std::vector< Point > const &  c 
)
inline

Definition at line 141 of file intersection-by-bezier-clipping.cpp.

References Geom::are_near(), c, and orientation_line().

◆ pick_orientation_line() [2/2]

Line Geom::detail::bezier_clipping::pick_orientation_line ( std::vector< Point > const &  c,
double  precision 
)

Definition at line 302 of file bezier-clipping.cpp.

References Geom::are_near(), and c.

Referenced by clip< intersection_point_tag >(), and intersection().

◆ portion()

void Geom::detail::bezier_clipping::portion ( std::vector< Point > &  B,
Interval const &  I 
)

◆ print() [1/2]

void Geom::detail::bezier_clipping::print ( std::vector< Point > const &  cp)
inline

Definition at line 60 of file intersection-by-bezier-clipping.cpp.

◆ print() [2/2]

void Geom::detail::bezier_clipping::print ( std::vector< Point > const &  cp,
const char *  msg = "" 
)

Definition at line 66 of file bezier-clipping.cpp.

Referenced by iterate< intersection_point_tag >().

◆ range_assertion()

void Geom::detail::bezier_clipping::range_assertion ( int  k,
int  m,
int  n,
const char *  msg 
)

Definition at line 102 of file bezier-clipping.cpp.

References msg.

◆ right_portion()

void Geom::detail::bezier_clipping::right_portion ( Coord  t,
std::vector< Point > &  B 
)

Definition at line 225 of file bezier-clipping.cpp.

References Geom::lerp().

Referenced by portion().

◆ signed_distance()

double Geom::detail::bezier_clipping::signed_distance ( Point const &  p,
Line const &  l 
)

Definition at line 339 of file bezier-clipping.cpp.

References c, Geom::Line::coefficients(), Geom::X, and Geom::Y.

Referenced by clip_interval(), and fat_line_bounds().

◆ solve()

bool Geom::detail::bezier_clipping::solve ( Point P,
Point const &  P1,
Point const &  P2,
Point const &  Q 
)

Definition at line 130 of file bezier-clipping.cpp.

References det(), Geom::X, and Geom::Y.

Referenced by make_focus().

Variable Documentation

◆ EMPTY_INTERVAL

const Interval Geom::detail::bezier_clipping::EMPTY_INTERVAL = make_empty_interval()

Definition at line 725 of file bezier-clipping.cpp.

Referenced by intersection().

◆ H1_INTERVAL

const Interval Geom::detail::bezier_clipping::H1_INTERVAL ( ,
0.  5 
)

◆ H2_INTERVAL

const Interval Geom::detail::bezier_clipping::H2_INTERVAL(nextafter(0.5, 1.0), 1.0) ( nextafter(0.5, 1.0)  ,
1.  0 
)

◆ MAX_PRECISION

const double Geom::detail::bezier_clipping::MAX_PRECISION = 1e-8

◆ MIN_CLIPPED_SIZE_THRESHOLD

const double Geom::detail::bezier_clipping::MIN_CLIPPED_SIZE_THRESHOLD = 0.8

◆ UNIT_INTERVAL

const Interval Geom::detail::bezier_clipping::UNIT_INTERVAL ( ,
 
)

Referenced by get_solutions().