summaryrefslogtreecommitdiffstats
path: root/src/live_effects/lpe-dash-stroke.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2018-04-01 18:14:30 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2018-04-01 18:14:30 +0000
commitdb6f849e52dc4d56a6562897b5bbcd2d86c71d17 (patch)
tree2c05654fe1e974522f2c3125a4f6fdf0188b4b7b /src/live_effects/lpe-dash-stroke.cpp
parentAdd option to unify dash with diferent segment paths (diff)
downloadinkscape-db6f849e52dc4d56a6562897b5bbcd2d86c71d17.tar.gz
inkscape-db6f849e52dc4d56a6562897b5bbcd2d86c71d17.zip
Bug fix closing paths
Diffstat (limited to 'src/live_effects/lpe-dash-stroke.cpp')
-rw-r--r--src/live_effects/lpe-dash-stroke.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/live_effects/lpe-dash-stroke.cpp b/src/live_effects/lpe-dash-stroke.cpp
index 6e274cfa5..148e28a13 100644
--- a/src/live_effects/lpe-dash-stroke.cpp
+++ b/src/live_effects/lpe-dash-stroke.cpp
@@ -95,21 +95,24 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
curve_endit = path_it->end_open();
}
}
-
- size_t numberholes = numberdashes - 1;
- size_t ammount = numberdashes + numberholes;
+ size_t numberdashes_fixed = numberdashes;
+ if(!splitsegments) {
+ numberdashes_fixed++;
+ }
+ size_t numberholes = numberdashes_fixed - 1;
+ size_t ammount = numberdashes_fixed + numberholes;
if (halfextreme) {
ammount--;
}
double base = 1/(double)ammount;
- double globaldash = base * numberdashes * (1 + holefactor);
+ double globaldash = base * numberdashes_fixed * (1 + holefactor);
if (halfextreme) {
- globaldash = base * (numberdashes - 1) * (1 + holefactor);
+ globaldash = base * (numberdashes_fixed - 1) * (1 + holefactor);
}
double globalhole = 1-globaldash;
- double dashpercent = globaldash/numberdashes;
+ double dashpercent = globaldash/numberdashes_fixed;
if (halfextreme) {
- dashpercent = globaldash/(numberdashes -1);
+ dashpercent = globaldash/(numberdashes_fixed -1);
}
double holepercent = globalhole/numberholes;
double dashsize_fixed = 0;
@@ -133,12 +136,12 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
curve_endit = path_it->end_default();
}
size_t p_index = 0;
- size_t start_index = 0;
+ size_t start_index = result.size();
if(splitsegments) {
while (curve_it1 != curve_endit) {
Geom::Path segment = (*path_it).portion(p_index, p_index + 1);
if(unifysegment) {
- size_t numberdashes_fixed = (size_t)ceil((*curve_it1).length()/(dashsize_fixed + holesize_fixed));
+ numberdashes_fixed = (size_t)ceil((*curve_it1).length()/(dashsize_fixed + holesize_fixed));
if (halfextreme) {
numberdashes_fixed++;
}
@@ -175,7 +178,6 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
} else {
result.push_back(segment.portion(0.0, dashpercent));
}
- start_index = result.size()-1;
}
double start = dashpercent + holepercent;
@@ -203,7 +205,6 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
result[result.size()-1].append(segment.portion(start, end));
} else {
result.push_back(segment.portion(start, end));
- start_index = result.size()-1;
}
double startsize = dashsize + holesize;
if (halfextreme) {
@@ -220,6 +221,14 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
end = timeAtLength(endsize,segment);
}
}
+ if (curve_it2 == curve_endit) {
+ if (path_it->closed()) {
+ Geom::Path end = result[result.size()-1];
+ end.setFinal(result[start_index].initialPoint());
+ end.append(result[start_index]);
+ result[start_index] = end;
+ }
+ }
p_index ++;
++curve_it1;
++curve_it2;
@@ -235,7 +244,6 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
end = timeAtLength(dashsize,pwd2);
}
result.push_back((*path_it).portion(start, end));
- start_index = result.size()-1;
double startsize = dashsize + holesize;
if (halfextreme) {
startsize = (dashsize/2.0) + holesize;
@@ -250,8 +258,6 @@ LPEDashStroke::doEffect_path(Geom::PathVector const & path_in){
start = timeAtLength(startsize,pwd2);
end = timeAtLength(endsize,pwd2);
}
- }
- if (curve_it2 == curve_endit) {
if (path_it->closed()) {
Geom::Path end = result[result.size()-1];
end.setFinal(result[start_index].initialPoint());