QgsCompoundCurve *QgsCompoundCurve::reversed() const { QgsCompoundCurve *clone = new QgsCompoundCurve(); for ( int i = mCurves.count() - 1; i >= 0; --i ) { QgsCurve *reversedCurve = mCurves.at( i )->reversed(); clone->addCurve( reversedCurve ); } return clone; }
void QgsMapToolAddCircularString::updateCenterPointRubberBand( const QgsPointV2 &pt ) { if ( !mShowCenterPointRubberBand || !mCenterPointRubberBand || mPoints.size() < 2 ) { return; } if ( ( mPoints.size() ) % 2 != 0 ) { return; } //create circular string QgsCircularString *cs = new QgsCircularString(); QgsPointSequence csPoints; csPoints.append( mPoints.at( mPoints.size() - 2 ) ); csPoints.append( mPoints.at( mPoints.size() - 1 ) ); csPoints.append( pt ); cs->setPoints( csPoints ); QgsPointV2 center; double radius; QgsGeometryUtils::circleCenterRadius( csPoints.at( 0 ), csPoints.at( 1 ), csPoints.at( 2 ), radius, center.rx(), center.ry() ); QgsLineString *segment1 = new QgsLineString(); segment1->addVertex( center ); segment1->addVertex( csPoints.at( 0 ) ); QgsLineString *segment2 = new QgsLineString(); segment2->addVertex( csPoints.at( 2 ) ); segment2->addVertex( center ); QgsCompoundCurve *cc = new QgsCompoundCurve(); cc->addCurve( segment1 ); cc->addCurve( cs ); cc->addCurve( segment2 ); QgsCurvePolygon *cp = new QgsCurvePolygon(); cp->setExteriorRing( cc ); mCenterPointRubberBand->setGeometry( cp ); mCenterPointRubberBand->show(); }
QgsCompoundCurve *QgsLineString::toCurveType() const { QgsCompoundCurve *compoundCurve = new QgsCompoundCurve(); compoundCurve->addCurve( clone() ); return compoundCurve; }