PointData( KoPathPoint * p ) { KoPathShape * shape = p->parent(); // save points in document coordinates oldNode = shape->shapeToDocument( p->point() ); oldControlPoint1 = shape->shapeToDocument( p->controlPoint1() ); oldControlPoint2 = shape->shapeToDocument( p->controlPoint2() ); }
void KoPathSegmentTypeCommand::initialize(const QList<KoPathPointData> & pointDataList) { QList<KoPathPointData>::const_iterator it(pointDataList.begin()); for (; it != pointDataList.end(); ++it) { KoPathSegment segment = it->pathShape->segmentByIndex(it->pointIndex); if (segment.isValid()) { if (m_segmentType == Curve) { // don not change segment if already a curve if (segment.first()->activeControlPoint2() || segment.second()->activeControlPoint1()) continue; } else { // do not change segment if already a line if (! segment.first()->activeControlPoint2() && ! segment.second()->activeControlPoint1()) continue; } m_pointDataList.append(*it); SegmentTypeData segmentData; KoPathShape * pathShape = segment.first()->parent(); // we are changing a curve to a line -> save control point positions if (m_segmentType == Line) { segmentData.m_controlPoint2 = pathShape->shapeToDocument(segment.first()->controlPoint2()); segmentData.m_controlPoint1 = pathShape->shapeToDocument(segment.second()->controlPoint1()); } // save point properties segmentData.m_properties2 = segment.first()->properties(); segmentData.m_properties1 = segment.second()->properties(); m_segmentData.append(segmentData); } } if (m_segmentType == Curve) { setText(i18nc("(qtundo-format)", "Change segments to curves")); } else { setText(i18nc("(qtundo-format)", "Change segments to lines")); } }
KoSubpathJoinCommand::KoSubpathJoinCommand(const KoPathPointData &pointData1, const KoPathPointData &pointData2, KUndo2Command *parent) : KUndo2Command(parent) , m_pointData1(pointData1) , m_pointData2(pointData2) , m_splitIndex(KoPathPointIndex(-1, -1)) , m_oldProperties1(KoPathPoint::Normal) , m_oldProperties2(KoPathPoint::Normal) , m_reverse(0) { Q_ASSERT(m_pointData1.pathShape == m_pointData2.pathShape); KoPathShape * pathShape = m_pointData1.pathShape; Q_ASSERT(!pathShape->isClosedSubpath(m_pointData1.pointIndex.first)); Q_ASSERT(m_pointData1.pointIndex.second == 0 || m_pointData1.pointIndex.second == pathShape->subpathPointCount(m_pointData1.pointIndex.first) - 1); Q_ASSERT(!pathShape->isClosedSubpath(m_pointData2.pointIndex.first)); Q_ASSERT(m_pointData2.pointIndex.second == 0 || m_pointData2.pointIndex.second == pathShape->subpathPointCount(m_pointData2.pointIndex.first) - 1); //TODO check that points are not the same if (m_pointData2 < m_pointData1) qSwap(m_pointData1, m_pointData2); if (m_pointData1.pointIndex.first != m_pointData2.pointIndex.first) { if (m_pointData1.pointIndex.second == 0 && pathShape->subpathPointCount(m_pointData1.pointIndex.first) > 1) m_reverse |= ReverseFirst; if (m_pointData2.pointIndex.second != 0) m_reverse |= ReverseSecond; setText(kundo2_i18n("Close subpath")); } else { setText(kundo2_i18n("Join subpaths")); } KoPathPoint * point1 = pathShape->pointByIndex(m_pointData1.pointIndex); KoPathPoint * point2 = pathShape->pointByIndex(m_pointData2.pointIndex); m_oldControlPoint1 = QPointF(pathShape->shapeToDocument(m_reverse & 1 ? point1->controlPoint1() : point1->controlPoint2())); m_oldControlPoint2 = QPointF(pathShape->shapeToDocument(m_reverse & 2 ? point2->controlPoint1() : point2->controlPoint2())); m_oldProperties1 = point1->properties(); m_oldProperties2 = point2->properties(); }