17 #include "vectorimage.h"
24 #include <QXmlStreamWriter>
28 VectorImage::VectorImage()
41 VectorImage::~VectorImage()
82 if (type.
name() !=
"PencilVectorImage")
return false;
85 if (element.
tagName() ==
"image")
87 if (element.
attribute(
"type") ==
"vector")
93 setFileName(filePath);
107 debugInfo <<
"VectorImage::write";
111 QFile file(filePath);
115 qDebug() <<
"VectorImage - Cannot write file" << filePath << file.
error();
116 debugInfo << (
"file.error() = " + file.
errorString());
117 return Status(Status::FAIL, debugInfo);
122 debugInfo <<
"Unrecognized format";
123 return Status(Status::FAIL, debugInfo);
129 xmlStream.
writeDTD(
"<!DOCTYPE PencilVectorImage>");
137 debugInfo.collect(st.details());
138 debugInfo <<
"- xml creation failed";
139 return Status(Status::FAIL, debugInfo);
144 setFileName(filePath);
156 debugInfo <<
"VectorImage::createDomElement";
158 for (
int i = 0; i < mCurves.
size(); i++)
160 Status st = mCurves[i].createDomElement(xmlStream);
163 debugInfo.collect(st.details());
164 debugInfo <<
QString(
"- m_curves[%1] failed to write").
arg(i);
165 return Status(Status::FAIL, debugInfo);
168 for (
int i = 0; i < mArea.
size(); i++)
170 Status st = mArea[i].createDomElement(xmlStream);
173 debugInfo.collect(st.details());
174 debugInfo <<
QString(
"- area[%1] failed to write").
arg(i);
175 return Status(Status::FAIL, debugInfo);
191 if (!atomElement.
isNull())
193 if (atomElement.
tagName() ==
"curve")
196 newCurve.loadDomElement(atomElement);
199 if (atomElement.
tagName() ==
"area")
202 newArea.loadDomElement(atomElement);
224 mCurves[curveNumber].addPoint(vertexNumber, fraction);
226 for (
int j = 0; j < mArea.
size(); j++)
229 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
231 if (mArea[j].getVertexRef(k).curveNumber == curveNumber)
233 if (mArea[j].getVertexRef(k).vertexNumber >= vertexNumber)
235 mArea[j].mVertex[k].vertexNumber++;
240 for (
int k = 1; k < mArea.
at(j).mVertex.
size(); k++)
242 if (
VertexRef(curveNumber, vertexNumber + 1) == mArea.
at(j).mVertex.
at(k))
244 if (
VertexRef(curveNumber, vertexNumber - 1) == mArea.
at(j).mVertex.
at(k - 1))
249 if (
VertexRef(curveNumber, vertexNumber - 1) == mArea.
at(j).mVertex.
at(k))
251 if (
VertexRef(curveNumber, vertexNumber + 1) == mArea.
at(j).mVertex.
at(k - 1))
268 for (
int j = 0; j < mArea.
size(); j++)
270 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
272 if (mArea.
at(j).mVertex[k].curveNumber > i) { mArea[j].mVertex[k].curveNumber--; }
289 if (newCurve.getVertexSize() < 1)
296 qreal tol = qMax(newCurve.getWidth() / factor, 3.0 / factor);
305 if (position < 0 || position > mCurves.
size() - 1)
312 for (
int i = 0; i < mArea.
size(); i++)
314 for (
int j = 0; j < mArea.
at(i).mVertex.
size(); j++)
316 if (mArea.
at(i).mVertex[j].curveNumber >= position) {
317 mArea[i].mVertex[j].curveNumber++;
321 mCurves.
insert(position, newCurve);
346 QPointF P = newCurve.getVertex(-1);
347 QPointF Q = newCurve.getVertex(newCurve.getVertexSize() - 1);
348 if (BezierCurve::eLength(P - Q) < tolerance)
350 newCurve.setVertex(newCurve.getVertexSize() - 1, P);
354 for (
int i = 0; i < mCurves.
size(); i++)
356 for (
int j = 0; j < mCurves.
at(i).getVertexSize(); j++)
358 QPointF P = newCurve.getVertex(-1);
359 QPointF Q = newCurve.getVertex(newCurve.getVertexSize() - 1);
360 QPointF P1 = mCurves.
at(i).getVertex(j - 1);
362 qreal tol3 = 2.0*sqrt(0.25*((P1 - P2).x()*(P1 - P2).x() + (P1 - P2).y()*(P1 - P2).y()) + tolerance*tolerance);
363 qreal dist1 = BezierCurve::eLength(P - P1);
364 qreal dist2 = BezierCurve::eLength(P - P2);
365 if (dist1 <= 0.2*tolerance)
367 newCurve.setVertex(-1, P1);
371 if (dist2 <= 0.2*tolerance)
373 newCurve.setVertex(-1, P2);
377 if (dist1 + dist2 <= 3 * tol3)
381 qreal distance = BezierCurve::findDistance(mCurves[i], j, P, nearestPoint, t);
382 if (distance < tolerance)
384 newCurve.setOrigin(nearestPoint);
391 dist1 = BezierCurve::eLength(Q - P1);
392 dist2 = BezierCurve::eLength(Q - P2);
393 if (dist1 <= 0.2*tolerance)
395 newCurve.setLastVertex(P1);
399 if (dist2 <= 0.2*tolerance)
401 newCurve.setLastVertex(P2);
405 if (dist1 + dist2 <= 3 * tol3)
409 qreal distance = BezierCurve::findDistance(mCurves[i], j, Q, nearestPoint, t);
410 if (distance < tolerance)
412 newCurve.setLastVertex(nearestPoint);
432 for (
int k = 0; k < newCurve.getVertexSize(); k++)
434 for (
int j = k + 1; j < newCurve.getVertexSize(); j++)
437 bool intersection = BezierCurve::findIntersection(newCurve, k, newCurve, j, intersections);
442 newCurve.addPoint(k, intersections[0].t1);
446 newCurve.addPoint(j, intersections[0].t2);
453 for (
int k = 0; k < newCurve.getVertexSize(); k++)
459 for (
int i = 0; i < mCurves.
size(); i++)
463 QPointF Q = mCurves.
at(i).getVertex(mCurves.
at(i).getVertexSize() - 1);
464 QPointF P1 = newCurve.getVertex(k - 1);
465 QPointF P2 = newCurve.getVertex(k);
466 qreal tol3 = 2.0*sqrt(0.25*((P1 - P2).x()*(P1 - P2).x() + (P1 - P2).y()*(P1 - P2).y()) + tolerance*tolerance);
467 qreal dist1 = BezierCurve::eLength(P - P1);
468 qreal dist2 = BezierCurve::eLength(P - P2);
470 if (dist1 < 0.2*tolerance)
472 mCurves[i].setVertex(-1, P1);
476 if (dist2 < 0.2*tolerance)
478 mCurves[i].setVertex(-1, P2);
482 if (dist1 + dist2 < 3 * tol3)
487 qreal distance = BezierCurve::findDistance(newCurve, k, P, nearestPoint, t);
489 if (distance < tolerance)
499 dist1 = BezierCurve::eLength(Q - P1);
500 dist2 = BezierCurve::eLength(Q - P2);
501 if (dist1 < 0.2*tolerance)
503 mCurves[i].setVertex(mCurves.
at(i).getVertexSize() - 1, P1);
507 if (dist2 < 0.2*tolerance)
509 mCurves[i].setVertex(mCurves.
at(i).getVertexSize() - 1, P2);
513 if (dist1 + dist2 < 3 * tol3)
518 qreal distance = BezierCurve::findDistance(newCurve, k, Q, nearestPoint, t);
520 if (distance < tolerance)
532 for (
int j = 0; j < mCurves.
at(i).getVertexSize(); j++)
535 bool intersection = BezierCurve::findIntersection(newCurve, k, mCurves.
at(i), j, intersections);
539 QPointF intersectionPoint = intersections[0].point;
540 qreal t1 = intersections[0].t1;
541 qreal t2 = intersections[0].t2;
542 if (BezierCurve::eLength(intersectionPoint - newCurve.getVertex(k - 1)) <= 0.1*tolerance)
544 newCurve.setVertex(k - 1, intersectionPoint);
549 if (BezierCurve::eLength(intersectionPoint - newCurve.getVertex(k)) <= 0.1*tolerance)
551 newCurve.setVertex(k, intersectionPoint);
557 newCurve.addPoint(k, t1);
562 if (BezierCurve::eLength(intersectionPoint - mCurves.
at(i).getVertex(j - 1)) <= 0.1*tolerance)
564 mCurves[i].setVertex(j - 1, intersectionPoint);
569 if (BezierCurve::eLength(intersectionPoint - mCurves.
at(i).getVertex(j)) <= 0.1*tolerance)
571 mCurves[i].setVertex(j, intersectionPoint);
587 void VectorImage::select(
QRectF rectangle)
589 for (
int i = 0; i < mCurves.
size(); i++)
591 bool bSelected = mCurves[i].intersects(rectangle);
595 for (
int i = 0; i < mArea.
size(); i++)
597 bool b = rectangle.
contains(mArea[i].mPath.boundingRect());
612 mCurves[curveNumber].setSelected(YesOrNo);
615 mSelectionRect |= mCurves[curveNumber].getBoundingRect();
628 mCurves[curveNumber].setSelected(vertexNumber, YesOrNo);
630 if (YesOrNo) mSelectionRect |=
QRectF(vertex.
x(), vertex.
y(), 0.0, 0.0);
642 setSelected(vertexRef.curveNumber, vertexRef.vertexNumber, YesOrNo);
652 for (
int i = 0; i < curveList.
size(); i++)
665 for (
int i = 0; i < vertexList.
size(); i++)
678 mArea[areaNumber].setSelected(YesOrNo);
679 if (YesOrNo) mSelectionRect |= mArea[areaNumber].mPath.boundingRect();
690 return mArea[areaNumber].isSelected();
701 for (
int curveNum : curveNumbers)
707 filled = mCurves[curveNum].isFilled();
720 return mCurves[curveNumber].isSelected();
731 return mCurves[curveNumber].isSelected(vertexNumber);
741 return isSelected(vertexRef.curveNumber, vertexRef.vertexNumber);
752 for (
int i = 0; i < curveList.
size(); i++)
767 for (
int i = 0; i < vertexList.
size(); i++)
781 for (
int i = 0; i < mCurves.
size() && result == -1; i++)
795 for (
int i = 0; i < mArea.
size() && result == -1; i++)
807 for (
int i = 0; i < mCurves.
size(); i++)
811 mSelectionTransformation.
reset();
820 if (mCurves.
isEmpty())
return false;
821 for (
int curve = 0; curve < mCurves.
size(); curve++)
833 if (mCurves.
empty())
return;
834 for (
int i = 0; i < mCurves.
size(); i++)
836 mCurves[i].setSelected(
false);
838 for (
int i = 0; i < mArea.
size(); i++)
840 mArea[i].setSelected(
false);
842 mSelectionRect =
QRectF(0, 0, 0, 0);
843 mSelectionTransformation.
reset();
853 mSelectionRect = rectangle;
862 mSelectionRect =
QRectF(0, 0, 0, 0);
863 for (
int i = 0; i < mCurves.
size(); i++)
865 if (mCurves.
at(i).isPartlySelected())
866 mSelectionRect |= mCurves[i].getBoundingRect();
876 mSelectionTransformation = transform;
886 for (
int i = 0; i < mArea.
size(); i++)
895 for (
int i = 0; i < mCurves.
size(); i++)
900 for (
int j = 0; j < mArea.
size(); j++)
902 bool toBeDeleted =
false;
903 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
905 if (mArea.
at(j).mVertex[k].curveNumber == i) { toBeDeleted =
true; }
906 if (mArea.
at(j).mVertex[k].curveNumber > i)
908 mArea[j].mVertex[k].curveNumber = mArea[j].mVertex[k].curveNumber - 1;
932 for (
int j = 0; j < mArea.
size(); j++)
934 bool toBeDeleted =
false;
935 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
937 if (mArea.
at(j).mVertex[k].curveNumber == curve && mArea.
at(j).mVertex[k].vertexNumber == vertex) { toBeDeleted =
true; }
947 if (mCurves[curve].getVertexSize() > 1)
952 mCurves[curve].removeVertex(vertex);
955 for (
int j = 0; j < mArea.
size(); j++)
957 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
959 if (mArea.
at(j).mVertex[k].curveNumber == curve && mArea.
at(j).mVertex[k].vertexNumber > vertex) { mArea[j].mVertex[k].vertexNumber--; }
967 for (
int p = vertex; p < n; p++)
971 for (
int p = -1; p <= vertex; p++)
973 newCurve.removeVertex(-1);
976 if (newCurve.getVertexSize() > 0) mCurves.
append(newCurve);
978 for (
int j = 0; j < mArea.
size(); j++)
980 for (
int k = 0; k < mArea.
at(j).mVertex.
size(); k++)
982 if (mArea.
at(j).mVertex[k].curveNumber == curve && mArea.
at(j).mVertex[k].vertexNumber > vertex)
984 mArea[j].mVertex[k].curveNumber = mCurves.
size() - 1;
985 mArea[j].mVertex[k].vertexNumber = mArea[j].mVertex[k].vertexNumber - vertex - 1;
1009 for (
int i = 0; i < mCurves.
size(); i++)
1013 if (mCurves.
at(i).isSelected(m))
1028 mSelectionRect =
QRect(0, 0, 0, 0);
1029 int n = mCurves.
size();
1034 for (
int i = 0; i < vectorImage.mCurves.
size(); i++)
1037 if (!hasSelection || vectorImage.mCurves.
at(i).isSelected())
1039 mCurves.
append(vectorImage.mCurves.
at(i));
1040 selectedCurves << i;
1041 mSelectionRect |= vectorImage.mCurves[i].getBoundingRect();
1044 for (
int i = 0; i < vectorImage.mArea.
size(); i++)
1048 for (
int j = 0; j < newArea.mVertex.
size(); j++)
1050 int curveNumber = newArea.mVertex.
at(j).curveNumber;
1051 int vertexNumber = newArea.mVertex.
at(j).vertexNumber;
1055 if (!hasSelection || vectorImage.mCurves.
at(curveNumber).isSelected())
1057 newArea.mVertex[j] =
VertexRef(selectedCurves.
indexOf(curveNumber) + n, vertexNumber);
1064 if (ok) mArea.
append(newArea);
1076 return mObject->getColor(colorNumber).color;
1088 if (areaNumber != -1)
1090 result = mArea[areaNumber].mColorNumber;
1104 result = mCurves[curve].getColorNumber();
1109 bool VectorImage::isCurveVisible(
int curve)
1111 if (curve > -1 && curve < mCurves.
length())
1113 return !mCurves[curve].isInvisible();
1125 for (
int i = 0; i < mArea.
size(); i++)
1127 if (mArea[i].mColorNumber == index)
return true;
1129 for (
int i = 0; i < mCurves.
size(); i++)
1142 for (
int i = 0; i < mArea.
size(); i++)
1144 if (mArea[i].
getColorNumber() > index) mArea[i].decreaseColorNumber();
1146 for (
int i = 0; i < mCurves.
size(); i++)
1148 if (mCurves[i].
getColorNumber() > index) mCurves[i].decreaseColorNumber();
1152 void VectorImage::moveColor(
int start,
int end)
1154 for(
int i=0; i< mArea.
size(); i++)
1156 if (mArea[i].
getColorNumber() == start) mArea[i].setColorNumber(end);
1158 for(
int i=0; i< mCurves.
size(); i++)
1160 if (mCurves[i].
getColorNumber() == start) mCurves[i].setColorNumber(end);
1173 bool showThinCurves,
1188 for (
int i = 0; i < mArea.
size(); i++)
1219 curve.drawPath(painter, mObject, mSelectionTransformation, simplified, showThinCurves);
1235 bool showThinCurves,
1238 image->
fill(qRgba(0, 0, 0, 0));
1241 paintImage(painter, simplified, showThinCurves, antialiasing);
1259 for (
int i = 0; i < mCurves.
size(); i++)
1261 if (mCurves.
at(i).getVertexSize() == 0)
1283 for (
int i = 0; i < mCurves.
size(); i++)
1285 if (mCurves.
at(i).isPartlySelected())
1287 mCurves[i].transform(transf);
1291 mSelectionTransformation.
reset();
1302 for (
int i = 0; i < mCurves.
size(); i++)
1304 if (mCurves.
at(i).isSelected()) mCurves[i].setColorNumber(colorNumber);
1315 for (
int i = 0; i < mArea.
size(); i++)
1317 if (mArea.
at(i).isSelected()) mArea[i].setColorNumber(colorNumber);
1328 for (
int i = 0; i < mCurves.
size(); i++)
1330 if (mCurves.
at(i).isSelected()) mCurves[i].setWidth(width);
1341 for (
int i = 0; i < mCurves.
size(); i++)
1343 if (mCurves.
at(i).isSelected()) mCurves[i].setFeather(feather);
1355 for (
int i = 0; i < mCurves.
size(); i++)
1368 for (
int i = 0; i < mCurves.
size(); i++)
1370 if (mCurves.
at(i).isSelected()) mCurves[i].setInvisibility(YesOrNo);
1381 for (
int i = 0; i < mCurves.
size(); i++)
1383 if (mCurves.
at(i).isSelected()) {
1384 mCurves[i].setVariableWidth(YesOrNo);
1399 for (
int j = 0; j < mCurves.
size(); j++)
1402 if (mCurves[j].isPartlySelected())
1404 myCurve = mCurves[j].transformed(mSelectionTransformation);
1408 myCurve = mCurves[j];
1410 if (myCurve.intersects(P1, maxDistance))
1414 mGetStrokedPath = myCurve.getStrokedPath(1.0,
true);
1436 for (
int vertexPoint = -1; vertexPoint < curve.getVertexSize(); vertexPoint++)
1438 P2 = curve.getVertex(vertexPoint);
1441 if (distance < minDistance)
1443 minDistance = distance;
1444 result =
VertexRef(curveNum, vertexPoint);
1461 maxDistance *= maxDistance;
1463 for (
int curve = 0; curve < mCurves.
size(); curve++)
1465 for (
int vertex = -1; vertex < mCurves.
at(curve).getVertexSize(); vertex++)
1469 if (distance < maxDistance)
1488 for (
int j = 0; j < listOfPoints->
size(); j++)
1492 if (distance < maxDistance)
1494 result.
append(listOfPoints->
at(j));
1533 for (
int j = 0; j < listOfPoints->
size(); j++)
1537 if (distance < maxDistance)
1539 result.
append(listOfPoints->
at(j));
1567 if (curveNumber > -1 && curveNumber < mCurves.
size())
1570 if (myCurve.isPartlySelected())
1572 myCurve = myCurve.transformed(mSelectionTransformation);
1575 if (vertexNumber > -2 && vertexNumber < myCurve.getVertexSize())
1577 result = myCurve.getVertex(vertexNumber);
1590 return getVertex(vertexRef.curveNumber, vertexRef.vertexNumber);
1602 if (curveNumber > -1 && curveNumber < mCurves.
size())
1605 if (myCurve.isPartlySelected()) myCurve = myCurve.transformed(mSelectionTransformation);
1606 if (vertexNumber > -1 && vertexNumber < myCurve.getVertexSize())
1608 result = myCurve.getC1(vertexNumber);
1621 return getC1(vertexRef.curveNumber, vertexRef.vertexNumber);
1633 if (curveNumber > -1 && curveNumber < mCurves.
size())
1636 if (myCurve.isPartlySelected()) myCurve = myCurve.transformed(mSelectionTransformation);
1637 if (vertexNumber > -1 && vertexNumber < myCurve.getVertexSize())
1639 result = myCurve.getC2(vertexNumber);
1652 return getC2(vertexRef.curveNumber, vertexRef.vertexNumber);
1664 if (curveNumber > -1 && curveNumber < mCurves.
size())
1668 for (
int k = -1; k < myCurve.getVertexSize(); k++)
1671 result.
append(vertexRef);
1685 for (
int j = 0; j < mCurves.
size(); j++)
1687 for (
int k = -1; k < mCurves.
at(j).getVertexSize(); k++)
1690 result.
append(vertexRef);
1704 if (curveNumber > -1 && curveNumber < mCurves.
size())
1706 return mCurves.
at(curveNumber).getVertexSize();
1721 for (
int curve = 0; curve < mCurves.
size(); curve++)
1725 curves.
append(mCurves[curve]);
1738 for (
int curve = 0; curve < mCurves.
size(); curve++)
1755 for (
int curve = 0; curve < mCurves.
size(); curve++)
1772 for (
int i = 0; i < mArea.
size(); i++)
1774 if (mArea[i].mPath.controlPointRect().
contains(currentPoint))
1797 for (
int i = 0; i < vertexList.
size(); i++)
1802 if (vertex.curveNumber != -1 && !vertexPath.
contains(vertex))
1804 vertexPath.
append(vertex);
1812 mCurves[curveNumbers[curve]].setFilled(
true);
1835 for (
QPointF point : contourPath) {
1838 if (vertex.curveNumber != -1 && !vertexPath.
contains(vertex)) {
1839 vertexPath.
append(vertex);
2224 mArea.
append(bezierArea);
2236 for (
int i = 0; i < mArea.
size() && result == -1; i++)
2238 if (mArea[i].mPath.controlPointRect().
contains(point))
2240 if (mArea[i].mPath.
contains(point))
2264 return !mCurves.
isEmpty() ? mCurves.
size() - 1 : 0;
2285 for (
int i = maxAreaNumber; i > -1 && result == -1; i--)
2287 if (mArea[i].mPath.controlPointRect().
contains(point))
2289 if (mArea[i].mPath.
contains(point))
2306 if (areaNumber != -1)
2332 for (
int i = 0; i < bezierArea.mVertex.
size(); i++)
2344 if (bezierArea.mVertex[i - 1].curveNumber == bezierArea.mVertex[i].curveNumber)
2346 if (bezierArea.mVertex[i - 1].vertexNumber < bezierArea.mVertex[i].vertexNumber)
2348 myC1 =
getC1(bezierArea.mVertex[i]);
2349 myC2 =
getC2(bezierArea.mVertex[i]);
2353 myC1 =
getC2(bezierArea.mVertex[i - 1]);
2354 myC2 =
getC1(bezierArea.mVertex[i - 1]);
2356 newPath.
cubicTo(myC1, myC2, myPoint);
2360 if (bezierArea.mVertex[i].vertexNumber == -1)
2372 bezierArea.mPath = newPath;
2402 QRectF rect = updatedCurve.getBoundingRect();
2407 int widthFromLeft = ((topLeft.
x() * -1) * 2) + 2;
2409 if (widthFromLeft > mSize.
width())
2414 int widthFromRight = (bottomRight.
x() * 2) + 2;
2416 if (widthFromRight > mSize.
width())
2421 int heightFromTop = ((topLeft.
y() * -1) * 2) + 2;
2423 if (heightFromTop > mSize.
height())
2428 int heightFromBottom = (bottomRight.
y() * 2) + 2;
2430 if (heightFromBottom > mSize.
height())
QList< VertexRef > getAllVertices()
VectorImage::getAllVertices.
void insertCurve(int position, BezierCurve &newCurve, qreal factor, bool interacts)
VectorImage::insertCurve.
void setOpacity(qreal opacity)
void updateArea(BezierArea &bezierArea)
VectorImage::updateArea.
void paintImage(QPainter &painter, bool simplified, bool showThinCurves, bool antialiasing)
VectorImage::paintImage.
void setHeight(int height)
int getFirstSelectedCurve()
VectorImage::getFirstSelectedCurve.
QString & append(QChar ch)
qreal getDistance(VertexRef r1, VertexRef r2)
VectorImage::getDistance.
int getNumOfCurvesSelected()
VectorImage::numOfCurvesSelected.
void writeDTD(const QString &dtd)
void applyColorToSelectedArea(int colorNumber)
VectorImage::applyColorToSelectedArea.
void checkCurveIntersections(BezierCurve &newCurve, qreal tolerance)
VectorImage::checkCurveIntersections.
void applyInvisibilityToSelection(bool YesOrNo)
VectorImage::applyInvisibilityToSelection.
void setRenderHint(QPainter::RenderHint hint, bool on)
void checkCurveExtremity(BezierCurve &newCurve, qreal tolerance)
VectorImage::checkCurveExtremity.
int getCurveSize(int curveNumber)
VectorImage::getCurveSize.
int getLastAreaNumber(QPointF point)
VectorImage::getLastAreaNumber.
QString attribute(const QString &name, const QString &defValue) const const
void clear()
VectorImage::clear.
QString errorString() const const
void calculateSelectionRect()
VectorImage::calculateSelectionRect.
bool isPathFilled()
VectorImage::isPathFilled.
QList< VertexRef > getVerticesCloseTo(QPointF thisPoint, qreal maxDistance)
VectorImage::getVerticesCloseTo.
bool read(QString filePath)
VectorImage::read.
void setClipping(bool enable)
QFileDevice::FileError error() const const
int getCurvesColor(int curve)
VectorImage::getCurvesColor.
QList< int > getCurvesCloseTo(QPointF thisPoint, qreal maxDistance)
VectorImage::getCurvesCloseTo.
const T & at(int i) const const
void loadDomElement(QDomElement element)
VectorImage::loadDomElement.
void fillSelectedPath(int color)
VectorImage::fillSelectedPath.
bool contains(const QRectF &rectangle) const const
void cubicTo(const QPointF &c1, const QPointF &c2, const QPointF &endPoint)
void moveTo(const QPointF &point)
void fillContour(QList< QPointF > contourPath, int color)
VectorImage::fillContour.
void deselectAll()
VectorImage::deselectAll.
QDomElement documentElement() const const
void applyVariableWidthToSelection(bool YesOrNo)
VectorImage::applyVariableWidthToSelection.
QPointF getC1(int curveNumber, int vertexNumber)
VectorImage::getC1.
BezierCurve getLastCurve()
VectorImage::getLastCurve.
QDomDocumentType doctype() const const
QList< BezierCurve > getSelectedCurves()
VectorImage::getSelectedCurve.
QString name() const const
QDomNode nextSibling() const const
int indexOf(const T &value, int from) const const
QDomElement toElement() const const
void removeAreaInCurve(int curve, int areaNumber)
VectorImage::removeAreaInCurve.
int getColorNumber(QPointF point)
VectorImage::getColorNumber.
void append(const T &value)
void selectAll()
VectorImage::selectAll.
int getFirstSelectedArea()
VectorImage::getFirstSelectedArea.
void addPoint(int curveNumber, int vertexNumber, qreal fraction)
VectorImage::addPoint.
void fill(uint pixelValue)
void setFillRule(Qt::FillRule fillRule)
void removeVertex(int curve, int vertex)
VectorImage::removeVertex.
void setPen(const QColor &color)
void lineTo(const QPointF &endPoint)
bool isAnyCurveSelected()
VectorImage::isAnyCurveSelected.
bool isEmpty() const const
QPointF topLeft() const const
QPointF getVertex(int curveNumber, int vertexNumber)
VectorImage::getVertex.
bool isSelected(int curveNumber)
VectorImage::isSelected.
QList< VertexRef > getCurveVertices(int curveNumber)
VectorImage::getCurveVertices.
QPaintDevice * device() const const
bool usesColor(int index)
VectorImage::usesColor.
void setBrush(const QBrush &brush)
void addCurve(BezierCurve &newCurve, qreal factor, bool interacts=true)
VectorImage::addCurve.
QColor getColor(int i)
VectorImage::getColor.
void clean()
VectorImage::clean.
virtual bool open(QIODevice::OpenMode mode) override
void deleteSelectedPoints()
VectorImage::deleteSelectedPoints.
void applyWidthToSelection(qreal width)
VectorImage::applyWidthToSelection.
bool contains(const T &value) const const
BezierArea getSelectedArea(QPointF currentPoint)
VectorImage::getSelectedArea.
bool isNull() const const
void removeArea(QPointF point)
VectorImage::removeArea.
int getFirstAreaNumber(QPointF point)
VectorImage::getFirstAreaNumber.
void writeAttribute(const QString &qualifiedName, const QString &value)
Status write(QString filePath, QString format)
VectorImage::write.
void applyColorToSelectedCurve(int colorNumber)
VectorImage::applyColorToSelectedCurve.
QPointF getC2(int curveNumber, int vertexNumber)
VectorImage::getC2.
void setSelectionTransformation(QTransform transform)
VectorImage::setSelectionTransformation.
QDomNode firstChild() const const
void drawPath(const QPainterPath &path)
bool isAreaSelected(int areaNumber)
VectorImage::isAreaSelected.
QPoint toPoint() const const
void insert(int i, const T &value)
void updateImageSize(BezierCurve &updatedCurve)
VectorImage::updateImageSize.
void paste(VectorImage &)
VectorImage::paste.
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
void setWorldMatrixEnabled(bool enable)
void setAreaSelected(int areaNumber, bool YesOrNo)
VectorImage::setAreaSelected.
void addArea(BezierArea bezierArea)
VectorImage::addArea.
void applyFeatherToSelection(qreal feather)
VectorImage::applyFeatherToSelection.
QList< VertexRef > getAndRemoveVerticesCloseTo(QPointF thisPoint, qreal maxDistance, QList< VertexRef > *listOfPoints)
VectorImage::getAndRemoveVerticesCloseTo.
void removeCurveAt(int i)
VectorImage::removeCurveAt.
Status createDomElement(QXmlStreamWriter &doc)
VectorImage::createDomElement.
QList< int > getSelectedCurveNumbers()
VectorImage::getSelectedCurveNumber.
void applySelectionTransformation()
VectorImage::applySelectionTransformation.
qreal dotProduct(const QPointF &p1, const QPointF &p2)
int getLastCurveNumber()
VectorImage::getLastCurveNumber.
void removeColor(int index)
VectorImage::removeColor.
QString tagName() const const
void writeStartDocument()
QPointF bottomRight() const const
void setSelected(int curveNumber, bool YesOrNo)
VectorImage::setSelected.
void applyOpacityToSelection(qreal opacity)
VectorImage::applyOpacityToSelection.
void outputImage(QImage *image, QTransform myView, bool simplified, bool showThinCurves, bool antialiasing)
VectorImage::outputImage.
void deleteSelection()
VectorImage::deleteSelection.
void writeStartElement(const QString &qualifiedName)
bool setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn)
VertexRef getClosestVertexTo(const BezierCurve &curve, int curveNum, QPointF thisPoint)
VectorImage::getClosestVertexTo.
void setSelectionRect(QRectF rectange)
VectorImage::setSelectionRect.