831
831
for (int i = 0; i < theRes->numberOfPoints(); i++)
833
833
if (theRes->getPoint(i).totalDegree() > 0)
835
835
Geom::Point nx = theRes->getPoint(i).x;
836
836
Geom::Point nxpx = px-nx;
837
837
double ndist = sqrt (dot(nxpx,nxpx));
1026
1026
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
1027
1027
guint mode = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_PARALLEL);
1028
if (mode == SP_CLONE_COMPENSATION_NONE) return;
1029
SPItem *item = SP_ITEM(self);
1030
1031
Geom::Matrix m(*mp);
1031
if (!(m.isTranslation())) return;
1032
if (!(m.isTranslation()) || mode == SP_CLONE_COMPENSATION_NONE) {
1033
self->sourceDirty=true;
1034
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
1033
1038
// calculate the compensation matrix and the advertized movement matrix
1034
SPItem *item = SP_ITEM(self);
1039
sp_object_read_attr(item, "transform");
1036
Geom::Matrix compensate;
1041
Geom::Matrix t = self->transform;
1042
Geom::Matrix offset_move = t.inverse() * m * t;
1037
1043
Geom::Matrix advertized_move;
1039
if (mode == SP_CLONE_COMPENSATION_UNMOVED) {
1040
compensate = Geom::identity();
1045
if (mode == SP_CLONE_COMPENSATION_PARALLEL) {
1046
offset_move = offset_move.inverse() * m;
1047
advertized_move = m;
1048
} else if (mode == SP_CLONE_COMPENSATION_UNMOVED) {
1049
offset_move = offset_move.inverse();
1041
1050
advertized_move.setIdentity();
1042
} else if (mode == SP_CLONE_COMPENSATION_PARALLEL) {
1044
advertized_move = m;
1046
1052
g_assert_not_reached();
1049
item->transform *= compensate;
1055
self->sourceDirty = true;
1051
1057
// commit the compensation
1058
item->transform *= offset_move;
1052
1059
sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, &advertized_move);
1053
1060
SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
1074
sp_offset_source_modified (SPObject */*iSource*/, guint /*flags*/, SPItem *item)
1081
sp_offset_source_modified (SPObject */*iSource*/, guint flags, SPItem *item)
1076
1083
SPOffset *offset = SP_OFFSET(item);
1077
offset->sourceDirty=true;
1078
refresh_offset_source(offset);
1079
sp_shape_set_shape ((SPShape *) offset);
1084
offset->sourceDirty = true;
1085
if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG)) {
1086
offset->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
1107
1115
orig->LoadPathVector(curve->get_pathvector());
1108
1116
curve->unref();
1118
if (!item->transform.isIdentity()) {
1119
gchar const *t_attr = SP_OBJECT_REPR(item)->attribute("transform");
1122
if (sp_svg_transform_read(t_attr, &t)) {