80 for (
const auto & path_it : pv) {
81 if (path_it.empty()) {
87 if (path_it.closed()) {
88 const Geom::Curve &closingline = path_it.back_closed();
96 curve_endit = path_it.end_open();
101 numberdashes_fixed++;
103 size_t numberholes = numberdashes_fixed - 1;
104 size_t ammount = numberdashes_fixed + numberholes;
108 double base = 1/(double)ammount;
109 double globaldash = base * numberdashes_fixed * (1 +
holefactor);
111 globaldash = base * (numberdashes_fixed - 1) * (1 +
holefactor);
113 double globalhole = 1-globaldash;
114 double dashpercent = globaldash/numberdashes_fixed;
116 dashpercent = globaldash/(numberdashes_fixed -1);
118 double holepercent = globalhole/numberholes;
119 double dashsize_fixed = 0;
120 double holesize_fixed = 0;
122 double length_pwd2 =
length (pwd2);
123 double minlength = length_pwd2;
125 while (curve_it1 != curve_endit) {
126 double length_segment = (*curve_it1).length();
127 if (length_segment < minlength) {
128 minlength = length_segment;
129 dashsize_fixed = (*curve_it1).length() * dashpercent;
130 holesize_fixed = (*curve_it1).length() * holepercent;
135 curve_it1 = path_it.begin();
136 curve_it2 = ++(path_it.begin());
137 curve_endit = path_it.end_default();
140 size_t start_index =
result.size();
142 while (curve_it1 != curve_endit) {
146 modf((*curve_it1).length()/(dashsize_fixed + holesize_fixed), &
integral);
147 numberdashes_fixed = (size_t)
integral + 1;
148 numberholes = numberdashes_fixed - 1;
149 ammount = numberdashes_fixed + numberholes;
153 base = 1/(double)ammount;
154 globaldash = base * numberdashes_fixed * (1 +
holefactor);
156 globaldash = base * (numberdashes_fixed - 1) * (1 +
holefactor);
158 globalhole = 1-globaldash;
159 dashpercent = globaldash/numberdashes_fixed;
161 dashpercent = globaldash/(numberdashes_fixed -1);
163 holepercent = globalhole/numberholes;
165 double dashsize = (*curve_it1).length() * dashpercent;
166 double holesize = (*curve_it1).length() * holepercent;
167 if ((*curve_it1).isLineSegment()) {
183 double start = dashpercent + holepercent;
185 start = (dashpercent/2.0) + holepercent;
188 if (
start + dashpercent > 1) {
193 start += dashpercent + holepercent;
195 }
else if (!(*curve_it1).isLineSegment()) {
209 double startsize = dashsize + holesize;
211 startsize = (dashsize/2.0) + holesize;
213 double endsize = startsize + dashsize;
216 while (start < 1 && start > 0) {
218 startsize = endsize + holesize;
219 endsize = startsize + dashsize;
224 if (curve_it2 == curve_endit) {
225 if (path_it.closed()) {
227 end.setFinal(
result[start_index].initialPoint());
239 double dashsize = length_pwd2 * dashpercent;
240 double holesize = length_pwd2 * holepercent;
247 double startsize = dashsize + holesize;
249 startsize = (dashsize/2.0) + holesize;
251 double endsize = startsize + dashsize;
256 startsize = endsize + holesize;
257 endsize = startsize + dashsize;
261 if (path_it.closed()) {
263 end.setFinal(
result[start_index].initialPoint());