MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / init

Method init

dep/agg/src/agg_bezier_arc.cpp:71–131  ·  view source on GitHub ↗

------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

69
70 //------------------------------------------------------------------------
71 void bezier_arc::init(double x, double y,
72 double rx, double ry,
73 double start_angle,
74 double sweep_angle)
75 {
76 start_angle = std::fmod(start_angle, 2.0 * pi);
77 if(sweep_angle >= 2.0 * pi) sweep_angle = 2.0 * pi;
78 if(sweep_angle <= -2.0 * pi) sweep_angle = -2.0 * pi;
79
80 if(std::fabs(sweep_angle) < 1e-10)
81 {
82 m_num_vertices = 4;
83 m_cmd = path_cmd_line_to;
84 m_vertices[0] = x + rx * std::cos(start_angle);
85 m_vertices[1] = y + ry * std::sin(start_angle);
86 m_vertices[2] = x + rx * std::cos(start_angle + sweep_angle);
87 m_vertices[3] = y + ry * std::sin(start_angle + sweep_angle);
88 return;
89 }
90
91 double total_sweep = 0.0;
92 double local_sweep = 0.0;
93 double prev_sweep;
94 m_num_vertices = 2;
95 m_cmd = path_cmd_curve4;
96 bool done = false;
97 do
98 {
99 if(sweep_angle < 0.0)
100 {
101 prev_sweep = total_sweep;
102 local_sweep = -pi * 0.5;
103 total_sweep -= pi * 0.5;
104 if(total_sweep <= sweep_angle + bezier_arc_angle_epsilon)
105 {
106 local_sweep = sweep_angle - prev_sweep;
107 done = true;
108 }
109 }
110 else
111 {
112 prev_sweep = total_sweep;
113 local_sweep = pi * 0.5;
114 total_sweep += pi * 0.5;
115 if(total_sweep >= sweep_angle - bezier_arc_angle_epsilon)
116 {
117 local_sweep = sweep_angle - prev_sweep;
118 done = true;
119 }
120 }
121
122 arc_to_bezier(x, y, rx, ry,
123 start_angle,
124 local_sweep,
125 m_vertices + m_num_vertices - 2);
126
127 m_num_vertices += 6;
128 start_angle += local_sweep;

Callers

nothing calls this directly

Calls 6

arc_to_bezierFunction · 0.85
num_verticesMethod · 0.45
transformMethod · 0.45
verticesMethod · 0.45

Tested by

no test coverage detected