111 qCritical() <<
"No shapes on the layer";
124 mouseLine = booleanWorkaroundTransform.map(mouseLine);
128 convertShapeToDebugArray(mouseLine);
129 convertShapeToDebugArray(lineRect);
138 QPainterPath outlineHere =
139 booleanWorkaroundTransform.map(
143 convertShapeToDebugArray(outlineHere);
145 if (outlineHere.boundingRect().intersects(lineRect)) {
146 srcOutlines << outlineHere;
150 srcOutlinesOutside << outlineHere;
155 if (srcOutlines.isEmpty()) {
165 for (
int i = 0; i < srcOutlines.length(); i++) {
167 int shapeOrigIndex = indexes[i];
169 if (lineIndexes.length() > 0) {
170 Q_FOREACH(
int lineIndex, lineIndexes) {
171 shapeNewIndexes << i;
172 lineSegmentIndexes << lineIndex;
173 shapeOrigIndexes << shapeOrigIndex;
176 srcOutlinesOutside << srcOutlines[i];
177 indexesOutside << shapeOrigIndex;
181 if (shapeNewIndexes.length() != 2) {
183 qCritical() <<
"Shape indexes count isn't correct: " <<
ppVar(shapeNewIndexes.length()) <<
ppVar(lineSegmentIndexes.length());
184 qCritical() <<
"Mouse line in used coordinates: " << mouseLine;
185 qCritical() <<
"Number of shapes even considered: " << srcOutlines.length();
186 Q_FOREACH(QPainterPath path, srcOutlines) {
187 qCritical() <<
"> A path: ";
188 convertShapeToDebugArray(path);
190 qCritical() <<
"That's the end of shapes considered.";
191 qCritical() <<
"Shapes not considered: " << srcOutlinesOutside.length();
192 Q_FOREACH(QPainterPath path, srcOutlinesOutside) {
193 qCritical() <<
"> A path: ";
194 convertShapeToDebugArray(path);
196 qCritical() <<
"That's the end of shapes not considered.";
197 for(
int i = 0; i < shapeNewIndexes.length(); i++) {
198 int index = shapeNewIndexes[i];
199 qCritical() <<
"Shape: ";
200 convertShapeToDebugArray(srcOutlines[index]);
201 qCritical() <<
"Line index: " << lineSegmentIndexes[i] <<
" meaning it's: " << srcOutlines[index].elementAt(
KisAlgebra2D::wrapValue(lineSegmentIndexes[i], 0, srcOutlines[index].elementCount()))
202 << srcOutlines[index].elementAt(
KisAlgebra2D::wrapValue(lineSegmentIndexes[i] + 1, 0, srcOutlines[index].elementCount()));
206 QPainterPath newLineShape = QPainterPath();
207 newLineShape.moveTo(mouseLine.p1());
208 newLineShape.lineTo(mouseLine.p2());
210 newLineShape = booleanWorkaroundTransform.inverted().map(newLineShape);
230 qCritical() <<
"Found two shapes.";
231 qCritical() <<
"Shape 1:";
232 convertShapeToDebugArray(srcOutlines[shapeNewIndexes[0]]);
233 qCritical() <<
ppVar(srcOutlines[shapeNewIndexes[0]].toFillPolygon());
235 qCritical() <<
"Shape 2:";
236 convertShapeToDebugArray(srcOutlines[shapeNewIndexes[1]]);
237 qCritical() <<
ppVar(srcOutlines[shapeNewIndexes[1]].toFillPolygon());
240 if (shapeNewIndexes[0] == shapeNewIndexes[1]) {
245 if (!insideP1 || !insideP2) {
253 QPainterPath result =
KisAlgebra2D::removeGutterSmart(srcOutlines[shapeNewIndexes[0]], lineSegmentIndexes[0], srcOutlines[shapeNewIndexes[1]], lineSegmentIndexes[1], shapeNewIndexes[0]==shapeNewIndexes[1]);
256 qCritical() <<
"Finally got a result:";
257 convertShapeToDebugArray(result);
258 qCritical() <<
ppVar(result.toFillPolygon());
263 Q_FOREACH(
int index, indexesOutside) {
264 if (isSelected[index]) {
273 result = booleanWorkaroundTransform.inverted().map(result);
291 resultShape->
setStroke(referenceShape->stroke());
292 resultShape->
setZIndex(referenceShape->zIndex());
293 if (koPathReferenceShape) {
301 if (isSelected[shapeOrigIndexes[0]] || isSelected[shapeOrigIndexes[1]]) {
302 resultSelectedShapes << resultShape;
306 shapesToRemove <<
m_allShapes[shapeOrigIndexes[0]];
307 if (shapeOrigIndexes[0] != shapeOrigIndexes[1]) {
308 shapesToRemove <<
m_allShapes[shapeOrigIndexes[1]];
327 if (line.length() > 0) {
328 QPointF vector = line.p2() - line.p1();
329 vector = vector/line.length();
330 int arrowLength = 15;
331 int arrowThickness = 5;
333 QPointF before = line.p1() - vector*arrowLength;
334 QPointF after = line.p2() + vector*arrowLength;
336 QPointF perpendicular = QPointF(vector.y(), -vector.x());
338 painter.drawLine(QPointF(before + arrowThickness*perpendicular), line.p1());
339 painter.drawLine(QPointF(before - arrowThickness*perpendicular), line.p1());
341 painter.drawLine(QPointF(after + arrowThickness*perpendicular), line.p2());
342 painter.drawLine(QPointF(after - arrowThickness*perpendicular), line.p2());
346 painter.drawLine(line);