本文整理汇总了C++中KoPathPoint::setProperty方法的典型用法代码示例。如果您正苦于以下问题:C++ KoPathPoint::setProperty方法的具体用法?C++ KoPathPoint::setProperty怎么用?C++ KoPathPoint::setProperty使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KoPathPoint
的用法示例。
在下文中一共展示了KoPathPoint::setProperty方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mouseReleaseEvent
void KoCreatePathTool::mouseReleaseEvent(KoPointerEvent *event)
{
Q_D(KoCreatePathTool);
if (! d->shape || (event->buttons() & Qt::RightButton))
return;
d->listeningToModifiers = true; // After the first press-and-release
d->repaintActivePoint();
d->pointIsDragged = false;
KoPathPoint *lastActivePoint = d->activePoint;
if (!d->finishAfterThisPoint) {
d->activePoint = d->shape->lineTo(event->point);
canvas()->snapGuide()->setIgnoredPathPoints((QList<KoPathPoint*>()<<d->activePoint));
}
// apply symmetric point property if applicable
if (lastActivePoint->activeControlPoint1() && lastActivePoint->activeControlPoint2()) {
QPointF diff1 = lastActivePoint->point() - lastActivePoint->controlPoint1();
QPointF diff2 = lastActivePoint->controlPoint2() - lastActivePoint->point();
if (qFuzzyCompare(diff1.x(), diff2.x()) && qFuzzyCompare(diff1.y(), diff2.y()))
lastActivePoint->setProperty(KoPathPoint::IsSymmetric);
}
if (d->finishAfterThisPoint) {
d->firstPoint->setControlPoint1(d->activePoint->controlPoint1());
delete d->shape->removePoint(d->shape->pathPointIndex(d->activePoint));
d->activePoint = d->firstPoint;
d->shape->closeMerge();
// we are closing the path, so reset the existing start path point
d->existingStartPoint = 0;
// finish path
endPath();
}
if (d->angleSnapStrategy && lastActivePoint->activeControlPoint2()) {
d->angleSnapStrategy->deactivate();
}
}
示例2: roundPath
//.........这里部分代码省略.........
// connect the split points with curve
// TODO: shall we create a correct arc?
m_path->curveTo( P1, P2, P3 );
prevSeg = nextParts.second;
lastSeg = prevParts.first;
}
else
{
firstPoint = m_path->moveTo( currPoint->point() );
prevSeg = nextSeg;
}
// Loop:
for( int pointIndex = 1; pointIndex < pointCount; ++pointIndex )
{
nextSeg = m_copy->segmentByIndex( KoPathPointIndex( subpathIndex, pointIndex ) );
if( ! nextSeg.isValid() )
break;
currPoint = nextSeg.first();
if( ! currPoint )
continue;
if( currPoint->isSmooth( prevSeg.first(), nextSeg.second() ) )
{
// the current point has a smooth join, so we can add the previous segment
// to our new path
addSegment( m_path, prevSeg );
prevSeg = nextSeg;
}
else
{
// split the previous segment at length - radius
qreal prevLength = prevSeg.length();
qreal prevSplit = prevLength > m_radius ? prevSeg.paramAtLength( prevLength-m_radius ) : 0.5;
QPair<KoPathSegment,KoPathSegment> prevParts = prevSeg.splitAt( prevSplit );
// add the remaining part up to the split point of the pervious segment
lastPoint = addSegment( m_path, prevParts.first );
// split the next segment at radius
qreal nextLength = nextSeg.length();
qreal nextSplit = nextLength > m_radius ? nextSeg.paramAtLength( m_radius ) : 0.5;
QPair<KoPathSegment,KoPathSegment> nextParts = nextSeg.splitAt( nextSplit );
// calculate smooth tangents
QPointF P0 = prevParts.first.second()->point();
QPointF P3 = nextParts.first.second()->point();
qreal tangentLength1 = 0.5 * QLineF( P0, currPoint->point() ).length();
qreal tangentLength2 = 0.5 * QLineF( P3, currPoint->point() ).length();
QPointF P1 = P0 - tangentLength1 * tangentAtEnd( prevParts.first );
QPointF P2 = P3 - tangentLength2 * tangentAtStart( nextParts.second );
// connect the split points with curve
// TODO: shall we create a correct arc?
lastPoint = m_path->curveTo( P1, P2, P3 );
prevSeg = nextParts.second;
}
}
// End: take care of the last path point
if( firstPointIsCorner )
{
// construct the closing segment
lastPoint->setProperty( KoPathPoint::CloseSubpath );
firstPoint->setProperty( KoPathPoint::CloseSubpath );
switch( lastSeg.degree() )
{
case 1:
lastPoint->removeControlPoint2();
firstPoint->removeControlPoint1();
break;
case 2:
if( lastSeg.first()->activeControlPoint2() )
{
lastPoint->setControlPoint2( lastSeg.first()->controlPoint2() );
firstPoint->removeControlPoint1();
}
else
{
lastPoint->removeControlPoint2();
firstPoint->setControlPoint1( lastSeg.second()->controlPoint1() );
}
break;
case 3:
lastPoint->setControlPoint2( lastSeg.first()->controlPoint2() );
firstPoint->setControlPoint1( lastSeg.second()->controlPoint1() );
break;
}
}
else
{
// add the last remaining segment
addSegment( m_path, prevSeg );
}
}
}