summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2016-12-18 23:19:40 +0000
committerJabiertxof <jtx@jtx>2016-12-18 23:19:40 +0000
commitcb31a827d3db6bc45cdd806fdf1581f608ccc180 (patch)
tree8e786d8cb3acb1375f30d827a25867a7694b7b37 /src
parentFix a bug on transforms in mirror symmetry (diff)
downloadinkscape-cb31a827d3db6bc45cdd806fdf1581f608ccc180.tar.gz
inkscape-cb31a827d3db6bc45cdd806fdf1581f608ccc180.zip
Use Geom::Reflection instead custom method an copy rotate and mirror LPE
(bzr r15331)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-copy_rotate.cpp15
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp28
-rw-r--r--src/live_effects/lpe-mirror_symmetry.h1
3 files changed, 5 insertions, 39 deletions
diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp
index 5b94e9083..0492b12d6 100644
--- a/src/live_effects/lpe-copy_rotate.cpp
+++ b/src/live_effects/lpe-copy_rotate.cpp
@@ -262,19 +262,8 @@ LPECopyRotate::setFusion(Geom::PathVector &path_on, Geom::Path divider, double s
if (i%2 != 0) {
Geom::Point A = (Geom::Point)origin;
Geom::Point B = origin + dir * Geom::Rotate(-Geom::rad_from_deg((rotation_angle*i)+starting_angle)) * size_divider;
- Geom::Translate m1(A[0], A[1]);
- double hyp = Geom::distance(A, B);
- double c = (B[0] - A[0]) / hyp; // cos(alpha)
- double s = (B[1] - A[1]) / hyp; // sin(alpha)
-
- Geom::Affine m2(c, -s, s, c, 0.0, 0.0);
- Geom::Scale sca(1.0, -1.0);
-
- Geom::Affine tmp_m = m1.inverse() * m2;
- m = tmp_m;
- m = m * sca;
- m = m * m2.inverse();
- m = m * m1;
+ Geom::Line ls(A,B);
+ Geom::Affine m = Geom::reflection (ls.vector(), A);
} else {
append_path = original;
}
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index 1c888b8d1..67d932e84 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -119,7 +119,6 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
start_point.param_setValue(point_a);
end_point.param_setValue(point_b);
}
- line_separation.setPoints(point_a, point_b);
if ( mode == MT_X || mode == MT_Y ) {
start_point.param_setValue(point_a, true);
end_point.param_setValue(point_b, true);
@@ -128,9 +127,6 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
Geom::Point trans = center_point - previous_center;
start_point.param_setValue(start_point * trans, true);
end_point.param_setValue(end_point * trans, true);
- line_separation.setPoints(start_point, end_point);
- } else {
- line_separation.setPoints(start_point, end_point);
}
} else if ( mode == MT_V){
if(SP_ACTIVE_DESKTOP){
@@ -142,7 +138,6 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
Geom::Point ep = Geom::Point(view_box_rect.width()/2.0, view_box_rect.height());
ep *= i2anc_affine(SP_OBJECT(lpeitem), SP_OBJECT(SP_ACTIVE_DESKTOP->currentLayer()->parent)) .inverse();
end_point.param_setValue(ep, true);
- line_separation.setPoints(start_point, end_point);
}
} else { //horizontal page
if(SP_ACTIVE_DESKTOP){
@@ -154,7 +149,6 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
Geom::Point ep = Geom::Point(view_box_rect.width(), view_box_rect.height()/2.0);
ep *= i2anc_affine(SP_OBJECT(lpeitem), SP_OBJECT(SP_ACTIVE_DESKTOP->currentLayer()->parent)) .inverse();
end_point.param_setValue(ep, true);
- line_separation.setPoints(start_point, end_point);
}
}
previous_center = Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point);
@@ -203,24 +197,8 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in)
path_out = pathv_to_linear_and_cubic_beziers(path_in);
}
- Geom::Point point_a(line_separation.initialPoint());
- Geom::Point point_b(line_separation.finalPoint());
-
- Geom::Translate m1(point_a[0], point_a[1]);
- double hyp = Geom::distance(point_a, point_b);
- double cos = 0;
- double sin = 0;
- if (hyp > 0) {
- cos = (point_b[0] - point_a[0]) / hyp;
- sin = (point_b[1] - point_a[1]) / hyp;
- }
- Geom::Affine m2(cos, -sin, sin, cos, 0.0, 0.0);
- Geom::Scale sca(1.0, -1.0);
-
- Geom::Affine m = m1.inverse() * m2;
- m = m * sca;
- m = m * m2.inverse();
- m = m * m1;
+ Geom::Line ls((Geom::Point)start_point,(Geom::Point)end_point);
+ Geom::Affine m = Geom::reflection (ls.vector(), (Geom::Point)start_point);
if (fuse_paths && !discard_orig_path) {
for (Geom::PathVector::const_iterator path_it = original_pathv.begin();
@@ -247,7 +225,7 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in)
}
Geom::Point s = start_point;
Geom::Point e = end_point;
- double dir = line_separation.angle();
+ double dir = ls.angle();
double diagonal = Geom::distance(Geom::Point(boundingbox_X.min(),boundingbox_Y.min()),Geom::Point(boundingbox_X.max(),boundingbox_Y.max()));
Geom::Rect bbox(Geom::Point(boundingbox_X.min(),boundingbox_Y.min()),Geom::Point(boundingbox_X.max(),boundingbox_Y.max()));
double size_divider = Geom::distance(center_point, bbox) + diagonal;
diff --git a/src/live_effects/lpe-mirror_symmetry.h b/src/live_effects/lpe-mirror_symmetry.h
index a7d271453..b4967173a 100644
--- a/src/live_effects/lpe-mirror_symmetry.h
+++ b/src/live_effects/lpe-mirror_symmetry.h
@@ -56,7 +56,6 @@ private:
PointParam start_point;
PointParam end_point;
PointParam center_point;
- Geom::Line line_separation;
Geom::Point previous_center;
LPEMirrorSymmetry(const LPEMirrorSymmetry&);