blob: 23142d37f6460adf2cfd07ed28e135c3da9eb936 [file] [log] [blame]
Svet Ganovee451cb2014-05-21 09:38:09 -07001
2//----------------------------------------------------------------------------
3// Anti-Grain Geometry - Version 2.3
4// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5//
6// Permission to copy, use, modify, sell and distribute this software
7// is granted provided this copyright notice appears in all copies.
8// This software is provided "as is" without express or implied
9// warranty, and with no claim as to its suitability for any purpose.
10//
11//----------------------------------------------------------------------------
12// Contact: mcseem@antigrain.com
13// mcseemagg@yahoo.com
14// http://www.antigrain.com
15//----------------------------------------------------------------------------
16#ifndef AGG_VCGEN_STROKE_INCLUDED
17#define AGG_VCGEN_STROKE_INCLUDED
18#include "agg_math_stroke.h"
19namespace agg
20{
Svet Ganove6986e12015-06-04 14:52:15 -070021class vcgen_stroke
Svet Ganovee451cb2014-05-21 09:38:09 -070022{
23 enum status_e {
24 initial,
25 ready,
26 cap1,
27 cap2,
28 outline1,
29 close_first,
30 outline2,
31 out_vertices,
32 end_poly1,
33 end_poly2,
34 stop
35 };
36public:
37 typedef vertex_sequence<vertex_dist_cmd, 6> vertex_storage;
38 typedef pod_deque<point_type, 6> coord_storage;
39 vcgen_stroke();
40 void line_cap(line_cap_e lc)
41 {
42 m_line_cap = lc;
43 }
44 void line_join(line_join_e lj)
45 {
46 m_line_join = lj;
47 }
48 void inner_join(inner_join_e ij)
49 {
50 m_inner_join = ij;
51 }
52 line_cap_e line_cap() const
53 {
54 return m_line_cap;
55 }
56 line_join_e line_join() const
57 {
58 return m_line_join;
59 }
60 inner_join_e inner_join() const
61 {
62 return m_inner_join;
63 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070064 void width(float w)
Svet Ganovee451cb2014-05-21 09:38:09 -070065 {
66 m_width = w / 2;
67 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070068 void miter_limit(float ml)
Svet Ganovee451cb2014-05-21 09:38:09 -070069 {
70 m_miter_limit = ml;
71 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070072 void miter_limit_theta(float t);
73 void inner_miter_limit(float ml)
Svet Ganovee451cb2014-05-21 09:38:09 -070074 {
75 m_inner_miter_limit = ml;
76 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070077 void approximation_scale(float as)
Svet Ganovee451cb2014-05-21 09:38:09 -070078 {
79 m_approx_scale = as;
80 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070081 float width() const
Svet Ganovee451cb2014-05-21 09:38:09 -070082 {
83 return m_width * 2;
84 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070085 float miter_limit() const
Svet Ganovee451cb2014-05-21 09:38:09 -070086 {
87 return m_miter_limit;
88 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070089 float inner_miter_limit() const
Svet Ganovee451cb2014-05-21 09:38:09 -070090 {
91 return m_inner_miter_limit;
92 }
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070093 float approximation_scale() const
Svet Ganovee451cb2014-05-21 09:38:09 -070094 {
95 return m_approx_scale;
96 }
97 void remove_all();
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070098 void add_vertex(float x, float y, unsigned cmd);
Svet Ganovee451cb2014-05-21 09:38:09 -070099 void rewind(unsigned path_id);
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -0700100 unsigned vertex(float* x, float* y);
Svet Ganovee451cb2014-05-21 09:38:09 -0700101private:
102 vcgen_stroke(const vcgen_stroke&);
103 const vcgen_stroke& operator = (const vcgen_stroke&);
104 vertex_storage m_src_vertices;
105 coord_storage m_out_vertices;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -0700106 float m_width;
107 float m_miter_limit;
108 float m_inner_miter_limit;
109 float m_approx_scale;
Svet Ganovee451cb2014-05-21 09:38:09 -0700110 line_cap_e m_line_cap;
111 line_join_e m_line_join;
112 inner_join_e m_inner_join;
113 unsigned m_closed;
114 status_e m_status;
115 status_e m_prev_status;
116 unsigned m_src_vertex;
117 unsigned m_out_vertex;
118};
119}
120#endif