110 qCritical() <<
"No shapes on the layer";
123 mouseLine = booleanWorkaroundTransform.map(mouseLine);
127 convertShapeToDebugArray(mouseLine);
128 convertShapeToDebugArray(lineRect);
137 QPainterPath outlineHere =
138 booleanWorkaroundTransform.map(
142 convertShapeToDebugArray(outlineHere);
144 if (outlineHere.boundingRect().intersects(lineRect)) {
145 srcOutlines << outlineHere;
149 srcOutlinesOutside << outlineHere;
154 if (srcOutlines.isEmpty()) {
164 for (
int i = 0; i < srcOutlines.length(); i++) {
166 int shapeOrigIndex = indexes[i];
168 if (lineIndexes.length() > 0) {
169 Q_FOREACH(
int lineIndex, lineIndexes) {
170 shapeNewIndexes << i;
171 lineSegmentIndexes << lineIndex;
172 shapeOrigIndexes << shapeOrigIndex;
175 srcOutlinesOutside << srcOutlines[i];
176 indexesOutside << shapeOrigIndex;
180 if (shapeNewIndexes.length() != 2) {
182 qCritical() <<
"Shape indexes count isn't correct: " <<
ppVar(shapeNewIndexes.length()) <<
ppVar(lineSegmentIndexes.length());
183 qCritical() <<
"Mouse line in used coordinates: " << mouseLine;
184 qCritical() <<
"Number of shapes even considered: " << srcOutlines.length();
185 Q_FOREACH(QPainterPath path, srcOutlines) {
186 qCritical() <<
"> A path: ";
187 convertShapeToDebugArray(path);
189 qCritical() <<
"That's the end of shapes considered.";
190 qCritical() <<
"Shapes not considered: " << srcOutlinesOutside.length();
191 Q_FOREACH(QPainterPath path, srcOutlinesOutside) {
192 qCritical() <<
"> A path: ";
193 convertShapeToDebugArray(path);
195 qCritical() <<
"That's the end of shapes not considered.";
196 for(
int i = 0; i < shapeNewIndexes.length(); i++) {
197 int index = shapeNewIndexes[i];
198 qCritical() <<
"Shape: ";
199 convertShapeToDebugArray(srcOutlines[index]);
200 qCritical() <<
"Line index: " << lineSegmentIndexes[i] <<
" meaning it's: " << srcOutlines[index].elementAt(
KisAlgebra2D::wrapValue(lineSegmentIndexes[i], 0, srcOutlines[index].elementCount()))
201 << srcOutlines[index].elementAt(
KisAlgebra2D::wrapValue(lineSegmentIndexes[i] + 1, 0, srcOutlines[index].elementCount()));
205 QPainterPath newLineShape = QPainterPath();
206 newLineShape.moveTo(mouseLine.p1());
207 newLineShape.lineTo(mouseLine.p2());
209 newLineShape = booleanWorkaroundTransform.inverted().map(newLineShape);
229 qCritical() <<
"Found two shapes.";
230 qCritical() <<
"Shape 1:";
231 convertShapeToDebugArray(srcOutlines[shapeNewIndexes[0]]);
232 qCritical() <<
ppVar(srcOutlines[shapeNewIndexes[0]].toFillPolygon());
234 qCritical() <<
"Shape 2:";
235 convertShapeToDebugArray(srcOutlines[shapeNewIndexes[1]]);
236 qCritical() <<
ppVar(srcOutlines[shapeNewIndexes[1]].toFillPolygon());
239 if (shapeNewIndexes[0] == shapeNewIndexes[1]) {
244 if (!insideP1 || !insideP2) {
252 QPainterPath result =
KisAlgebra2D::removeGutterSmart(srcOutlines[shapeNewIndexes[0]], lineSegmentIndexes[0], srcOutlines[shapeNewIndexes[1]], lineSegmentIndexes[1], shapeNewIndexes[0]==shapeNewIndexes[1]);
255 qCritical() <<
"Finally got a result:";
256 convertShapeToDebugArray(result);
257 qCritical() <<
ppVar(result.toFillPolygon());
262 Q_FOREACH(
int index, indexesOutside) {
263 if (isSelected[index]) {
272 result = booleanWorkaroundTransform.inverted().map(result);
289 resultShape->
setStroke(referenceShape->stroke());
290 resultShape->
setZIndex(referenceShape->zIndex());
291 if (koPathReferenceShape) {
299 if (isSelected[shapeOrigIndexes[0]] || isSelected[shapeOrigIndexes[1]]) {
300 resultSelectedShapes << resultShape;
304 shapesToRemove <<
m_allShapes[shapeOrigIndexes[0]];
305 if (shapeOrigIndexes[0] != shapeOrigIndexes[1]) {
306 shapesToRemove <<
m_allShapes[shapeOrigIndexes[1]];
320 painter.setPen(QPen(QBrush(Qt::darkGray), 2));
323 if (line.length() > 0) {
324 QPointF vector = line.p2() - line.p1();
325 vector = vector/line.length();
326 int arrowLength = 15;
327 int arrowThickness = 5;
329 QPointF before = line.p1() - vector*arrowLength;
330 QPointF after = line.p2() + vector*arrowLength;
332 QPointF perpendicular = QPointF(vector.y(), -vector.x());
334 painter.drawLine(QPointF(before + arrowThickness*perpendicular), line.p1());
335 painter.drawLine(QPointF(before - arrowThickness*perpendicular), line.p1());
337 painter.drawLine(QPointF(after + arrowThickness*perpendicular), line.p2());
338 painter.drawLine(QPointF(after - arrowThickness*perpendicular), line.p2());
342 painter.drawLine(line);